diff --git a/src/scene/item.cpp b/src/scene/item.cpp index 3ecaaf501a..a6586050a0 100644 --- a/src/scene/item.cpp +++ b/src/scene/item.cpp @@ -82,7 +82,7 @@ void Item::setZ(int z) if (m_parentItem) { m_parentItem->markSortedChildItemsDirty(); } - scheduleRepaint(boundingRect()); + scheduleSceneRepaint(boundingRect()); } Item *Item::parentItem() const @@ -316,8 +316,8 @@ void Item::stackBefore(Item *sibling) m_parentItem->m_childItems.move(selfIndex, selfIndex > siblingIndex ? siblingIndex : siblingIndex - 1); m_parentItem->markSortedChildItemsDirty(); - scheduleRepaint(boundingRect()); - sibling->scheduleRepaint(sibling->boundingRect()); + scheduleSceneRepaint(boundingRect()); + sibling->scheduleSceneRepaint(sibling->boundingRect()); } void Item::stackAfter(Item *sibling) @@ -344,8 +344,8 @@ void Item::stackAfter(Item *sibling) m_parentItem->m_childItems.move(selfIndex, selfIndex > siblingIndex ? siblingIndex + 1 : siblingIndex); m_parentItem->markSortedChildItemsDirty(); - scheduleRepaint(boundingRect()); - sibling->scheduleRepaint(sibling->boundingRect()); + scheduleSceneRepaint(boundingRect()); + sibling->scheduleSceneRepaint(sibling->boundingRect()); } void Item::scheduleRepaint(const QRegion ®ion) @@ -468,6 +468,21 @@ void Item::scheduleRepaint(const QRectF ®ion) scheduleRepaint(QRegion(region.toAlignedRect())); } +void Item::scheduleSceneRepaint(const QRectF ®ion) +{ + scheduleSceneRepaint(QRegion(region.toAlignedRect())); +} + +void Item::scheduleSceneRepaint(const QRegion ®ion) +{ + if (!m_scene) { + return; + } + if (isVisible()) { + m_scene->addRepaint(mapToScene(region)); + } +} + bool Item::computeEffectiveVisibility() const { return m_explicitVisible && (!m_parentItem || m_parentItem->isVisible()); diff --git a/src/scene/item.h b/src/scene/item.h index 39f2ecaaa7..8eb10b72fb 100644 --- a/src/scene/item.h +++ b/src/scene/item.h @@ -121,7 +121,9 @@ public: void setVisible(bool visible); void scheduleRepaint(const QRectF ®ion); + void scheduleSceneRepaint(const QRectF ®ion); void scheduleRepaint(const QRegion ®ion); + void scheduleSceneRepaint(const QRegion ®ion); void scheduleRepaint(SceneDelegate *delegate, const QRegion ®ion); void scheduleFrame(); QRegion repaints(SceneDelegate *delegate) const;