Font matching by font stylename
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Wed, 13 May 2015 13:31:37 +0000 (15:31 +0200)
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Mon, 10 Aug 2015 08:55:06 +0000 (08:55 +0000)
Some fonts may have styles that does not directly match to QFont
properties. To support those QFontDatabase supports matching by style
name. This patch exposes that to QML.

Change-Id: I9896f2e3d9f6b56fb51f5694b018b456bcd05ed6
Task-number: QTBUG-30851
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
src/imports/qtquick2/plugins.qmltypes
src/quick/items/qquicktext.cpp
src/quick/items/qquicktextedit.cpp
src/quick/items/qquicktextinput.cpp
src/quick/util/qquickglobal.cpp
src/quick/util/qquickvaluetypes.cpp
src/quick/util/qquickvaluetypes_p.h

index d98e9e6981732df80c569e5c46a996fd3d3e5177..050d0f78cd016d195c9be33bd8b185241dee81ef 100644 (file)
@@ -1728,6 +1728,7 @@ Module {
             }
         }
         Property { name: "family"; type: "string" }
+        Property { name: "styleName"; type: "string" }
         Property { name: "bold"; type: "bool" }
         Property { name: "weight"; type: "FontWeight" }
         Property { name: "italic"; type: "bool" }
index 2475d19c8dfdb98cbf43d8d10f01269c2bda390c..a91e6b47c27fa1a0b146c8e0214a23be174095e3 100644 (file)
@@ -1443,6 +1443,16 @@ QQuickText::~QQuickText()
     If the family isn't available a family will be set using the font matching algorithm.
 */
 
+/*!
+    \qmlproperty string QtQuick::Text::font.styleName
+    \since 5.6
+
+    Sets the style name of the font.
+
+    The style name is case insensitive. If set, the font will be matched against style name instead
+    of the font properties \l weight, \l bold and \l italic.
+*/
+
 /*!
     \qmlproperty bool QtQuick::Text::font.bold
 
index 2887dad8ce6cc9f59f310e3230b65e1b365f1557..cf7e91ffec10963fae22dba57c74d7012417e6e5 100644 (file)
@@ -205,6 +205,17 @@ QString QQuickTextEdit::text() const
     If the family isn't available a family will be set using the font matching algorithm.
 */
 
+/*!
+    \qmlproperty string QtQuick::TextEdit::font.styleName
+    \since 5.6
+
+    Sets the style name of the font.
+
+    The style name is case insensitive. If set, the font will be matched against style name instead
+    of the font properties \l weight, \l bold and \l italic.
+*/
+
+
 /*!
     \qmlproperty bool QtQuick::TextEdit::font.bold
 
index b458f80ce77c5cd663e753f9cfbb833861066629..31549451ab356a0c6b4991dc6b3500f20124b338 100644 (file)
@@ -228,6 +228,16 @@ QString QQuickTextInputPrivate::realText() const
     If the family isn't available a family will be set using the font matching algorithm.
 */
 
+/*!
+    \qmlproperty string QtQuick::TextInput::font.styleName
+    \since 5.6
+
+    Sets the style name of the font.
+
+    The style name is case insensitive. If set, the font will be matched against style name instead
+    of the font properties \l weight, \l bold and \l italic.
+*/
+
 /*!
     \qmlproperty bool QtQuick::TextInput::font.bold
 
index 6aa7bedc5b8c5faf7742638168fa9a89ad68de9d..0680a49d6d9e02f258d36b67e7a9ad26b6f91191 100644 (file)
@@ -285,6 +285,7 @@ public:
         QV4::ScopedValue vbold(scope, obj->get((s = v4->newString(QStringLiteral("bold")))));
         QV4::ScopedValue vcap(scope, obj->get((s = v4->newString(QStringLiteral("capitalization")))));
         QV4::ScopedValue vfam(scope, obj->get((s = v4->newString(QStringLiteral("family")))));
+        QV4::ScopedValue vstyle(scope, obj->get((s = v4->newString(QStringLiteral("styleName")))));
         QV4::ScopedValue vital(scope, obj->get((s = v4->newString(QStringLiteral("italic")))));
         QV4::ScopedValue vlspac(scope, obj->get((s = v4->newString(QStringLiteral("letterSpacing")))));
         QV4::ScopedValue vpixsz(scope, obj->get((s = v4->newString(QStringLiteral("pixelSize")))));
@@ -307,6 +308,10 @@ public:
             retn.setFamily(vfam->toQString());
             if (ok) *ok = true;
         }
+        if (vstyle->isString()) {
+            retn.setStyleName(vstyle->toQString());
+            if (ok) *ok = true;
+        }
         if (vital->isBoolean()) {
             retn.setItalic(vital->booleanValue());
             if (ok) *ok = true;
index fef6dfd1d0e3360d1ae6f9be16a7528ba78256ba..1f0d54e4e740df20a49bf4df8bbda58ec9640220 100644 (file)
@@ -533,6 +533,16 @@ void QQuickFontValueType::setFamily(const QString &family)
     v.setFamily(family);
 }
 
+QString QQuickFontValueType::styleName() const
+{
+    return v.styleName();
+}
+
+void QQuickFontValueType::setStyleName(const QString &style)
+{
+    v.setStyleName(style);
+}
+
 bool QQuickFontValueType::bold() const
 {
     return v.bold();
index 1436d8e3102e5ac38fc4340a113d29c34ef7cd46..7a2e8888b75c45db8ce7a903a40661d713dbc0ff 100644 (file)
@@ -268,6 +268,7 @@ class QQuickFontValueType
     Q_GADGET
 
     Q_PROPERTY(QString family READ family WRITE setFamily FINAL)
+    Q_PROPERTY(QString styleName READ styleName WRITE setStyleName FINAL)
     Q_PROPERTY(bool bold READ bold WRITE setBold FINAL)
     Q_PROPERTY(FontWeight weight READ weight WRITE setWeight FINAL)
     Q_PROPERTY(bool italic READ italic WRITE setItalic FINAL)
@@ -303,6 +304,9 @@ public:
     QString family() const;
     void setFamily(const QString &);
 
+    QString styleName() const;
+    void setStyleName(const QString &);
+
     bool bold() const;
     void setBold(bool b);