diff options
author | Piotr Wiercinski <[email protected]> | 2025-05-13 17:37:21 +0200 |
---|---|---|
committer | Piotr Wiercinski <[email protected]> | 2025-05-15 17:58:11 +0200 |
commit | 0cd3be36ba630190d4421318b53220eeee6490e4 (patch) | |
tree | 628127e307e1151dd092321be5950f584d4bf723 | |
parent | 33d1ac4095755f6faac0562882b1977f48d79a9f (diff) |
fusion: Implement high contrast style
Change-Id: I9bafda9058e2e48b8040f4d43c68b3eeac476594
Reviewed-by: Oliver Eftevaag <[email protected]>
Reviewed-by: MohammadHossein Qanbari <[email protected]>
-rw-r--r-- | src/widgets/styles/qfusionstyle.cpp | 18 | ||||
-rw-r--r-- | src/widgets/styles/qfusionstyle_p.h | 2 | ||||
-rw-r--r-- | src/widgets/styles/qfusionstyle_p_p.h | 10 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index e0ca511e2c3..ade558b48ce 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -643,6 +643,8 @@ void QFusionStyle::drawPrimitive(PrimitiveElement elem, circle.addEllipse(circleCenter, outlineRadius, outlineRadius); if (option->state & State_HasFocus && option->state & State_KeyboardFocusChange) painter->setPen(highlightedOutline); + else if (isHighContrast()) + painter->setPen(outline); else painter->setPen(option->palette.window().color().darker(150)); painter->drawPath(circle); @@ -1727,7 +1729,7 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption { Q_D (const QFusionStyle); - + const QColor outline = d->outline(option->palette); switch (control) { case CC_GroupBox: painter->save(); @@ -1758,7 +1760,13 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption region -= finalRect.adjusted(0, 0, 0, 3 - textRect.height() / 2); } painter->setClipRegion(region); - proxy()->drawPrimitive(PE_FrameGroupBox, &frame, painter, widget); + if (isHighContrast()) { + painter->setPen(outline); + QMargins margins(3, 3, 3, 3); + painter->drawRoundedRect(frame.rect.marginsRemoved(margins), 2, 2); + } else { + proxy()->drawPrimitive(PE_FrameGroupBox, &frame, painter, widget); + } painter->restore(); } @@ -3544,6 +3552,12 @@ QPixmap QFusionStyle::standardPixmap(StandardPixmap standardPixmap, const QStyle return QCommonStyle::standardPixmap(standardPixmap, opt, widget); } +bool QFusionStyle::isHighContrast() const +{ + return QGuiApplicationPrivate::platformTheme()->contrastPreference() + == Qt::ContrastPreference::HighContrast; +} + QT_END_NAMESPACE #include "moc_qfusionstyle_p.cpp" diff --git a/src/widgets/styles/qfusionstyle_p.h b/src/widgets/styles/qfusionstyle_p.h index 7dfeb34d7cb..6c2c8eeef2b 100644 --- a/src/widgets/styles/qfusionstyle_p.h +++ b/src/widgets/styles/qfusionstyle_p.h @@ -73,6 +73,8 @@ public: protected: QFusionStyle(QFusionStylePrivate &dd); +private: + bool isHighContrast() const; }; #endif // style_fusion diff --git a/src/widgets/styles/qfusionstyle_p_p.h b/src/widgets/styles/qfusionstyle_p_p.h index 4fa33ad6e1f..10d8969bb33 100644 --- a/src/widgets/styles/qfusionstyle_p_p.h +++ b/src/widgets/styles/qfusionstyle_p_p.h @@ -65,6 +65,9 @@ public: } QColor outline(const QPalette &pal) const { + if (isHighContrast()) { + return pal.text().color(); + } if (pal.window().style() == Qt::TexturePattern) return QColor(0, 0, 0, 160); return pal.window().color().darker(140); @@ -97,6 +100,13 @@ public: menuRightBorder = 15, // right border on menus menuCheckMarkWidth = 12 // checkmarks width on menus }; + +private: + bool isHighContrast() const + { + return QGuiApplicationPrivate::platformTheme()->contrastPreference() + == Qt::ContrastPreference::HighContrast; + } }; QT_END_NAMESPACE |