vimageresourcemanager2.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "vimageresourcemanager2.h"
  2. #include <QDebug>
  3. #include "vtextedit.h"
  4. VImageResourceManager2::VImageResourceManager2()
  5. {
  6. }
  7. void VImageResourceManager2::addImage(const QString &p_name,
  8. const QPixmap &p_image)
  9. {
  10. m_images.insert(p_name, p_image);
  11. }
  12. bool VImageResourceManager2::contains(const QString &p_name) const
  13. {
  14. return m_images.contains(p_name);
  15. }
  16. QSet<int> VImageResourceManager2::updateBlockInfos(const QVector<VBlockImageInfo2> &p_blocksInfo)
  17. {
  18. QSet<QString> usedImages;
  19. QHash<int, VBlockImageInfo2> newBlocksInfo;
  20. for (auto const & info : p_blocksInfo) {
  21. auto it = newBlocksInfo.insert(info.m_blockNumber, info);
  22. VBlockImageInfo2 &newInfo = it.value();
  23. if (newInfo.m_padding < 0) {
  24. newInfo.m_padding = 0;
  25. }
  26. auto imageIt = m_images.find(newInfo.m_imageName);
  27. if (imageIt != m_images.end()) {
  28. // Fill the width and height.
  29. newInfo.m_imageSize = imageIt.value().size();
  30. usedImages.insert(newInfo.m_imageName);
  31. }
  32. }
  33. QSet<int> affectedBlocks;
  34. if (m_blocksInfo != newBlocksInfo) {
  35. affectedBlocks = QSet<int>::fromList(m_blocksInfo.keys());
  36. affectedBlocks.unite(QSet<int>::fromList(newBlocksInfo.keys()));
  37. m_blocksInfo = newBlocksInfo;
  38. // Clear unused images.
  39. for (auto it = m_images.begin(); it != m_images.end();) {
  40. if (!usedImages.contains(it.key())) {
  41. // Remove the image.
  42. it = m_images.erase(it);
  43. } else {
  44. ++it;
  45. }
  46. }
  47. }
  48. return affectedBlocks;
  49. }
  50. const VBlockImageInfo2 *VImageResourceManager2::findImageInfoByBlock(int p_blockNumber) const
  51. {
  52. auto it = m_blocksInfo.find(p_blockNumber);
  53. if (it != m_blocksInfo.end()) {
  54. return &it.value();
  55. }
  56. return NULL;
  57. }
  58. const QPixmap *VImageResourceManager2::findImage(const QString &p_name) const
  59. {
  60. auto it = m_images.find(p_name);
  61. if (it != m_images.end()) {
  62. return &it.value();
  63. }
  64. return NULL;
  65. }
  66. void VImageResourceManager2::clear()
  67. {
  68. m_blocksInfo.clear();
  69. m_images.clear();
  70. }