tests/auto/qpainter/tst_qpainter.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    39 **
    39 **
    40 ****************************************************************************/
    40 ****************************************************************************/
    41 
    41 
    42 
    42 
    43 #include <QtTest/QtTest>
    43 #include <QtTest/QtTest>
    44 
    44 #include "../../shared/util.h"
    45 
    45 
    46 #include <qpainter.h>
    46 #include <qpainter.h>
    47 #include <qapplication.h>
    47 #include <qapplication.h>
    48 #include <qwidget.h>
    48 #include <qwidget.h>
    49 #include <qfontmetrics.h>
    49 #include <qfontmetrics.h>
    65 
    65 
    66 #include <qlabel.h>
    66 #include <qlabel.h>
    67 
    67 
    68 #include <qqueue.h>
    68 #include <qqueue.h>
    69 
    69 
       
    70 #include <qgraphicsview.h>
       
    71 #include <qgraphicsscene.h>
       
    72 #include <qgraphicsproxywidget.h>
       
    73 #include <qlayout.h>
       
    74 
    70 #if defined(Q_OS_SYMBIAN)
    75 #if defined(Q_OS_SYMBIAN)
    71 # define SRCDIR "."
    76 # define SRCDIR "."
    72 #endif
    77 #endif
    73 
    78 
    74 Q_DECLARE_METATYPE(QLine)
    79 Q_DECLARE_METATYPE(QLine)
    99     void drawPixmap_comp_data();
   104     void drawPixmap_comp_data();
   100     void drawPixmap_comp();
   105     void drawPixmap_comp();
   101     void saveAndRestore_data();
   106     void saveAndRestore_data();
   102     void saveAndRestore();
   107     void saveAndRestore();
   103 
   108 
       
   109     void drawBorderPixmap();
       
   110 
   104     void drawLine_data();
   111     void drawLine_data();
   105     void drawLine();
   112     void drawLine();
   106     void drawLine_clipped();
   113     void drawLine_clipped();
   107     void drawLine_task121143();
   114     void drawLine_task121143();
   108     void drawLine_task216948();
   115     void drawLine_task216948();
   237     void emptyClip();
   244     void emptyClip();
   238 
   245 
   239     void taskQT4444_dontOverflowDashOffset();
   246     void taskQT4444_dontOverflowDashOffset();
   240 
   247 
   241     void painterBegin();
   248     void painterBegin();
       
   249     void setPenColorOnImage();
       
   250     void setPenColorOnPixmap();
       
   251 
       
   252     void QTBUG5939_attachPainterPrivate();
   242 
   253 
   243 private:
   254 private:
   244     void fillData();
   255     void fillData();
       
   256     void setPenColor(QPainter& p);
   245     QColor baseColor( int k, int intensity=255 );
   257     QColor baseColor( int k, int intensity=255 );
   246     QImage getResImage( const QString &dir, const QString &addition, const QString &extension );
   258     QImage getResImage( const QString &dir, const QString &addition, const QString &extension );
   247     QBitmap getBitmap( const QString &dir, const QString &filename, bool mask );
   259     QBitmap getBitmap( const QString &dir, const QString &filename, bool mask );
   248 };
   260 };
   249 
   261 
   968     QCOMPARE(p.background(), pal.background());
   980     QCOMPARE(p.background(), pal.background());
   969 
   981 
   970     delete widget;
   982     delete widget;
   971 }
   983 }
   972 
   984 
       
   985 void tst_QPainter::drawBorderPixmap()
       
   986 {
       
   987     QPixmap src(79,79);
       
   988     src.fill(Qt::transparent);
       
   989 
       
   990     QImage pm(200,200,QImage::Format_RGB32);
       
   991     QPainter p(&pm);
       
   992     p.setTransform(QTransform(-1,0,0,-1,173.5,153.5));
       
   993     qDrawBorderPixmap(&p, QRect(0,0,75,105), QMargins(39,39,39,39), src, QRect(0,0,79,79), QMargins(39,39,39,39),
       
   994                        QTileRules(Qt::StretchTile,Qt::StretchTile), 0);
       
   995 }
       
   996 
   973 void tst_QPainter::drawLine_data()
   997 void tst_QPainter::drawLine_data()
   974 {
   998 {
   975     QTest::addColumn<QLine>("line");
   999     QTest::addColumn<QLine>("line");
   976 
  1000 
   977     QTest::newRow("0-45") << QLine(0, 20, 100, 0);
  1001     QTest::newRow("0-45") << QLine(0, 20, 100, 0);
  2913             if (format == QImage::Format_Indexed8)
  2937             if (format == QImage::Format_Indexed8)
  2914                 continue;
  2938                 continue;
  2915 
  2939 
  2916             QImage img(2, 2, format);
  2940             QImage img(2, 2, format);
  2917 
  2941 
  2918             if (img.numColors() > 0) {
  2942             if (img.colorCount() > 0) {
  2919                 img.setColor(0, QColor(colorPairs[j][0]).rgba());
  2943                 img.setColor(0, QColor(colorPairs[j][0]).rgba());
  2920                 img.setColor(1, QColor(colorPairs[j][1]).rgba());
  2944                 img.setColor(1, QColor(colorPairs[j][1]).rgba());
  2921             }
  2945             }
  2922 
  2946 
  2923             img.fill(0x0);
  2947             img.fill(0x0);
  2935 
  2959 
  2936             // drawing a transparent image on top of another image
  2960             // drawing a transparent image on top of another image
  2937             // should not change the image
  2961             // should not change the image
  2938             QCOMPARE(original, img);
  2962             QCOMPARE(original, img);
  2939 
  2963 
  2940             if (img.numColors() == 0)
  2964             if (img.colorCount() == 0)
  2941                 continue;
  2965                 continue;
  2942 
  2966 
  2943             for (int k = 0; k < 2; ++k) {
  2967             for (int k = 0; k < 2; ++k) {
  2944                 QPainter p(&img);
  2968                 QPainter p(&img);
  2945                 p.fillRect(0, 0, 2, 2, colorPairs[j][k]);
  2969                 p.fillRect(0, 0, 2, 2, colorPairs[j][k]);
  4191     QVERIFY(testCompositionMode( 63,  63,  31, QPainter::CompositionMode_HardLight));
  4215     QVERIFY(testCompositionMode( 63,  63,  31, QPainter::CompositionMode_HardLight));
  4192     QVERIFY(testCompositionMode(127,  63,  63, QPainter::CompositionMode_HardLight));
  4216     QVERIFY(testCompositionMode(127,  63,  63, QPainter::CompositionMode_HardLight));
  4193 
  4217 
  4194     QVERIFY(testCompositionMode(255, 255, 255, QPainter::CompositionMode_SoftLight));
  4218     QVERIFY(testCompositionMode(255, 255, 255, QPainter::CompositionMode_SoftLight));
  4195     QVERIFY(testCompositionMode(  0,   0,   0, QPainter::CompositionMode_SoftLight));
  4219     QVERIFY(testCompositionMode(  0,   0,   0, QPainter::CompositionMode_SoftLight));
  4196     QVERIFY(testCompositionMode(127, 127, 127, QPainter::CompositionMode_SoftLight));
  4220     QVERIFY(testCompositionMode(127, 127, 126, QPainter::CompositionMode_SoftLight));
  4197     QVERIFY(testCompositionMode( 63,  63,  86, QPainter::CompositionMode_SoftLight));
  4221     QVERIFY(testCompositionMode( 63,  63,  39, QPainter::CompositionMode_SoftLight));
  4198     QVERIFY(testCompositionMode(127,  63,  63, QPainter::CompositionMode_SoftLight));
  4222     QVERIFY(testCompositionMode(127,  63,  62, QPainter::CompositionMode_SoftLight));
  4199 
  4223 
  4200     QVERIFY(testCompositionMode(255, 255,   0, QPainter::CompositionMode_Difference));
  4224     QVERIFY(testCompositionMode(255, 255,   0, QPainter::CompositionMode_Difference));
  4201     QVERIFY(testCompositionMode(  0,   0,   0, QPainter::CompositionMode_Difference));
  4225     QVERIFY(testCompositionMode(  0,   0,   0, QPainter::CompositionMode_Difference));
  4202     QVERIFY(testCompositionMode(255,   0, 255, QPainter::CompositionMode_Difference));
  4226     QVERIFY(testCompositionMode(255,   0, 255, QPainter::CompositionMode_Difference));
  4203     QVERIFY(testCompositionMode(127, 127,   0, QPainter::CompositionMode_Difference));
  4227     QVERIFY(testCompositionMode(127, 127,   0, QPainter::CompositionMode_Difference));
  4350 
  4374 
  4351     // Try ending an inactive painter.
  4375     // Try ending an inactive painter.
  4352     QVERIFY(!p.end());
  4376     QVERIFY(!p.end());
  4353 }
  4377 }
  4354 
  4378 
       
  4379 void tst_QPainter::setPenColor(QPainter& p)
       
  4380 {
       
  4381     p.setPen(Qt::NoPen);
       
  4382 
       
  4383     // Setting color, then style
       
  4384     // Should work even though the pen is "NoPen with color", temporarily.
       
  4385     QPen newPen(p.pen());
       
  4386     newPen.setColor(Qt::red);
       
  4387     QCOMPARE(p.pen().style(), newPen.style());
       
  4388     QCOMPARE(p.pen().style(), Qt::NoPen);
       
  4389     p.setPen(newPen);
       
  4390 
       
  4391     QCOMPARE(p.pen().color().name(), QString("#ff0000"));
       
  4392 
       
  4393     QPen newPen2(p.pen());
       
  4394     newPen2.setStyle(Qt::SolidLine);
       
  4395     p.setPen(newPen2);
       
  4396 
       
  4397     QCOMPARE(p.pen().color().name(), QString("#ff0000"));
       
  4398 }
       
  4399 
       
  4400 void tst_QPainter::setPenColorOnImage()
       
  4401 {
       
  4402     QImage img(QSize(10, 10), QImage::Format_ARGB32_Premultiplied);
       
  4403     QPainter p(&img);
       
  4404     setPenColor(p);
       
  4405 }
       
  4406 
       
  4407 void tst_QPainter::setPenColorOnPixmap()
       
  4408 {
       
  4409     QPixmap pix(10, 10);
       
  4410     QPainter p(&pix);
       
  4411     setPenColor(p);
       
  4412 }
       
  4413 
       
  4414 class TestProxy : public QGraphicsProxyWidget
       
  4415 {
       
  4416 public:
       
  4417     TestProxy() : QGraphicsProxyWidget() {}
       
  4418     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
       
  4419     {
       
  4420         QGraphicsProxyWidget::paint(painter, option, widget);
       
  4421         deviceTransform = painter->deviceTransform();
       
  4422     }
       
  4423     QTransform deviceTransform;
       
  4424 };
       
  4425 
       
  4426 class TestWidget : public QWidget
       
  4427 {
       
  4428 Q_OBJECT
       
  4429 public:
       
  4430     TestWidget() : QWidget(), painted(false) {}
       
  4431     void paintEvent(QPaintEvent *)
       
  4432     {
       
  4433         QPainter p(this);
       
  4434         deviceTransform = p.deviceTransform();
       
  4435         worldTransform = p.worldTransform();
       
  4436         painted = true;
       
  4437     }
       
  4438     QTransform deviceTransform;
       
  4439     QTransform worldTransform;
       
  4440     bool painted;
       
  4441 };
       
  4442 
       
  4443 void tst_QPainter::QTBUG5939_attachPainterPrivate()
       
  4444 {
       
  4445     QWidget *w = new QWidget();
       
  4446     QGraphicsScene *scene = new QGraphicsScene();
       
  4447     QGraphicsView *view = new QGraphicsView(scene, w);
       
  4448     view->move(50 ,50);
       
  4449     TestProxy *proxy = new TestProxy();
       
  4450     TestWidget *widget = new TestWidget();
       
  4451     proxy->setWidget(widget);
       
  4452     scene->addItem(proxy);
       
  4453     proxy->rotate(45);
       
  4454     w->resize(scene->sceneRect().size().toSize());
       
  4455 
       
  4456     w->show();
       
  4457     QTRY_VERIFY(widget->painted);
       
  4458 
       
  4459     QVERIFY(widget->worldTransform.isIdentity());
       
  4460     QCOMPARE(widget->deviceTransform, proxy->deviceTransform);
       
  4461 }
       
  4462 
  4355 QTEST_MAIN(tst_QPainter)
  4463 QTEST_MAIN(tst_QPainter)
       
  4464 
  4356 #include "tst_qpainter.moc"
  4465 #include "tst_qpainter.moc"