aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorJan Arve Saether <jan-arve.saether@digia.com>2014-02-20 19:46:41 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-22 03:00:37 +0100
commit109889428edc5e4cf25c9fdd11a5e006e8a08630 (patch)
treef101724cd301684baad730a3a76330be2195ee2c /src/quick
parentdb32813a865fe8eda6a4ff87c71b791a26b343c3 (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.cpp27
-rw-r--r--src/quick/items/qquicktextinput_p_p.h1
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;