-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathvirtuality.h
304 lines (254 loc) · 13.6 KB
/
virtuality.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
/*
* Virtuality Style for Qt4 and Qt5
* Copyright 2009-2014 by Thomas Lübking <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef BE_STYLE_H
#define BE_STYLE_H
class QAbstractItemView;
class QSettings;
class QStyleOptionToolButton;
class QToolBar;
#include <QCommonStyle>
#include <QStyleOption>
#include <QStyleOptionButton>
#include <QStyleOptionMenuItem>
#include <QStylePlugin>
#include "dpi.h"
#include "types.h"
#include "config.h"
#include "debug.h"
#ifndef Q_WS_X11
#define QT_NO_XRENDER 1
#endif
namespace BE
{
#ifdef Q_WS_X11
typedef struct _WindowData WindowData;
#endif
class EventKiller : public QObject {
protected:
bool eventFilter( QObject *, QEvent *) { return true; }
};
enum KStyleFeatureRequest { Shadow = 1<<0, NoShadow = 1<<1, Blur = 1<<2, NoBlur = 1<<3,
NoARGB = 1<<4, DragWidget = 1<<5, NoDragWidget = 1<<6 };
class
#ifndef Q_WS_WIN
Q_GUI_EXPORT
#endif
Style : public QCommonStyle
{
Q_OBJECT
Q_CLASSINFO ("X-KDE-CustomElements", "true")
public:
enum ColorRole { Bg = 0, Fg = 1 };
enum WindowDecoration { Shadowed = 1, Rounded = 2 };
Style(const QString &name);
~Style();
void drawComplexControl(ComplexControl, const QStyleOptionComplex*, QPainter*, const QWidget *widget = 0) const;
void drawControl(ControlElement, const QStyleOption*, QPainter *, const QWidget *widget = 0) const;
void drawItemText(QPainter*, const QRect&, int alignment, const QPalette&, bool enabled, const QString&, QPalette::ColorRole, QRect *boundingRect) const;
inline void drawItemText(QPainter *p, const QRect &r, int align, const QPalette &pal,
bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const
{ drawItemText(p, r, align, pal, enabled, text, textRole, NULL); }
void drawPrimitive(PrimitiveElement, const QStyleOption*, QPainter*, const QWidget *w = 0) const;
bool eventFilter(QObject*, QEvent*);
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
void polish(QApplication *a);
void polish(QPalette &pal, bool onInit);
inline void polish(QPalette &pal) { polish(pal, true); }
void polish(QWidget *w);
QSize sizeFromContents(ContentsType, const QStyleOption*, const QSize &contentsSize, const QWidget *widget = 0) const;
QPalette standardPalette() const;
QPixmap standardPixmap(StandardPixmap, const QStyleOption *opt = 0, const QWidget *w = 0) const;
int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const;
QRect subControlRect(ComplexControl, const QStyleOptionComplex*, SubControl, const QWidget *widget = 0) const;
QRect subElementRect(SubElement element, const QStyleOption*, const QWidget * widget = 0) const;
void unpolish(QApplication*);
void unpolish(QWidget*);
public:
static void drawArrow(Navi::Direction, const QRect&, QPainter*, const QWidget *w = 0);
static void drawSolidArrow(Navi::Direction, const QRect&, QPainter*, const QWidget *w = 0);
static bool serverSupportsShadows();
public:
static Config config;
static float halfStroke;
protected:
virtual void init();
// element painting routines ===============
void skip(const QStyleOption*, QPainter*, const QWidget*) const {}
// buttons.cpp
void drawButtonFrame(const QStyleOption *o, QPainter *p, const QWidget *w, int animStep) const;
inline void drawButtonFrame(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawButtonFrame(o, p, w, -1); }
inline void drawCheckBox(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawRadioOrCheckBox(o, p, w, false); }
void drawCheckBoxItem(const QStyleOption*, QPainter*, const QWidget*) const;
void drawCheckLabel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawPushButton(const QStyleOption*, QPainter*, const QWidget*) const;
void drawPushButtonBevel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawPushButtonLabel(const QStyleOption*, QPainter*, const QWidget*) const;
inline void drawRadio(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawRadioOrCheckBox(o, p, w, true); }
void drawRadioItem(const QStyleOption*, QPainter*, const QWidget*) const;
void drawRadioOrCheckBox(const QStyleOption*, QPainter*, const QWidget*, bool) const;
// docks.cpp
void drawDockBg(const QStyleOption*, QPainter*, const QWidget*) const;
inline void drawDockHandle(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawHandle(o, p, w, config.invert.docks); }
void drawDockTitle(const QStyleOption*, QPainter*, const QWidget*) const;
void drawHandle(const QStyleOption*, QPainter*, const QWidget*, bool) const;
void drawMDIControls(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
inline void drawSplitterHandle(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawHandle(o, p, w, false); }
inline void drawToolbarHandle(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawHandle(o, p, w, config.invert.toolbars); }
// frames.cpp
void drawFrame(const QStyleOption*, QPainter*, const QWidget*) const;
void drawFocusFrame(const QStyleOption*, QPainter*, const QWidget*) const;
void drawGroupBox(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
void drawGroupBoxFrame(const QStyleOption*, QPainter*, const QWidget*) const;
// input.cpp
void drawComboBox(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
void drawComboBoxLabel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawLineEditFrame(const QStyleOption*, QPainter*, const QWidget*) const;
void drawLineEdit(const QStyleOption*, QPainter*, const QWidget*, bool round) const;
inline void drawLineEdit(const QStyleOption *opt, QPainter *p, const QWidget *w) const
{ drawLineEdit(opt, p, w, false); }
void drawSpinBox(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
// menus.cpp
void drawMenuBarItem(const QStyleOption*, QPainter*, const QWidget*) const;
void drawMenuItem(const QStyleOption*, QPainter*, const QWidget*) const;
void drawMenuScroller(const QStyleOption*, QPainter*, const QWidget*) const;
void drawMenuTearOff(const QStyleOption*, QPainter*, const QWidget*) const;
// progress.cpp
void drawCapacityBar(const QStyleOption*, QPainter*, const QWidget*) const;
void drawProgressBar(const QStyleOption*, QPainter*, const QWidget*) const;
inline void drawProgressBarContents(const QStyleOption * option, QPainter * painter, const QWidget * widget) const
{ drawProgressBarGC(option, painter, widget, true); }
void drawProgressBarGC(const QStyleOption*, QPainter*, const QWidget*, bool) const;
inline void drawProgressBarGroove(const QStyleOption * option, QPainter * painter, const QWidget * widget) const
{ drawProgressBarGC(option, painter, widget, false); }
void drawProgressBarLabel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawSimpleProgress(const QStyleOptionProgressBar*, QPainter*, const QWidget*, bool isListView) const;
// scrollareas.cpp
void drawScrollAreaCorner(const QStyleOption*, QPainter*, const QWidget*) const;
void drawScrollBar(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
inline void drawScrollBarAddLine(const QStyleOption * option, QPainter * painter, const QWidget * widget) const
{ drawScrollBarButton(option, painter, widget, false); }
void drawScrollBarButton(const QStyleOption*, QPainter*, const QWidget* , bool) const;
void drawScrollBarSlider(const QStyleOption*, QPainter*, const QWidget*) const;
inline void drawScrollBarSubLine(const QStyleOption * option, QPainter * painter, const QWidget * widget) const
{ drawScrollBarButton(option, painter, widget, true); }
// shapes.cpp
void drawCheck(const QStyleOption*, QPainter*, const QWidget*, bool exclusive, bool itemview) const;
#define ARROW_FUNC(_D_) \
inline void drawSolidArrow##_D_(const QStyleOption *option, QPainter *painter, const QWidget *w) const { \
const int dx = option->rect.width()/8, dy = option->rect.height()/8; \
drawSolidArrow(Navi::_D_, option->rect.adjusted(dx,dy,-dx,-dy), painter, w); \
}
ARROW_FUNC(N) ARROW_FUNC(S) ARROW_FUNC(E) ARROW_FUNC(W)
#undef ARROW_FUNC
inline void drawExclusiveCheck(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawCheck(o, p, w, true, false); }
inline void drawItemCheck(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawCheck(o, p, w, false, true); }
inline void drawMenuCheck(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawCheck(o, p, w, false, false); }
// slider.cpp
void drawDial(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
void drawSlider(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
// tabbing.cpp
void calcAnimStep(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTab(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTabBar(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTabCloser(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTabLabel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTabShape(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTabWidget(const QStyleOption*, QPainter*, const QWidget*) const;
void drawToolboxTab(const QStyleOption*, QPainter*, const QWidget*) const;
void drawToolboxTabLabel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawToolboxTabShape(const QStyleOption*, QPainter*, const QWidget*) const;
// toolbars.cpp
void drawToolButton(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
void drawToolButtonLabel(const QStyleOption*, QPainter*, const QWidget*) const;
// views.cpp
void drawBranch(const QStyleOption*, QPainter*, const QWidget*) const;
void drawHeader(const QStyleOption*, QPainter*, const QWidget*) const;
void drawHeaderArrow(const QStyleOption*, QPainter*, const QWidget*) const;
void drawHeaderLabel(const QStyleOption*, QPainter*, const QWidget*) const;
void drawHeaderSection(const QStyleOption*, QPainter*, const QWidget*) const;
void drawItem(const QStyleOption*, QPainter*, const QWidget*, bool isItem) const;
inline void drawItemItem(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawItem(o, p, w, true); }
inline void drawItemRow(const QStyleOption *o, QPainter *p, const QWidget *w) const
{ drawItem(o, p, w, false); }
void drawViewItem(const QStyleOption *, QPainter *, const QWidget *) const;
void drawRubberBand(const QStyleOption*, QPainter*, const QWidget*) const;
// window.cpp
void drawSizeGrip(const QStyleOption*, QPainter*, const QWidget*) const;
void drawTitleBar(const QStyleOptionComplex*, QPainter*, const QWidget*) const;
void drawToolTip(const QStyleOption*, QPainter*, const QWidget*) const;
void drawWindowBg(const QStyleOption*, QPainter*, const QWidget*) const;
void drawWindowFrame(const QStyleOption*, QPainter*, const QWidget*) const;
private:
Q_DISABLE_COPY(Style)
private slots:
void clearScrollbarCache();
void dockLocationChanged( Qt::DockWidgetArea );
void setMenuIconsVisible(bool vis);
void removeAppEventFilter();
void resetRingPix();
void unlockDocks(bool);
void updateBlurRegions() const;
private:
enum PainterStorage { Pen = 1<<0, Brush = 1<<1, Alias = 1<<2, Font = 1<<3, Clip = 1<<4 };
void drawSliderHandle(const QRect &, const QStyleOption *, QPainter *, int step) const;
int elementId(const QString &string) const;
void erase(const QStyleOption*, QPainter*, const QWidget*, const QPoint *off = 0) const;
void initMetrics();
QColor mapFadeColor(const QColor &color, int index) const;
void readSettings(QString appName = QString());
void registerRoutines();
void setupDecoFor(QWidget *w, const QPalette &pal);
void swapPalette(QWidget *widget);
private:
static bool hasMenuIndicator(const QStyleOptionToolButton *tb);
static void restorePainter(QPainter*, int);
#define RESTORE_PAINTER restorePainter(painter, storedPainterFlags);
static int savePainter(QPainter*, int);
#define SAVE_PAINTER(_F_) int storedPainterFlags = savePainter(painter, _F_)
private:
bool m_usingStandardPalette;
private:
// gtk-qt and other workarounds
static AppType appType;
static EventKiller eventKiller;
static QPalette invertedPalette;
// KDE palette fix..
static QPalette *originalPalette;
};
} // namespace BE
class VirtualityStylePlugin : public QStylePlugin
{
Q_OBJECT
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID QStyleFactoryInterface_iid FILE "virtuality.json")
#endif
public:
QStringList keys() const;
QStyle *create(const QString &key);
};
#endif //BE_STYLE_H