aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-05-02 11:34:45 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2018-05-02 12:22:15 +0000
commitfac7e9e87caf78554bc33b80fe72dc40518fcc76 (patch)
tree2fa02d844a5f8d3ab8fa0c23913614a802c0ac29 /src
parent012556df80470e294c1adaf1b442e1eb8729c598 (diff)
Add missing implicitBackground{Width|Height} to non-QQuickControls
Same as 5bd9d44b for QQuickControl. [ChangeLog][Controls][Label] Added implicitBackgroundWidth and implicitBackgroundHeight properties that can be used to simplify complex implicit size bindings. [ChangeLog][Controls][TextArea] Added implicitBackgroundWidth and implicitBackgroundHeight properties that can be used to simplify complex implicit size bindings. [ChangeLog][Controls][TextField] Added implicitBackgroundWidth and implicitBackgroundHeight properties that can be used to simplify complex implicit size bindings. Change-Id: Idcc2d9af8df086b41c15f352506fd8afdbb2e3e7 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/imports/controls/TextArea.qml4
-rw-r--r--src/imports/controls/TextField.qml9
-rw-r--r--src/imports/controls/fusion/TextArea.qml4
-rw-r--r--src/imports/controls/fusion/TextField.qml9
-rw-r--r--src/imports/controls/imagine/TextArea.qml4
-rw-r--r--src/imports/controls/imagine/TextField.qml9
-rw-r--r--src/imports/controls/material/TextArea.qml4
-rw-r--r--src/imports/controls/material/TextField.qml9
-rw-r--r--src/imports/controls/universal/TextArea.qml4
-rw-r--r--src/imports/controls/universal/TextField.qml9
-rw-r--r--src/imports/templates/qtquicktemplates2plugin.cpp1
-rw-r--r--src/quicktemplates2/qquickcontrol.cpp20
-rw-r--r--src/quicktemplates2/qquickcontrol_p_p.h3
-rw-r--r--src/quicktemplates2/qquicklabel.cpp79
-rw-r--r--src/quicktemplates2/qquicklabel_p.h11
-rw-r--r--src/quicktemplates2/qquicklabel_p_p.h7
-rw-r--r--src/quicktemplates2/qquicktextarea.cpp74
-rw-r--r--src/quicktemplates2/qquicktextarea_p.h7
-rw-r--r--src/quicktemplates2/qquicktextarea_p_p.h4
-rw-r--r--src/quicktemplates2/qquicktextfield.cpp79
-rw-r--r--src/quicktemplates2/qquicktextfield_p.h11
-rw-r--r--src/quicktemplates2/qquicktextfield_p_p.h7
22 files changed, 325 insertions, 43 deletions
diff --git a/src/imports/controls/TextArea.qml b/src/imports/controls/TextArea.qml
index 6a30b799..1446ba29 100644
--- a/src/imports/controls/TextArea.qml
+++ b/src/imports/controls/TextArea.qml
@@ -43,10 +43,10 @@ T.TextArea {
id: control
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
- background ? background.implicitWidth : 0,
+ implicitBackgroundWidth,
placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitBackgroundHeight,
placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
diff --git a/src/imports/controls/TextField.qml b/src/imports/controls/TextField.qml
index 0264f25e..87acebcd 100644
--- a/src/imports/controls/TextField.qml
+++ b/src/imports/controls/TextField.qml
@@ -42,11 +42,10 @@ import QtQuick.Templates 2.5 as T
T.TextField {
id: control
- implicitWidth: Math.max(background ? background.implicitWidth : 0,
- placeholderText ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
- || contentWidth + leftPadding + rightPadding
- implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitWidth: implicitBackgroundWidth
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight,
+ contentHeight + topPadding + bottomPadding,
placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
diff --git a/src/imports/controls/fusion/TextArea.qml b/src/imports/controls/fusion/TextArea.qml
index 573353dc..e3314e94 100644
--- a/src/imports/controls/fusion/TextArea.qml
+++ b/src/imports/controls/fusion/TextArea.qml
@@ -45,10 +45,10 @@ T.TextArea {
id: control
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
- background ? background.implicitWidth : 0,
+ implicitBackgroundWidth,
placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitBackgroundHeight,
placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
diff --git a/src/imports/controls/fusion/TextField.qml b/src/imports/controls/fusion/TextField.qml
index 8c5fa634..91fd049a 100644
--- a/src/imports/controls/fusion/TextField.qml
+++ b/src/imports/controls/fusion/TextField.qml
@@ -44,11 +44,10 @@ import QtQuick.Controls.Fusion.impl 2.5
T.TextField {
id: control
- implicitWidth: Math.max(background ? background.implicitWidth : 0,
- placeholderText ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
- || contentWidth + leftPadding + rightPadding
- implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitWidth: implicitBackgroundWidth
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight,
+ contentHeight + topPadding + bottomPadding,
placeholder.implicitHeight + topPadding + bottomPadding)
padding: 4
diff --git a/src/imports/controls/imagine/TextArea.qml b/src/imports/controls/imagine/TextArea.qml
index d61565b8..c7f54f61 100644
--- a/src/imports/controls/imagine/TextArea.qml
+++ b/src/imports/controls/imagine/TextArea.qml
@@ -45,10 +45,10 @@ T.TextArea {
id: control
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
- background ? background.implicitWidth : 0,
+ implicitBackgroundWidth,
placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitBackgroundHeight,
placeholder.implicitHeight + topPadding + bottomPadding)
topPadding: background ? background.topPadding : 0
diff --git a/src/imports/controls/imagine/TextField.qml b/src/imports/controls/imagine/TextField.qml
index 5c8347ad..1a9e7750 100644
--- a/src/imports/controls/imagine/TextField.qml
+++ b/src/imports/controls/imagine/TextField.qml
@@ -44,11 +44,10 @@ import QtQuick.Controls.Imagine.impl 2.5
T.TextField {
id: control
- implicitWidth: Math.max(background ? background.implicitWidth : 0,
- placeholderText ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
- || contentWidth + leftPadding + rightPadding
- implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitWidth: implicitBackgroundWidth
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight,
+ contentHeight + topPadding + bottomPadding,
placeholder.implicitHeight + topPadding + bottomPadding)
topPadding: background ? background.topPadding : 0
diff --git a/src/imports/controls/material/TextArea.qml b/src/imports/controls/material/TextArea.qml
index 7ba68017..82554b16 100644
--- a/src/imports/controls/material/TextArea.qml
+++ b/src/imports/controls/material/TextArea.qml
@@ -45,10 +45,10 @@ T.TextArea {
id: control
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
- background ? background.implicitWidth : 0,
+ implicitBackgroundWidth,
placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + 1 + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitBackgroundHeight,
placeholder.implicitHeight + 1 + topPadding + bottomPadding)
topPadding: 8
diff --git a/src/imports/controls/material/TextField.qml b/src/imports/controls/material/TextField.qml
index 62843774..f61c9ee8 100644
--- a/src/imports/controls/material/TextField.qml
+++ b/src/imports/controls/material/TextField.qml
@@ -44,11 +44,10 @@ import QtQuick.Controls.Material.impl 2.5
T.TextField {
id: control
- implicitWidth: Math.max(background ? background.implicitWidth : 0,
- placeholderText ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
- || contentWidth + leftPadding + rightPadding
- implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitWidth: implicitBackgroundWidth
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight,
+ contentHeight + topPadding + bottomPadding,
placeholder.implicitHeight + topPadding + bottomPadding)
topPadding: 8
diff --git a/src/imports/controls/universal/TextArea.qml b/src/imports/controls/universal/TextArea.qml
index 82421c78..3a4e8752 100644
--- a/src/imports/controls/universal/TextArea.qml
+++ b/src/imports/controls/universal/TextArea.qml
@@ -44,10 +44,10 @@ T.TextArea {
id: control
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
- background ? background.implicitWidth : 0,
+ implicitBackgroundWidth,
placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitBackgroundHeight,
placeholder.implicitHeight + topPadding + bottomPadding)
// TextControlThemePadding + 2 (border)
diff --git a/src/imports/controls/universal/TextField.qml b/src/imports/controls/universal/TextField.qml
index 96736fe0..98529163 100644
--- a/src/imports/controls/universal/TextField.qml
+++ b/src/imports/controls/universal/TextField.qml
@@ -43,11 +43,10 @@ import QtQuick.Controls.Universal 2.5
T.TextField {
id: control
- implicitWidth: Math.max(background ? background.implicitWidth : 0,
- placeholderText ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
- || contentWidth + leftPadding + rightPadding
- implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
- background ? background.implicitHeight : 0,
+ implicitWidth: implicitBackgroundWidth
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight,
+ contentHeight + topPadding + bottomPadding,
placeholder.implicitHeight + topPadding + bottomPadding)
// TextControlThemePadding + 2 (border)
diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp
index fce14698..5b91c234 100644
--- a/src/imports/templates/qtquicktemplates2plugin.cpp
+++ b/src/imports/templates/qtquicktemplates2plugin.cpp
@@ -330,6 +330,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri)
qmlRegisterType<QQuickContainer, 5>(uri, 2, 5, "Container");
qmlRegisterType<QQuickDialog, 5>(uri, 2, 5, "Dialog");
qmlRegisterType<QQuickGroupBox, 5>(uri, 2, 5, "GroupBox");
+ qmlRegisterType<QQuickLabel, 5>(uri, 2, 5, "Label");
qmlRegisterType<QQuickPage, 5>(uri, 2, 5, "Page");
qmlRegisterType<QQuickPopup, 5>(uri, 2, 5, "Popup");
qmlRegisterType<QQuickPopupAnchors>();
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp
index afb7c08a..81950ee5 100644
--- a/src/quicktemplates2/qquickcontrol.cpp
+++ b/src/quicktemplates2/qquickcontrol.cpp
@@ -879,16 +879,26 @@ void QQuickControlPrivate::updateBaselineOffset()
void QQuickControlPrivate::addImplicitSizeListener(QQuickItem *item, ChangeTypes changes)
{
- if (!item)
- return;
- QQuickItemPrivate::get(item)->addItemChangeListener(this, changes);
+ addImplicitSizeListener(item, this, changes);
}
void QQuickControlPrivate::removeImplicitSizeListener(QQuickItem *item, ChangeTypes changes)
{
- if (!item)
+ removeImplicitSizeListener(item, this, changes);
+}
+
+void QQuickControlPrivate::addImplicitSizeListener(QQuickItem *item, QQuickItemChangeListener *listener, ChangeTypes changes)
+{
+ if (!item || !listener)
+ return;
+ QQuickItemPrivate::get(item)->addItemChangeListener(listener, changes);
+}
+
+void QQuickControlPrivate::removeImplicitSizeListener(QQuickItem *item, QQuickItemChangeListener *listener, ChangeTypes changes)
+{
+ if (!item || !listener)
return;
- QQuickItemPrivate::get(item)->removeItemChangeListener(this, changes);
+ QQuickItemPrivate::get(item)->removeItemChangeListener(listener, changes);
}
void QQuickControlPrivate::itemImplicitWidthChanged(QQuickItem *item)
diff --git a/src/quicktemplates2/qquickcontrol_p_p.h b/src/quicktemplates2/qquickcontrol_p_p.h
index 410c7811..79d668aa 100644
--- a/src/quicktemplates2/qquickcontrol_p_p.h
+++ b/src/quicktemplates2/qquickcontrol_p_p.h
@@ -175,6 +175,9 @@ public:
void addImplicitSizeListener(QQuickItem *item, ChangeTypes changes = ImplicitSizeChanges);
void removeImplicitSizeListener(QQuickItem *item, ChangeTypes changes = ImplicitSizeChanges);
+ static void addImplicitSizeListener(QQuickItem *item, QQuickItemChangeListener *listener, ChangeTypes changes = ImplicitSizeChanges);
+ static void removeImplicitSizeListener(QQuickItem *item, QQuickItemChangeListener *listener, ChangeTypes changes = ImplicitSizeChanges);
+
void itemImplicitWidthChanged(QQuickItem *item) override;
void itemImplicitHeightChanged(QQuickItem *item) override;
void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change, const QRectF &diff) override;
diff --git a/src/quicktemplates2/qquicklabel.cpp b/src/quicktemplates2/qquicklabel.cpp
index e54aa556..dc35f6b8 100644
--- a/src/quicktemplates2/qquicklabel.cpp
+++ b/src/quicktemplates2/qquicklabel.cpp
@@ -239,6 +239,30 @@ void QQuickLabelPrivate::executeBackground(bool complete)
quickCompleteDeferred(q, backgroundName(), background);
}
+void QQuickLabelPrivate::itemImplicitWidthChanged(QQuickItem *item)
+{
+ Q_Q(QQuickLabel);
+ if (item == background)
+ emit q->implicitBackgroundWidthChanged();
+}
+
+void QQuickLabelPrivate::itemImplicitHeightChanged(QQuickItem *item)
+{
+ Q_Q(QQuickLabel);
+ if (item == background)
+ emit q->implicitBackgroundHeightChanged();
+}
+
+void QQuickLabelPrivate::itemDestroyed(QQuickItem *item)
+{
+ Q_Q(QQuickLabel);
+ if (item == background) {
+ background = nullptr;
+ emit q->implicitBackgroundWidthChanged();
+ emit q->implicitBackgroundHeightChanged();
+ }
+}
+
QQuickLabel::QQuickLabel(QQuickItem *parent)
: QQuickText(*(new QQuickLabelPrivate), parent)
{
@@ -246,6 +270,12 @@ QQuickLabel::QQuickLabel(QQuickItem *parent)
QObjectPrivate::connect(this, &QQuickText::textChanged, d, &QQuickLabelPrivate::textChanged);
}
+QQuickLabel::~QQuickLabel()
+{
+ Q_D(QQuickLabel);
+ QQuickControlPrivate::removeImplicitSizeListener(d->background, d);
+}
+
QFont QQuickLabel::font() const
{
return QQuickText::font();
@@ -289,15 +319,26 @@ void QQuickLabel::setBackground(QQuickItem *background)
if (!d->background.isExecuting())
d->cancelBackground();
+ const qreal oldImplicitBackgroundWidth = implicitBackgroundWidth();
+ const qreal oldImplicitBackgroundHeight = implicitBackgroundHeight();
+
+ QQuickControlPrivate::removeImplicitSizeListener(d->background, d);
delete d->background;
d->background = background;
+
if (background) {
background->setParentItem(this);
if (qFuzzyIsNull(background->z()))
background->setZ(-1);
if (isComponentComplete())
d->resizeBackground();
+ QQuickControlPrivate::addImplicitSizeListener(background, d);
}
+
+ if (!qFuzzyCompare(oldImplicitBackgroundWidth, implicitBackgroundWidth()))
+ emit implicitBackgroundWidthChanged();
+ if (!qFuzzyCompare(oldImplicitBackgroundHeight, implicitBackgroundHeight()))
+ emit implicitBackgroundHeightChanged();
if (!d->background.isExecuting())
emit backgroundChanged();
}
@@ -334,6 +375,44 @@ void QQuickLabel::resetPalette()
setPalette(QPalette());
}
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty real QtQuick.Controls::Label::implicitBackgroundWidth
+ \readonly
+
+ This property holds the implicit background width.
+
+ The value is equal to \c {background ? background.implicitWidth : 0}.
+
+ \sa implicitBackgroundHeight
+*/
+qreal QQuickLabel::implicitBackgroundWidth() const
+{
+ Q_D(const QQuickLabel);
+ if (!d->background)
+ return 0;
+ return d->background->implicitWidth();
+}
+
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty real QtQuick.Controls::Label::implicitBackgroundHeight
+ \readonly
+
+ This property holds the implicit background height.
+
+ The value is equal to \c {background ? background.implicitHeight : 0}.
+
+ \sa implicitBackgroundWidth
+*/
+qreal QQuickLabel::implicitBackgroundHeight() const
+{
+ Q_D(const QQuickLabel);
+ if (!d->background)
+ return 0;
+ return d->background->implicitHeight();
+}
+
void QQuickLabel::classBegin()
{
Q_D(QQuickLabel);
diff --git a/src/quicktemplates2/qquicklabel_p.h b/src/quicktemplates2/qquicklabel_p.h
index 5486d311..ad7f3272 100644
--- a/src/quicktemplates2/qquicklabel_p.h
+++ b/src/quicktemplates2/qquicklabel_p.h
@@ -63,10 +63,14 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickLabel : public QQuickText
Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
// 2.3 (Qt 5.10)
Q_PROPERTY(QPalette palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged FINAL REVISION 3)
+ // 2.5 (Qt 5.12)
+ Q_PROPERTY(qreal implicitBackgroundWidth READ implicitBackgroundWidth NOTIFY implicitBackgroundWidthChanged FINAL REVISION 5)
+ Q_PROPERTY(qreal implicitBackgroundHeight READ implicitBackgroundHeight NOTIFY implicitBackgroundHeightChanged FINAL REVISION 5)
Q_CLASSINFO("DeferredPropertyNames", "background")
public:
explicit QQuickLabel(QQuickItem *parent = nullptr);
+ ~QQuickLabel();
QFont font() const;
void setFont(const QFont &font);
@@ -79,11 +83,18 @@ public:
void setPalette(const QPalette &palette);
void resetPalette();
+ // 2.5 (Qt 5.12)
+ qreal implicitBackgroundWidth() const;
+ qreal implicitBackgroundHeight() const;
+
Q_SIGNALS:
void fontChanged();
void backgroundChanged();
// 2.3 (Qt 5.10)
Q_REVISION(3) void paletteChanged();
+ // 2.5 (Qt 5.12)
+ Q_REVISION(5) void implicitBackgroundWidthChanged();
+ Q_REVISION(5) void implicitBackgroundHeightChanged();
protected:
void classBegin() override;
diff --git a/src/quicktemplates2/qquicklabel_p_p.h b/src/quicktemplates2/qquicklabel_p_p.h
index 4d6c7de7..00fea1d3 100644
--- a/src/quicktemplates2/qquicklabel_p_p.h
+++ b/src/quicktemplates2/qquicklabel_p_p.h
@@ -50,6 +50,7 @@
#include <QtQml/private/qlazilyallocated_p.h>
#include <QtQuick/private/qquicktext_p_p.h>
+#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtQuickTemplates2/private/qquickdeferredpointer_p_p.h>
#if QT_CONFIG(accessibility)
@@ -58,7 +59,7 @@
QT_BEGIN_NAMESPACE
-class QQuickLabelPrivate : public QQuickTextPrivate
+class QQuickLabelPrivate : public QQuickTextPrivate, public QQuickItemChangeListener
#if QT_CONFIG(accessibility)
, public QAccessible::ActivationObserver
#endif
@@ -104,6 +105,10 @@ public:
void cancelBackground();
void executeBackground(bool complete = false);
+ void itemImplicitWidthChanged(QQuickItem *item) override;
+ void itemImplicitHeightChanged(QQuickItem *item) override;
+ void itemDestroyed(QQuickItem *item) override;
+
struct ExtraData {
QFont requestedFont;
QPalette requestedPalette;
diff --git a/src/quicktemplates2/qquicktextarea.cpp b/src/quicktemplates2/qquicktextarea.cpp
index 4193483c..87a7c5e4 100644
--- a/src/quicktemplates2/qquicktextarea.cpp
+++ b/src/quicktemplates2/qquicktextarea.cpp
@@ -458,6 +458,30 @@ void QQuickTextAreaPrivate::executeBackground(bool complete)
quickCompleteDeferred(q, backgroundName(), background);
}
+void QQuickTextAreaPrivate::itemImplicitWidthChanged(QQuickItem *item)
+{
+ Q_Q(QQuickTextArea);
+ if (item == background)
+ emit q->implicitBackgroundWidthChanged();
+}
+
+void QQuickTextAreaPrivate::itemImplicitHeightChanged(QQuickItem *item)
+{
+ Q_Q(QQuickTextArea);
+ if (item == background)
+ emit q->implicitBackgroundHeightChanged();
+}
+
+void QQuickTextAreaPrivate::itemDestroyed(QQuickItem *item)
+{
+ Q_Q(QQuickTextArea);
+ if (item == background) {
+ background = nullptr;
+ emit q->implicitBackgroundWidthChanged();
+ emit q->implicitBackgroundHeightChanged();
+ }
+}
+
QQuickTextArea::QQuickTextArea(QQuickItem *parent)
: QQuickTextEdit(*(new QQuickTextAreaPrivate), parent)
{
@@ -478,6 +502,7 @@ QQuickTextArea::~QQuickTextArea()
Q_D(QQuickTextArea);
if (d->flickable)
d->detachFlickable();
+ QQuickControlPrivate::removeImplicitSizeListener(d->background, d);
}
QQuickTextAreaAttached *QQuickTextArea::qmlAttachedProperties(QObject *object)
@@ -526,8 +551,13 @@ void QQuickTextArea::setBackground(QQuickItem *background)
if (!d->background.isExecuting())
d->cancelBackground();
+ const qreal oldImplicitBackgroundWidth = implicitBackgroundWidth();
+ const qreal oldImplicitBackgroundHeight = implicitBackgroundHeight();
+
+ QQuickControlPrivate::removeImplicitSizeListener(d->background, d);
delete d->background;
d->background = background;
+
if (background) {
if (d->flickable)
background->setParentItem(d->flickable);
@@ -537,7 +567,13 @@ void QQuickTextArea::setBackground(QQuickItem *background)
background->setZ(-1);
if (isComponentComplete())
d->resizeBackground();
+ QQuickControlPrivate::addImplicitSizeListener(background, d);
}
+
+ if (!qFuzzyCompare(oldImplicitBackgroundWidth, implicitBackgroundWidth()))
+ emit implicitBackgroundWidthChanged();
+ if (!qFuzzyCompare(oldImplicitBackgroundHeight, implicitBackgroundHeight()))
+ emit implicitBackgroundHeightChanged();
if (!d->background.isExecuting())
emit backgroundChanged();
}
@@ -729,6 +765,44 @@ void QQuickTextArea::resetPalette()
setPalette(QPalette());
}
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty real QtQuick.Controls::TextArea::implicitBackgroundWidth
+ \readonly
+
+ This property holds the implicit background width.
+
+ The value is equal to \c {background ? background.implicitWidth : 0}.
+
+ \sa implicitBackgroundHeight
+*/
+qreal QQuickTextArea::implicitBackgroundWidth() const
+{
+ Q_D(const QQuickTextArea);
+ if (!d->background)
+ return 0;
+ return d->background->implicitWidth();
+}
+
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty real QtQuick.Controls::TextArea::implicitBackgroundHeight
+ \readonly
+
+ This property holds the implicit background height.
+
+ The value is equal to \c {background ? background.implicitHeight : 0}.
+
+ \sa implicitBackgroundWidth
+*/
+qreal QQuickTextArea::implicitBackgroundHeight() const
+{
+ Q_D(const QQuickTextArea);
+ if (!d->background)
+ return 0;
+ return d->background->implicitHeight();
+}
+
void QQuickTextArea::classBegin()
{
Q_D(QQuickTextArea);
diff --git a/src/quicktemplates2/qquicktextarea_p.h b/src/quicktemplates2/qquicktextarea_p.h
index 346438ea..2f73265b 100644
--- a/src/quicktemplates2/qquicktextarea_p.h
+++ b/src/quicktemplates2/qquicktextarea_p.h
@@ -76,6 +76,8 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickTextArea : public QQuickTextEdit
Q_CLASSINFO("DeferredPropertyNames", "background")
// 2.5 (Qt 5.12)
Q_PROPERTY(QColor placeholderTextColor READ placeholderTextColor WRITE setPlaceholderTextColor NOTIFY placeholderTextColorChanged FINAL REVISION 5)
+ Q_PROPERTY(qreal implicitBackgroundWidth READ implicitBackgroundWidth NOTIFY implicitBackgroundWidthChanged FINAL REVISION 5)
+ Q_PROPERTY(qreal implicitBackgroundHeight READ implicitBackgroundHeight NOTIFY implicitBackgroundHeightChanged FINAL REVISION 5)
public:
explicit QQuickTextArea(QQuickItem *parent = nullptr);
@@ -114,6 +116,9 @@ public:
QColor placeholderTextColor() const;
void setPlaceholderTextColor(const QColor &color);
+ qreal implicitBackgroundWidth() const;
+ qreal implicitBackgroundHeight() const;
+
Q_SIGNALS:
void fontChanged();
void implicitWidthChanged3();
@@ -131,6 +136,8 @@ Q_SIGNALS:
Q_REVISION(3) void paletteChanged();
// 2.5 (Qt 5.12)
Q_REVISION(5) void placeholderTextColorChanged();
+ Q_REVISION(5) void implicitBackgroundWidthChanged();
+ Q_REVISION(5) void implicitBackgroundHeightChanged();
protected:
void classBegin() override;
diff --git a/src/quicktemplates2/qquicktextarea_p_p.h b/src/quicktemplates2/qquicktextarea_p_p.h
index c271660a..90e4db7b 100644
--- a/src/quicktemplates2/qquicktextarea_p_p.h
+++ b/src/quicktemplates2/qquicktextarea_p_p.h
@@ -128,6 +128,10 @@ public:
void cancelBackground();
void executeBackground(bool complete = false);
+ void itemImplicitWidthChanged(QQuickItem *item) override;
+ void itemImplicitHeightChanged(QQuickItem *item) override;
+ void itemDestroyed(QQuickItem *item) override;
+
#if QT_CONFIG(quicktemplates2_hover)
bool hovered;
bool explicitHoverEnabled;
diff --git a/src/quicktemplates2/qquicktextfield.cpp b/src/quicktemplates2/qquicktextfield.cpp
index 3125028f..e2e57eff 100644
--- a/src/quicktemplates2/qquicktextfield.cpp
+++ b/src/quicktemplates2/qquicktextfield.cpp
@@ -332,6 +332,30 @@ void QQuickTextFieldPrivate::executeBackground(bool complete)
quickCompleteDeferred(q, backgroundName(), background);
}
+void QQuickTextFieldPrivate::itemImplicitWidthChanged(QQuickItem *item)
+{
+ Q_Q(QQuickTextField);
+ if (item == background)
+ emit q->implicitBackgroundWidthChanged();
+}
+
+void QQuickTextFieldPrivate::itemImplicitHeightChanged(QQuickItem *item)
+{
+ Q_Q(QQuickTextField);
+ if (item == background)
+ emit q->implicitBackgroundHeightChanged();
+}
+
+void QQuickTextFieldPrivate::itemDestroyed(QQuickItem *item)
+{
+ Q_Q(QQuickTextField);
+ if (item == background) {
+ background = nullptr;
+ emit q->implicitBackgroundWidthChanged();
+ emit q->implicitBackgroundHeightChanged();
+ }
+}
+
QQuickTextField::QQuickTextField(QQuickItem *parent)
: QQuickTextInput(*(new QQuickTextFieldPrivate), parent)
{
@@ -347,6 +371,12 @@ QQuickTextField::QQuickTextField(QQuickItem *parent)
QObjectPrivate::connect(this, &QQuickTextInput::echoModeChanged, d, &QQuickTextFieldPrivate::echoModeChanged);
}
+QQuickTextField::~QQuickTextField()
+{
+ Q_D(QQuickTextField);
+ QQuickControlPrivate::removeImplicitSizeListener(d->background, d);
+}
+
QFont QQuickTextField::font() const
{
return QQuickTextInput::font();
@@ -388,15 +418,26 @@ void QQuickTextField::setBackground(QQuickItem *background)
if (!d->background.isExecuting())
d->cancelBackground();
+ const qreal oldImplicitBackgroundWidth = implicitBackgroundWidth();
+ const qreal oldImplicitBackgroundHeight = implicitBackgroundHeight();
+
+ QQuickControlPrivate::removeImplicitSizeListener(d->background, d);
delete d->background;
d->background = background;
+
if (background) {
background->setParentItem(this);
if (qFuzzyIsNull(background->z()))
background->setZ(-1);
if (isComponentComplete())
d->resizeBackground();
+ QQuickControlPrivate::addImplicitSizeListener(background, d);
}
+
+ if (!qFuzzyCompare(oldImplicitBackgroundWidth, implicitBackgroundWidth()))
+ emit implicitBackgroundWidthChanged();
+ if (!qFuzzyCompare(oldImplicitBackgroundHeight, implicitBackgroundHeight()))
+ emit implicitBackgroundHeightChanged();
if (!d->background.isExecuting())
emit backgroundChanged();
}
@@ -588,6 +629,44 @@ void QQuickTextField::classBegin()
d->resolvePalette();
}
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty real QtQuick.Controls::TextField::implicitBackgroundWidth
+ \readonly
+
+ This property holds the implicit background width.
+
+ The value is equal to \c {background ? background.implicitWidth : 0}.
+
+ \sa implicitBackgroundHeight
+*/
+qreal QQuickTextField::implicitBackgroundWidth() const
+{
+ Q_D(const QQuickTextField);
+ if (!d->background)
+ return 0;
+ return d->background->implicitWidth();
+}
+
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty real QtQuick.Controls::TextField::implicitBackgroundHeight
+ \readonly
+
+ This property holds the implicit background height.
+
+ The value is equal to \c {background ? background.implicitHeight : 0}.
+
+ \sa implicitBackgroundWidth
+*/
+qreal QQuickTextField::implicitBackgroundHeight() const
+{
+ Q_D(const QQuickTextField);
+ if (!d->background)
+ return 0;
+ return d->background->implicitHeight();
+}
+
void QQuickTextField::componentComplete()
{
Q_D(QQuickTextField);
diff --git a/src/quicktemplates2/qquicktextfield_p.h b/src/quicktemplates2/qquicktextfield_p.h
index b2e77342..b1f2c974 100644
--- a/src/quicktemplates2/qquicktextfield_p.h
+++ b/src/quicktemplates2/qquicktextfield_p.h
@@ -72,12 +72,15 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickTextField : public QQuickTextInput
Q_PROPERTY(bool hoverEnabled READ isHoverEnabled WRITE setHoverEnabled RESET resetHoverEnabled NOTIFY hoverEnabledChanged FINAL REVISION 1)
// 2.3 (Qt 5.10)
Q_PROPERTY(QPalette palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged FINAL REVISION 3)
- Q_CLASSINFO("DeferredPropertyNames", "background")
// 2.5 (Qt 5.12)
Q_PROPERTY(QColor placeholderTextColor READ placeholderTextColor WRITE setPlaceholderTextColor NOTIFY placeholderTextColorChanged FINAL REVISION 5)
+ Q_PROPERTY(qreal implicitBackgroundWidth READ implicitBackgroundWidth NOTIFY implicitBackgroundWidthChanged FINAL REVISION 5)
+ Q_PROPERTY(qreal implicitBackgroundHeight READ implicitBackgroundHeight NOTIFY implicitBackgroundHeightChanged FINAL REVISION 5)
+ Q_CLASSINFO("DeferredPropertyNames", "background")
public:
explicit QQuickTextField(QQuickItem *parent = nullptr);
+ ~QQuickTextField();
QFont font() const;
void setFont(const QFont &font);
@@ -103,10 +106,14 @@ public:
QPalette palette() const;
void setPalette(const QPalette &palette);
void resetPalette();
+
// 2.5 (Qt 5.12)
QColor placeholderTextColor() const;
void setPlaceholderTextColor(const QColor &color);
+ qreal implicitBackgroundWidth() const;
+ qreal implicitBackgroundHeight() const;
+
Q_SIGNALS:
void fontChanged();
void implicitWidthChanged3();
@@ -124,6 +131,8 @@ Q_SIGNALS:
Q_REVISION(3) void paletteChanged();
// 2.5 (Qt 5.12)
Q_REVISION(5) void placeholderTextColorChanged();
+ Q_REVISION(5) void implicitBackgroundWidthChanged();
+ Q_REVISION(5) void implicitBackgroundHeightChanged();
protected:
void classBegin() override;
diff --git a/src/quicktemplates2/qquicktextfield_p_p.h b/src/quicktemplates2/qquicktextfield_p_p.h
index 13a20e32..c9ccc943 100644
--- a/src/quicktemplates2/qquicktextfield_p_p.h
+++ b/src/quicktemplates2/qquicktextfield_p_p.h
@@ -50,6 +50,7 @@
#include <QtQml/private/qlazilyallocated_p.h>
#include <QtQuick/private/qquicktextinput_p_p.h>
+#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtQuickTemplates2/private/qquickpresshandler_p_p.h>
#include <QtQuickTemplates2/private/qquickdeferredpointer_p_p.h>
@@ -61,7 +62,7 @@
QT_BEGIN_NAMESPACE
-class QQuickTextFieldPrivate : public QQuickTextInputPrivate
+class QQuickTextFieldPrivate : public QQuickTextInputPrivate, public QQuickItemChangeListener
#if QT_CONFIG(accessibility)
, public QAccessible::ActivationObserver
#endif
@@ -116,6 +117,10 @@ public:
void cancelBackground();
void executeBackground(bool complete = false);
+ void itemImplicitWidthChanged(QQuickItem *item) override;
+ void itemImplicitHeightChanged(QQuickItem *item) override;
+ void itemDestroyed(QQuickItem *item) override;
+
#if QT_CONFIG(quicktemplates2_hover)
bool hovered;
bool explicitHoverEnabled;