diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2019-02-01 20:06:24 +0100 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2019-02-12 17:12:44 +0000 |
commit | a7123de6c99b4949fb1b3affffcba3bf9a9d372f (patch) | |
tree | ec76822e59eb5178ebd1d338ea9d1cf948d354c6 | |
parent | afc7b26313e0d6c43bdc62b021751f30e6fa27a5 (diff) |
QFontComboBox: fix layouting in RTL mode
QFontComboBox did not work very well in RTL mode. The text was not
aligned right and the icon was not painted on the right side as it is
done for a normal combobox.
Fix it by using QStyle::alignedRect() for the icon position calculation
and passing the correct alignment when drawing text.
Fixes: QTBUG-19722
Change-Id: I47c5864519e78e0833ef4c07a1385e45ce4479f8
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r-- | src/widgets/widgets/qfontcombobox.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/widgets/widgets/qfontcombobox.cpp b/src/widgets/widgets/qfontcombobox.cpp index 957a464b71..4a99b0f962 100644 --- a/src/widgets/widgets/qfontcombobox.cpp +++ b/src/widgets/widgets/qfontcombobox.cpp @@ -236,9 +236,10 @@ void QFontFamilyDelegate::paint(QPainter *painter, if (QFontDatabase().isSmoothlyScalable(text)) { icon = &truetype; } - QSize actualSize = icon->actualSize(r.size()); - - icon->paint(painter, r, Qt::AlignLeft|Qt::AlignVCenter); + const QSize actualSize = icon->actualSize(r.size()); + const QRect iconRect = QStyle::alignedRect(option.direction, option.displayAlignment, + actualSize, r); + icon->paint(painter, iconRect, Qt::AlignLeft|Qt::AlignVCenter); if (option.direction == Qt::RightToLeft) r.setRight(r.right() - actualSize.width() - 4); else @@ -247,6 +248,7 @@ void QFontFamilyDelegate::paint(QPainter *painter, QFont old = painter->font(); painter->setFont(font); + const Qt::Alignment textAlign = QStyle::visualAlignment(option.direction, option.displayAlignment); // If the ascent of the font is larger than the height of the rect, // we will clip the text, so it's better to align the tight bounding rect in this case // This is specifically for fonts where the ascent is very large compared to @@ -254,9 +256,11 @@ void QFontFamilyDelegate::paint(QPainter *painter, QFontMetricsF fontMetrics(font); if (fontMetrics.ascent() > r.height()) { QRectF tbr = fontMetrics.tightBoundingRect(text); - painter->drawText(r.x(), r.y() + (r.height() + tbr.height()) / 2.0, text); + QRect textRect(r); + textRect.setHeight(textRect.height() + (r.height() - tbr.height())); + painter->drawText(textRect, Qt::AlignBottom|Qt::TextSingleLine|textAlign, text); } else { - painter->drawText(r, Qt::AlignVCenter|Qt::AlignLeading|Qt::TextSingleLine, text); + painter->drawText(r, Qt::AlignVCenter|Qt::TextSingleLine|textAlign, text); } if (writingSystem != QFontDatabase::Any) @@ -270,7 +274,7 @@ void QFontFamilyDelegate::paint(QPainter *painter, r.setRight(r.right() - w); else r.setLeft(r.left() + w); - painter->drawText(r, Qt::AlignVCenter|Qt::AlignLeading|Qt::TextSingleLine, sample); + painter->drawText(r, Qt::AlignVCenter|Qt::TextSingleLine|textAlign, sample); } painter->setFont(old); |