Windows11Style: cleanup CC_ScrollBar

Cleanup CC_Scrollbar:
 - call subControlRect() only when it's really needed
 - use QStringLiteral to create static strings
 - calc rects only when really needed and then directly in one step

Change-Id: Ibe7944feb813ef3e7f6aea976579d192bafbcce9
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
(cherry picked from commit ffa0e9c19c3cdf3b299357dd263e7413010a62a9)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Christian Ehrlicher 2024-09-21 18:47:40 +02:00 committed by Qt Cherry-pick Bot
parent 55a8806e22
commit 8058a77340

View File

@ -468,70 +468,64 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
} }
break; break;
#endif // QT_CONFIG(combobox) #endif // QT_CONFIG(combobox)
case QStyle::CC_ScrollBar: case CC_ScrollBar:
if (const QStyleOptionSlider *scrollbar = qstyleoption_cast<const QStyleOptionSlider *>(option)) { if (const QStyleOptionSlider *scrollbar = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
QRectF rect = scrollbar->rect; const bool vertical = scrollbar->orientation == Qt::Vertical;
QPointF center = rect.center(); const bool horizontal = scrollbar->orientation == Qt::Horizontal;
const bool isMouseOver = state & State_MouseOver;
if (scrollbar->orientation == Qt::Vertical && rect.width()>24) if (isMouseOver) {
rect.marginsRemoved(QMargins(0,2,2,2)); QRectF rect = scrollbar->rect;
else if (scrollbar->orientation == Qt::Horizontal && rect.height()>24) const QPointF center = rect.center();
rect.marginsRemoved(QMargins(2,0,2,2)); if (vertical && rect.width() > 24) {
rect.marginsRemoved(QMargins(0, 2, 2, 2));
if (state & State_MouseOver) { rect.setWidth(rect.width() / 2);
if (scrollbar->orientation == Qt::Vertical && rect.width()>24) } else if (horizontal && rect.height() > 24) {
rect.setWidth(rect.width()/2); rect.marginsRemoved(QMargins(2, 0, 2, 2));
else if (scrollbar->orientation == Qt::Horizontal && rect.height()>24) rect.setHeight(rect.height() / 2);
rect.setHeight(rect.height()/2); }
rect.moveCenter(center); rect.moveCenter(center);
painter->setBrush(scrollbar->palette.base()); painter->setBrush(scrollbar->palette.base());
painter->setPen(Qt::NoPen); painter->setPen(Qt::NoPen);
painter->drawRoundedRect(rect, topLevelRoundingRadius, topLevelRoundingRadius); painter->drawRoundedRect(rect, topLevelRoundingRadius, topLevelRoundingRadius);
rect = rect.marginsRemoved(QMarginsF(0.5, 0.5, 0.5, 0.5));
painter->setBrush(Qt::NoBrush); painter->setBrush(Qt::NoBrush);
painter->setPen(WINUI3Colors[colorSchemeIndex][frameColorLight]); painter->setPen(WINUI3Colors[colorSchemeIndex][frameColorLight]);
painter->drawRoundedRect(rect.marginsRemoved(QMarginsF(0.5,0.5,0.5,0.5)), topLevelRoundingRadius + 0.5, topLevelRoundingRadius + 0.5); painter->drawRoundedRect(rect, topLevelRoundingRadius + 0.5, topLevelRoundingRadius + 0.5);
} }
if (sub & SC_ScrollBarSlider) { if (sub & SC_ScrollBarSlider) {
QRectF rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); QRectF rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget);
QPointF center = rect.center(); const QPointF center = rect.center();
if (flags & State_MouseOver) { if (vertical)
if (scrollbar->orientation == Qt::Vertical) rect.setWidth(isMouseOver ? rect.width() / 2 : 1);
rect.setWidth(rect.width()/2); else
else rect.setHeight(isMouseOver ? rect.height() / 2 : 1);
rect.setHeight(rect.height()/2);
}
else {
if (scrollbar->orientation == Qt::Vertical)
rect.setWidth(1);
else
rect.setHeight(1);
}
rect.moveCenter(center); rect.moveCenter(center);
painter->setBrush(Qt::gray); painter->setBrush(Qt::gray);
painter->setPen(Qt::NoPen); painter->setPen(Qt::NoPen);
painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius);
} }
if (sub & SC_ScrollBarAddLine) { if (sub & SC_ScrollBarAddLine) {
QRectF rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); if (isMouseOver) {
if (flags & State_MouseOver) { const QRectF rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget);
painter->setFont(QFont("Segoe Fluent Icons",6)); QFont f(assetFont);
f.setPointSize(6);
painter->setFont(f);
painter->setPen(Qt::gray); painter->setPen(Qt::gray);
if (scrollbar->orientation == Qt::Vertical) const auto str = vertical ? QStringLiteral("\uEDDC") : QStringLiteral("\uEDDA");
painter->drawText(rect,"\uEDDC", Qt::AlignVCenter | Qt::AlignHCenter); painter->drawText(rect, str, Qt::AlignVCenter | Qt::AlignHCenter);
else
painter->drawText(rect,"\uEDDA", Qt::AlignVCenter | Qt::AlignHCenter);
} }
} }
if (sub & SC_ScrollBarSubLine) { if (sub & SC_ScrollBarSubLine) {
QRectF rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); if (isMouseOver) {
if (flags & State_MouseOver) { const QRectF rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget);
QFont f(assetFont);
f.setPointSize(6);
painter->setFont(f);
painter->setPen(Qt::gray); painter->setPen(Qt::gray);
if (scrollbar->orientation == Qt::Vertical) const auto str = vertical ? QStringLiteral("\uEDDB") : QStringLiteral("\uEDD9");
painter->drawText(rect,"\uEDDB", Qt::AlignVCenter | Qt::AlignHCenter); painter->drawText(rect, str, Qt::AlignVCenter | Qt::AlignHCenter);
else
painter->drawText(rect,"\uEDD9", Qt::AlignVCenter | Qt::AlignHCenter);
} }
} }
} }