tests/auto/qpainter/tst_qpainter.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/tests/auto/qpainter/tst_qpainter.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/tests/auto/qpainter/tst_qpainter.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -41,7 +41,7 @@
 
 
 #include <QtTest/QtTest>
-
+#include "../../shared/util.h"
 
 #include <qpainter.h>
 #include <qapplication.h>
@@ -67,6 +67,11 @@
 
 #include <qqueue.h>
 
+#include <qgraphicsview.h>
+#include <qgraphicsscene.h>
+#include <qgraphicsproxywidget.h>
+#include <qlayout.h>
+
 #if defined(Q_OS_SYMBIAN)
 # define SRCDIR "."
 #endif
@@ -101,6 +106,8 @@
     void saveAndRestore_data();
     void saveAndRestore();
 
+    void drawBorderPixmap();
+
     void drawLine_data();
     void drawLine();
     void drawLine_clipped();
@@ -239,9 +246,14 @@
     void taskQT4444_dontOverflowDashOffset();
 
     void painterBegin();
+    void setPenColorOnImage();
+    void setPenColorOnPixmap();
+
+    void QTBUG5939_attachPainterPrivate();
 
 private:
     void fillData();
+    void setPenColor(QPainter& p);
     QColor baseColor( int k, int intensity=255 );
     QImage getResImage( const QString &dir, const QString &addition, const QString &extension );
     QBitmap getBitmap( const QString &dir, const QString &filename, bool mask );
@@ -970,6 +982,18 @@
     delete widget;
 }
 
+void tst_QPainter::drawBorderPixmap()
+{
+    QPixmap src(79,79);
+    src.fill(Qt::transparent);
+
+    QImage pm(200,200,QImage::Format_RGB32);
+    QPainter p(&pm);
+    p.setTransform(QTransform(-1,0,0,-1,173.5,153.5));
+    qDrawBorderPixmap(&p, QRect(0,0,75,105), QMargins(39,39,39,39), src, QRect(0,0,79,79), QMargins(39,39,39,39),
+                       QTileRules(Qt::StretchTile,Qt::StretchTile), 0);
+}
+
 void tst_QPainter::drawLine_data()
 {
     QTest::addColumn<QLine>("line");
@@ -2915,7 +2939,7 @@
 
             QImage img(2, 2, format);
 
-            if (img.numColors() > 0) {
+            if (img.colorCount() > 0) {
                 img.setColor(0, QColor(colorPairs[j][0]).rgba());
                 img.setColor(1, QColor(colorPairs[j][1]).rgba());
             }
@@ -2937,7 +2961,7 @@
             // should not change the image
             QCOMPARE(original, img);
 
-            if (img.numColors() == 0)
+            if (img.colorCount() == 0)
                 continue;
 
             for (int k = 0; k < 2; ++k) {
@@ -4193,9 +4217,9 @@
 
     QVERIFY(testCompositionMode(255, 255, 255, QPainter::CompositionMode_SoftLight));
     QVERIFY(testCompositionMode(  0,   0,   0, QPainter::CompositionMode_SoftLight));
-    QVERIFY(testCompositionMode(127, 127, 127, QPainter::CompositionMode_SoftLight));
-    QVERIFY(testCompositionMode( 63,  63,  86, QPainter::CompositionMode_SoftLight));
-    QVERIFY(testCompositionMode(127,  63,  63, QPainter::CompositionMode_SoftLight));
+    QVERIFY(testCompositionMode(127, 127, 126, QPainter::CompositionMode_SoftLight));
+    QVERIFY(testCompositionMode( 63,  63,  39, QPainter::CompositionMode_SoftLight));
+    QVERIFY(testCompositionMode(127,  63,  62, QPainter::CompositionMode_SoftLight));
 
     QVERIFY(testCompositionMode(255, 255,   0, QPainter::CompositionMode_Difference));
     QVERIFY(testCompositionMode(  0,   0,   0, QPainter::CompositionMode_Difference));
@@ -4352,5 +4376,90 @@
     QVERIFY(!p.end());
 }
 
+void tst_QPainter::setPenColor(QPainter& p)
+{
+    p.setPen(Qt::NoPen);
+
+    // Setting color, then style
+    // Should work even though the pen is "NoPen with color", temporarily.
+    QPen newPen(p.pen());
+    newPen.setColor(Qt::red);
+    QCOMPARE(p.pen().style(), newPen.style());
+    QCOMPARE(p.pen().style(), Qt::NoPen);
+    p.setPen(newPen);
+
+    QCOMPARE(p.pen().color().name(), QString("#ff0000"));
+
+    QPen newPen2(p.pen());
+    newPen2.setStyle(Qt::SolidLine);
+    p.setPen(newPen2);
+
+    QCOMPARE(p.pen().color().name(), QString("#ff0000"));
+}
+
+void tst_QPainter::setPenColorOnImage()
+{
+    QImage img(QSize(10, 10), QImage::Format_ARGB32_Premultiplied);
+    QPainter p(&img);
+    setPenColor(p);
+}
+
+void tst_QPainter::setPenColorOnPixmap()
+{
+    QPixmap pix(10, 10);
+    QPainter p(&pix);
+    setPenColor(p);
+}
+
+class TestProxy : public QGraphicsProxyWidget
+{
+public:
+    TestProxy() : QGraphicsProxyWidget() {}
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+    {
+        QGraphicsProxyWidget::paint(painter, option, widget);
+        deviceTransform = painter->deviceTransform();
+    }
+    QTransform deviceTransform;
+};
+
+class TestWidget : public QWidget
+{
+Q_OBJECT
+public:
+    TestWidget() : QWidget(), painted(false) {}
+    void paintEvent(QPaintEvent *)
+    {
+        QPainter p(this);
+        deviceTransform = p.deviceTransform();
+        worldTransform = p.worldTransform();
+        painted = true;
+    }
+    QTransform deviceTransform;
+    QTransform worldTransform;
+    bool painted;
+};
+
+void tst_QPainter::QTBUG5939_attachPainterPrivate()
+{
+    QWidget *w = new QWidget();
+    QGraphicsScene *scene = new QGraphicsScene();
+    QGraphicsView *view = new QGraphicsView(scene, w);
+    view->move(50 ,50);
+    TestProxy *proxy = new TestProxy();
+    TestWidget *widget = new TestWidget();
+    proxy->setWidget(widget);
+    scene->addItem(proxy);
+    proxy->rotate(45);
+    w->resize(scene->sceneRect().size().toSize());
+
+    w->show();
+    QTRY_VERIFY(widget->painted);
+
+    QVERIFY(widget->worldTransform.isIdentity());
+    QCOMPARE(widget->deviceTransform, proxy->deviceTransform);
+}
+
 QTEST_MAIN(tst_QPainter)
+
 #include "tst_qpainter.moc"