diff options
author | Bjørn Erik Nilsen <bjorn.nilsen@nokia.com> | 2010-09-16 14:37:24 (GMT) |
---|---|---|
committer | Bjørn Erik Nilsen <bjorn.nilsen@nokia.com> | 2010-09-16 16:25:57 (GMT) |
commit | 9601abf3b03cfef589c092182bec3672fab6cde0 (patch) | |
tree | b337bcaa8d2fbcab7dc2103ad18ac7fed89e299b /tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp | |
parent | e76564e8a3b305f4fe69135bebb409e357f29f57 (diff) | |
download | Qt-9601abf3b03cfef589c092182bec3672fab6cde0.zip Qt-9601abf3b03cfef589c092182bec3672fab6cde0.tar.gz Qt-9601abf3b03cfef589c092182bec3672fab6cde0.tar.bz2 |
QGraphicsItem::childrenBoundingRect behavior breaks QGraphicsEffect::sourceBoundingRect().
Context:
QGraphicsEffect::sourceBoundingRect() returns:
item->boundingRect() | item->childrenBoundingRect();
Problem was that item->childrenBoundingRect() adjusted the children's
bounding rect with the children's ancestor effects (child -> root item),
which means the source bounding rect was bigger than needed. We should
only account for effects downwards in the hierarchy.
root (has effect)
|
item (has effect)
|
child
|
grandChild
Auto test included.
Task-number: QT-3633, QT-3828
Reviewed-by: samuel
Diffstat (limited to 'tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp')
-rw-r--r-- | tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 985d466..07fa630 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -288,6 +288,32 @@ void tst_QGraphicsEffect::boundingRect2() // Disable ItemClipsChildrenToShape; effect's bounding rect is no longer clipped. child->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false); QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect)); + + // Add root item to a scene, do the same tests as above. Results should be the same. + QGraphicsScene scene; + scene.addItem(root); + + child->setFlag(QGraphicsItem::ItemClipsChildrenToShape); + QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect)); + + child->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false); + QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect)); + + // Now add the scene to a view, results should be the same. + QGraphicsView view(&scene); + + child->setFlag(QGraphicsItem::ItemClipsChildrenToShape); + QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect)); + + child->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false); + QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect)); + + CustomEffect *childEffect = new CustomEffect; + child->setGraphicsEffect(childEffect); + QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childEffect->boundingRectFor(childRect | grandChildRect))); + + child->setGraphicsEffect(0); + QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect)); } void tst_QGraphicsEffect::draw() |