QStyleSheetStyle: properly honor checkmark size when drawing a QMenu
When drawing a QMenu which is checkable but does not have an icon somewhere, the width of the (possible) checkmark was not considered during drawing and the text was drawn over the checkmark. Also the wrong state was checked for drawing the checked icon (if one was given). Fixes: QTBUG-80506 Task-number: QTBUG-78238 Change-Id: Icf8aa37aab424564054d3549defee93eb0d7c1a4 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
parent
925b33bdaa
commit
97ac281c1d
@ -3711,6 +3711,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
|
||||
bool dis = !(opt->state & QStyle::State_Enabled),
|
||||
act = opt->state & QStyle::State_Selected;
|
||||
|
||||
int textRectOffset = m->maxIconWidth;
|
||||
if (!mi.icon.isNull()) {
|
||||
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
|
||||
if (act && !dis)
|
||||
@ -3736,19 +3737,21 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
|
||||
p->drawPixmap(pmr.topLeft(), pixmap);
|
||||
} else if (checkable) {
|
||||
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
|
||||
const QRect cmRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
|
||||
if (subSubRule.hasDrawable() || checked) {
|
||||
QStyleOptionMenuItem newMi = mi;
|
||||
if (!dis)
|
||||
newMi.state |= State_Enabled;
|
||||
if (act)
|
||||
if (mi.checked)
|
||||
newMi.state |= State_On;
|
||||
newMi.rect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
|
||||
newMi.rect = cmRect;
|
||||
drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, w);
|
||||
}
|
||||
textRectOffset = std::max(textRectOffset, cmRect.width());
|
||||
}
|
||||
|
||||
QRect textRect = subRule.contentsRect(opt->rect);
|
||||
textRect.setLeft(textRect.left() + m->maxIconWidth);
|
||||
textRect.setLeft(textRect.left() + textRectOffset);
|
||||
textRect.setWidth(textRect.width() - mi.tabWidth);
|
||||
const QRect vTextRect = visualRect(opt->direction, m->rect, textRect);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user