diff options
-rw-r--r-- | src/imports/controls/TextField.qml | 5 | ||||
-rw-r--r-- | src/templates/qquicktextfield.cpp | 25 | ||||
-rw-r--r-- | src/templates/qquicktextfield_p.h | 4 | ||||
-rw-r--r-- | src/templates/qquicktextfield_p_p.h | 6 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_textfield.qml | 10 |
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() + } } |