summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Wiercinski <[email protected]>2025-05-13 17:37:21 +0200
committerPiotr Wiercinski <[email protected]>2025-05-15 17:58:11 +0200
commit0cd3be36ba630190d4421318b53220eeee6490e4 (patch)
tree628127e307e1151dd092321be5950f584d4bf723
parent33d1ac4095755f6faac0562882b1977f48d79a9f (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.cpp18
-rw-r--r--src/widgets/styles/qfusionstyle_p.h2
-rw-r--r--src/widgets/styles/qfusionstyle_p_p.h10
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