Move the auto test of QPixmap::grabWidget() from QPixmap to QWidget

Change-Id: Id565fa1eb8fe13c62a93a5afa39a5701ce7b20ea
QPixmap::grabWidget is deprecated, which calls QWidget::grab() at present.
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
bb10
Debao Zhang 2012-03-08 16:48:17 -08:00 committed by Qt by Nokia
parent 9f266efa8f
commit db390d46c3
2 changed files with 75 additions and 43 deletions

View File

@ -48,7 +48,6 @@
#include <qmatrix.h>
#include <qdesktopwidget.h>
#include <qpaintengine.h>
#include <qtreewidget.h>
#include <qsplashscreen.h>
#include <qplatformpixmap_qpa.h>
@ -111,7 +110,6 @@ private slots:
void setGetMask();
void cacheKey();
void drawBitmap();
void grabWidget();
void grabWindow();
void isNull();
void task_246446();
@ -718,47 +716,6 @@ void tst_QPixmap::drawBitmap()
QVERIFY(lenientCompare(pixmap, expected));
}
void tst_QPixmap::grabWidget()
{
for (int opaque = 0; opaque < 2; ++opaque) {
QWidget widget;
QImage image(128, 128, opaque ? QImage::Format_RGB32 : QImage::Format_ARGB32_Premultiplied);
for (int row = 0; row < image.height(); ++row) {
QRgb *line = reinterpret_cast<QRgb *>(image.scanLine(row));
for (int col = 0; col < image.width(); ++col)
line[col] = qRgba(rand() & 255, row, col, opaque ? 255 : 127);
}
QPalette pal = widget.palette();
pal.setBrush(QPalette::Window, QBrush(image));
widget.setPalette(pal);
widget.resize(128, 128);
QPixmap expected(64, 64);
if (!opaque)
expected.fill(Qt::transparent);
QPainter p(&expected);
p.translate(-64, -64);
p.drawTiledPixmap(0, 0, 128, 128, pal.brush(QPalette::Window).texture(), 0, 0);
p.end();
QPixmap actual = QPixmap::grabWidget(&widget, QRect(64, 64, 64, 64));
QVERIFY(lenientCompare(actual, expected));
actual = QPixmap::grabWidget(&widget, 64, 64);
QVERIFY(lenientCompare(actual, expected));
// Make sure a widget that is not yet shown is grabbed correctly.
QTreeWidget widget2;
actual = QPixmap::grabWidget(&widget2);
widget2.show();
expected = QPixmap::grabWidget(&widget2);
QVERIFY(lenientCompare(actual, expected));
}
}
void tst_QPixmap::grabWindow()
{
// ### fixme: Check platforms

View File

@ -68,6 +68,7 @@
#include <QtGui/qguiapplication.h>
#include <qmenubar.h>
#include <qtableview.h>
#include <qtreewidget.h>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QGraphicsProxyWidget>
@ -412,6 +413,7 @@ private slots:
void taskQTBUG_17333_ResizeInfiniteRecursion();
void nativeChildFocus();
void grab();
private:
bool ensureScreenSize(int width, int height);
@ -9288,5 +9290,78 @@ void tst_QWidget::nativeChildFocus()
QTest::qWait(1000);
}
static bool lenientCompare(const QPixmap &actual, const QPixmap &expected)
{
QImage expectedImage = expected.toImage().convertToFormat(QImage::Format_RGB32);
QImage actualImage = actual.toImage().convertToFormat(QImage::Format_RGB32);
if (expectedImage.size() != actualImage.size()) {
qWarning("Image size comparison failed: expected: %dx%d, got %dx%d",
expectedImage.size().width(), expectedImage.size().height(),
actualImage.size().width(), actualImage.size().height());
return false;
}
const int size = actual.width() * actual.height();
const int threshold = QPixmap::defaultDepth() == 16 ? 10 : 2;
QRgb *a = (QRgb *)actualImage.bits();
QRgb *e = (QRgb *)expectedImage.bits();
for (int i = 0; i < size; ++i) {
const QColor ca(a[i]);
const QColor ce(e[i]);
if (qAbs(ca.red() - ce.red()) > threshold
|| qAbs(ca.green() - ce.green()) > threshold
|| qAbs(ca.blue() - ce.blue()) > threshold) {
qWarning("Color mismatch at pixel #%d: Expected: %d,%d,%d, got %d,%d,%d",
i, ce.red(), ce.green(), ce.blue(), ca.red(), ca.green(), ca.blue());
return false;
}
}
return true;
}
void tst_QWidget::grab()
{
for (int opaque = 0; opaque < 2; ++opaque) {
QWidget widget;
QImage image(128, 128, opaque ? QImage::Format_RGB32 : QImage::Format_ARGB32_Premultiplied);
for (int row = 0; row < image.height(); ++row) {
QRgb *line = reinterpret_cast<QRgb *>(image.scanLine(row));
for (int col = 0; col < image.width(); ++col)
line[col] = qRgba(rand() & 255, row, col, opaque ? 255 : 127);
}
QPalette pal = widget.palette();
pal.setBrush(QPalette::Window, QBrush(image));
widget.setPalette(pal);
widget.resize(128, 128);
QPixmap expected(64, 64);
if (!opaque)
expected.fill(Qt::transparent);
QPainter p(&expected);
p.translate(-64, -64);
p.drawTiledPixmap(0, 0, 128, 128, pal.brush(QPalette::Window).texture(), 0, 0);
p.end();
QPixmap actual = widget.grab(QRect(64, 64, 64, 64));
QVERIFY(lenientCompare(actual, expected));
actual = widget.grab(QRect(64, 64, -1, -1));
QVERIFY(lenientCompare(actual, expected));
// Make sure a widget that is not yet shown is grabbed correctly.
QTreeWidget widget2;
actual = widget2.grab(QRect());
widget2.show();
expected = widget2.grab(QRect());
QVERIFY(lenientCompare(actual, expected));
}
}
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"