diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2017-07-03 11:53:44 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2017-08-25 13:57:00 +0000 |
commit | ff085e2591e8257c373db1c52475b9b54c3da56b (patch) | |
tree | eb425d918509b25d2ad652d23a47bea1be6d8037 /src/quick/util | |
parent | d14943f86e758974bcbdd1bcbc20bd2b085970bc (diff) |
Add property to disable shaping on fonts
Major performance improvements can be gained if you know for sure
your text does not require any shaping features. This patch adds
Qt Quick support for the QFont::PreferNoShaping flag (though as a
boolean property to work better with property bindings).
[ChangeLog][QtQuick][Text] Added "font.preferShaping" property to
Text, TextEdit and TextInput. This makes it possible to improve
performance at the expense of some cosmetic font features.
Task-number: QTBUG-56728
Change-Id: Ib4e23d5b21b9d4929562df521347285b2586a62e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/quick/util')
-rw-r--r-- | src/quick/util/qquickglobal.cpp | 8 | ||||
-rw-r--r-- | src/quick/util/qquickvaluetypes.cpp | 13 | ||||
-rw-r--r-- | src/quick/util/qquickvaluetypes_p.h | 4 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/quick/util/qquickglobal.cpp b/src/quick/util/qquickglobal.cpp index 6df23cdff5..14ead56740 100644 --- a/src/quick/util/qquickglobal.cpp +++ b/src/quick/util/qquickglobal.cpp @@ -303,6 +303,7 @@ public: QV4::ScopedValue vwspac(scope, obj->get((s = v4->newString(QStringLiteral("wordSpacing"))))); QV4::ScopedValue vhint(scope, obj->get((s = v4->newString(QStringLiteral("hintingPreference"))))); QV4::ScopedValue vkerning(scope, obj->get((s = v4->newString(QStringLiteral("kerning"))))); + QV4::ScopedValue vshaping(scope, obj->get((s = v4->newString(QStringLiteral("preferShaping"))))); // pull out the values, set ok to true if at least one valid field is given. if (vbold->isBoolean()) { @@ -361,6 +362,13 @@ public: retn.setKerning(vkerning->booleanValue()); if (ok) *ok = true; } + if (vshaping->isBoolean()) { + bool enable = vshaping->booleanValue(); + if (enable) + retn.setStyleStrategy(static_cast<QFont::StyleStrategy>(retn.styleStrategy() & ~QFont::PreferNoShaping)); + else + retn.setStyleStrategy(static_cast<QFont::StyleStrategy>(retn.styleStrategy() | QFont::PreferNoShaping)); + } return retn; } diff --git a/src/quick/util/qquickvaluetypes.cpp b/src/quick/util/qquickvaluetypes.cpp index bc4a72b6ea..e4a03f3b52 100644 --- a/src/quick/util/qquickvaluetypes.cpp +++ b/src/quick/util/qquickvaluetypes.cpp @@ -767,6 +767,19 @@ void QQuickFontValueType::setKerning(bool b) v.setKerning(b); } +bool QQuickFontValueType::preferShaping() const +{ + return (v.styleStrategy() & QFont::PreferNoShaping) == 0; +} + +void QQuickFontValueType::setPreferShaping(bool enable) +{ + if (enable) + v.setStyleStrategy(static_cast<QFont::StyleStrategy>(v.styleStrategy() & ~QFont::PreferNoShaping)); + else + v.setStyleStrategy(static_cast<QFont::StyleStrategy>(v.styleStrategy() | QFont::PreferNoShaping)); +} + QT_END_NAMESPACE #include "moc_qquickvaluetypes_p.cpp" diff --git a/src/quick/util/qquickvaluetypes_p.h b/src/quick/util/qquickvaluetypes_p.h index a3f35a84ec..5a9af970e8 100644 --- a/src/quick/util/qquickvaluetypes_p.h +++ b/src/quick/util/qquickvaluetypes_p.h @@ -324,6 +324,7 @@ class QQuickFontValueType Q_PROPERTY(qreal wordSpacing READ wordSpacing WRITE setWordSpacing FINAL) Q_PROPERTY(HintingPreference hintingPreference READ hintingPreference WRITE setHintingPreference FINAL) Q_PROPERTY(bool kerning READ kerning WRITE setKerning FINAL) + Q_PROPERTY(bool preferShaping READ preferShaping WRITE setPreferShaping FINAL) public: enum FontWeight { Thin = QFont::Thin, @@ -397,6 +398,9 @@ public: bool kerning() const; void setKerning(bool b); + + bool preferShaping() const; + void setPreferShaping(bool b); }; QT_END_NAMESPACE |