1 /*****************************************************************************
2  *   Copyright 2007 - 2010 Craig Drummond <craig.p.drummond@gmail.com>       *
3  *   Copyright 2013 - 2015 Yichao Yu <yyc1992@gmail.com>                     *
4  *                                                                           *
5  *   This program is free software; you can redistribute it and/or modify    *
6  *   it under the terms of the GNU Lesser General Public License as          *
7  *   published by the Free Software Foundation; either version 2.1 of the    *
8  *   License, or (at your option) version 3, or any later version accepted   *
9  *   by the membership of KDE e.V. (or its successor approved by the         *
10  *   membership of KDE e.V.), which shall act as a proxy defined in          *
11  *   Section 6 of version 3 of the license.                                  *
12  *                                                                           *
13  *   This program is distributed in the hope that it will be useful,         *
14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       *
16  *   Lesser General Public License for more details.                         *
17  *                                                                           *
18  *   You should have received a copy of the GNU Lesser General Public        *
19  *   License along with this library. If not,                                *
20  *   see <http://www.gnu.org/licenses/>.                                     *
21  *****************************************************************************/
22 
23 #ifndef __QTCURVE_H__
24 #define __QTCURVE_H__
25 
26 #include <QTime>
27 #include <QPalette>
28 #include <QMap>
29 #include <QList>
30 #include <QSet>
31 #include <QCache>
32 #include <QColor>
33 #include <QFont>
34 #include <QStyleOption>
35 #include <QtGlobal>
36 #include <QCommonStyle>
37 #include <QPainterPath>
38 #ifdef QTC_QT5_ENABLE_KDE
39 #include <KConfigCore/KSharedConfig>
40 #include <KConfigCore/KConfigGroup>
41 #include <KStyle/KStyle>
42 using ParentStyleClass = KStyle;
43 #else
44 using ParentStyleClass = QCommonStyle;
45 #endif
46 
47 typedef qulonglong QtcKey;
48 #include <common/common.h>
49 
50 class QStyleOptionSlider;
51 class QLabel;
52 class QMenuBar;
53 class QScrollBar;
54 class QDBusInterface;
55 class QMainWindow;
56 class QStatusBar;
57 class QAbstractScrollArea;
58 class QProgressBar;
59 class QFormLayout;
60 
61 namespace QtCurve {
62 class WindowManager;
63 class BlurHelper;
64 class ShortcutHandler;
65 class ShadowHelper;
66 class StylePlugin;
67 
68 class Style: public ParentStyleClass {
69     Q_OBJECT
70     Q_CLASSINFO("X-KDE-CustomElements", "true")
71 public:
72     enum BackgroundType {
73         BGND_WINDOW,
74         BGND_DIALOG,
75         BGND_MENU
76     };
77 
78     enum MenuItemType {
79         MENU_POPUP,
80         MENU_BAR,
81         MENU_COMBO
82     };
83 
84     enum CustomElements {
85         CE_QtC_KCapacityBar = CE_CustomBase + 0x00FFFF00,
86         CE_QtC_Preview,
87         CE_QtC_SetOptions
88     };
89 
90     enum PreviewType {
91         PREVIEW_FALSE,
92         PREVIEW_MDI,
93         PREVIEW_WINDOW
94     };
95 
96     class PreviewOption: public QStyleOption {
97     public:
98         Options opts;
99     };
100 
101     class BgndOption: public QStyleOption {
102     public:
103         EAppearance app;
104         QPainterPath path;
105         QRect widgetRect;
106     };
107 
108     enum Icon {
109         ICN_MIN,
110         ICN_MAX,
111         ICN_MENU,
112         ICN_RESTORE,
113         ICN_CLOSE,
114         ICN_UP,
115         ICN_DOWN,
116         ICN_RIGHT,
117         ICN_SHADE,
118         ICN_UNSHADE
119     };
120 
121     explicit Style();
122     virtual ~Style();
123 
124     void polish(QApplication *app) override;
125     void polish(QPalette &palette) override;
126     void polish(QWidget *widget) override;
127     void unpolish(QApplication *app) override;
128     void unpolish(QWidget *widget) override;
129 
130     bool eventFilter(QObject *object, QEvent *event) override;
131     void timerEvent(QTimerEvent *event) override;
132 
133     int pixelMetric(PixelMetric metric, const QStyleOption *option=0,
134                     const QWidget *widget=0) const override;
135     int styleHint(StyleHint hint, const QStyleOption *option,
136                   const QWidget *widget,
137                   QStyleHintReturn *returnData=0) const override;
138     QSize sizeFromContents(ContentsType type, const QStyleOption *option,
139                            const QSize &size,
140                            const QWidget *widget) const override;
141     QPalette standardPalette() const override;
142     QIcon standardIcon(StandardPixmap pix, const QStyleOption *option=0,
143                        const QWidget *widget=0) const override;
144     int layoutSpacing(QSizePolicy::ControlType control1,
145                       QSizePolicy::ControlType control2,
146                       Qt::Orientation orientation,
147                       const QStyleOption *option=0,
148                       const QWidget *widget=0) const override;
149 
150     void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
151                        QPainter *painter,
152                        const QWidget *widget) const override;
153     void drawControl(ControlElement control, const QStyleOption *option,
154                      QPainter *painter, const QWidget *widget) const override;
155     void drawComplexControl(ComplexControl control,
156                             const QStyleOptionComplex *option,
157                             QPainter *painter,
158                             const QWidget *widget) const override;
159     void drawItemText(QPainter *painter, const QRect &rect, int flags,
160                       const QPalette &pal, bool enabled, const QString &text,
161                       QPalette::ColorRole=QPalette::NoRole) const override;
162 
163     QRect subElementRect(SubElement element, const QStyleOption *option,
164                          const QWidget *widget) const override;
165     QRect subControlRect(ComplexControl control,
166                          const QStyleOptionComplex *option,
167                          SubControl subControl,
168                          const QWidget *widget) const override;
169     SubControl hitTestComplexControl(ComplexControl control,
170                                      const QStyleOptionComplex *option,
171                                      const QPoint &pos,
172                                      const QWidget *widget) const override;
173 
174     Options&
options()175     options()
176     {
177         return opts;
178     }
179     void prePolish(QWidget *w) const;
180     void
prePolish(const QWidget * w)181     prePolish(const QWidget *w) const
182     {
183         prePolish(const_cast<QWidget*>(w));
184     }
185 
186 private:
187     void init(bool initial);
188     void connectDBus();
189     void freeColor(QSet<QColor*> &freedColors, QColor **cols);
190     void freeColors();
191     void polishFormLayout(QFormLayout *layout);
192     void polishLayout(QLayout *layout);
193     void polishScrollArea(QAbstractScrollArea *scrollArea,
194                           bool isKFilePlacesView=false) const;
195 
196     void drawItemTextWithRole(QPainter *painter, const QRect &rect, int flags,
197                               const QPalette &pal, bool enabled,
198                               const QString &text,
199                               QPalette::ColorRole textRole) const;
200     void drawSideBarButton(QPainter *painter, const QRect &r,
201                            const QStyleOption *option,
202                            const QWidget *widget) const;
203     void drawHighlight(QPainter *p, const QRect &r, bool horiz, bool inc) const;
204     void drawFadedLine(QPainter *p, const QRect &r, const QColor &col,
205                        bool fadeStart, bool fadeEnd, bool horiz,
206                        double fadeSizeStart=FADE_SIZE,
207                        double fadeSizeEnd=FADE_SIZE) const;
208     void drawLines(QPainter *p, const QRect &r, bool horiz, int nLines,
209                    int offset, const QColor *cols, int startOffset,
210                    int dark, ELine type) const;
211     void drawProgressBevelGradient(QPainter *p, const QRect &origRect,
212                                    const QStyleOption *option, bool horiz,
213                                    EAppearance bevApp,
214                                    const QColor *cols) const;
215     void drawBevelGradient(const QColor &base, QPainter *p, QRect const &r,
216                            const QPainterPath &path, bool horiz, bool sel,
217                            EAppearance bevApp, EWidget w=WIDGET_OTHER,
218                            bool useCache=true) const;
219     void drawBevelGradientReal(const QColor &base, QPainter *p, const QRect &r,
220                                const QPainterPath &path, bool horiz, bool sel,
221                                EAppearance bevApp, EWidget w) const;
222 
223     void
224     drawBevelGradient(const QColor &base, QPainter *p, QRect const &r,
225                       bool horiz, bool sel, EAppearance bevApp,
226                       EWidget w=WIDGET_OTHER, bool useCache=true) const
227     {
228         drawBevelGradient(base, p, r, QPainterPath(), horiz, sel, bevApp, w,
229                           useCache);
230     }
231     void
drawBevelGradientReal(const QColor & base,QPainter * p,const QRect & r,bool horiz,bool sel,EAppearance bevApp,EWidget w)232     drawBevelGradientReal(const QColor &base, QPainter *p, const QRect &r,
233                           bool horiz, bool sel,
234                           EAppearance bevApp, EWidget w) const
235     {
236         drawBevelGradientReal(base, p, r, QPainterPath(), horiz,
237                               sel, bevApp, w);
238     }
239 
240     void drawSunkenBevel(QPainter *p, const QRect &r, const QColor &col) const;
241     void drawLightBevel(QPainter *p, const QRect &r, const QStyleOption *option,
242                         const QWidget *widget, int round, const QColor &fill,
243                         const QColor *custom=0, bool doBorder=true,
244                         EWidget w=WIDGET_OTHER) const;
245     void drawLightBevelReal(QPainter *p, const QRect &r,
246                             const QStyleOption *option, const QWidget *widget,
247                             int round, const QColor &fill,
248                             const QColor *custom, bool doBorder, EWidget w,
249                             bool useCache, ERound realRound,
250                             bool onToolbar) const;
251     void drawGlow(QPainter *p, const QRect &r, EWidget w,
252                   const QColor *cols=0L) const;
253     void drawEtch(QPainter *p, const QRect &r, const QWidget *widget,
254                   EWidget w, bool raised=false, int round=ROUNDED_ALL) const;
255     void drawBgndRing(QPainter &painter, int x, int y, int size,
256                       int size2, bool isWindow) const;
257     QPixmap drawStripes(const QColor &color, int opacity) const;
258     void drawBackground(QPainter *p, const QColor &bgnd, const QRect &r,
259                         int opacity, BackgroundType type, EAppearance app,
260                         const QPainterPath &path=QPainterPath()) const;
261     void drawBackgroundImage(QPainter *p, bool isWindow, const QRect &r) const;
262     void drawBackground(QPainter *p, const QWidget *widget,
263                         BackgroundType type) const;
264     QPainterPath buildPath(const QRectF &r, EWidget w,
265                            int round, double radius) const;
266     QPainterPath buildPath(const QRect &r, EWidget w,
267                            int round, double radius) const;
268     void buildSplitPath(const QRect &r, int round, double radius,
269                         QPainterPath &tl, QPainterPath &br) const;
270     void drawBorder(QPainter *p, const QRect &r, const QStyleOption *option,
271                     int round, const QColor *custom=0, EWidget w=WIDGET_OTHER,
272                     EBorder borderProfile=BORDER_FLAT, bool doBlend=true,
273                     int borderVal=QTC_STD_BORDER) const;
274     void drawMdiControl(QPainter *p, const QStyleOptionTitleBar *titleBar,
275                         SubControl sc, const QWidget *widget,
276                         ETitleBarButtons btn, const QColor &iconColor,
277                         const QColor *btnCols, const QColor *bgndCols,
278                         int adjust, bool activeWindow) const;
279     void drawDwtControl(QPainter *p, const State &state,
280                         const QRect &rect, ETitleBarButtons btn, Icon icon,
281                         const QColor &iconColor, const QColor *btnCols,
282                         const QColor *bgndCols) const;
283     bool drawMdiButton(QPainter *painter, const QRect &r, bool hover,
284                        bool sunken, const QColor *cols) const;
285     void drawMdiIcon(QPainter *painter, const QColor &color, const QColor &bgnd,
286                      const QRect &r, bool hover, bool sunken, Icon iclearcon,
287                      bool stdSize, bool drewFrame) const;
288     void drawIcon(QPainter *painter, const QColor &color, const QRect &r,
289                   bool sunken, Icon icon, bool stdSize=true) const;
290     void drawEntryField(QPainter *p, const QRect &rx, const QWidget *widget,
291                         const QStyleOption *option, int round,
292                         bool fill, bool doEtch, EWidget w=WIDGET_ENTRY) const;
293     void drawMenuItem(QPainter *p, const QRect &r, const QStyleOption *option,
294                       MenuItemType type, int round, const QColor *cols) const;
295     void drawProgress(QPainter *p, const QRect &r, const QStyleOption *option,
296                       bool vertical=false, bool reverse=false) const;
297     void drawArrow(QPainter *p, const QRect &rx, PrimitiveElement pe,
298                    QColor col, bool small=false, bool kwin=false) const;
299     void drawSbSliderHandle(QPainter *p, const QRect &r,
300                             const QStyleOption *option,
301                             bool slider=false) const;
302     void drawSliderHandle(QPainter *p, const QRect &r,
303                           const QStyleOptionSlider *option) const;
304     void drawSliderGroove(QPainter *p, const QRect &groove, const QRect &handle,
305                           const QStyleOptionSlider *slider,
306                           const QWidget *widget) const;
307     void drawMenuOrToolBarBackground(const QWidget *widget, QPainter *p,
308                                      const QRect &r, const QStyleOption *option,
309                                      bool menu=true, bool horiz=true) const;
310     void drawHandleMarkers(QPainter *p, const QRect &r,
311                            const QStyleOption *option, bool tb,
312                            ELine handles) const;
313     void fillTab(QPainter *p, const QRect &r, const QStyleOption *option,
314                  const QColor &fill, bool horiz, EWidget tab,
315                  bool tabOnly) const;
316     void colorTab(QPainter *p, const QRect &r, bool horiz,
317                   EWidget tab, int round) const;
318     void shadeColors(const QColor &base, QColor *vals) const;
319     const QColor *buttonColors(const QStyleOption *option) const;
320     QColor titlebarIconColor(const QStyleOption *option) const;
321     const QColor *popupMenuCols(const QStyleOption *option=0L) const;
322     const QColor *checkRadioColors(const QStyleOption *option) const;
323     const QColor *sliderColors(const QStyleOption *option) const;
324     const QColor *backgroundColors(const QColor &col) const;
325     const QColor*
backgroundColors(const QStyleOption * option)326     backgroundColors(const QStyleOption *option) const
327     {
328         return (option ?
329                 backgroundColors(option->palette.background().color()) :
330                 m_backgroundCols);
331     }
332     const QColor *highlightColors(const QColor &col) const;
333     const QColor*
highlightColors(const QStyleOption * option,bool useActive)334     highlightColors(const QStyleOption *option, bool useActive) const
335     {
336         return highlightColors(
337             option->palette.brush(useActive ? QPalette::Active :
338                                   QPalette::Current,
339                                   QPalette::Highlight).color());
340     }
341     const QColor *borderColors(const QStyleOption *option,
342                                const QColor *use) const;
343     const QColor *getSidebarButtons() const;
344     void setMenuColors(const QColor &bgnd);
345     void setMenuTextColors(QWidget *widget, bool isMenuBar) const;
346     const QColor *menuColors(const QStyleOption *option, bool active) const;
347     bool coloredMdiButtons(bool active, bool mouseOver) const;
348     const QColor *getMdiColors(const QStyleOption *option, bool active) const;
349     void readMdiPositions() const;
350     const QColor &getFill(const QStyleOption *option, const QColor *use,
351                           bool cr=false, bool darker=false) const;
352     const QColor &getTabFill(bool current, bool highlight,
353                              const QColor *use) const;
354     QColor menuStripeCol() const;
355     QPixmap *getPixmap(const QColor col, EPixmap p, double shade=1.0) const;
356     const QColor &checkRadioCol(const QStyleOption *opt) const;
357     QColor shade(const QColor &a, double k) const;
358     void shade(const QColor &ca, QColor *cb, double k) const;
359     QColor getLowerEtchCol(const QWidget *widget) const;
360     int getFrameRound(const QWidget *widget) const;
361 
362 private slots:
363     void disconnectDBus();
364     void kdeGlobalSettingsChange(int type, int);
365     void borderSizesChanged();
366     void toggleMenuBar(unsigned int xid);
367     void toggleStatusBar(unsigned int xid);
368     void compositingToggled();
369 
370 private:
371     void widgetDestroyed(QObject *o);
372     void toggleMenuBar(QMainWindow *window);
373     void toggleStatusBar(QMainWindow *window);
374 
375 #ifdef QTC_QT5_ENABLE_KDE
376     void setupKde4();
377     void setDecorationColors();
378     void applyKdeSettings(bool pal);
379 #endif
380     bool isWindowDragWidget(QObject *o);
381     void emitMenuSize(QWidget *w, unsigned short size, bool force=false);
382     void emitStatusBarState(QStatusBar *sb);
383     const QColor&
MOArrow(State state,const QPalette & palette,bool mo,QPalette::ColorRole rol)384     MOArrow(State state, const QPalette &palette, bool mo,
385             QPalette::ColorRole rol) const
386     {
387         if (!(state & State_Enabled)) {
388             return palette.color(QPalette::Disabled, rol);
389         } else if (opts.coloredMouseOver != MO_NONE && mo) {
390             return m_mouseOverCols[ARROW_MO_SHADE];
391         } else {
392             return palette.color(rol);
393         }
394     }
395     const QColor&
MOArrow(State state,const QPalette & palette,QPalette::ColorRole rol)396     MOArrow(State state, const QPalette &palette,
397             QPalette::ColorRole rol) const
398     {
399         return MOArrow(state, palette, state & State_MouseOver, rol);
400     }
401 
402     bool
drawPrimitiveNone(PrimitiveElement,const QStyleOption *,QPainter *,const QWidget *)403     drawPrimitiveNone(PrimitiveElement, const QStyleOption*,
404                       QPainter*, const QWidget*) const
405     {
406         return true;
407     }
408     bool drawPrimitivePanelMenu(PrimitiveElement element,
409                                 const QStyleOption *option,
410                                 QPainter *painter,
411                                 const QWidget *widget) const;
412     bool drawPrimitiveIndicatorTabClose(PrimitiveElement element,
413                                         const QStyleOption *option,
414                                         QPainter *painter,
415                                         const QWidget *widget) const;
416     bool drawPrimitiveWidget(PrimitiveElement element,
417                              const QStyleOption *option,
418                              QPainter *painter,
419                              const QWidget *widget) const;
420     bool drawPrimitivePanelScrollAreaCorner(PrimitiveElement element,
421                                             const QStyleOption *option,
422                                             QPainter *painter,
423                                             const QWidget *widget) const;
424     bool drawPrimitiveIndicatorBranch(PrimitiveElement element,
425                                       const QStyleOption *option,
426                                       QPainter *painter,
427                                       const QWidget *widget) const;
428     bool drawPrimitiveIndicatorViewItemCheck(PrimitiveElement element,
429                                              const QStyleOption *option,
430                                              QPainter *painter,
431                                              const QWidget *widget) const;
432     bool drawPrimitiveIndicatorHeaderArrow(PrimitiveElement element,
433                                            const QStyleOption *option,
434                                            QPainter *painter,
435                                            const QWidget *widget) const;
436     bool drawPrimitiveIndicatorArrow(PrimitiveElement element,
437                                      const QStyleOption *option,
438                                      QPainter *painter,
439                                      const QWidget *widget) const;
440     bool drawPrimitiveIndicatorSpin(PrimitiveElement element,
441                                     const QStyleOption *option,
442                                     QPainter *painter,
443                                     const QWidget *widget) const;
444     bool drawPrimitiveIndicatorToolBarSeparator(PrimitiveElement element,
445                                                 const QStyleOption *option,
446                                                 QPainter *painter,
447                                                 const QWidget *widget) const;
448     bool drawPrimitiveFrameGroupBox(PrimitiveElement element,
449                                     const QStyleOption *option,
450                                     QPainter *painter,
451                                     const QWidget *widget) const;
452     bool drawPrimitiveFrame(PrimitiveElement element,
453                             const QStyleOption *option, QPainter *painter,
454                             const QWidget *widget) const;
455     bool drawPrimitivePanelMenuBar(PrimitiveElement element,
456                                    const QStyleOption *option,
457                                    QPainter *painter,
458                                    const QWidget *widget) const;
459     bool drawPrimitivePanelTipLabel(PrimitiveElement element,
460                                     const QStyleOption *option,
461                                     QPainter *painter,
462                                     const QWidget *widget) const;
463     bool drawPrimitiveQtcBackground(PrimitiveElement element,
464                                     const QStyleOption *option,
465                                     QPainter *painter,
466                                     const QWidget *widget) const;
467     bool drawPrimitivePanelItemViewItem(PrimitiveElement element,
468                                         const QStyleOption *option,
469                                         QPainter *painter,
470                                         const QWidget *widget) const;
471     bool drawPrimitiveFrameTabWidget(PrimitiveElement element,
472                                      const QStyleOption *option,
473                                      QPainter *painter,
474                                      const QWidget *widget) const;
475     bool drawPrimitiveFrameWindow(PrimitiveElement element,
476                                   const QStyleOption *option,
477                                   QPainter *painter,
478                                   const QWidget *widget) const;
479     bool drawPrimitiveButton(PrimitiveElement element,
480                              const QStyleOption *option, QPainter *painter,
481                              const QWidget *widget) const;
482     bool drawPrimitiveFrameFocusRect(PrimitiveElement element,
483                                      const QStyleOption *option,
484                                      QPainter *painter,
485                                      const QWidget *widget) const;
486     bool drawPrimitiveIndicatorToolBarHandle(PrimitiveElement element,
487                                              const QStyleOption *option,
488                                              QPainter *painter,
489                                              const QWidget *widget) const;
490     bool drawPrimitiveIndicatorRadioButton(PrimitiveElement element,
491                                            const QStyleOption *option,
492                                            QPainter *painter,
493                                            const QWidget *widget) const;
494     bool drawPrimitiveIndicatorCheckBox(PrimitiveElement element,
495                                         const QStyleOption *option,
496                                         QPainter *painter,
497                                         const QWidget *widget) const;
498     bool drawPrimitiveFrameLineEdit(PrimitiveElement element,
499                                     const QStyleOption *option,
500                                     QPainter *painter,
501                                     const QWidget *widget) const;
502     bool drawPrimitivePanelLineEdit(PrimitiveElement element,
503                                     const QStyleOption *option,
504                                     QPainter *painter,
505                                     const QWidget *widget) const;
506     bool drawPrimitiveIndicatorDockWidgetResizeHandle(
507         PrimitiveElement element, const QStyleOption *option,
508         QPainter *painter, const QWidget *widget) const;
509     bool drawPrimitiveButtonTool(PrimitiveElement element,
510                                  const QStyleOption *option, QPainter *painter,
511                                  const QWidget *widget) const;
512     bool drawPrimitiveFrameDockWidget(PrimitiveElement element,
513                                       const QStyleOption *option,
514                                       QPainter *painter,
515                                       const QWidget *widget) const;
516     bool drawPrimitiveFrameStatusBarOrMenu(PrimitiveElement element,
517                                            const QStyleOption *option,
518                                            QPainter *painter,
519                                            const QWidget *widget) const;
520     bool drawPrimitiveFrameTabBarBase(PrimitiveElement element,
521                                       const QStyleOption *option,
522                                       QPainter *painter,
523                                       const QWidget *widget) const;
524 
525 private:
526     mutable Options opts;
527     QColor m_highlightCols[TOTAL_SHADES + 1],
528         m_backgroundCols[TOTAL_SHADES + 1],
529         m_menubarCols[TOTAL_SHADES + 1],
530         m_focusCols[TOTAL_SHADES + 1],
531         m_mouseOverCols[TOTAL_SHADES + 1],
532         *m_popupMenuCols,
533         *m_sliderCols,
534         *m_defBtnCols,
535         *m_comboBtnCols,
536         *m_checkRadioSelCols,
537         *m_sortedLvColors,
538         *m_ooMenuCols,
539         *m_progressCols,
540         m_buttonCols[TOTAL_SHADES + 1],
541         m_checkRadioCol;
542     bool m_saveMenuBarStatus,
543         m_saveStatusBarStatus,
544         m_usePixmapCache,
545         m_inactiveChangeSelectionColor;
546     PreviewType m_isPreview;
547     mutable QColor *m_sidebarButtonsCols;
548     mutable QColor *m_activeMdiColors;
549     mutable QColor *m_mdiColors;
550     mutable QColor m_activeMdiTextColor;
551     mutable QColor m_mdiTextColor;
552     mutable QColor m_coloredButtonCols[TOTAL_SHADES + 1];
553     mutable QColor m_coloredBackgroundCols[TOTAL_SHADES + 1];
554     mutable QColor m_coloredHighlightCols[TOTAL_SHADES + 1];
555     mutable QCache<QtcKey, QPixmap> m_pixmapCache;
556     mutable bool m_active;
557     mutable const QWidget *m_sbWidget;
558     mutable QLabel *m_clickedLabel;
559     QSet<QProgressBar*> m_progressBars;
560     int m_progressBarAnimateTimer,
561         m_animateStep;
562     QTime m_timer;
563     mutable QMap<int, QColor*> m_titleBarButtonsCols;
564     mutable QList<int> m_mdiButtons[2]; // 0=left, 1=right
565     mutable int m_titlebarHeight;
566 
567     QDBusInterface *m_dBus;
568     ShadowHelper *m_shadowHelper;
569     mutable QScrollBar *m_sViewSBar;
570     mutable QMap<QWidget*, QSet<QWidget*> > m_sViewContainers;
571     WindowManager *m_windowManager;
572     BlurHelper *m_blurHelper;
573     ShortcutHandler *m_shortcutHandler;
574     bool m_dbusConnected;
575 #ifdef QTC_QT5_ENABLE_KDE
576     KSharedConfigPtr m_configFile;
577     KSharedConfigPtr m_kdeGlobals;
578 #endif
579 protected:
580     StylePlugin *m_plugin;
581     friend class StylePlugin;
582 };
583 }
584 
585 #endif
586