diff options
author | Jan Arve Saether <jan-arve.saether@digia.com> | 2014-02-20 19:46:41 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-22 03:00:37 +0100 |
commit | 109889428edc5e4cf25c9fdd11a5e006e8a08630 (patch) | |
tree | f101724cd301684baad730a3a76330be2195ee2c /src/quick | |
parent | db32813a865fe8eda6a4ff87c71b791a26b343c3 (diff) |
Update QQuickTextInput's baselineOffset when only height changes
Task-number: QTBUG-36529
Change-Id: I2cd577013c4965e76c9350abaebb9b7a6e4e0270
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 27 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput_p_p.h | 1 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 7ee1c937c6..ad79f0eadf 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -1710,6 +1710,8 @@ void QQuickTextInput::geometryChanged(const QRectF &newGeometry, if (!d->inLayout) { if (newGeometry.width() != oldGeometry.width()) d->updateLayout(); + else if (newGeometry.height() != oldGeometry.height() && d->vAlign != QQuickTextInput::AlignTop) + d->updateBaselineOffset(); updateCursorRectangle(); } QQuickImplicitSizeItem::geometryChanged(newGeometry, oldGeometry); @@ -2855,20 +2857,33 @@ void QQuickTextInputPrivate::updateLayout() else q->setImplicitHeight(height); + updateBaselineOffset(); + if (previousSize != contentSize) + emit q->contentSizeChanged(); +} + +/*! + \internal + \brief QQuickTextInputPrivate::updateBaselineOffset + + Assumes contentSize.height() is already calculated. + */ +void QQuickTextInputPrivate::updateBaselineOffset() +{ + Q_Q(QQuickTextInput); + if (!q->isComponentComplete()) + return; QFontMetricsF fm(font); qreal yoff = 0; if (q->heightValid()) { - const qreal itemHeight = q->height(); + const qreal surplusHeight = q->height() - contentSize.height(); if (vAlign == QQuickTextInput::AlignBottom) - yoff = itemHeight - height; + yoff = surplusHeight; else if (vAlign == QQuickTextInput::AlignVCenter) - yoff = (itemHeight - height)/2; + yoff = surplusHeight/2; } q->setBaselineOffset(fm.ascent() + yoff); - - if (previousSize != contentSize) - emit q->contentSizeChanged(); } #ifndef QT_NO_CLIPBOARD diff --git a/src/quick/items/qquicktextinput_p_p.h b/src/quick/items/qquicktextinput_p_p.h index 240fc7a599..21bd1bd6d7 100644 --- a/src/quick/items/qquicktextinput_p_p.h +++ b/src/quick/items/qquicktextinput_p_p.h @@ -423,6 +423,7 @@ public: void setCursorBlinkPeriod(int msec); void updateLayout(); + void updateBaselineOffset(); qreal getImplicitWidth() const; |