QLineEdit: account for the placeholderText when computing lineRect
If in a QLineEdit the placeholderText uses e.g. Tibetan language, then the height of font as reported by QFontMetrics might be less than the height of the boundingRect calculated for the placeholderText. This can cause the placeholderText to display incompletely. Fix this by using QFontMetrics::boundingRect instead of QFontMetrics::height when computing lineRect. Fixes: QTBUG-95341 Pick-to: 5.15 6.1 6.2 Change-Id: I9eef35fd89c5c1d79f6dd703355634d6905ca967 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
e4d62651c2
commit
d267060189
@ -1993,21 +1993,28 @@ void QLineEdit::paintEvent(QPaintEvent *)
|
||||
p.setClipRect(r);
|
||||
|
||||
QFontMetrics fm = fontMetrics();
|
||||
int fmHeight = 0;
|
||||
if (d->shouldShowPlaceholderText())
|
||||
fmHeight = fm.boundingRect(d->placeholderText).height();
|
||||
else
|
||||
fmHeight = fm.boundingRect(d->control->text() + d->control->preeditAreaText()).height();
|
||||
fmHeight = qMax(fmHeight, fm.height());
|
||||
|
||||
Qt::Alignment va = QStyle::visualAlignment(d->control->layoutDirection(), QFlag(d->alignment));
|
||||
switch (va & Qt::AlignVertical_Mask) {
|
||||
case Qt::AlignBottom:
|
||||
d->vscroll = r.y() + r.height() - fm.height() - QLineEditPrivate::verticalMargin;
|
||||
d->vscroll = r.y() + r.height() - fmHeight - QLineEditPrivate::verticalMargin;
|
||||
break;
|
||||
case Qt::AlignTop:
|
||||
d->vscroll = r.y() + QLineEditPrivate::verticalMargin;
|
||||
break;
|
||||
default:
|
||||
//center
|
||||
d->vscroll = r.y() + (r.height() - fm.height() + 1) / 2;
|
||||
d->vscroll = r.y() + (r.height() - fmHeight + 1) / 2;
|
||||
break;
|
||||
}
|
||||
QRect lineRect(r.x() + QLineEditPrivate::horizontalMargin, d->vscroll,
|
||||
r.width() - 2 * QLineEditPrivate::horizontalMargin, fm.height());
|
||||
r.width() - 2 * QLineEditPrivate::horizontalMargin, fmHeight);
|
||||
|
||||
if (d->shouldShowPlaceholderText()) {
|
||||
if (!d->placeholderText.isEmpty()) {
|
||||
|
Loading…
Reference in New Issue
Block a user