File indexing completed on 2024-06-02 05:43:38

0001 /* Preview widget for KDE Display color scheme setup module
0002     SPDX-FileCopyrightText: 2007 Matthew Woehlke <mw_triad@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2007 Urs Wolfer <uwolfer @ kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "previewwidget.h"
0009 
0010 #include <KColorScheme>
0011 
0012 PreviewWidget::PreviewWidget(QWidget *parent)
0013     : QFrame(parent)
0014 {
0015     setupUi(this);
0016 
0017     // set correct colors on... lots of things
0018     setAutoFillBackground(true);
0019     frame->setBackgroundRole(QPalette::Base);
0020     viewWidget->setBackgroundRole(QPalette::Base);
0021     labelView0->setBackgroundRole(QPalette::Base);
0022     labelView3->setBackgroundRole(QPalette::Base);
0023     labelView4->setBackgroundRole(QPalette::Base);
0024     labelView2->setBackgroundRole(QPalette::Base);
0025     labelView1->setBackgroundRole(QPalette::Base);
0026     labelView5->setBackgroundRole(QPalette::Base);
0027     labelView6->setBackgroundRole(QPalette::Base);
0028     labelView7->setBackgroundRole(QPalette::Base);
0029     selectionWidget->setBackgroundRole(QPalette::Highlight);
0030     labelSelection0->setBackgroundRole(QPalette::Highlight);
0031     labelSelection3->setBackgroundRole(QPalette::Highlight);
0032     labelSelection4->setBackgroundRole(QPalette::Highlight);
0033     labelSelection2->setBackgroundRole(QPalette::Highlight);
0034     labelSelection1->setBackgroundRole(QPalette::Highlight);
0035     labelSelection5->setBackgroundRole(QPalette::Highlight);
0036     labelSelection6->setBackgroundRole(QPalette::Highlight);
0037     labelSelection7->setBackgroundRole(QPalette::Highlight);
0038 
0039     QList<QWidget *> widgets = findChildren<QWidget *>();
0040     foreach (QWidget *widget, widgets) {
0041         widget->installEventFilter(this);
0042         widget->setFocusPolicy(Qt::NoFocus);
0043     }
0044 }
0045 
0046 PreviewWidget::~PreviewWidget()
0047 {
0048 }
0049 
0050 bool PreviewWidget::eventFilter(QObject *, QEvent *ev)
0051 {
0052     switch (ev->type()) {
0053     case QEvent::MouseButtonPress:
0054     case QEvent::MouseButtonRelease:
0055     case QEvent::MouseButtonDblClick:
0056     case QEvent::MouseMove:
0057     case QEvent::KeyPress:
0058     case QEvent::KeyRelease:
0059     case QEvent::Enter:
0060     case QEvent::Leave:
0061     case QEvent::Wheel:
0062     case QEvent::ContextMenu:
0063         return true; // ignore
0064     default:
0065         break;
0066     }
0067     return false;
0068 }
0069 
0070 inline void copyPaletteBrush(QPalette &palette, QPalette::ColorGroup state, QPalette::ColorRole role)
0071 {
0072     palette.setBrush(QPalette::Active, role, palette.brush(state, role));
0073     if (state == QPalette::Disabled)
0074         // ### hack, while Qt has no inactive+disabled state
0075         // TODO copy from Inactive+Disabled to Inactive instead
0076         palette.setBrush(QPalette::Inactive, role, palette.brush(QPalette::Disabled, role));
0077 }
0078 
0079 void PreviewWidget::setPaletteRecursive(QWidget *widget, const QPalette &palette)
0080 {
0081     widget->setPalette(palette);
0082 
0083     const QObjectList children = widget->children();
0084     foreach (QObject *child, children) {
0085         if (child->isWidgetType())
0086             setPaletteRecursive((QWidget *)child, palette);
0087     }
0088 }
0089 
0090 inline void adjustWidgetForeground(QWidget *widget,
0091                                    QPalette::ColorGroup state,
0092                                    const KSharedConfigPtr &config,
0093                                    QPalette::ColorRole color,
0094                                    KColorScheme::ColorSet set,
0095                                    KColorScheme::ForegroundRole role)
0096 {
0097     QPalette palette = widget->palette();
0098     KColorScheme::adjustForeground(palette, role, color, set, config);
0099     copyPaletteBrush(palette, state, color);
0100     widget->setPalette(palette);
0101 }
0102 
0103 void PreviewWidget::setPalette(const KSharedConfigPtr &config, QPalette::ColorGroup state)
0104 {
0105     QPalette palette = KColorScheme::createApplicationPalette(config);
0106 
0107     if (state != QPalette::Active) {
0108         copyPaletteBrush(palette, state, QPalette::Base);
0109         copyPaletteBrush(palette, state, QPalette::Text);
0110         copyPaletteBrush(palette, state, QPalette::Window);
0111         copyPaletteBrush(palette, state, QPalette::WindowText);
0112         copyPaletteBrush(palette, state, QPalette::Button);
0113         copyPaletteBrush(palette, state, QPalette::ButtonText);
0114         copyPaletteBrush(palette, state, QPalette::Highlight);
0115         copyPaletteBrush(palette, state, QPalette::HighlightedText);
0116         copyPaletteBrush(palette, state, QPalette::AlternateBase);
0117         copyPaletteBrush(palette, state, QPalette::Link);
0118         copyPaletteBrush(palette, state, QPalette::LinkVisited);
0119         copyPaletteBrush(palette, state, QPalette::Light);
0120         copyPaletteBrush(palette, state, QPalette::Midlight);
0121         copyPaletteBrush(palette, state, QPalette::Mid);
0122         copyPaletteBrush(palette, state, QPalette::Dark);
0123         copyPaletteBrush(palette, state, QPalette::Shadow);
0124     }
0125 
0126     setPaletteRecursive(this, palette);
0127 
0128 #define ADJUST_WIDGET_FOREGROUND(w, c, s, r) adjustWidgetForeground(w, state, config, QPalette::c, KColorScheme::s, KColorScheme::r);
0129 
0130     ADJUST_WIDGET_FOREGROUND(labelView1, Text, View, InactiveText);
0131     ADJUST_WIDGET_FOREGROUND(labelView2, Text, View, ActiveText);
0132     ADJUST_WIDGET_FOREGROUND(labelView3, Text, View, LinkText);
0133     ADJUST_WIDGET_FOREGROUND(labelView4, Text, View, VisitedText);
0134     ADJUST_WIDGET_FOREGROUND(labelView5, Text, View, NegativeText);
0135     ADJUST_WIDGET_FOREGROUND(labelView6, Text, View, NeutralText);
0136     ADJUST_WIDGET_FOREGROUND(labelView7, Text, View, PositiveText);
0137 
0138     ADJUST_WIDGET_FOREGROUND(labelSelection1, HighlightedText, Selection, InactiveText);
0139     ADJUST_WIDGET_FOREGROUND(labelSelection2, HighlightedText, Selection, ActiveText);
0140     ADJUST_WIDGET_FOREGROUND(labelSelection3, HighlightedText, Selection, LinkText);
0141     ADJUST_WIDGET_FOREGROUND(labelSelection4, HighlightedText, Selection, VisitedText);
0142     ADJUST_WIDGET_FOREGROUND(labelSelection5, HighlightedText, Selection, NegativeText);
0143     ADJUST_WIDGET_FOREGROUND(labelSelection6, HighlightedText, Selection, NeutralText);
0144     ADJUST_WIDGET_FOREGROUND(labelSelection7, HighlightedText, Selection, PositiveText);
0145 }