tests/auto/qwidget/tst_qwidget.cpp
branchRCL_3
changeset 5 d3bac044e0f0
parent 4 3b1da2848fc7
child 8 3f74d0d4af4c
equal deleted inserted replaced
4:3b1da2848fc7 5:d3bac044e0f0
  5437 
  5437 
  5438     QColor color;
  5438     QColor color;
  5439     QRegion r;
  5439     QRegion r;
  5440 };
  5440 };
  5441 
  5441 
  5442 template<typename R, typename C>
  5442 #define VERIFY_COLOR(region, color) {                                   \
  5443 void verifyColor(R const& region, C const& color)
  5443     const QRegion r = QRegion(region);                                  \
  5444 {
  5444     for (int i = 0; i < r.rects().size(); ++i) {                        \
  5445     const QRegion r = QRegion(region);
  5445         const QRect rect = r.rects().at(i);                             \
  5446     for (int i = 0; i < r.rects().size(); ++i) {
  5446         for (int t = 0; t < 5; t++) {                                   \
  5447         const QRect rect = r.rects().at(i);
  5447             const QPixmap pixmap = QPixmap::grabWindow(QDesktopWidget().winId(), \
  5448         for (int t = 0; t < 5; t++) {
  5448                                                    rect.left(), rect.top(), \
  5449             const QPixmap pixmap = QPixmap::grabWindow(QDesktopWidget().winId(),
  5449                                                    rect.width(), rect.height()); \
  5450                                                    rect.left(), rect.top(),
  5450             QCOMPARE(pixmap.size(), rect.size());                       \
  5451                                                    rect.width(), rect.height());
  5451             QPixmap expectedPixmap(pixmap); /* ensure equal formats */  \
  5452             QCOMPARE(pixmap.size(), rect.size());
  5452             expectedPixmap.fill(color);                                 \
  5453             QPixmap expectedPixmap(pixmap); /* ensure equal formats */
  5453             if (pixmap.toImage().pixel(0,0) != QColor(color).rgb() && t < 4 ) \
  5454             expectedPixmap.fill(color);
  5454             { QTest::qWait(200); continue; }                            \
  5455             if (pixmap.toImage().pixel(0,0) != QColor(color).rgb() && t < 4 )
  5455             QCOMPARE(pixmap.toImage().pixel(0,0), QColor(color).rgb()); \
  5456             { QTest::qWait(200); continue; }
  5456             QCOMPARE(pixmap, expectedPixmap);                           \
  5457             QCOMPARE(pixmap.toImage().pixel(0,0), QColor(color).rgb());
  5457             break;                                                      \
  5458             QCOMPARE(pixmap, expectedPixmap);
  5458         }                                                               \
  5459             break;
  5459     }                                                                   \
  5460         }
       
  5461     }
       
  5462 }
  5460 }
  5463 
  5461 
  5464 void tst_QWidget::moveChild_data()
  5462 void tst_QWidget::moveChild_data()
  5465 {
  5463 {
  5466     QTest::addColumn<QPoint>("offset");
  5464     QTest::addColumn<QPoint>("offset");
  5497 #ifdef QT_MAC_USE_COCOA
  5495 #ifdef QT_MAC_USE_COCOA
  5498     QEXPECT_FAIL(0, "Cocoa compositor paints the entire content view, even when opaque", Continue);
  5496     QEXPECT_FAIL(0, "Cocoa compositor paints the entire content view, even when opaque", Continue);
  5499 #endif
  5497 #endif
  5500     QTRY_COMPARE(parent.r, QRegion(parent.rect()) - child.geometry());
  5498     QTRY_COMPARE(parent.r, QRegion(parent.rect()) - child.geometry());
  5501     QTRY_COMPARE(child.r, QRegion(child.rect()));
  5499     QTRY_COMPARE(child.r, QRegion(child.rect()));
  5502     verifyColor(child.geometry().translated(tlwOffset),
  5500     VERIFY_COLOR(child.geometry().translated(tlwOffset),
  5503                  child.color);
  5501                  child.color);
  5504     verifyColor(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset),
  5502     VERIFY_COLOR(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset),
  5505                  parent.color);
  5503                  parent.color);
  5506     parent.reset();
  5504     parent.reset();
  5507     child.reset();
  5505     child.reset();
  5508 
  5506 
  5509     // move
  5507     // move
  5518     QCOMPARE(parent.r, QRegion(oldGeometry) - child.geometry());
  5516     QCOMPARE(parent.r, QRegion(oldGeometry) - child.geometry());
  5519 #if !defined(Q_WS_MAC)
  5517 #if !defined(Q_WS_MAC)
  5520     // should be scrolled in backingstore
  5518     // should be scrolled in backingstore
  5521     QCOMPARE(child.r, QRegion());
  5519     QCOMPARE(child.r, QRegion());
  5522 #endif
  5520 #endif
  5523     verifyColor(child.geometry().translated(tlwOffset),
  5521     VERIFY_COLOR(child.geometry().translated(tlwOffset),
  5524                 child.color);
  5522                 child.color);
  5525     verifyColor(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset),
  5523     VERIFY_COLOR(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset),
  5526                 parent.color);
  5524                 parent.color);
  5527 }
  5525 }
  5528 
  5526 
  5529 void tst_QWidget::showAndMoveChild()
  5527 void tst_QWidget::showAndMoveChild()
  5530 {
  5528 {
  5551     // NB! Do NOT processEvents() (or qWait()) in between show() and move().
  5549     // NB! Do NOT processEvents() (or qWait()) in between show() and move().
  5552     child.show();
  5550     child.show();
  5553     child.move(desktopDimensions.width()/2, desktopDimensions.height()/2);
  5551     child.move(desktopDimensions.width()/2, desktopDimensions.height()/2);
  5554     qApp->processEvents();
  5552     qApp->processEvents();
  5555 
  5553 
  5556     verifyColor(child.geometry().translated(tlwOffset), Qt::blue);
  5554     VERIFY_COLOR(child.geometry().translated(tlwOffset), Qt::blue);
  5557     verifyColor(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), Qt::red);
  5555     VERIFY_COLOR(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), Qt::red);
  5558 }
  5556 }
  5559 
  5557 
  5560 void tst_QWidget::subtractOpaqueSiblings()
  5558 void tst_QWidget::subtractOpaqueSiblings()
  5561 {
  5559 {
  5562 #ifdef QT_MAC_USE_COCOA
  5560 #ifdef QT_MAC_USE_COCOA