diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-03-10 14:39:49 +0100 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2017-07-31 14:01:58 +0000 |
commit | 846a908b73ed3392c3f80a5c425c9ccf3c1e6a04 (patch) | |
tree | 6dcfe7a1623e04499db860dd22a4060573d5a975 /tests/auto/qquickninepatchimage | |
parent | c065436755aedcb50bca7f5c1977fc8f5dc6b39f (diff) |
Add Imagine style
The Imagine style is based on image assets. The style comes with a
default set of images, but the images can be easily changed by
providing a directory with images using a predefined naming convention.
[ChangeLog][Controls] Added the Imagine style, which is based on
image assets that can be provided using a predefined naming convention.
Task-number: QTPM-517
Change-Id: I550d7dac9a9686d60bec15655ac92dea9f36149c
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests/auto/qquickninepatchimage')
23 files changed, 262 insertions, 0 deletions
diff --git a/tests/auto/qquickninepatchimage/data/foo.9.png b/tests/auto/qquickninepatchimage/data/foo.9.png Binary files differnew file mode 100644 index 00000000..51246990 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/foo.9.png diff --git a/tests/auto/qquickninepatchimage/data/foo@2x.9.png b/tests/auto/qquickninepatchimage/data/foo@2x.9.png Binary files differnew file mode 100644 index 00000000..c8dc30a3 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/foo@2x.9.png diff --git a/tests/auto/qquickninepatchimage/data/foo@3x.9.png b/tests/auto/qquickninepatchimage/data/foo@3x.9.png Binary files differnew file mode 100644 index 00000000..00ea4e05 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/foo@3x.9.png diff --git a/tests/auto/qquickninepatchimage/data/foo@4x.9.png b/tests/auto/qquickninepatchimage/data/foo@4x.9.png Binary files differnew file mode 100644 index 00000000..ea73340a --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/foo@4x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-all.9.png b/tests/auto/qquickninepatchimage/data/inset-all.9.png Binary files differnew file mode 100644 index 00000000..e08ef9c7 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-all.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-all@2x.9.png b/tests/auto/qquickninepatchimage/data/inset-all@2x.9.png Binary files differnew file mode 100644 index 00000000..96d1c0e8 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-all@2x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-all@3x.9.png b/tests/auto/qquickninepatchimage/data/inset-all@3x.9.png Binary files differnew file mode 100644 index 00000000..215ce27e --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-all@3x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-all@4x.9.png b/tests/auto/qquickninepatchimage/data/inset-all@4x.9.png Binary files differnew file mode 100644 index 00000000..35e53101 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-all@4x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-bottomright.9.png b/tests/auto/qquickninepatchimage/data/inset-bottomright.9.png Binary files differnew file mode 100644 index 00000000..c4c37dff --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-bottomright.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-bottomright@2x.9.png b/tests/auto/qquickninepatchimage/data/inset-bottomright@2x.9.png Binary files differnew file mode 100644 index 00000000..3d64036f --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-bottomright@2x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-bottomright@3x.9.png b/tests/auto/qquickninepatchimage/data/inset-bottomright@3x.9.png Binary files differnew file mode 100644 index 00000000..115184d9 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-bottomright@3x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-bottomright@4x.9.png b/tests/auto/qquickninepatchimage/data/inset-bottomright@4x.9.png Binary files differnew file mode 100644 index 00000000..2ec7cbef --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-bottomright@4x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-topleft.9.png b/tests/auto/qquickninepatchimage/data/inset-topleft.9.png Binary files differnew file mode 100644 index 00000000..9cc5f43d --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-topleft.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-topleft@2x.9.png b/tests/auto/qquickninepatchimage/data/inset-topleft@2x.9.png Binary files differnew file mode 100644 index 00000000..a4ca2b12 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-topleft@2x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-topleft@3x.9.png b/tests/auto/qquickninepatchimage/data/inset-topleft@3x.9.png Binary files differnew file mode 100644 index 00000000..73f3595a --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-topleft@3x.9.png diff --git a/tests/auto/qquickninepatchimage/data/inset-topleft@4x.9.png b/tests/auto/qquickninepatchimage/data/inset-topleft@4x.9.png Binary files differnew file mode 100644 index 00000000..78baa463 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/inset-topleft@4x.9.png diff --git a/tests/auto/qquickninepatchimage/data/ninepatchimage.qml b/tests/auto/qquickninepatchimage/data/ninepatchimage.qml new file mode 100644 index 00000000..7ef07a1c --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/ninepatchimage.qml @@ -0,0 +1,7 @@ +import QtQuick.Controls 2.3 +import QtQuick.Controls.impl 2.3 +import QtQuick.Controls.Imagine 2.3 +import QtQuick.Controls.Imagine.impl 2.3 + +NinePatchImage { +} diff --git a/tests/auto/qquickninepatchimage/data/padding.9.png b/tests/auto/qquickninepatchimage/data/padding.9.png Binary files differnew file mode 100644 index 00000000..5b4f0960 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/padding.9.png diff --git a/tests/auto/qquickninepatchimage/data/padding@2x.9.png b/tests/auto/qquickninepatchimage/data/padding@2x.9.png Binary files differnew file mode 100644 index 00000000..44eb1943 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/padding@2x.9.png diff --git a/tests/auto/qquickninepatchimage/data/padding@3x.9.png b/tests/auto/qquickninepatchimage/data/padding@3x.9.png Binary files differnew file mode 100644 index 00000000..d1563448 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/padding@3x.9.png diff --git a/tests/auto/qquickninepatchimage/data/padding@4x.9.png b/tests/auto/qquickninepatchimage/data/padding@4x.9.png Binary files differnew file mode 100644 index 00000000..e86cce69 --- /dev/null +++ b/tests/auto/qquickninepatchimage/data/padding@4x.9.png diff --git a/tests/auto/qquickninepatchimage/qquickninepatchimage.pro b/tests/auto/qquickninepatchimage/qquickninepatchimage.pro new file mode 100644 index 00000000..b40a5f4c --- /dev/null +++ b/tests/auto/qquickninepatchimage/qquickninepatchimage.pro @@ -0,0 +1,14 @@ +CONFIG += testcase +macos:CONFIG -= app_bundle +TARGET = tst_qquickninepatchimage + +QT += core gui qml quick testlib +QT_PRIVATE += gui-private quick-private quickcontrols2-private + +include (../shared/util.pri) + +SOURCES += tst_qquickninepatchimage.cpp + +TESTDATA += \ + $$PWD/data/*.qml \ + $$PWD/data/*.png diff --git a/tests/auto/qquickninepatchimage/tst_qquickninepatchimage.cpp b/tests/auto/qquickninepatchimage/tst_qquickninepatchimage.cpp new file mode 100644 index 00000000..c7710199 --- /dev/null +++ b/tests/auto/qquickninepatchimage/tst_qquickninepatchimage.cpp @@ -0,0 +1,241 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qtest.h> +#include <QtTest/qsignalspy.h> + +#include <QtCore/qmath.h> +#include <QtCore/qsize.h> +#include <QtGui/private/qhighdpiscaling_p.h> +#include <QtQml/qqmlengine.h> +#include <QtQuick/qquickitem.h> +#include <QtQuick/qquickview.h> +#include <QtQuick/qquickitemgrabresult.h> +#include <QtQuick/private/qquickimage_p.h> + +#include "../shared/util.h" +#include "../shared/visualtestutil.h" + +using namespace QQuickVisualTestUtil; + +class tst_qquickninepatchimage : public QQmlDataTest +{ + Q_OBJECT + +private slots: + void ninePatch_data(); + void ninePatch(); + void padding_data(); + void padding(); + void inset_data(); + void inset(); + void implicitSize_data(); + void implicitSize(); +}; + +static QImage grabItemToImage(QQuickItem *item) +{ + QSharedPointer<QQuickItemGrabResult> result = item->grabToImage(); + QSignalSpy spy(result.data(), SIGNAL(ready())); + spy.wait(); + return result->image(); +} + +void tst_qquickninepatchimage::ninePatch_data() +{ + QTest::addColumn<int>("dpr"); + QTest::addColumn<QSize>("size"); + + // original size, downsized, stretched + const QList<QSize> sizes = QList<QSize>() + << QSize(40, 40) // original + << QSize(10, 40) // downsized (h) + << QSize(40, 10) // downsized (v) + << QSize(10, 10) // downsized (h & v) + << QSize(80, 40) // stretched (h) + << QSize(40, 80) // stretched (v) + << QSize(80, 80) // stretched (h & v) + << QSize(8, 8); // minimal (borders only) + + for (const QSize &sz : sizes) { + for (int dpr = 1; dpr <= 4; ++dpr) + QTest::newRow(qPrintable(QString::fromLatin1("DPR=%1, %2x%3").arg(dpr).arg(sz.width()).arg(sz.height()))) << dpr << sz; + } +} + +void tst_qquickninepatchimage::ninePatch() +{ + QFETCH(int, dpr); + QFETCH(QSize, size); + + QHighDpiScaling::setGlobalFactor(dpr); + + QQuickView view(testFileUrl("ninepatchimage.qml")); + QCOMPARE(view.status(), QQuickView::Ready); + view.show(); + view.requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject()); + QVERIFY(ninePatchImage); + ninePatchImage->setSource(testFileUrl("foo.9.png")); + ninePatchImage->setSize(size); + + const QImage ninePatchImageGrab = grabItemToImage(ninePatchImage).scaled(size * dpr); + + // Generate an image to compare against the actual 9-patch image. + QImage generatedImage(size * dpr, ninePatchImageGrab.format()); + generatedImage.fill(Qt::red); + + QImage blueRect(4 * dpr, 4 * dpr, ninePatchImageGrab.format()); + blueRect.fill(Qt::blue); + + QPainter painter(&generatedImage); + // Top-left + painter.drawImage(0, 0, blueRect); + // Top-right + painter.drawImage(generatedImage.width() - blueRect.width(), 0, blueRect); + // Bottom-right + painter.drawImage(generatedImage.width() - blueRect.width(), generatedImage.height() - blueRect.height(), blueRect); + // Bottom-left + painter.drawImage(0, generatedImage.height() - blueRect.height(), blueRect); + + QCOMPARE(ninePatchImageGrab, generatedImage); +} + +void tst_qquickninepatchimage::padding_data() +{ + QTest::addColumn<int>("dpr"); + + for (int dpr = 1; dpr <= 4; ++dpr) + QTest::newRow(qPrintable(QString::fromLatin1("DPR=%1").arg(dpr))) << dpr; +} + +void tst_qquickninepatchimage::padding() +{ + QFETCH(int, dpr); + + QHighDpiScaling::setGlobalFactor(dpr); + + QQuickView view(testFileUrl("ninepatchimage.qml")); + QCOMPARE(view.status(), QQuickView::Ready); + view.show(); + view.requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject()); + QVERIFY(ninePatchImage); + ninePatchImage->setSource(testFileUrl("padding.9.png")); + + QCOMPARE(ninePatchImage->property("topPadding").toReal(), 8); + QCOMPARE(ninePatchImage->property("leftPadding").toReal(), 18); + QCOMPARE(ninePatchImage->property("rightPadding").toReal(), 20); + QCOMPARE(ninePatchImage->property("bottomPadding").toReal(), 10); +} + +void tst_qquickninepatchimage::inset_data() +{ + QTest::addColumn<int>("dpr"); + QTest::addColumn<QString>("file"); + QTest::addColumn<QMarginsF>("insets"); + + const QStringList files = QStringList() << "inset-all.9.png" << "inset-topleft.9.png" << "inset-bottomright.9.png"; + const QList<QMarginsF> insets = QList<QMarginsF>() << QMarginsF(2, 1, 3, 4) << QMarginsF(2, 1, 0, 0) << QMarginsF(0, 0, 3, 4); + + for (int i = 0; i < files.count(); ++i) { + QString file = files.at(i); + for (int dpr = 1; dpr <= 4; ++dpr) + QTest::newRow(qPrintable(QString::fromLatin1("%1 DPR=%2").arg(file).arg(dpr))) << dpr << file << insets.at(i); + } +} + +Q_DECLARE_METATYPE(QMarginsF) + +void tst_qquickninepatchimage::inset() +{ + QFETCH(int, dpr); + QFETCH(QString, file); + QFETCH(QMarginsF, insets); + + QHighDpiScaling::setGlobalFactor(dpr); + + QQuickView view(testFileUrl("ninepatchimage.qml")); + QCOMPARE(view.status(), QQuickView::Ready); + view.show(); + view.requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject()); + QVERIFY(ninePatchImage); + ninePatchImage->setSource(testFileUrl(file)); + + QCOMPARE(ninePatchImage->property("topInset").toReal(), insets.top()); + QCOMPARE(ninePatchImage->property("leftInset").toReal(), insets.left()); + QCOMPARE(ninePatchImage->property("rightInset").toReal(), insets.right()); + QCOMPARE(ninePatchImage->property("bottomInset").toReal(), insets.bottom()); +} + +void tst_qquickninepatchimage::implicitSize_data() +{ + QTest::addColumn<int>("dpr"); + QTest::addColumn<QString>("file"); + QTest::addColumn<QSizeF>("implicitSize"); + + const QStringList files = QStringList() << "foo.9.png" << "padding.9.png" << "inset-all.9.png" << "inset-topleft.9.png" << "inset-bottomright.9.png"; + + for (const QString &file : files) { + for (int dpr = 1; dpr <= 4; ++dpr) + QTest::newRow(qPrintable(QString::fromLatin1("%1 DPR=%2").arg(file).arg(dpr))) << dpr << file << QSizeF(40, 40); + } +} + +void tst_qquickninepatchimage::implicitSize() +{ + QFETCH(int, dpr); + QFETCH(QString, file); + QFETCH(QSizeF, implicitSize); + + QHighDpiScaling::setGlobalFactor(dpr); + + QQuickView view(testFileUrl("ninepatchimage.qml")); + QCOMPARE(view.status(), QQuickView::Ready); + view.show(); + view.requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject()); + QVERIFY(ninePatchImage); + ninePatchImage->setSource(testFileUrl(file)); + + QCOMPARE(ninePatchImage->implicitWidth(), implicitSize.width()); + QCOMPARE(ninePatchImage->implicitHeight(), implicitSize.height()); +} + +QTEST_MAIN(tst_qquickninepatchimage) + +#include "tst_qquickninepatchimage.moc" |