QFusionStyle: Use QFontMetricsF instead of QFontMetrics

- CT_MenuItem: Use qCeil()
- CE_MenuItem: Add 0.5 to width for elidedText(), because of qRound() in the QFontMetrics::horizontalAdvance()

Fixes: QTBUG-132102
Change-Id: Iaced11905357abb496d4ad3c20be0babb17cf121
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
This commit is contained in:
Nodir Temirkhodjaev 2024-12-17 15:33:50 +05:00
parent f4e197d920
commit dc57a3137d

View File

@ -1553,9 +1553,9 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
font.setBold(true);
p->setFont(font);
const QFontMetrics fontMetrics(font);
const QFontMetricsF fontMetrics(font);
const QString textToDraw = fontMetrics.elidedText(s.left(tabIndex).toString(),
Qt::ElideMiddle, vTextRect.width(),
Qt::ElideMiddle, vTextRect.width() + 0.5f,
text_flags);
if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) {
p->setPen(menuitem->palette.light().color());
@ -2957,11 +2957,11 @@ QSize QFusionStyle::sizeFromContents(ContentsType type, const QStyleOption *opti
else if (menuItem->menuItemType == QStyleOptionMenuItem::SubMenu)
w += 2 * QStyleHelper::dpiScaled(QFusionStylePrivate::menuArrowHMargin, option);
else if (menuItem->menuItemType == QStyleOptionMenuItem::DefaultItem) {
const QFontMetrics fm(menuItem->font);
const QFontMetricsF fm(menuItem->font);
QFont fontBold = menuItem->font;
fontBold.setBold(true);
const QFontMetrics fmBold(fontBold);
w += fmBold.horizontalAdvance(menuItem->text) - fm.horizontalAdvance(menuItem->text);
const QFontMetricsF fmBold(fontBold);
w += qCeil(fmBold.horizontalAdvance(menuItem->text) - fm.horizontalAdvance(menuItem->text));
}
const qreal dpi = QStyleHelper::dpi(option);
// Windows always shows a check column