Windows11Style: Cleanup drawing menu items
Cleanup of PE_PanelMenu/CE_MenuBarItem/CE_MenuItem: - don't calc rect if not needed - remove unused code - don't set pen which is not used afterwards Change-Id: I5585a7299317d176d94480905aff0567e8f16444 Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> (cherry picked from commit 804ec477e5532309e61d616e0ea13412ad410948) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
395647a7b7
commit
a0f5289db1
@ -940,14 +940,14 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
|
|||||||
break;
|
break;
|
||||||
case QStyle::PE_FrameMenu:
|
case QStyle::PE_FrameMenu:
|
||||||
break;
|
break;
|
||||||
case QStyle::PE_PanelMenu: {
|
case PE_PanelMenu: {
|
||||||
QRect rect = option->rect;
|
const QRect rect = option->rect.marginsRemoved(QMargins(2, 2, 12, 2));
|
||||||
QPen pen(WINUI3Colors[colorSchemeIndex][frameColorLight]);
|
QPen pen(WINUI3Colors[colorSchemeIndex][frameColorLight]);
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->setPen(pen);
|
painter->setPen(pen);
|
||||||
painter->setBrush(QBrush(WINUI3Colors[colorSchemeIndex][menuPanelFill]));
|
painter->setBrush(QBrush(WINUI3Colors[colorSchemeIndex][menuPanelFill]));
|
||||||
painter->setRenderHint(QPainter::Antialiasing);
|
painter->setRenderHint(QPainter::Antialiasing);
|
||||||
painter->drawRoundedRect(rect.marginsRemoved(QMargins(2,2,12,2)), topLevelRoundingRadius, topLevelRoundingRadius);
|
painter->drawRoundedRect(rect, topLevelRoundingRadius, topLevelRoundingRadius);
|
||||||
painter->restore();
|
painter->restore();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1472,10 +1472,10 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
bool enabled = mbi->state & State_Enabled;
|
bool enabled = mbi->state & State_Enabled;
|
||||||
QStyleOptionMenuItem newMbi = *mbi;
|
QStyleOptionMenuItem newMbi = *mbi;
|
||||||
newMbi.font.setPointSize(10);
|
newMbi.font.setPointSize(10);
|
||||||
if (enabled && (active || hasFocus)) {
|
if (enabled && active) {
|
||||||
if (active && down)
|
if (down)
|
||||||
painter->setBrushOrigin(painter->brushOrigin() + QPoint(1, 1));
|
painter->setBrushOrigin(painter->brushOrigin() + QPoint(1, 1));
|
||||||
if (active && hasFocus) {
|
if (hasFocus) {
|
||||||
painter->setBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
painter->setBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
QRect rect = mbi->rect.marginsRemoved(QMargins(5,0,5,0));
|
QRect rect = mbi->rect.marginsRemoved(QMargins(5,0,5,0));
|
||||||
@ -1508,8 +1508,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
QBrush fill = (act == true && dis == false) ? QBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]) : menuitem->palette.brush(QPalette::Button);
|
QBrush fill = (act == true && dis == false) ? QBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]) : menuitem->palette.brush(QPalette::Button);
|
||||||
painter->setBrush(fill);
|
painter->setBrush(fill);
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
QRect rect = menuitem->rect;
|
const QRect rect = menuitem->rect.marginsRemoved(QMargins(2,2,2,2));
|
||||||
rect = rect.marginsRemoved(QMargins(2,2,2,2));
|
|
||||||
if (act && dis == false)
|
if (act && dis == false)
|
||||||
painter->drawRoundedRect(rect,secondLevelRoundingRadius,secondLevelRoundingRadius,Qt::AbsoluteSize);
|
painter->drawRoundedRect(rect,secondLevelRoundingRadius,secondLevelRoundingRadius,Qt::AbsoluteSize);
|
||||||
|
|
||||||
@ -1538,65 +1537,37 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
|
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
|
||||||
if (act && !dis)
|
if (act && !dis)
|
||||||
mode = QIcon::Active;
|
mode = QIcon::Active;
|
||||||
QPixmap pixmap;
|
QPixmap pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget),
|
||||||
if (checked)
|
mode, checked ? QIcon::On : QIcon::Off);
|
||||||
pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On);
|
|
||||||
else
|
|
||||||
pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode);
|
|
||||||
QRect pmr(QPoint(0, 0), pixmap.deviceIndependentSize().toSize());
|
QRect pmr(QPoint(0, 0), pixmap.deviceIndependentSize().toSize());
|
||||||
pmr.moveCenter(vCheckRect.center());
|
pmr.moveCenter(vCheckRect.center());
|
||||||
painter->setPen(menuitem->palette.text().color());
|
painter->setPen(menuitem->palette.text().color());
|
||||||
painter->drawPixmap(pmr.topLeft(), pixmap);
|
painter->drawPixmap(pmr.topLeft(), pixmap);
|
||||||
} else if (checked) {
|
} else if (checked) {
|
||||||
QStyleOptionMenuItem newMi = *menuitem;
|
|
||||||
newMi.state = State_None;
|
|
||||||
if (!dis)
|
|
||||||
newMi.state |= State_Enabled;
|
|
||||||
if (act)
|
|
||||||
newMi.state |= State_On | State_Selected;
|
|
||||||
newMi.rect = visualRect(option->direction, menuitem->rect, QRect(menuitem->rect.x() + QWindowsStylePrivate::windowsItemFrame,
|
|
||||||
menuitem->rect.y() + QWindowsStylePrivate::windowsItemFrame,
|
|
||||||
checkcol - 2 * QWindowsStylePrivate::windowsItemFrame,
|
|
||||||
menuitem->rect.height() - 2 * QWindowsStylePrivate::windowsItemFrame));
|
|
||||||
|
|
||||||
QColor discol;
|
|
||||||
if (dis) {
|
|
||||||
discol = menuitem->palette.text().color();
|
|
||||||
painter->setPen(discol);
|
|
||||||
}
|
|
||||||
int xm = int(QWindowsStylePrivate::windowsItemFrame) + checkcol / 4 + int(QWindowsStylePrivate::windowsItemHMargin);
|
|
||||||
int xpos = menuitem->rect.x() + xm;
|
|
||||||
QRect textRect(xpos, y + QWindowsStylePrivate::windowsItemVMargin,
|
|
||||||
w - xm - QWindowsStylePrivate::windowsRightBorder - tab + 1, h - 2 * QWindowsStylePrivate::windowsItemVMargin);
|
|
||||||
QRect vTextRect = visualRect(option->direction, menuitem->rect, textRect);
|
|
||||||
|
|
||||||
painter->save();
|
painter->save();
|
||||||
|
if (dis)
|
||||||
|
painter->setPen(menuitem->palette.text().color());
|
||||||
painter->setFont(assetFont);
|
painter->setFont(assetFont);
|
||||||
int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
|
const int text_flags = Qt::AlignVCenter | Qt::AlignHCenter | Qt::TextDontClip | Qt::TextSingleLine;
|
||||||
if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget))
|
const auto textToDraw = QStringLiteral("\uE73E");
|
||||||
text_flags |= Qt::TextHideMnemonic;
|
|
||||||
text_flags |= Qt::AlignLeft;
|
|
||||||
|
|
||||||
const QString textToDraw("\uE73E");
|
|
||||||
painter->setPen(option->palette.text().color());
|
painter->setPen(option->palette.text().color());
|
||||||
painter->drawText(vTextRect, text_flags, textToDraw);
|
painter->drawText(vCheckRect, text_flags, textToDraw);
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
painter->setPen(act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color());
|
painter->setPen(act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color());
|
||||||
|
|
||||||
QColor discol = menuitem->palette.text().color();
|
QColor discol = menuitem->palette.text().color();
|
||||||
if (dis) {
|
if (dis)
|
||||||
discol = menuitem->palette.color(QPalette::Disabled, QPalette::WindowText);
|
discol = menuitem->palette.color(QPalette::Disabled, QPalette::WindowText);
|
||||||
painter->setPen(discol);
|
|
||||||
}
|
|
||||||
|
|
||||||
int xm = int(QWindowsStylePrivate::windowsItemFrame) + checkcol + int(QWindowsStylePrivate::windowsItemHMargin);
|
QStringView s(menuitem->text);
|
||||||
|
if (!s.isEmpty()) { // draw text
|
||||||
|
int xm = QWindowsStylePrivate::windowsItemFrame + checkcol + QWindowsStylePrivate::windowsItemHMargin;
|
||||||
int xpos = menuitem->rect.x() + xm;
|
int xpos = menuitem->rect.x() + xm;
|
||||||
QRect textRect(xpos, y + QWindowsStylePrivate::windowsItemVMargin,
|
QRect textRect(xpos, y + QWindowsStylePrivate::windowsItemVMargin,
|
||||||
w - xm - QWindowsStylePrivate::windowsRightBorder - tab + 1, h - 2 * QWindowsStylePrivate::windowsItemVMargin);
|
w - xm - QWindowsStylePrivate::windowsRightBorder - tab + 1, h - 2 * QWindowsStylePrivate::windowsItemVMargin);
|
||||||
QRect vTextRect = visualRect(option->direction, menuitem->rect, textRect);
|
QRect vTextRect = visualRect(option->direction, menuitem->rect, textRect);
|
||||||
QStringView s(menuitem->text);
|
|
||||||
if (!s.isEmpty()) { // draw text
|
|
||||||
painter->save();
|
painter->save();
|
||||||
qsizetype t = s.indexOf(u'\t');
|
qsizetype t = s.indexOf(u'\t');
|
||||||
int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
|
int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
|
||||||
@ -1610,7 +1581,6 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) {
|
if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) {
|
||||||
painter->setPen(menuitem->palette.light().color());
|
painter->setPen(menuitem->palette.light().color());
|
||||||
painter->drawText(vShortcutRect.adjusted(1, 1, 1, 1), text_flags, textToDraw);
|
painter->drawText(vShortcutRect.adjusted(1, 1, 1, 1), text_flags, textToDraw);
|
||||||
painter->setPen(discol);
|
|
||||||
}
|
}
|
||||||
painter->setPen(menuitem->palette.color(QPalette::Disabled, QPalette::Text));
|
painter->setPen(menuitem->palette.color(QPalette::Disabled, QPalette::Text));
|
||||||
painter->drawText(vShortcutRect, text_flags, textToDraw);
|
painter->drawText(vShortcutRect, text_flags, textToDraw);
|
||||||
@ -1627,7 +1597,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
}
|
}
|
||||||
if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow
|
if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow
|
||||||
int dim = (h - 2 * QWindowsStylePrivate::windowsItemFrame) / 2;
|
int dim = (h - 2 * QWindowsStylePrivate::windowsItemFrame) / 2;
|
||||||
xpos = x + w - QWindowsStylePrivate::windowsArrowHMargin - QWindowsStylePrivate::windowsItemFrame - dim;
|
int xpos = x + w - QWindowsStylePrivate::windowsArrowHMargin - QWindowsStylePrivate::windowsItemFrame - dim;
|
||||||
QRect vSubMenuRect = visualRect(option->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim));
|
QRect vSubMenuRect = visualRect(option->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim));
|
||||||
QStyleOptionMenuItem newMI = *menuitem;
|
QStyleOptionMenuItem newMI = *menuitem;
|
||||||
newMI.rect = vSubMenuRect;
|
newMI.rect = vSubMenuRect;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user