aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quicktemplates2/qquickcontrol.cpp36
-rw-r--r--src/quicktemplates2/qquickcontrol_p_p.h18
-rw-r--r--src/quicktemplates2/qquicklabel.cpp31
-rw-r--r--src/quicktemplates2/qquicklabel_p_p.h15
-rw-r--r--src/quicktemplates2/qquicktextarea.cpp31
-rw-r--r--src/quicktemplates2/qquicktextarea_p_p.h17
-rw-r--r--src/quicktemplates2/qquicktextfield.cpp31
-rw-r--r--src/quicktemplates2/qquicktextfield_p_p.h17
8 files changed, 136 insertions, 60 deletions
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp
index d57c3260..fc0b1b17 100644
--- a/src/quicktemplates2/qquickcontrol.cpp
+++ b/src/quicktemplates2/qquickcontrol.cpp
@@ -351,11 +351,11 @@ void QQuickControlPrivate::resolveFont()
inheritFont(parentFont(q));
}
-void QQuickControlPrivate::inheritFont(const QFont &f)
+void QQuickControlPrivate::inheritFont(const QFont &font)
{
Q_Q(QQuickControl);
- QFont parentFont = extra.isAllocated() ? extra->font.resolve(f) : f;
- parentFont.resolve(extra.isAllocated() ? extra->font.resolve() | f.resolve() : f.resolve());
+ QFont parentFont = extra.isAllocated() ? extra->requestedFont.resolve(font) : font;
+ parentFont.resolve(extra.isAllocated() ? extra->requestedFont.resolve() | font.resolve() : font.resolve());
const QFont defaultFont = q->defaultFont();
const QFont resolvedFont = parentFont.resolve(defaultFont);
@@ -368,35 +368,35 @@ void QQuickControlPrivate::inheritFont(const QFont &f)
Assign \a font to this control, and propagate it to all children.
*/
-void QQuickControlPrivate::updateFont(const QFont &f)
+void QQuickControlPrivate::updateFont(const QFont &font)
{
Q_Q(QQuickControl);
- QFont old = resolvedFont;
- resolvedFont = f;
+ QFont oldFont = resolvedFont;
+ resolvedFont = font;
- if (old != f)
- q->fontChange(f, old);
+ if (oldFont != font)
+ q->fontChange(font, oldFont);
- QQuickControlPrivate::updateFontRecur(q, f);
+ QQuickControlPrivate::updateFontRecur(q, font);
- if (old != f)
+ if (oldFont != font)
emit q->fontChanged();
}
-void QQuickControlPrivate::updateFontRecur(QQuickItem *item, const QFont &f)
+void QQuickControlPrivate::updateFontRecur(QQuickItem *item, const QFont &font)
{
const auto childItems = item->childItems();
for (QQuickItem *child : childItems) {
if (QQuickControl *control = qobject_cast<QQuickControl *>(child))
- QQuickControlPrivate::get(control)->inheritFont(f);
+ QQuickControlPrivate::get(control)->inheritFont(font);
else if (QQuickLabel *label = qobject_cast<QQuickLabel *>(child))
- QQuickLabelPrivate::get(label)->inheritFont(f);
+ QQuickLabelPrivate::get(label)->inheritFont(font);
else if (QQuickTextArea *textArea = qobject_cast<QQuickTextArea *>(child))
- QQuickTextAreaPrivate::get(textArea)->inheritFont(f);
+ QQuickTextAreaPrivate::get(textArea)->inheritFont(font);
else if (QQuickTextField *textField = qobject_cast<QQuickTextField *>(child))
- QQuickTextFieldPrivate::get(textField)->inheritFont(f);
+ QQuickTextFieldPrivate::get(textField)->inheritFont(font);
else
- QQuickControlPrivate::updateFontRecur(child, f);
+ QQuickControlPrivate::updateFontRecur(child, font);
}
}
@@ -618,10 +618,10 @@ QFont QQuickControl::font() const
void QQuickControl::setFont(const QFont &font)
{
Q_D(QQuickControl);
- if (d->extra.value().font.resolve() == font.resolve() && d->extra.value().font == font)
+ if (d->extra.value().requestedFont.resolve() == font.resolve() && d->extra.value().requestedFont == font)
return;
- d->extra.value().font = font;
+ d->extra.value().requestedFont = font;
d->resolveFont();
}
diff --git a/src/quicktemplates2/qquickcontrol_p_p.h b/src/quicktemplates2/qquickcontrol_p_p.h
index a6825640..3cd04b17 100644
--- a/src/quicktemplates2/qquickcontrol_p_p.h
+++ b/src/quicktemplates2/qquickcontrol_p_p.h
@@ -101,15 +101,15 @@ public:
QAccessible::Role accessibleRole() const override;
#endif
- void updateFont(const QFont &f);
- static void updateFontRecur(QQuickItem *item, const QFont &f);
- inline void setFont_helper(const QFont &f) {
- if (resolvedFont.resolve() == f.resolve() && resolvedFont == f)
+ virtual void resolveFont();
+ void inheritFont(const QFont &font);
+ void updateFont(const QFont &font);
+ static void updateFontRecur(QQuickItem *item, const QFont &font);
+ inline void setFont_helper(const QFont &font) {
+ if (resolvedFont.resolve() == font.resolve() && resolvedFont == font)
return;
- updateFont(f);
+ updateFont(font);
}
- virtual void resolveFont();
- void inheritFont(const QFont &f);
static QFont parentFont(const QQuickItem *item);
static QFont themeFont(QPlatformTheme::Font type);
@@ -127,11 +127,10 @@ public:
struct ExtraData {
ExtraData();
- QFont font;
+ QFont requestedFont;
};
QLazilyAllocated<ExtraData> extra;
- QFont resolvedFont;
bool hasTopPadding;
bool hasLeftPadding;
bool hasRightPadding;
@@ -150,6 +149,7 @@ public:
qreal bottomPadding;
qreal spacing;
QLocale locale;
+ QFont resolvedFont;
Qt::FocusPolicy focusPolicy;
Qt::FocusReason focusReason;
QQuickItem *background;
diff --git a/src/quicktemplates2/qquicklabel.cpp b/src/quicktemplates2/qquicklabel.cpp
index 45c7e5a4..fdda4542 100644
--- a/src/quicktemplates2/qquicklabel.cpp
+++ b/src/quicktemplates2/qquicklabel.cpp
@@ -108,18 +108,31 @@ void QQuickLabelPrivate::resolveFont()
inheritFont(QQuickControlPrivate::parentFont(q));
}
-void QQuickLabelPrivate::inheritFont(const QFont &f)
+void QQuickLabelPrivate::inheritFont(const QFont &font)
{
- Q_Q(QQuickLabel);
- QFont parentFont = font.resolve(f);
- parentFont.resolve(font.resolve() | f.resolve());
+ QFont parentFont = extra.isAllocated() ? extra->requestedFont.resolve(font) : font;
+ parentFont.resolve(extra.isAllocated() ? extra->requestedFont.resolve() | font.resolve() : font.resolve());
const QFont defaultFont = QQuickControlPrivate::themeFont(QPlatformTheme::LabelFont);
const QFont resolvedFont = parentFont.resolve(defaultFont);
- const bool changed = resolvedFont != sourceFont;
- q->QQuickText::setFont(resolvedFont);
- if (changed)
+ setFont_helper(resolvedFont);
+}
+
+/*!
+ \internal
+
+ Assign \a font to this control, and propagate it to all children.
+*/
+void QQuickLabelPrivate::updateFont(const QFont &font)
+{
+ Q_Q(QQuickLabel);
+ QFont oldFont = sourceFont;
+ q->QQuickText::setFont(font);
+
+ QQuickControlPrivate::updateFontRecur(q, font);
+
+ if (oldFont != font)
emit q->fontChanged();
}
@@ -170,10 +183,10 @@ QFont QQuickLabel::font() const
void QQuickLabel::setFont(const QFont &font)
{
Q_D(QQuickLabel);
- if (d->font.resolve() == font.resolve() && d->font == font)
+ if (d->extra.value().requestedFont.resolve() == font.resolve() && d->extra.value().requestedFont == font)
return;
- d->font = font;
+ d->extra.value().requestedFont = font;
d->resolveFont();
}
diff --git a/src/quicktemplates2/qquicklabel_p_p.h b/src/quicktemplates2/qquicklabel_p_p.h
index c24c855b..dadd63df 100644
--- a/src/quicktemplates2/qquicklabel_p_p.h
+++ b/src/quicktemplates2/qquicklabel_p_p.h
@@ -48,6 +48,7 @@
// We mean it.
//
+#include <QtQml/private/qlazilyallocated_p.h>
#include <QtQuick/private/qquicktext_p_p.h>
#if QT_CONFIG(accessibility)
@@ -75,7 +76,13 @@ public:
}
void resolveFont();
- void inheritFont(const QFont &f);
+ void inheritFont(const QFont &font);
+ void updateFont(const QFont &font);
+ inline void setFont_helper(const QFont &font) {
+ if (sourceFont.resolve() == font.resolve() && sourceFont == font)
+ return;
+ updateFont(font);
+ }
void textChanged(const QString &text);
@@ -84,7 +91,11 @@ public:
QAccessible::Role accessibleRole() const override;
#endif
- QFont font;
+ struct ExtraData {
+ QFont requestedFont;
+ };
+ QLazilyAllocated<ExtraData> extra;
+
QQuickItem *background;
QQuickAccessibleAttached *accessibleAttached;
};
diff --git a/src/quicktemplates2/qquicktextarea.cpp b/src/quicktemplates2/qquicktextarea.cpp
index 21d74dd8..3359f6cb 100644
--- a/src/quicktemplates2/qquicktextarea.cpp
+++ b/src/quicktemplates2/qquicktextarea.cpp
@@ -189,18 +189,31 @@ void QQuickTextAreaPrivate::resolveFont()
inheritFont(QQuickControlPrivate::parentFont(q));
}
-void QQuickTextAreaPrivate::inheritFont(const QFont &f)
+void QQuickTextAreaPrivate::inheritFont(const QFont &font)
{
- Q_Q(QQuickTextArea);
- QFont parentFont = font.resolve(f);
- parentFont.resolve(font.resolve() | f.resolve());
+ QFont parentFont = extra.isAllocated() ? extra->requestedFont.resolve(font) : font;
+ parentFont.resolve(extra.isAllocated() ? extra->requestedFont.resolve() | font.resolve() : font.resolve());
const QFont defaultFont = QQuickControlPrivate::themeFont(QPlatformTheme::EditorFont);
const QFont resolvedFont = parentFont.resolve(defaultFont);
- const bool changed = resolvedFont != sourceFont;
- q->QQuickTextEdit::setFont(resolvedFont);
- if (changed)
+ setFont_helper(resolvedFont);
+}
+
+/*!
+ \internal
+
+ Assign \a font to this control, and propagate it to all children.
+*/
+void QQuickTextAreaPrivate::updateFont(const QFont &font)
+{
+ Q_Q(QQuickTextArea);
+ QFont oldFont = sourceFont;
+ q->QQuickTextEdit::setFont(font);
+
+ QQuickControlPrivate::updateFontRecur(q, font);
+
+ if (oldFont != font)
emit q->fontChanged();
}
@@ -419,10 +432,10 @@ QFont QQuickTextArea::font() const
void QQuickTextArea::setFont(const QFont &font)
{
Q_D(QQuickTextArea);
- if (d->font.resolve() == font.resolve() && d->font == font)
+ if (d->extra.value().requestedFont.resolve() == font.resolve() && d->extra.value().requestedFont == font)
return;
- d->font = font;
+ d->extra.value().requestedFont = font;
d->resolveFont();
}
diff --git a/src/quicktemplates2/qquicktextarea_p_p.h b/src/quicktemplates2/qquicktextarea_p_p.h
index 1115b3e9..22ad4b09 100644
--- a/src/quicktemplates2/qquicktextarea_p_p.h
+++ b/src/quicktemplates2/qquicktextarea_p_p.h
@@ -48,6 +48,7 @@
// We mean it.
//
+#include <QtQml/private/qlazilyallocated_p.h>
#include <QtQuick/private/qquicktextedit_p_p.h>
#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtQuickTemplates2/private/qquickpresshandler_p_p.h>
@@ -80,8 +81,15 @@ public:
}
void resizeBackground();
+
void resolveFont();
- void inheritFont(const QFont &f);
+ void inheritFont(const QFont &font);
+ void updateFont(const QFont &font);
+ inline void setFont_helper(const QFont &font) {
+ if (sourceFont.resolve() == font.resolve() && sourceFont == font)
+ return;
+ updateFont(font);
+ }
#if QT_CONFIG(quicktemplates2_hover)
void updateHoverEnabled(bool h, bool e);
@@ -112,7 +120,12 @@ public:
bool hovered;
bool explicitHoverEnabled;
#endif
- QFont font;
+
+ struct ExtraData {
+ QFont requestedFont;
+ };
+ QLazilyAllocated<ExtraData> extra;
+
QQuickItem *background;
QString placeholder;
Qt::FocusReason focusReason;
diff --git a/src/quicktemplates2/qquicktextfield.cpp b/src/quicktemplates2/qquicktextfield.cpp
index e6ca2496..241ff922 100644
--- a/src/quicktemplates2/qquicktextfield.cpp
+++ b/src/quicktemplates2/qquicktextfield.cpp
@@ -163,18 +163,31 @@ void QQuickTextFieldPrivate::resolveFont()
inheritFont(QQuickControlPrivate::parentFont(q));
}
-void QQuickTextFieldPrivate::inheritFont(const QFont &f)
+void QQuickTextFieldPrivate::inheritFont(const QFont &font)
{
- Q_Q(QQuickTextField);
- QFont parentFont = font.resolve(f);
- parentFont.resolve(font.resolve() | f.resolve());
+ QFont parentFont = extra.isAllocated() ? extra->requestedFont.resolve(font) : font;
+ parentFont.resolve(extra.isAllocated() ? extra->requestedFont.resolve() | font.resolve() : font.resolve());
const QFont defaultFont = QQuickControlPrivate::themeFont(QPlatformTheme::EditorFont);
const QFont resolvedFont = parentFont.resolve(defaultFont);
- const bool changed = resolvedFont != sourceFont;
- q->QQuickTextInput::setFont(resolvedFont);
- if (changed)
+ setFont_helper(resolvedFont);
+}
+
+/*!
+ \internal
+
+ Assign \a font to this control, and propagate it to all children.
+*/
+void QQuickTextFieldPrivate::updateFont(const QFont &font)
+{
+ Q_Q(QQuickTextField);
+ QFont oldFont = sourceFont;
+ q->QQuickTextInput::setFont(font);
+
+ QQuickControlPrivate::updateFontRecur(q, font);
+
+ if (oldFont != font)
emit q->fontChanged();
}
@@ -288,10 +301,10 @@ QFont QQuickTextField::font() const
void QQuickTextField::setFont(const QFont &font)
{
Q_D(QQuickTextField);
- if (d->font.resolve() == font.resolve() && d->font == font)
+ if (d->extra.value().requestedFont.resolve() == font.resolve() && d->extra.value().requestedFont == font)
return;
- d->font = font;
+ d->extra.value().requestedFont = font;
d->resolveFont();
}
diff --git a/src/quicktemplates2/qquicktextfield_p_p.h b/src/quicktemplates2/qquicktextfield_p_p.h
index e8dc625b..6f36dda4 100644
--- a/src/quicktemplates2/qquicktextfield_p_p.h
+++ b/src/quicktemplates2/qquicktextfield_p_p.h
@@ -48,6 +48,7 @@
// We mean it.
//
+#include <QtQml/private/qlazilyallocated_p.h>
#include <QtQuick/private/qquicktextinput_p_p.h>
#include <QtQuickTemplates2/private/qquickpresshandler_p_p.h>
@@ -76,8 +77,15 @@ public:
return static_cast<QQuickTextFieldPrivate *>(QObjectPrivate::get(item)); }
void resizeBackground();
+
void resolveFont();
- void inheritFont(const QFont &f);
+ void inheritFont(const QFont &font);
+ void updateFont(const QFont &font);
+ inline void setFont_helper(const QFont &font) {
+ if (sourceFont.resolve() == font.resolve() && sourceFont == font)
+ return;
+ updateFont(font);
+ }
#if QT_CONFIG(quicktemplates2_hover)
void updateHoverEnabled(bool h, bool e);
@@ -101,7 +109,12 @@ public:
bool hovered;
bool explicitHoverEnabled;
#endif
- QFont font;
+
+ struct ExtraData {
+ QFont requestedFont;
+ };
+ QLazilyAllocated<ExtraData> extra;
+
QQuickItem *background;
QString placeholder;
Qt::FocusReason focusReason;