diff options
68 files changed, 1453 insertions, 112 deletions
@@ -36,6 +36,7 @@ /tests/auto/cursor/tst_cursor /tests/auto/drawer/tst_drawer /tests/auto/focus/tst_focus +/tests/auto/font/tst_font /tests/auto/menu/tst_menu /tests/auto/palette/tst_palette /tests/auto/platform/tst_platform diff --git a/src/imports/controls/doc/images/qtquickcontrols2-default-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-default-thumbnail.png Binary files differnew file mode 100644 index 00000000..5afcb6d7 --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-default-thumbnail.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png b/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png Binary files differindex 8afb2cd6..eb0350dd 100644 --- a/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png +++ b/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-light.png b/src/imports/controls/doc/images/qtquickcontrols2-material-light.png Binary files differnew file mode 100644 index 00000000..2635de68 --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-material-light.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-purple.png b/src/imports/controls/doc/images/qtquickcontrols2-material-purple.png Binary files differnew file mode 100644 index 00000000..8afb2cd6 --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-material-purple.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png Binary files differnew file mode 100644 index 00000000..c1084673 --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material.png b/src/imports/controls/doc/images/qtquickcontrols2-material.png Binary files differdeleted file mode 100644 index 4caef89e..00000000 --- a/src/imports/controls/doc/images/qtquickcontrols2-material.png +++ /dev/null diff --git a/src/imports/controls/doc/images/qtquickcontrols2-styles.png b/src/imports/controls/doc/images/qtquickcontrols2-styles.png Binary files differnew file mode 100644 index 00000000..aae046fd --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-styles.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png Binary files differindex ec459457..2d6937c7 100644 --- a/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png +++ b/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-light.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-light.png Binary files differnew file mode 100644 index 00000000..a6da6f7f --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-universal-light.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png Binary files differnew file mode 100644 index 00000000..a189ed72 --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png Binary files differnew file mode 100644 index 00000000..ec459457 --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal.png b/src/imports/controls/doc/images/qtquickcontrols2-universal.png Binary files differdeleted file mode 100644 index b50d9cca..00000000 --- a/src/imports/controls/doc/images/qtquickcontrols2-universal.png +++ /dev/null diff --git a/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc index 81318cde..f64901d5 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc @@ -35,46 +35,11 @@ to build complete interfaces in Qt Quick. The module was introduced in Qt 5.7. + \image qtquickcontrols2-styles.png + Qt Quick Controls 2 comes with a selection customizable styles. See \l {Styling Qt Quick Controls 2} for more details. - \raw HTML - <table style="background:transparent; border:0px" width="66%"> - <tr> - <td style="border:0px; padding-right:25px;"> - <a href="qtquickcontrols2-default.html"> - <img src="images/qtquickcontrols2-default.png" alt="Default" width="100%"/> - </a> - </td> - <td style="border:0px"> - <a href="qtquickcontrols2-material.html"> - <img src="images/qtquickcontrols2-material.png" alt="Material" width="100%"/> - </a> - </td> - </tr> - <tr> - <td style="border:0px">Default Style</td> - <td style="border:0px">Material Style</td> - </tr> - <tr> - <td style="border:0px; padding-top:45px; padding-right:25px;"> - <a href="qtquickcontrols2-fusion.html"> - <img src="images/qtquickcontrols2-fusion.png" alt="Fusion" width="100%"/> - </a> - </td> - <td style="border:0px; padding-top:45px; "> - <a href="qtquickcontrols2-universal.html"> - <img src="images/qtquickcontrols2-universal.png" alt="Universal" width="100%"/> - </a> - </td> - </tr> - <tr> - <td style="border:0px">Fusion Style</td> - <td style="border:0px">Universal Style</td> - </tr> - </table> - \endraw - \section1 Prerequisites The \l{Qt Quick Controls 2 QML Types}{QML types} can be imported into your diff --git a/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc index f661a28d..f1d1f1e6 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc @@ -58,8 +58,13 @@ {Google Material Design Guidelines}. It allows for a unified experience across platforms and device sizes. - \image qtquickcontrols2-material.png - \caption The Material style in light and dark themes + \table + \row + \li \image qtquickcontrols2-material-light.png + \caption The Material style in light theme + \li \image qtquickcontrols2-material-dark.png + \caption The Material style in dark theme + \endtable To run an application with the Material style, see \l {Using Styles in Qt Quick Controls 2}. @@ -108,7 +113,7 @@ } \endqml \li - \image qtquickcontrols2-material-dark.png + \image qtquickcontrols2-material-purple.png \endtable In addition to specifying the attributes in QML, it is also possible to diff --git a/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc index 472b02c9..03be5320 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc @@ -29,60 +29,36 @@ \page qtquickcontrols2-styles.html \title Styling Qt Quick Controls 2 + \section1 Available Styles + Qt Quick Controls 2 comes with a selection of styles. - \raw HTML - <table style="background:transparent; border:0px"> - <tr> - <td style="border:0px; padding-right:25px"> - <a href="qtquickcontrols2-default.html"> - <img src="images/qtquickcontrols2-default.png" width="45%"/> - </a> - </td> - <td style="border:0px"> - <a href="qtquickcontrols2-material.html"> - <img src="images/qtquickcontrols2-material.png" width="75%"/> - </a> - </td> - </tr> - <tr> - <td style="border:0px"> - The <a href="qtquickcontrols2-default.html">Default</a> style is - a simple and light-weight all-round style that offers the maximum - performance for Qt Quick Controls 2. - </td> - <td style="border:0px"> - The <a href="qtquickcontrols2-material.html">Material</a> style offers an appealing design - based on the <a href="https://www.google.com/design/spec/material-design/introduction.html"> - Google Material Design Guidelines</a>, but requires more system resources than the Default style. - </td> - </tr> - <tr> - <td style="border:0px; padding-top:45px; padding-right:25px;"> - <a href="qtquickcontrols2-fusion.html"> - <img src="images/qtquickcontrols2-fusion.png" width="75%"/> - </a> - </td> - <td style="border:0px; padding-top:45px;"> - <a href="qtquickcontrols2-universal.html"> - <img src="images/qtquickcontrols2-universal.png" width="75%"/> - </a> - </td> - </tr> - <tr> - <td style="border:0px"> - The <a href="qtquickcontrols2-fusion.html">Fusion</a> style is - a platform-agnostic style that offers a desktop-oriented look'n'feel - for Qt Quick Controls 2. - </td> - <td style="border:0px"> - The <a href="qtquickcontrols2-universal.html">Universal</a> style offers an appealing design - based on the <a href="https://dev.windows.com/design">Microsoft Universal Design Guidelines</a>, - but requires more system resources than the Default style. - </td> - </tr> - </table> - \endraw + \section2 Default Style + + \image qtquickcontrols2-default-thumbnail.png + The \l {Default Style} is a simple and light-weight all-round style that offers + the maximum performance for Qt Quick Controls 2. + + \section2 Fusion Style + + \image qtquickcontrols2-fusion-thumbnail.png + The \l {Fusion Style} is a platform-agnostic style that offers a desktop-oriented + look'n'feel for Qt Quick Controls 2. + + \section2 Material Style + + \image qtquickcontrols2-material-thumbnail.png + The \l {Material Style} offers an appealing design based on the + \l {https://www.google.com/design/spec/material-design/introduction.html} + {Google Material Design Guidelines}, but requires more system resources than + the Default style. + + \section2 Universal Style + + \image qtquickcontrols2-universal-thumbnail.png + The \l {Universal Style} offers an appealing design based on the + \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines}, + but requires more system resources than the Default style. \section1 Using Styles in Qt Quick Controls 2 diff --git a/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc index b4fe4dfa..8e88f345 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc @@ -57,8 +57,13 @@ The Universal style has been designed to look good on all devices, from phones and tablets to PCs. - \image qtquickcontrols2-universal.png - \caption The Universal style in light and dark themes + \table + \row + \li \image qtquickcontrols2-universal-light.png + \caption The Universal style in light theme + \li \image qtquickcontrols2-universal-dark.png + \caption The Universal style in dark theme + \endtable To run an application with the Universal style, see \l {Using Styles in Qt Quick Controls 2}. @@ -107,7 +112,7 @@ } \endqml \li - \image qtquickcontrols2-universal-dark.png + \image qtquickcontrols2-universal-violet.png \endtable In addition to specifying the attributes in QML, it is also possible to diff --git a/src/quickcontrols2/qquickstyle.cpp b/src/quickcontrols2/qquickstyle.cpp index f154f0ce..48d1dc17 100644 --- a/src/quickcontrols2/qquickstyle.cpp +++ b/src/quickcontrols2/qquickstyle.cpp @@ -428,9 +428,12 @@ QStringList QQuickStyle::availableStyles() const QStringList stylePaths = QQuickStylePrivate::stylePaths(); for (const QString &path : stylePaths) { - QDir dir(path); - styles += dir.entryList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot); - styles.removeAll(QStringLiteral("designer")); + const QList<QFileInfo> entries = QDir(path).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &entry : entries) { + const QString name = entry.fileName(); + if (!name.endsWith(QLatin1String(".dSYM")) && name != QLatin1String("designer")) + styles += name; + } } styles.prepend(QStringLiteral("Default")); styles.removeDuplicates(); diff --git a/src/quicktemplates2/configure.json b/src/quicktemplates2/configure.json index 45899e1f..030e668b 100644 --- a/src/quicktemplates2/configure.json +++ b/src/quicktemplates2/configure.json @@ -7,6 +7,12 @@ "purpose": "Provides support for hover effects.", "section": "Quick Templates 2", "output": [ "privateFeature" ] + }, + "quicktemplates2-multitouch": { + "label": "Multi-touch support", + "purpose": "Provides support for multi-touch.", + "section": "Quick Templates 2", + "output": [ "privateFeature" ] } }, @@ -14,7 +20,8 @@ { "section": "Qt Quick Templates 2", "entries": [ - "quicktemplates2-hover" + "quicktemplates2-hover", + "quicktemplates2-multitouch" ] } ] diff --git a/src/quicktemplates2/qquickapplicationwindow.cpp b/src/quicktemplates2/qquickapplicationwindow.cpp index ff062259..a6523553 100644 --- a/src/quicktemplates2/qquickapplicationwindow.cpp +++ b/src/quicktemplates2/qquickapplicationwindow.cpp @@ -36,7 +36,7 @@ #include "qquickapplicationwindow_p.h" #include "qquickoverlay_p.h" -#include "qquickpopup_p.h" +#include "qquickpopup_p_p.h" #include "qquickcontrol_p_p.h" #include "qquicktextarea_p.h" #include "qquicktextfield_p.h" @@ -179,6 +179,8 @@ public: void _q_updateActiveFocus(); void setActiveFocusControl(QQuickItem *item); + static void contentData_append(QQmlListProperty<QObject> *prop, QObject *obj); + bool complete; QQuickItem *background; QQuickItem *contentItem; @@ -268,7 +270,6 @@ void QQuickApplicationWindowPrivate::updateFont(const QFont &f) QQuickControlPrivate::updateFontRecur(q->QQuickWindow::contentItem(), f); - // TODO: internal QQuickPopupManager that provides reliable access to all QQuickPopup instances const QList<QQuickPopup *> popups = q->findChildren<QQuickPopup *>(); for (QQuickPopup *popup : popups) QQuickControlPrivate::get(static_cast<QQuickControl *>(popup->popupItem()))->inheritFont(f); @@ -340,6 +341,15 @@ void QQuickApplicationWindowPrivate::setActiveFocusControl(QQuickItem *control) } } +void QQuickApplicationWindowPrivate::contentData_append(QQmlListProperty<QObject> *prop, QObject *obj) +{ + QQuickItemPrivate::data_append(prop, obj); + + // associate "top-level" popups with the window as soon as they are added to the default property + if (QQuickPopup *popup = qobject_cast<QQuickPopup *>(obj)) + QQuickPopupPrivate::get(popup)->setWindow(static_cast<QQuickApplicationWindow *>(prop->data)); +} + QQuickApplicationWindow::QQuickApplicationWindow(QWindow *parent) : QQuickWindowQmlImpl(parent), d_ptr(new QQuickApplicationWindowPrivate) { @@ -539,7 +549,11 @@ void QQuickApplicationWindow::setFooter(QQuickItem *footer) */ QQmlListProperty<QObject> QQuickApplicationWindow::contentData() { - return QQuickItemPrivate::get(contentItem())->data(); + return QQmlListProperty<QObject>(contentItem(), this, + QQuickApplicationWindowPrivate::contentData_append, + QQuickItemPrivate::data_count, + QQuickItemPrivate::data_at, + QQuickItemPrivate::data_clear); } /*! @@ -670,7 +684,6 @@ void QQuickApplicationWindow::resetFont() setFont(QFont()); } - /*! \qmlproperty Locale QtQuick.Controls::ApplicationWindow::locale diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp index 06f8c8a2..dca50244 100644 --- a/src/quicktemplates2/qquickcontrol.cpp +++ b/src/quicktemplates2/qquickcontrol.cpp @@ -144,6 +144,7 @@ QQuickControlPrivate::~QQuickControlPrivate() #endif } +#if QT_CONFIG(quicktemplates2_multitouch) bool QQuickControlPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) { if (point.id() == touchId) @@ -156,6 +157,7 @@ bool QQuickControlPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) return false; } +#endif void QQuickControlPrivate::handlePress(const QPointF &) { @@ -1474,6 +1476,7 @@ void QQuickControl::mouseUngrabEvent() d->handleUngrab(); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickControl::touchEvent(QTouchEvent *event) { Q_D(QQuickControl); @@ -1528,6 +1531,7 @@ void QQuickControl::touchUngrabEvent() Q_D(QQuickControl); d->handleUngrab(); } +#endif #if QT_CONFIG(wheelevent) void QQuickControl::wheelEvent(QWheelEvent *event) diff --git a/src/quicktemplates2/qquickcontrol_p.h b/src/quicktemplates2/qquickcontrol_p.h index 5207d46c..eaf00ced 100644 --- a/src/quicktemplates2/qquickcontrol_p.h +++ b/src/quicktemplates2/qquickcontrol_p.h @@ -193,8 +193,10 @@ protected: void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseUngrabEvent() override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; void touchUngrabEvent() override; +#endif #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickcontrol_p_p.h b/src/quicktemplates2/qquickcontrol_p_p.h index 54346016..e990e44f 100644 --- a/src/quicktemplates2/qquickcontrol_p_p.h +++ b/src/quicktemplates2/qquickcontrol_p_p.h @@ -76,7 +76,9 @@ public: return control->d_func(); } +#if QT_CONFIG(quicktemplates2_multitouch) virtual bool acceptTouch(const QTouchEvent::TouchPoint &point); +#endif virtual void handlePress(const QPointF &point); virtual void handleMove(const QPointF &point); virtual void handleRelease(const QPointF &point); diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp index 7e740ade..bdbfb22d 100644 --- a/src/quicktemplates2/qquickdial.cpp +++ b/src/quicktemplates2/qquickdial.cpp @@ -666,6 +666,7 @@ void QQuickDial::mouseMoveEvent(QMouseEvent *event) QQuickControl::mouseMoveEvent(event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickDial::touchEvent(QTouchEvent *event) { Q_D(QQuickDial); @@ -702,6 +703,7 @@ void QQuickDial::touchEvent(QTouchEvent *event) break; } } +#endif #if QT_CONFIG(wheelevent) void QQuickDial::wheelEvent(QWheelEvent *event) diff --git a/src/quicktemplates2/qquickdial_p.h b/src/quicktemplates2/qquickdial_p.h index 1a6d70fd..959cb154 100644 --- a/src/quicktemplates2/qquickdial_p.h +++ b/src/quicktemplates2/qquickdial_p.h @@ -136,7 +136,9 @@ protected: void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickdrawer.cpp b/src/quicktemplates2/qquickdrawer.cpp index 8159f05e..66c84ea2 100644 --- a/src/quicktemplates2/qquickdrawer.cpp +++ b/src/quicktemplates2/qquickdrawer.cpp @@ -278,6 +278,7 @@ bool QQuickDrawerPrivate::startDrag(QEvent *event) } break; +#if QT_CONFIG(quicktemplates2_multitouch) case QEvent::TouchBegin: case QEvent::TouchUpdate: for (const QTouchEvent::TouchPoint &point : static_cast<QTouchEvent *>(event)->touchPoints()) { @@ -288,6 +289,7 @@ bool QQuickDrawerPrivate::startDrag(QEvent *event) } } break; +#endif default: break; @@ -340,6 +342,7 @@ bool QQuickDrawerPrivate::grabMouse(QQuickItem *item, QMouseEvent *event) return overThreshold; } +#if QT_CONFIG(quicktemplates2_multitouch) bool QQuickDrawerPrivate::grabTouch(QQuickItem *item, QTouchEvent *event) { Q_Q(QQuickDrawer); @@ -385,6 +388,7 @@ bool QQuickDrawerPrivate::grabTouch(QQuickItem *item, QTouchEvent *event) return overThreshold; } +#endif static const qreal openCloseVelocityThreshold = 300; @@ -672,8 +676,10 @@ bool QQuickDrawer::childMouseEventFilter(QQuickItem *child, QEvent *event) { Q_D(QQuickDrawer); switch (event->type()) { +#if QT_CONFIG(quicktemplates2_multitouch) case QEvent::TouchUpdate: return d->grabTouch(child, static_cast<QTouchEvent *>(event)); +#endif case QEvent::MouseMove: return d->grabMouse(child, static_cast<QMouseEvent *>(event)); case QEvent::MouseButtonPress: @@ -695,8 +701,10 @@ bool QQuickDrawer::overlayEvent(QQuickItem *item, QEvent *event) { Q_D(QQuickDrawer); switch (event->type()) { +#if QT_CONFIG(quicktemplates2_multitouch) case QEvent::TouchUpdate: return d->grabTouch(item, static_cast<QTouchEvent *>(event)); +#endif case QEvent::MouseMove: return d->grabMouse(item, static_cast<QMouseEvent *>(event)); default: @@ -705,11 +713,13 @@ bool QQuickDrawer::overlayEvent(QQuickItem *item, QEvent *event) return QQuickPopup::overlayEvent(item, event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickDrawer::touchEvent(QTouchEvent *event) { Q_D(QQuickDrawer); d->grabTouch(d->popupItem, event); } +#endif void QQuickDrawer::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { diff --git a/src/quicktemplates2/qquickdrawer_p.h b/src/quicktemplates2/qquickdrawer_p.h index 9ab1c4ef..3ec007df 100644 --- a/src/quicktemplates2/qquickdrawer_p.h +++ b/src/quicktemplates2/qquickdrawer_p.h @@ -88,7 +88,9 @@ protected: bool childMouseEventFilter(QQuickItem *child, QEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; bool overlayEvent(QQuickItem *item, QEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; diff --git a/src/quicktemplates2/qquickdrawer_p_p.h b/src/quicktemplates2/qquickdrawer_p_p.h index 110aa350..92de9010 100644 --- a/src/quicktemplates2/qquickdrawer_p_p.h +++ b/src/quicktemplates2/qquickdrawer_p_p.h @@ -74,7 +74,9 @@ public: bool startDrag(QEvent *event); bool grabMouse(QQuickItem *item, QMouseEvent *event); +#if QT_CONFIG(quicktemplates2_multitouch) bool grabTouch(QQuickItem *item, QTouchEvent *event); +#endif bool handlePress(QQuickItem* item, const QPointF &point, ulong timestamp) override; bool handleMove(QQuickItem* item, const QPointF &point, ulong timestamp) override; diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index 781bd6da..fa6b88ef 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -806,6 +806,11 @@ void QQuickMenu::keyReleaseEvent(QKeyEvent *event) item->forceActiveFocus(); } +QFont QQuickMenu::defaultFont() const +{ + return QQuickControlPrivate::themeFont(QPlatformTheme::MenuFont); +} + QPalette QQuickMenu::defaultPalette() const { return QQuickControlPrivate::themePalette(QPlatformTheme::MenuPalette); diff --git a/src/quicktemplates2/qquickmenu_p.h b/src/quicktemplates2/qquickmenu_p.h index 5dffa898..04186f1a 100644 --- a/src/quicktemplates2/qquickmenu_p.h +++ b/src/quicktemplates2/qquickmenu_p.h @@ -101,6 +101,7 @@ Q_SIGNALS: Q_REVISION(3) void delegateChanged(); protected: + QFont defaultFont() const override; QPalette defaultPalette() const override; #if QT_CONFIG(accessibility) diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp index 15104808..a4aaa60d 100644 --- a/src/quicktemplates2/qquickoverlay.cpp +++ b/src/quicktemplates2/qquickoverlay.cpp @@ -276,6 +276,7 @@ bool QQuickOverlayPrivate::handleMouseEvent(QQuickItem *source, QMouseEvent *eve return false; } +#if QT_CONFIG(quicktemplates2_multitouch) bool QQuickOverlayPrivate::handleTouchEvent(QQuickItem *source, QTouchEvent *event, QQuickPopup *target) { bool handled = false; @@ -309,6 +310,7 @@ bool QQuickOverlayPrivate::handleTouchEvent(QQuickItem *source, QTouchEvent *eve return handled; } +#endif void QQuickOverlayPrivate::addPopup(QQuickPopup *popup) { @@ -475,11 +477,13 @@ void QQuickOverlay::mouseReleaseEvent(QMouseEvent *event) d->handleMouseEvent(this, event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickOverlay::touchEvent(QTouchEvent *event) { Q_D(QQuickOverlay); d->handleTouchEvent(this, event); } +#endif #if QT_CONFIG(wheelevent) void QQuickOverlay::wheelEvent(QWheelEvent *event) @@ -516,10 +520,12 @@ bool QQuickOverlay::childMouseEventFilter(QQuickItem *item, QEvent *event) // does not have background dimming. if (item == p->dimmer || !p->popupItem->isAncestorOf(item)) { switch (event->type()) { +#if QT_CONFIG(quicktemplates2_multitouch) case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: return d->handleTouchEvent(item, static_cast<QTouchEvent *>(event), popup); +#endif case QEvent::MouseButtonPress: case QEvent::MouseMove: @@ -541,6 +547,7 @@ bool QQuickOverlay::eventFilter(QObject *object, QEvent *event) return false; switch (event->type()) { +#if QT_CONFIG(quicktemplates2_multitouch) case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: @@ -567,10 +574,13 @@ bool QQuickOverlay::eventFilter(QObject *object, QEvent *event) // touch events, to be able to close non-modal popups on release outside. event->accept(); return true; +#endif case QEvent::MouseButtonPress: +#if QT_CONFIG(quicktemplates2_multitouch) // do not emit pressed() twice when mouse events have been synthesized from touch events if (static_cast<QMouseEvent *>(event)->source() == Qt::MouseEventNotSynthesized) +#endif emit pressed(); QQuickWindowPrivate::get(d->window)->handleMouseEvent(static_cast<QMouseEvent *>(event)); @@ -583,8 +593,10 @@ bool QQuickOverlay::eventFilter(QObject *object, QEvent *event) return true; case QEvent::MouseButtonRelease: +#if QT_CONFIG(quicktemplates2_multitouch) // do not emit released() twice when mouse events have been synthesized from touch events if (static_cast<QMouseEvent *>(event)->source() == Qt::MouseEventNotSynthesized) +#endif emit released(); // allow non-modal popups to close on mouse release outside diff --git a/src/quicktemplates2/qquickoverlay_p.h b/src/quicktemplates2/qquickoverlay_p.h index 7d1ff143..ba61c9c9 100644 --- a/src/quicktemplates2/qquickoverlay_p.h +++ b/src/quicktemplates2/qquickoverlay_p.h @@ -87,7 +87,9 @@ protected: void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickoverlay_p_p.h b/src/quicktemplates2/qquickoverlay_p_p.h index 38284332..05177a49 100644 --- a/src/quicktemplates2/qquickoverlay_p_p.h +++ b/src/quicktemplates2/qquickoverlay_p_p.h @@ -76,7 +76,9 @@ public: bool handleRelease(QQuickItem *source, QEvent *event, QQuickPopup *target); bool handleMouseEvent(QQuickItem *source, QMouseEvent *event, QQuickPopup *target = nullptr); +#if QT_CONFIG(quicktemplates2_multitouch) bool handleTouchEvent(QQuickItem *source, QTouchEvent *event, QQuickPopup *target = nullptr); +#endif void addPopup(QQuickPopup *popup); void removePopup(QQuickPopup *popup); diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 840b9f19..9e0015fa 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -299,6 +299,7 @@ bool QQuickPopupPrivate::contains(const QPointF &scenePos) const return popupItem->contains(popupItem->mapFromScene(scenePos)); } +#if QT_CONFIG(quicktemplates2_multitouch) bool QQuickPopupPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) { if (point.id() == touchId) @@ -311,6 +312,7 @@ bool QQuickPopupPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) return false; } +#endif bool QQuickPopupPrivate::blockInput(QQuickItem *item, const QPointF &point) const { @@ -373,6 +375,7 @@ bool QQuickPopupPrivate::handleMouseEvent(QQuickItem *item, QMouseEvent *event) } } +#if QT_CONFIG(quicktemplates2_multitouch) bool QQuickPopupPrivate::handleTouchEvent(QQuickItem *item, QTouchEvent *event) { switch (event->type()) { @@ -418,6 +421,7 @@ bool QQuickPopupPrivate::handleTouchEvent(QQuickItem *item, QTouchEvent *event) return false; } +#endif bool QQuickPopupPrivate::prepareEnterTransition() { @@ -566,13 +570,20 @@ void QQuickPopupPrivate::setWindow(QQuickWindow *newWindow) QQuickOverlayPrivate::get(overlay)->removePopup(q); } + window = newWindow; + if (newWindow) { QQuickOverlay *overlay = QQuickOverlay::overlay(newWindow); if (overlay) QQuickOverlayPrivate::get(overlay)->addPopup(q); + + QQuickControlPrivate *p = QQuickControlPrivate::get(popupItem); + p->resolveFont(); + p->resolvePalette(); + if (QQuickApplicationWindow *appWindow = qobject_cast<QQuickApplicationWindow *>(newWindow)) + p->updateLocale(appWindow->locale(), false); // explicit=false } - window = newWindow; emit q->windowChanged(newWindow); if (complete && visible && window) @@ -1440,12 +1451,6 @@ void QQuickPopup::setParentItem(QQuickItem *parent) if (parent) { QObjectPrivate::connect(parent, &QQuickItem::windowChanged, d, &QQuickPopupPrivate::setWindow); QQuickItemPrivate::get(d->parentItem)->addItemChangeListener(d, QQuickItemPrivate::Destroyed); - - QQuickControlPrivate *p = QQuickControlPrivate::get(d->popupItem); - p->resolveFont(); - p->resolvePalette(); - if (QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(parent->window())) - p->updateLocale(window->locale(), false); // explicit=false } else { close(); } @@ -2053,10 +2058,12 @@ bool QQuickPopup::overlayEvent(QQuickItem *item, QEvent *event) event->accept(); return d->modal; +#if QT_CONFIG(quicktemplates2_multitouch) case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: return d->handleTouchEvent(item, static_cast<QTouchEvent *>(event)); +#endif case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: @@ -2067,6 +2074,7 @@ bool QQuickPopup::overlayEvent(QQuickItem *item, QEvent *event) } } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickPopup::touchEvent(QTouchEvent *event) { Q_D(QQuickPopup); @@ -2078,6 +2086,7 @@ void QQuickPopup::touchUngrabEvent() Q_D(QQuickPopup); d->handleUngrab(); } +#endif #if QT_CONFIG(wheelevent) void QQuickPopup::wheelEvent(QWheelEvent *event) diff --git a/src/quicktemplates2/qquickpopup_p.h b/src/quicktemplates2/qquickpopup_p.h index 065647d5..bf41e7d0 100644 --- a/src/quicktemplates2/qquickpopup_p.h +++ b/src/quicktemplates2/qquickpopup_p.h @@ -362,8 +362,10 @@ protected: virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void mouseUngrabEvent(); virtual bool overlayEvent(QQuickItem *item, QEvent *event); +#if QT_CONFIG(quicktemplates2_multitouch) virtual void touchEvent(QTouchEvent *event); virtual void touchUngrabEvent(); +#endif #if QT_CONFIG(wheelevent) virtual void wheelEvent(QWheelEvent *event); #endif diff --git a/src/quicktemplates2/qquickpopup_p_p.h b/src/quicktemplates2/qquickpopup_p_p.h index fa79003e..857bb6ae 100644 --- a/src/quicktemplates2/qquickpopup_p_p.h +++ b/src/quicktemplates2/qquickpopup_p_p.h @@ -99,7 +99,9 @@ public: bool contains(const QPointF &scenePos) const; +#if QT_CONFIG(quicktemplates2_multitouch) virtual bool acceptTouch(const QTouchEvent::TouchPoint &point); +#endif virtual bool blockInput(QQuickItem *item, const QPointF &point) const; virtual bool handlePress(QQuickItem* item, const QPointF &point, ulong timestamp); @@ -108,7 +110,9 @@ public: virtual void handleUngrab(); bool handleMouseEvent(QQuickItem *item, QMouseEvent *event); +#if QT_CONFIG(quicktemplates2_multitouch) bool handleTouchEvent(QQuickItem *item, QTouchEvent *event); +#endif virtual void reposition(); virtual void resizeOverlay(); diff --git a/src/quicktemplates2/qquickpopupitem.cpp b/src/quicktemplates2/qquickpopupitem.cpp index 8251ad2f..27b800f0 100644 --- a/src/quicktemplates2/qquickpopupitem.cpp +++ b/src/quicktemplates2/qquickpopupitem.cpp @@ -89,6 +89,8 @@ void QQuickPopupItemPrivate::resolveFont() { if (QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(popup->window())) inheritFont(window->font()); + else + inheritFont(themeFont(QPlatformTheme::SystemFont)); } void QQuickPopupItemPrivate::resolvePalette() @@ -237,6 +239,7 @@ void QQuickPopupItem::mouseUngrabEvent() d->popup->mouseUngrabEvent(); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickPopupItem::touchEvent(QTouchEvent *event) { Q_D(QQuickPopupItem); @@ -248,6 +251,7 @@ void QQuickPopupItem::touchUngrabEvent() Q_D(QQuickPopupItem); d->popup->touchUngrabEvent(); } +#endif #if QT_CONFIG(wheelevent) void QQuickPopupItem::wheelEvent(QWheelEvent *event) diff --git a/src/quicktemplates2/qquickpopupitem_p_p.h b/src/quicktemplates2/qquickpopupitem_p_p.h index 00ccd78f..97f6415f 100644 --- a/src/quicktemplates2/qquickpopupitem_p_p.h +++ b/src/quicktemplates2/qquickpopupitem_p_p.h @@ -79,8 +79,10 @@ protected: void mouseReleaseEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void mouseUngrabEvent() override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; void touchUngrabEvent() override; +#endif #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp index 83317902..c1cf13db 100644 --- a/src/quicktemplates2/qquickrangeslider.cpp +++ b/src/quicktemplates2/qquickrangeslider.cpp @@ -328,7 +328,9 @@ public: QQuickRangeSliderNode *pressedNode(int touchId = -1) const; +#if QT_CONFIG(quicktemplates2_multitouch) bool acceptTouch(const QTouchEvent::TouchPoint &point) override; +#endif void handlePress(const QPointF &point) override; void handleMove(const QPointF &point) override; void handleRelease(const QPointF &point) override; @@ -397,6 +399,7 @@ QQuickRangeSliderNode *QQuickRangeSliderPrivate::pressedNode(int touchId) const return nullptr; } +#if QT_CONFIG(quicktemplates2_multitouch) bool QQuickRangeSliderPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) { int firstId = QQuickRangeSliderNodePrivate::get(first)->touchId; @@ -409,6 +412,7 @@ bool QQuickRangeSliderPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) return false; } +#endif void QQuickRangeSliderPrivate::handlePress(const QPointF &point) { @@ -1018,6 +1022,7 @@ void QQuickRangeSlider::mouseMoveEvent(QMouseEvent *event) QQuickControl::mouseMoveEvent(event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickRangeSlider::touchEvent(QTouchEvent *event) { Q_D(QQuickRangeSlider); @@ -1055,6 +1060,7 @@ void QQuickRangeSlider::touchEvent(QTouchEvent *event) break; } } +#endif void QQuickRangeSlider::mirrorChange() { diff --git a/src/quicktemplates2/qquickrangeslider_p.h b/src/quicktemplates2/qquickrangeslider_p.h index 3d4ebb2b..82d61b37 100644 --- a/src/quicktemplates2/qquickrangeslider_p.h +++ b/src/quicktemplates2/qquickrangeslider_p.h @@ -122,7 +122,9 @@ protected: void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif void mirrorChange() override; void componentComplete() override; diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp index e54e95cd..b5bf5e52 100644 --- a/src/quicktemplates2/qquickslider.cpp +++ b/src/quicktemplates2/qquickslider.cpp @@ -665,6 +665,7 @@ void QQuickSlider::mouseMoveEvent(QMouseEvent *event) QQuickControl::mouseMoveEvent(event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickSlider::touchEvent(QTouchEvent *event) { Q_D(QQuickSlider); @@ -702,6 +703,7 @@ void QQuickSlider::touchEvent(QTouchEvent *event) break; } } +#endif #if QT_CONFIG(wheelevent) void QQuickSlider::wheelEvent(QWheelEvent *event) diff --git a/src/quicktemplates2/qquickslider_p.h b/src/quicktemplates2/qquickslider_p.h index cb441ddd..21a880f5 100644 --- a/src/quicktemplates2/qquickslider_p.h +++ b/src/quicktemplates2/qquickslider_p.h @@ -139,7 +139,9 @@ protected: void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickswitch.cpp b/src/quicktemplates2/qquickswitch.cpp index ae447de8..da1f0408 100644 --- a/src/quicktemplates2/qquickswitch.cpp +++ b/src/quicktemplates2/qquickswitch.cpp @@ -187,6 +187,7 @@ void QQuickSwitch::mouseMoveEvent(QMouseEvent *event) QQuickAbstractButton::mouseMoveEvent(event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickSwitch::touchEvent(QTouchEvent *event) { Q_D(QQuickSwitch); @@ -200,6 +201,7 @@ void QQuickSwitch::touchEvent(QTouchEvent *event) } QQuickAbstractButton::touchEvent(event); } +#endif void QQuickSwitch::mirrorChange() { diff --git a/src/quicktemplates2/qquickswitch_p.h b/src/quicktemplates2/qquickswitch_p.h index ebcfea53..0faaf114 100644 --- a/src/quicktemplates2/qquickswitch_p.h +++ b/src/quicktemplates2/qquickswitch_p.h @@ -74,7 +74,9 @@ Q_SIGNALS: protected: void mouseMoveEvent(QMouseEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif void mirrorChange() override; diff --git a/src/quicktemplates2/qquickswitchdelegate.cpp b/src/quicktemplates2/qquickswitchdelegate.cpp index 9bce76db..d8ce8096 100644 --- a/src/quicktemplates2/qquickswitchdelegate.cpp +++ b/src/quicktemplates2/qquickswitchdelegate.cpp @@ -184,6 +184,7 @@ void QQuickSwitchDelegate::mouseMoveEvent(QMouseEvent *event) QQuickItemDelegate::mouseMoveEvent(event); } +#if QT_CONFIG(quicktemplates2_multitouch) void QQuickSwitchDelegate::touchEvent(QTouchEvent *event) { Q_D(QQuickSwitchDelegate); @@ -197,6 +198,7 @@ void QQuickSwitchDelegate::touchEvent(QTouchEvent *event) } QQuickItemDelegate::touchEvent(event); } +#endif QFont QQuickSwitchDelegate::defaultFont() const { diff --git a/src/quicktemplates2/qquickswitchdelegate_p.h b/src/quicktemplates2/qquickswitchdelegate_p.h index e3e0804a..973ec21d 100644 --- a/src/quicktemplates2/qquickswitchdelegate_p.h +++ b/src/quicktemplates2/qquickswitchdelegate_p.h @@ -74,7 +74,9 @@ Q_SIGNALS: protected: void mouseMoveEvent(QMouseEvent *event) override; +#if QT_CONFIG(quicktemplates2_multitouch) void touchEvent(QTouchEvent *event) override; +#endif QFont defaultFont() const override; void mirrorChange() override; diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 6de92b4f..9295fc21 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -7,6 +7,7 @@ SUBDIRS += \ cursor \ drawer \ focus \ + font \ menu \ palette \ platform \ @@ -27,7 +28,7 @@ SUBDIRS += \ # QTBUG-60268 boot2qt: SUBDIRS -= applicationwindow calendar controls cursor \ - drawer focus menu platform palette popup \ + drawer focus font menu platform palette popup \ qquickmaterialstyle qquickmaterialstyleconf \ qquickuniversalstyle qquickuniversalstyleconf \ snippets diff --git a/tests/auto/font/data/font-appwindow-custom.qml b/tests/auto/font/data/font-appwindow-custom.qml new file mode 100644 index 00000000..3d06f64a --- /dev/null +++ b/tests/auto/font/data/font-appwindow-custom.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + font.capitalization: Font.AllUppercase + font.family: "Courier" + font.italic: true + font.pixelSize: 60 + font.strikeout: true + font.underline: true + font.weight: Font.DemiBold +} diff --git a/tests/auto/font/data/font-appwindow-default.qml b/tests/auto/font/data/font-appwindow-default.qml new file mode 100644 index 00000000..02643c77 --- /dev/null +++ b/tests/auto/font/data/font-appwindow-default.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { +} diff --git a/tests/auto/font/data/font-control-custom.qml b/tests/auto/font/data/font-control-custom.qml new file mode 100644 index 00000000..92136e86 --- /dev/null +++ b/tests/auto/font/data/font-control-custom.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +Control { + font.capitalization: Font.AllUppercase + font.family: "Courier" + font.italic: true + font.pixelSize: 60 + font.strikeout: true + font.underline: true + font.weight: Font.DemiBold +} diff --git a/tests/auto/font/data/font-control-default.qml b/tests/auto/font/data/font-control-default.qml new file mode 100644 index 00000000..552c77d8 --- /dev/null +++ b/tests/auto/font/data/font-control-default.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +Control { +} diff --git a/tests/auto/font/data/font-popup-custom.qml b/tests/auto/font/data/font-popup-custom.qml new file mode 100644 index 00000000..e8363a81 --- /dev/null +++ b/tests/auto/font/data/font-popup-custom.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +Popup { + font.capitalization: Font.AllUppercase + font.family: "Courier" + font.italic: true + font.pixelSize: 60 + font.strikeout: true + font.underline: true + font.weight: Font.DemiBold +} diff --git a/tests/auto/font/data/font-popup-default.qml b/tests/auto/font/data/font-popup-default.qml new file mode 100644 index 00000000..26c522c1 --- /dev/null +++ b/tests/auto/font/data/font-popup-default.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +Popup { +} diff --git a/tests/auto/font/data/inheritance-childcontrol.qml b/tests/auto/font/data/inheritance-childcontrol.qml new file mode 100644 index 00000000..8a04dd52 --- /dev/null +++ b/tests/auto/font/data/inheritance-childcontrol.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property alias control: control + property alias child: child + property alias grandChild: grandChild + + Item { + Control { + id: control + + Control { + id: child + + Item { + Control { + id: grandChild + } + } + } + } + } +} diff --git a/tests/auto/font/data/inheritance-childpopup.qml b/tests/auto/font/data/inheritance-childpopup.qml new file mode 100644 index 00000000..ca5cdc82 --- /dev/null +++ b/tests/auto/font/data/inheritance-childpopup.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property alias control: control + property alias child: child + property alias grandChild: grandChild + + Item { + Popup { + id: control + + Control { + id: child + + Item { + Control { + id: grandChild + } + } + } + } + } +} diff --git a/tests/auto/font/data/inheritance-control.qml b/tests/auto/font/data/inheritance-control.qml new file mode 100644 index 00000000..ac9c940a --- /dev/null +++ b/tests/auto/font/data/inheritance-control.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property alias control: control + property alias child: child + property alias grandChild: grandChild + + Control { + id: control + + Control { + id: child + + Item { + Control { + id: grandChild + } + } + } + } +} diff --git a/tests/auto/font/data/inheritance-dynamicchildcontrol.qml b/tests/auto/font/data/inheritance-dynamicchildcontrol.qml new file mode 100644 index 00000000..98c0f696 --- /dev/null +++ b/tests/auto/font/data/inheritance-dynamicchildcontrol.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property Control control + property Control child + property Control grandChild + + Item { + id: childItem + } + + Component { + id: component + Control { } + } + + Component.onCompleted: { + control = component.createObject(childItem) + child = component.createObject(control) + grandChild = component.createObject(child) + } +} diff --git a/tests/auto/font/data/inheritance-dynamicchildpopup.qml b/tests/auto/font/data/inheritance-dynamicchildpopup.qml new file mode 100644 index 00000000..ef4fe60c --- /dev/null +++ b/tests/auto/font/data/inheritance-dynamicchildpopup.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property Popup control + property Control child + property Control grandChild + + Item { + id: childItem + } + + Component { + id: popupComponent + Popup { } + } + + Component { + id: controlComponent + Control { } + } + + Component.onCompleted: { + control = popupComponent.createObject(childItem) + child = controlComponent.createObject(control.contentItem) + grandChild = controlComponent.createObject(child) + } +} diff --git a/tests/auto/font/data/inheritance-dynamiccontrol.qml b/tests/auto/font/data/inheritance-dynamiccontrol.qml new file mode 100644 index 00000000..a261d600 --- /dev/null +++ b/tests/auto/font/data/inheritance-dynamiccontrol.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property Control control + property Control child + property Control grandChild + + Component { + id: component + Control { } + } + + Component.onCompleted: { + control = component.createObject(contentItem) + child = component.createObject(control) + grandChild = component.createObject(child) + } +} diff --git a/tests/auto/font/data/inheritance-dynamicpopup.qml b/tests/auto/font/data/inheritance-dynamicpopup.qml new file mode 100644 index 00000000..f0d567da --- /dev/null +++ b/tests/auto/font/data/inheritance-dynamicpopup.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property Popup control + property Control child + property Control grandChild + + Component { + id: popupComponent + Popup { } + } + + Component { + id: controlComponent + Control { } + } + + Component.onCompleted: { + control = popupComponent.createObject(window) + child = controlComponent.createObject(control.contentItem) + grandChild = controlComponent.createObject(child) + } +} diff --git a/tests/auto/font/data/inheritance-popup.qml b/tests/auto/font/data/inheritance-popup.qml new file mode 100644 index 00000000..b8415e63 --- /dev/null +++ b/tests/auto/font/data/inheritance-popup.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** 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:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +ApplicationWindow { + id: window + + property alias control: control + property alias child: child + property alias grandChild: grandChild + + Popup { + id: control + + Control { + id: child + + Item { + Control { + id: grandChild + } + } + } + } +} diff --git a/tests/auto/font/font.pro b/tests/auto/font/font.pro new file mode 100644 index 00000000..f6ccefd3 --- /dev/null +++ b/tests/auto/font/font.pro @@ -0,0 +1,14 @@ +CONFIG += testcase +TARGET = tst_font +SOURCES += tst_font.cpp + +macos:CONFIG -= app_bundle + +QT += core-private gui-private qml-private quick-private testlib quicktemplates2-private quickcontrols2-private + +include (../shared/util.pri) + +TESTDATA = data/* + +OTHER_FILES += \ + data/*.qml diff --git a/tests/auto/font/tst_font.cpp b/tests/auto/font/tst_font.cpp new file mode 100644 index 00000000..6f04a8c0 --- /dev/null +++ b/tests/auto/font/tst_font.cpp @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/qtest.h> +#include "../shared/visualtestutil.h" + +#include <QtGui/qfont.h> +#include <QtGui/qpa/qplatformtheme.h> +#include <QtGui/private/qguiapplication_p.h> +#include <QtQml/qqmlengine.h> +#include <QtQml/qqmlcomponent.h> +#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h> +#include <QtQuickTemplates2/private/qquickcontrol_p.h> +#include <QtQuickTemplates2/private/qquickpopup_p.h> +#include <QtQuickControls2/private/qquickproxytheme_p.h> + +using namespace QQuickVisualTestUtil; + +class tst_font : public QQmlDataTest +{ + Q_OBJECT + +private slots: + void font_data(); + void font(); + + void inheritance_data(); + void inheritance(); + + void defaultFont_data(); + void defaultFont(); +}; + +void tst_font::font_data() +{ + QTest::addColumn<QString>("testFile"); + QTest::addColumn<QFont>("expectedFont"); + + QTest::newRow("Control") << "font-control-default.qml" << QFont(); + QTest::newRow("AppWindow") << "font-appwindow-default.qml" << QFont(); + QTest::newRow("Popup") << "font-popup-default.qml" << QFont(); + + QFont customFont; + customFont.setCapitalization(QFont::AllUppercase); + customFont.setFamily("Courier"); + customFont.setItalic(true); + customFont.setPixelSize(60); + customFont.setStrikeOut(true); + customFont.setUnderline(true); + customFont.setWeight(QFont::DemiBold); + + QTest::newRow("Control:custom") << "font-control-custom.qml" << customFont; + QTest::newRow("AppWindow:custom") << "font-appwindow-custom.qml" << customFont; + QTest::newRow("Popup:custom") << "font-popup-custom.qml" << customFont; +} + +void tst_font::font() +{ + QFETCH(QString, testFile); + QFETCH(QFont, expectedFont); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl(testFile)); + + QScopedPointer<QObject> object(component.create()); + QVERIFY2(!object.isNull(), qPrintable(component.errorString())); + + QVariant var = object->property("font"); + QVERIFY(var.isValid()); + + QFont actualFont = var.value<QFont>(); + QCOMPARE(actualFont, expectedFont); +} + +void tst_font::inheritance_data() +{ + QTest::addColumn<QString>("testFile"); + + QTest::newRow("Control") << "inheritance-control.qml"; + QTest::newRow("Child Control") << "inheritance-childcontrol.qml"; + QTest::newRow("Dynamic Control") << "inheritance-dynamiccontrol.qml"; + QTest::newRow("Dynamic Child Control") << "inheritance-dynamicchildcontrol.qml"; + + QTest::newRow("Popup") << "inheritance-popup.qml"; + QTest::newRow("Child Popup") << "inheritance-childpopup.qml"; + QTest::newRow("Dynamic Popup") << "inheritance-dynamicpopup.qml"; + QTest::newRow("Dynamic Child Popup") << "inheritance-dynamicchildpopup.qml"; +} + +void tst_font::inheritance() +{ + QFETCH(QString, testFile); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl(testFile)); + + QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create())); + QVERIFY2(!window.isNull(), qPrintable(component.errorString())); + + QObject *control = window->property("control").value<QObject *>(); + QObject *child = window->property("child").value<QObject *>(); + QObject *grandChild = window->property("grandChild").value<QObject *>(); + QVERIFY(control && child && grandChild); + + QCOMPARE(window->font(), QFont()); + + QCOMPARE(control->property("font").value<QFont>(), QFont()); + QCOMPARE(child->property("font").value<QFont>(), QFont()); + QCOMPARE(grandChild->property("font").value<QFont>(), QFont()); + + QFont childFont; + childFont.setFamily("Arial"); + childFont.setPixelSize(80); + childFont.setItalic(true); + child->setProperty("font", childFont); + QCOMPARE(child->property("font").value<QFont>(), childFont); + QCOMPARE(grandChild->property("font").value<QFont>(), childFont); + + QFont grandChildFont(childFont); + grandChildFont.setFamily("Times New Roman"); + grandChildFont.setUnderline(true); + grandChild->setProperty("font", grandChildFont); + QCOMPARE(child->property("font").value<QFont>(), childFont); + QCOMPARE(grandChild->property("font").value<QFont>(), grandChildFont); + + QFont windowFont; + windowFont.setWeight(QFont::Thin); + window->setFont(windowFont); + QCOMPARE(window->font(), windowFont); + QCOMPARE(control->property("font").value<QFont>(), windowFont); + + childFont.setWeight(QFont::Thin); + QCOMPARE(child->property("font").value<QFont>(), childFont); + + grandChildFont.setWeight(QFont::Thin); + QCOMPARE(grandChild->property("font").value<QFont>(), grandChildFont); + + child->setProperty("font", QVariant()); + QCOMPARE(child->property("font").value<QFont>(), windowFont); + QCOMPARE(grandChild->property("font").value<QFont>(), grandChildFont); + + grandChild->setProperty("font", QVariant()); + QCOMPARE(grandChild->property("font").value<QFont>(), windowFont); +} + +class TestFontTheme : public QQuickProxyTheme +{ +public: + TestFontTheme(QPlatformTheme *theme) : QQuickProxyTheme(theme) + { + std::fill(fonts, fonts + QPlatformTheme::NFonts, static_cast<QFont *>(0)); + + for (int i = QPlatformTheme::SystemFont; i < QPlatformTheme::NFonts; ++i) { + QFont font = QFont(); + font.setPixelSize(i + 10); + fonts[i] = new QFont(font); + } + + QGuiApplicationPrivate::platform_theme = this; + } + + const QFont *font(Font type = SystemFont) const override + { + return fonts[type]; + } + +private: + QFont *fonts[QPlatformTheme::NFonts]; +}; + +Q_DECLARE_METATYPE(QPlatformTheme::Font) + +void tst_font::defaultFont_data() +{ + QTest::addColumn<QString>("control"); + QTest::addColumn<QPlatformTheme::Font>("fontType"); + + QTest::newRow("AbstractButton") << "AbstractButton" << QPlatformTheme::SystemFont; + QTest::newRow("ApplicationWindow") << "ApplicationWindow" << QPlatformTheme::SystemFont; + QTest::newRow("Button") << "Button" << QPlatformTheme::PushButtonFont; + QTest::newRow("CheckBox") << "CheckBox" << QPlatformTheme::CheckBoxFont; + QTest::newRow("CheckDelegate") << "CheckDelegate" << QPlatformTheme::ListViewFont; + QTest::newRow("ComboBox") << "ComboBox" << QPlatformTheme::ComboMenuItemFont; + QTest::newRow("Container") << "Container" << QPlatformTheme::SystemFont; + QTest::newRow("Control") << "Control" << QPlatformTheme::SystemFont; + QTest::newRow("Dial") << "Dial" << QPlatformTheme::SystemFont; + QTest::newRow("Dialog") << "Dialog" << QPlatformTheme::SystemFont; + QTest::newRow("DialogButtonBox") << "DialogButtonBox" << QPlatformTheme::SystemFont; + QTest::newRow("Drawer") << "Drawer" << QPlatformTheme::SystemFont; + QTest::newRow("Frame") << "Frame" << QPlatformTheme::SystemFont; + QTest::newRow("GroupBox") << "GroupBox" << QPlatformTheme::GroupBoxTitleFont; + QTest::newRow("ItemDelegate") << "ItemDelegate" << QPlatformTheme::ItemViewFont; + QTest::newRow("Label") << "Label" << QPlatformTheme::LabelFont; + QTest::newRow("Menu") << "Menu" << QPlatformTheme::MenuFont; + QTest::newRow("MenuItem") << "MenuItem" << QPlatformTheme::MenuItemFont; + QTest::newRow("MenuSeparator") << "MenuSeparator" << QPlatformTheme::SystemFont; + QTest::newRow("Page") << "Page" << QPlatformTheme::SystemFont; + QTest::newRow("Pane") << "Pane" << QPlatformTheme::SystemFont; + QTest::newRow("Popup") << "Popup" << QPlatformTheme::SystemFont; + QTest::newRow("ProgressBar") << "ProgressBar" << QPlatformTheme::SystemFont; + QTest::newRow("RadioButton") << "RadioButton" << QPlatformTheme::RadioButtonFont; + QTest::newRow("RadioDelegate") << "RadioDelegate" << QPlatformTheme::ListViewFont; + QTest::newRow("RangeSlider") << "RangeSlider" << QPlatformTheme::SystemFont; + QTest::newRow("RoundButton") << "RoundButton" << QPlatformTheme::PushButtonFont; + QTest::newRow("ScrollBar") << "ScrollBar" << QPlatformTheme::SystemFont; + QTest::newRow("ScrollIndicator") << "ScrollIndicator" << QPlatformTheme::SystemFont; + QTest::newRow("Slider") << "Slider" << QPlatformTheme::SystemFont; + QTest::newRow("SpinBox") << "SpinBox" << QPlatformTheme::EditorFont; + QTest::newRow("SwipeDelegate") << "SwipeDelegate" << QPlatformTheme::ListViewFont; + QTest::newRow("Switch") << "Switch" << QPlatformTheme::SystemFont; // ### TODO: add QPlatformTheme::SwitchFont + QTest::newRow("SwitchDelegate") << "SwitchDelegate" << QPlatformTheme::ListViewFont; + QTest::newRow("TabBar") << "TabBar" << QPlatformTheme::SystemFont; + QTest::newRow("TabButton") << "TabButton" << QPlatformTheme::TabButtonFont; + QTest::newRow("TextArea") << "TextArea" << QPlatformTheme::EditorFont; + QTest::newRow("TextField") << "TextField" << QPlatformTheme::EditorFont; + QTest::newRow("ToolBar") << "ToolBar" << QPlatformTheme::SystemFont; + QTest::newRow("ToolButton") << "ToolButton" << QPlatformTheme::ToolButtonFont; + QTest::newRow("ToolSeparator") << "ToolSeparator" << QPlatformTheme::SystemFont; + QTest::newRow("ToolTip") << "ToolTip" << QPlatformTheme::TipLabelFont; + QTest::newRow("Tumbler") << "Tumbler" << QPlatformTheme::SystemFont; +} + +void tst_font::defaultFont() +{ + QFETCH(QString, control); + QFETCH(QPlatformTheme::Font, fontType); + + TestFontTheme theme(QGuiApplicationPrivate::platform_theme); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData(QString("import QtQuick.Controls 2.2; %1 { }").arg(control).toUtf8(), QUrl()); + + QScopedPointer<QObject> object(component.create()); + QVERIFY2(!object.isNull(), qPrintable(component.errorString())); + + QVariant var = object->property("font"); + QVERIFY(var.isValid()); + + const QFont *expectedFont = theme.font(fontType); + QVERIFY(expectedFont); + + QFont actualFont = var.value<QFont>(); + + if (actualFont != *expectedFont) { + qDebug() << QTest::currentDataTag() << actualFont << *expectedFont; + } + + QCOMPARE(actualFont, *expectedFont); +} + +QTEST_MAIN(tst_font) + +#include "tst_font.moc" diff --git a/tests/auto/qquickstyle/data/DummyStyle/Button.qml b/tests/auto/qquickstyle/data/DummyStyle/Button.qml new file mode 100644 index 00000000..5b08222c --- /dev/null +++ b/tests/auto/qquickstyle/data/DummyStyle/Button.qml @@ -0,0 +1,2 @@ +import QtQuick.Templates 2.0 as T +T.Button { } diff --git a/tests/auto/qquickstyle/data/designer/ButtonSpecifics.qml b/tests/auto/qquickstyle/data/designer/ButtonSpecifics.qml new file mode 100644 index 00000000..9faaa8b7 --- /dev/null +++ b/tests/auto/qquickstyle/data/designer/ButtonSpecifics.qml @@ -0,0 +1,3 @@ +import HelperWidgets 2.0 + +ButtonSection { } diff --git a/tests/auto/qquickstyle/data/dummy.dSYM/empty b/tests/auto/qquickstyle/data/dummy.dSYM/empty new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/auto/qquickstyle/data/dummy.dSYM/empty diff --git a/tests/auto/qquickstyle/qquickstyle.pro b/tests/auto/qquickstyle/qquickstyle.pro index 10ca8500..e56ee854 100644 --- a/tests/auto/qquickstyle/qquickstyle.pro +++ b/tests/auto/qquickstyle/qquickstyle.pro @@ -6,3 +6,5 @@ macos:CONFIG -= app_bundle QT += quickcontrols2 testlib QT_PRIVATE += core-private gui-private quickcontrols2-private + +TESTDATA = $$PWD/data/* diff --git a/tests/auto/qquickstyle/tst_qquickstyle.cpp b/tests/auto/qquickstyle/tst_qquickstyle.cpp index 3487a21e..1ce2a034 100644 --- a/tests/auto/qquickstyle/tst_qquickstyle.cpp +++ b/tests/auto/qquickstyle/tst_qquickstyle.cpp @@ -97,9 +97,22 @@ void tst_QQuickStyle::environmentVariables() void tst_QQuickStyle::availableStyles() { - QStringList styles = QQuickStyle::availableStyles(); + QString path = QFINDTESTDATA("data"); + QVERIFY(!path.isEmpty()); + qputenv("QT_QUICK_CONTROLS_STYLE_PATH", path.toLocal8Bit()); + + QStringList paths = QQuickStylePrivate::stylePaths(); + QVERIFY(paths.contains(path)); + + const QStringList styles = QQuickStyle::availableStyles(); QVERIFY(!styles.isEmpty()); QCOMPARE(styles.first(), QString("Default")); + QVERIFY(!styles.contains("designer")); + + // QTBUG-60973 + for (const QString &style : styles) { + QVERIFY2(!style.endsWith(".dSYM"), qPrintable(style)); + } } QTEST_MAIN(tst_QQuickStyle) |