tests/auto/qgraphicsview/tst_qgraphicsview.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 25 e24348a560a6
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -218,6 +218,8 @@
     void update();
     void inputMethodSensitivity();
     void inputContextReset();
+    void indirectPainting();
+    void compositionModeInDrawBackground();
 
     // task specific tests below me
     void task172231_untransformableItems();
@@ -3799,6 +3801,64 @@
     QCOMPARE(inputContext.resets, 0);
 }
 
+void tst_QGraphicsView::indirectPainting()
+{
+    class MyScene : public QGraphicsScene
+    { public:
+        MyScene() : QGraphicsScene(), drawCount(0) {}
+        void drawItems(QPainter *, int, QGraphicsItem **, const QStyleOptionGraphicsItem *, QWidget *)
+        { ++drawCount; }
+        int drawCount;
+    };
+
+    MyScene scene;
+    QGraphicsItem *item = scene.addRect(0, 0, 50, 50);
+
+    QGraphicsView view(&scene);
+    view.setOptimizationFlag(QGraphicsView::IndirectPainting);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+    QTest::qWait(100);
+
+    scene.drawCount = 0;
+    item->setPos(20, 20);
+    QApplication::processEvents();
+    QTRY_VERIFY(scene.drawCount > 0);
+}
+
+void tst_QGraphicsView::compositionModeInDrawBackground()
+{
+    class MyView : public QGraphicsView
+    { public:
+        MyView(QGraphicsScene *scene) : QGraphicsView(scene),
+        painted(false), compositionMode(QPainter::CompositionMode_SourceOver) {}
+        bool painted;
+        QPainter::CompositionMode compositionMode;
+        void drawBackground(QPainter *painter, const QRectF &)
+        {
+            compositionMode = painter->compositionMode();
+            painted = true;
+        }
+    };
+
+    QGraphicsScene dummy;
+    MyView view(&dummy);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+
+    // Make sure the painter's composition mode is SourceOver in drawBackground.
+    QTRY_VERIFY(view.painted);
+    QCOMPARE(view.compositionMode, QPainter::CompositionMode_SourceOver);
+
+    view.painted = false;
+    view.setCacheMode(QGraphicsView::CacheBackground);
+    view.viewport()->update();
+
+    // Make sure the painter's composition mode is SourceOver in drawBackground
+    // with background cache enabled.
+    QTRY_VERIFY(view.painted);
+    QCOMPARE(view.compositionMode, QPainter::CompositionMode_SourceOver);
+}
 void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged()
 {
     QGraphicsView view;