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 |