summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason McDonald <jason.mcdonald@nokia.com>2009-10-05 13:21:35 +1000
committerJason McDonald <jason.mcdonald@nokia.com>2009-10-05 13:21:35 +1000
commitfa1d021a958dbb1016b409147c0d5a0015100665 (patch)
tree9790c50179e57922e457c757af798d2f1543611f
parent00cd4e41ed24ffd8ba19112f6fa92a5177569193 (diff)
parent0573653f830fada99311c88ab46e8f5a37854b90 (diff)
downloadqt4-tools-fa1d021a958dbb1016b409147c0d5a0015100665.tar.gz
Merge branch '4.5' of git@scm.dev.nokia.troll.no:qt/qt into 4.5
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp3
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp14
-rw-r--r--src/gui/graphicsview/qgraphicsscene_p.h1
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp41
4 files changed, 59 insertions, 0 deletions
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 4f77aa8bc9..280c365f34 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1262,6 +1262,9 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags)
d_ptr->updateAncestorFlag(ItemClipsChildrenToShape);
}
+ if (d_ptr->scene && oldFlags & ItemClipsChildrenToShape)
+ d_ptr->scene->d_func()->addToUnindexedItems(this);
+
if ((flags & ItemClipsToShape) != (oldFlags & ItemClipsToShape))
d_ptr->invalidateCachedClipPath();
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 0fded89884..5c3e9bda9a 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -448,6 +448,20 @@ void QGraphicsScenePrivate::addToIndex(QGraphicsItem *item)
/*!
\internal
*/
+void QGraphicsScenePrivate::addToUnindexedItems(QGraphicsItem *item)
+{
+ if (indexMethod == QGraphicsScene::BspTreeIndex) {
+ item->d_func()->index = -1;
+ unindexedItems << item;
+
+ for (int i = 0 ; i < item->d_ptr->children.size() ; ++i)
+ addToUnindexedItems(item->d_ptr->children.at(i));
+ }
+}
+
+/*!
+ \internal
+*/
void QGraphicsScenePrivate::removeFromIndex(QGraphicsItem *item)
{
if (indexMethod == QGraphicsScene::BspTreeIndex) {
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index 3c72874470..62bcbfb58e 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -89,6 +89,7 @@ public:
QList<QGraphicsItem *> estimateItemsInRect(const QRectF &rect) const;
void addToIndex(QGraphicsItem *item);
void removeFromIndex(QGraphicsItem *item);
+ void addToUnindexedItems(QGraphicsItem *item);
void resetIndex();
QGraphicsSceneBspTree bspTree;
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 55e9b34294..215334caef 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -47,12 +47,14 @@
#include <QAbstractTextDocumentLayout>
#include <QBitmap>
#include <QCursor>
+#include <QLabel>
#include <QDial>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QGraphicsSceneEvent>
#include <QGraphicsView>
#include <QGraphicsWidget>
+#include <QGraphicsProxyWidget>
#include <QPainter>
#include <QScrollBar>
#include <QVBoxLayout>
@@ -196,6 +198,7 @@ private slots:
void itemClipsChildrenToShape();
void itemClipsChildrenToShape2();
void itemClipsChildrenToShape3();
+ void itemClipsChildrenToShape4();
void itemClipsTextChildToShape();
void itemClippingDiscovery();
void ancestorFlags();
@@ -4724,6 +4727,44 @@ void tst_QGraphicsItem::itemClipsChildrenToShape3()
QCOMPARE(scene.itemAt(175,175), (QGraphicsItem *)0);
}
+class MyProxyWidget : public QGraphicsProxyWidget
+{
+public:
+ MyProxyWidget(QGraphicsItem *parent) : QGraphicsProxyWidget(parent)
+ {
+ painted = false;
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+ QGraphicsProxyWidget::paint(painter, option, widget);
+ painted = true;
+ }
+ bool painted;
+};
+
+void tst_QGraphicsItem::itemClipsChildrenToShape4()
+{
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+
+ QGraphicsWidget * outerWidget = new QGraphicsWidget();
+ outerWidget->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
+ MyProxyWidget * innerWidget = new MyProxyWidget(outerWidget);
+ QLabel * label = new QLabel();
+ label->setText("Welcome back my friends to the show that never ends...");
+ innerWidget->setWidget(label);
+ view.resize(300, 300);
+ scene.addItem(outerWidget);
+ outerWidget->resize( 200, 100 );
+ scene.addEllipse( 100, 100, 100, 50 ); // <-- this is important to trigger the right codepath*
+ //now the label is shown
+ outerWidget->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false );
+ QApplication::setActiveWindow(&view);
+ view.show();
+ QTRY_COMPARE(QApplication::activeWindow(), (QWidget *)&view);
+ QTRY_COMPARE(innerWidget->painted, true);
+}
void tst_QGraphicsItem::itemClipsTextChildToShape()
{