1 /* Preview widget for KDE Display color scheme setup module
2 SPDX-FileCopyrightText: 2007 Matthew Woehlke <mw_triad@users.sourceforge.net>
3 SPDX-FileCopyrightText: 2007 Urs Wolfer <uwolfer @ kde.org>
4
5 SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8 #include "previewwidget.h"
9
10 #include <KColorScheme>
11
PreviewWidget(QWidget * parent)12 PreviewWidget::PreviewWidget(QWidget *parent)
13 : QFrame(parent)
14 {
15 setupUi(this);
16
17 // set correct colors on... lots of things
18 setAutoFillBackground(true);
19 frame->setBackgroundRole(QPalette::Base);
20 viewWidget->setBackgroundRole(QPalette::Base);
21 labelView0->setBackgroundRole(QPalette::Base);
22 labelView3->setBackgroundRole(QPalette::Base);
23 labelView4->setBackgroundRole(QPalette::Base);
24 labelView2->setBackgroundRole(QPalette::Base);
25 labelView1->setBackgroundRole(QPalette::Base);
26 labelView5->setBackgroundRole(QPalette::Base);
27 labelView6->setBackgroundRole(QPalette::Base);
28 labelView7->setBackgroundRole(QPalette::Base);
29 selectionWidget->setBackgroundRole(QPalette::Highlight);
30 labelSelection0->setBackgroundRole(QPalette::Highlight);
31 labelSelection3->setBackgroundRole(QPalette::Highlight);
32 labelSelection4->setBackgroundRole(QPalette::Highlight);
33 labelSelection2->setBackgroundRole(QPalette::Highlight);
34 labelSelection1->setBackgroundRole(QPalette::Highlight);
35 labelSelection5->setBackgroundRole(QPalette::Highlight);
36 labelSelection6->setBackgroundRole(QPalette::Highlight);
37 labelSelection7->setBackgroundRole(QPalette::Highlight);
38
39 QList<QWidget *> widgets = findChildren<QWidget *>();
40 foreach (QWidget *widget, widgets) {
41 widget->installEventFilter(this);
42 widget->setFocusPolicy(Qt::NoFocus);
43 }
44 }
45
~PreviewWidget()46 PreviewWidget::~PreviewWidget()
47 {
48 }
49
eventFilter(QObject *,QEvent * ev)50 bool PreviewWidget::eventFilter(QObject *, QEvent *ev)
51 {
52 switch (ev->type()) {
53 case QEvent::MouseButtonPress:
54 case QEvent::MouseButtonRelease:
55 case QEvent::MouseButtonDblClick:
56 case QEvent::MouseMove:
57 case QEvent::KeyPress:
58 case QEvent::KeyRelease:
59 case QEvent::Enter:
60 case QEvent::Leave:
61 case QEvent::Wheel:
62 case QEvent::ContextMenu:
63 return true; // ignore
64 default:
65 break;
66 }
67 return false;
68 }
69
copyPaletteBrush(QPalette & palette,QPalette::ColorGroup state,QPalette::ColorRole role)70 inline void copyPaletteBrush(QPalette &palette, QPalette::ColorGroup state, QPalette::ColorRole role)
71 {
72 palette.setBrush(QPalette::Active, role, palette.brush(state, role));
73 if (state == QPalette::Disabled)
74 // ### hack, while Qt has no inactive+disabled state
75 // TODO copy from Inactive+Disabled to Inactive instead
76 palette.setBrush(QPalette::Inactive, role, palette.brush(QPalette::Disabled, role));
77 }
78
setPaletteRecursive(QWidget * widget,const QPalette & palette)79 void PreviewWidget::setPaletteRecursive(QWidget *widget, const QPalette &palette)
80 {
81 widget->setPalette(palette);
82
83 const QObjectList children = widget->children();
84 foreach (QObject *child, children) {
85 if (child->isWidgetType())
86 setPaletteRecursive((QWidget *)child, palette);
87 }
88 }
89
adjustWidgetForeground(QWidget * widget,QPalette::ColorGroup state,const KSharedConfigPtr & config,QPalette::ColorRole color,KColorScheme::ColorSet set,KColorScheme::ForegroundRole role)90 inline void adjustWidgetForeground(QWidget *widget,
91 QPalette::ColorGroup state,
92 const KSharedConfigPtr &config,
93 QPalette::ColorRole color,
94 KColorScheme::ColorSet set,
95 KColorScheme::ForegroundRole role)
96 {
97 QPalette palette = widget->palette();
98 KColorScheme::adjustForeground(palette, role, color, set, config);
99 copyPaletteBrush(palette, state, color);
100 widget->setPalette(palette);
101 }
102
setPalette(const KSharedConfigPtr & config,QPalette::ColorGroup state)103 void PreviewWidget::setPalette(const KSharedConfigPtr &config, QPalette::ColorGroup state)
104 {
105 QPalette palette = KColorScheme::createApplicationPalette(config);
106
107 if (state != QPalette::Active) {
108 copyPaletteBrush(palette, state, QPalette::Base);
109 copyPaletteBrush(palette, state, QPalette::Text);
110 copyPaletteBrush(palette, state, QPalette::Window);
111 copyPaletteBrush(palette, state, QPalette::WindowText);
112 copyPaletteBrush(palette, state, QPalette::Button);
113 copyPaletteBrush(palette, state, QPalette::ButtonText);
114 copyPaletteBrush(palette, state, QPalette::Highlight);
115 copyPaletteBrush(palette, state, QPalette::HighlightedText);
116 copyPaletteBrush(palette, state, QPalette::AlternateBase);
117 copyPaletteBrush(palette, state, QPalette::Link);
118 copyPaletteBrush(palette, state, QPalette::LinkVisited);
119 copyPaletteBrush(palette, state, QPalette::Light);
120 copyPaletteBrush(palette, state, QPalette::Midlight);
121 copyPaletteBrush(palette, state, QPalette::Mid);
122 copyPaletteBrush(palette, state, QPalette::Dark);
123 copyPaletteBrush(palette, state, QPalette::Shadow);
124 }
125
126 setPaletteRecursive(this, palette);
127
128 #define ADJUST_WIDGET_FOREGROUND(w, c, s, r) adjustWidgetForeground(w, state, config, QPalette::c, KColorScheme::s, KColorScheme::r);
129
130 ADJUST_WIDGET_FOREGROUND(labelView1, Text, View, InactiveText);
131 ADJUST_WIDGET_FOREGROUND(labelView2, Text, View, ActiveText);
132 ADJUST_WIDGET_FOREGROUND(labelView3, Text, View, LinkText);
133 ADJUST_WIDGET_FOREGROUND(labelView4, Text, View, VisitedText);
134 ADJUST_WIDGET_FOREGROUND(labelView5, Text, View, NegativeText);
135 ADJUST_WIDGET_FOREGROUND(labelView6, Text, View, NeutralText);
136 ADJUST_WIDGET_FOREGROUND(labelView7, Text, View, PositiveText);
137
138 ADJUST_WIDGET_FOREGROUND(labelSelection1, HighlightedText, Selection, InactiveText);
139 ADJUST_WIDGET_FOREGROUND(labelSelection2, HighlightedText, Selection, ActiveText);
140 ADJUST_WIDGET_FOREGROUND(labelSelection3, HighlightedText, Selection, LinkText);
141 ADJUST_WIDGET_FOREGROUND(labelSelection4, HighlightedText, Selection, VisitedText);
142 ADJUST_WIDGET_FOREGROUND(labelSelection5, HighlightedText, Selection, NegativeText);
143 ADJUST_WIDGET_FOREGROUND(labelSelection6, HighlightedText, Selection, NeutralText);
144 ADJUST_WIDGET_FOREGROUND(labelSelection7, HighlightedText, Selection, PositiveText);
145 }
146