aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>2024-05-06 12:25:44 +0200
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>2024-05-08 18:04:02 +0200
commita8c93149aa220b1158c803dac2f9cc0d15a23df5 (patch)
treed00e0a45ff11ed1cc69849e4b9b4228f04ddc5a5 /src/quick
parentaac94b9cb6bbfe8e16c8282dcdaf11b36eea4d6e (diff)
Match QFont::ContextFontMerging with Qt Quick API
While we don't support all style strategy flags in Qt Quick, we do support selected ones as bools. QFont::ContextFontMerging is useful to be able to set per Text element, so it should be exposed through the QML APIs. Task-number: QTBUG-121131 Change-Id: If28a065aefc4e2043e830e31356b8bd98f6d4cd8 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquicktext.cpp21
-rw-r--r--src/quick/items/qquicktextedit.cpp7
-rw-r--r--src/quick/items/qquicktextinput.cpp7
-rw-r--r--src/quick/util/qquickpath.cpp7
-rw-r--r--src/quick/util/qquickvaluetypes.cpp13
-rw-r--r--src/quick/util/qquickvaluetypes_p.h4
6 files changed, 59 insertions, 0 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 5f85fa2080..ec042010d0 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -1853,6 +1853,27 @@ QQuickText::~QQuickText()
\sa QFont::setFeature()
//! [qml-font-features]
*/
+
+/*!
+ \qmlproperty object QtQuick::Text::font.contextFontMerging
+ \since 6.8
+
+//! [qml-font-context-font-merging]
+ If the selected font does not contain a certain character, Qt automatically chooses a
+ similar-looking fallback font that contains the character. By default this is done on a
+ character-by-character basis.
+
+ This means that in certain uncommon cases, many different fonts may be used to represent one
+ string of text even if it's in the same script. Setting \c contextFontMerging to true will try
+ finding the fallback font that matches the largest subset of the input string instead. This
+ will be more expensive for strings where missing glyphs occur, but may give more consistent
+ results. By default, \c contextFontMerging is \c{false}.
+
+ \sa QFont::StyleStrategy
+//! [qml-font-context-font-merging]
+*/
+
+
QFont QQuickText::font() const
{
Q_D(const QQuickText);
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 22bbd6e05b..02b34a6671 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -376,6 +376,13 @@ QString QQuickTextEdit::text() const
*/
/*!
+ \qmlproperty object QtQuick::TextEdit::font.contextFontMerging
+ \since 6.8
+
+ \include qquicktext.cpp qml-font-context-font-merging
+*/
+
+/*!
\qmlproperty string QtQuick::TextEdit::text
The text to display. If the text format is AutoText the text edit will
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index ef00451788..c013595f45 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -403,6 +403,13 @@ QString QQuickTextInputPrivate::realText() const
\include qquicktext.cpp qml-font-features
*/
+
+/*!
+ \qmlproperty object QtQuick::TextInput::font.contextFontMerging
+ \since 6.8
+
+ \include qquicktext.cpp qml-font-context-font-merging
+*/
QFont QQuickTextInput::font() const
{
Q_D(const QQuickTextInput);
diff --git a/src/quick/util/qquickpath.cpp b/src/quick/util/qquickpath.cpp
index 29c09abee2..8995c64d0b 100644
--- a/src/quick/util/qquickpath.cpp
+++ b/src/quick/util/qquickpath.cpp
@@ -2809,6 +2809,13 @@ void QQuickPathMultiline::addToPath(QPainterPath &path, const QQuickPathData &)
\include qquicktext.cpp qml-font-features
*/
+
+/*!
+ \qmlproperty object QtQuick::PathText::font.contextFontMerging
+ \since 6.8
+
+ \include qquicktext.cpp qml-font-context-font-merging
+*/
void QQuickPathText::updatePath() const
{
if (!_path.isEmpty())
diff --git a/src/quick/util/qquickvaluetypes.cpp b/src/quick/util/qquickvaluetypes.cpp
index 4f4f893d83..350f55e143 100644
--- a/src/quick/util/qquickvaluetypes.cpp
+++ b/src/quick/util/qquickvaluetypes.cpp
@@ -1080,6 +1080,19 @@ QVariantMap QQuickFontValueType::features() const
return ret;
}
+bool QQuickFontValueType::contextFontMerging() const
+{
+ return (v.styleStrategy() & QFont::ContextFontMerging) != 0;
+}
+
+void QQuickFontValueType::setContextFontMerging(bool enable)
+{
+ if (enable)
+ v.setStyleStrategy(static_cast<QFont::StyleStrategy>(v.styleStrategy() | QFont::ContextFontMerging));
+ else
+ v.setStyleStrategy(static_cast<QFont::StyleStrategy>(v.styleStrategy() & ~QFont::ContextFontMerging));
+}
+
QVariant QQuickColorSpaceValueType::create(const QJSValue &params)
{
if (!params.isObject())
diff --git a/src/quick/util/qquickvaluetypes_p.h b/src/quick/util/qquickvaluetypes_p.h
index 08491c633b..c203d12fab 100644
--- a/src/quick/util/qquickvaluetypes_p.h
+++ b/src/quick/util/qquickvaluetypes_p.h
@@ -409,6 +409,7 @@ class Q_QUICK_EXPORT QQuickFontValueType
Q_PROPERTY(bool preferShaping READ preferShaping WRITE setPreferShaping FINAL)
Q_PROPERTY(QVariantMap features READ features WRITE setFeatures FINAL)
Q_PROPERTY(QVariantMap variableAxes READ variableAxes WRITE setVariableAxes FINAL)
+ Q_PROPERTY(bool contextFontMerging READ contextFontMerging WRITE setContextFontMerging FINAL)
QML_VALUE_TYPE(font)
QML_FOREIGN(QFont)
@@ -475,6 +476,9 @@ public:
QVariantMap variableAxes() const;
void setVariableAxes(const QVariantMap &variableAxes);
+ bool contextFontMerging() const;
+ void setContextFontMerging(bool b);
+
operator QFont() const { return v; }
};