aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/controls/TextField.qml5
-rw-r--r--src/templates/qquicktextfield.cpp25
-rw-r--r--src/templates/qquicktextfield_p.h4
-rw-r--r--src/templates/qquicktextfield_p_p.h6
-rw-r--r--tests/auto/controls/data/tst_textfield.qml10
5 files changed, 50 insertions, 0 deletions
diff --git a/src/imports/controls/TextField.qml b/src/imports/controls/TextField.qml
index 7a00591f..1aecbb23 100644
--- a/src/imports/controls/TextField.qml
+++ b/src/imports/controls/TextField.qml
@@ -41,6 +41,11 @@ import Qt.labs.templates 1.0 as T
T.TextField {
id: control
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ placeholder ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ placeholder ? placeholder.implicitHeight + topPadding + bottomPadding : 0)
+
padding: 6
color: enabled ? Theme.textColor : Theme.disabledColor
diff --git a/src/templates/qquicktextfield.cpp b/src/templates/qquicktextfield.cpp
index 07de1c5c..1abe0992 100644
--- a/src/templates/qquicktextfield.cpp
+++ b/src/templates/qquicktextfield.cpp
@@ -104,11 +104,36 @@ void QQuickTextFieldPrivate::resizeBackground()
}
}
+qreal QQuickTextFieldPrivate::getImplicitWidth() const
+{
+ return QQuickItemPrivate::getImplicitWidth();
+}
+
+qreal QQuickTextFieldPrivate::getImplicitHeight() const
+{
+ return QQuickItemPrivate::getImplicitHeight();
+}
+
+void QQuickTextFieldPrivate::implicitWidthChanged()
+{
+ Q_Q(QQuickTextField);
+ QQuickItemPrivate::implicitWidthChanged();
+ emit q->implicitWidthChanged();
+}
+
+void QQuickTextFieldPrivate::implicitHeightChanged()
+{
+ Q_Q(QQuickTextField);
+ QQuickItemPrivate::implicitHeightChanged();
+ emit q->implicitHeightChanged();
+}
+
QQuickTextField::QQuickTextField(QQuickItem *parent) :
QQuickTextInput(*(new QQuickTextFieldPrivate), parent)
{
Q_D(QQuickTextField);
d->pressAndHoldHelper.control = this;
+ d->setImplicitResizeEnabled(false);
setActiveFocusOnTab(true);
QObjectPrivate::connect(this, &QQuickTextInput::readOnlyChanged,
d, &QQuickTextFieldPrivate::_q_readOnlyChanged);
diff --git a/src/templates/qquicktextfield_p.h b/src/templates/qquicktextfield_p.h
index ab6bfa52..f13802b7 100644
--- a/src/templates/qquicktextfield_p.h
+++ b/src/templates/qquicktextfield_p.h
@@ -61,6 +61,8 @@ class Q_LABSTEMPLATES_EXPORT QQuickTextField : public QQuickTextInput
{
Q_OBJECT
Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) // override
+ Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged FINAL)
+ Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged FINAL)
Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
Q_PROPERTY(QQuickText *placeholder READ placeholder WRITE setPlaceholder NOTIFY placeholderChanged FINAL)
@@ -79,6 +81,8 @@ public:
Q_SIGNALS:
void fontChanged();
+ void implicitWidthChanged();
+ void implicitHeightChanged();
void backgroundChanged();
void placeholderChanged();
void pressAndHold(QQuickMouseEvent *mouse);
diff --git a/src/templates/qquicktextfield_p_p.h b/src/templates/qquicktextfield_p_p.h
index c75294a7..a60efb09 100644
--- a/src/templates/qquicktextfield_p_p.h
+++ b/src/templates/qquicktextfield_p_p.h
@@ -73,6 +73,12 @@ public:
void resizeBackground();
void resolveFont();
+ qreal getImplicitWidth() const Q_DECL_OVERRIDE;
+ qreal getImplicitHeight() const Q_DECL_OVERRIDE;
+
+ void implicitWidthChanged() Q_DECL_OVERRIDE;
+ void implicitHeightChanged() Q_DECL_OVERRIDE;
+
void _q_readOnlyChanged(bool isReadOnly);
void _q_placeholderTextChanged(const QString &text);
void _q_echoModeChanged(QQuickTextField::EchoMode echoMode);
diff --git a/tests/auto/controls/data/tst_textfield.qml b/tests/auto/controls/data/tst_textfield.qml
index bede2296..2ceb0b36 100644
--- a/tests/auto/controls/data/tst_textfield.qml
+++ b/tests/auto/controls/data/tst_textfield.qml
@@ -77,4 +77,14 @@ TestCase {
pah.pressAndHoldKeepsSelection(control)
control.destroy()
}
+
+ function test_implicitSize() {
+ var control = textField.createObject(testCase)
+ verify(control.implicitWidth > control.leftPadding + control.rightPadding)
+ control.background.implicitWidth = 400
+ control.background.implicitHeight = 200
+ compare(control.implicitWidth, 400)
+ compare(control.implicitHeight, 200)
+ control.destroy()
+ }
}