DtkWidget 5.6.0.2
DTK Widget module
dstyle.h
1// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#ifndef DSTYLE_H
6#define DSTYLE_H
7
8#include <dtkwidget_global.h>
9#include <DPalette>
10#include <DDciIcon>
11
12#include <QCommonStyle>
13#include <QPainter>
14#include <QIconEngine>
15#include <QStyleOption>
16
17QT_BEGIN_NAMESPACE
18class QTextLayout;
19QT_END_NAMESPACE
20
21DGUI_USE_NAMESPACE
22DWIDGET_BEGIN_NAMESPACE
23
24namespace DDrawUtils
25{
26enum Corner {
27 TopLeftCorner = 0x00001,
28 TopRightCorner = 0x00002,
29 BottomLeftCorner = 0x00004,
30 BottomRightCorner = 0x00008
31};
32Q_DECLARE_FLAGS(Corners, Corner)
33
34void drawShadow(QPainter *pa, const QRect &rect, qreal xRadius, qreal yRadius, const QColor &sc, qreal radius, const QPoint &offset);
35void drawShadow(QPainter *pa, const QRect &rect, const QPainterPath &path, const QColor &sc, int radius, const QPoint &offset);
36void drawRoundedRect(QPainter *pa, const QRect &rect, qreal xRadius, qreal yRadius, Corners corners, Qt::SizeMode mode = Qt::AbsoluteSize);
37void drawFork(QPainter *pa, const QRectF &rect, const QColor &color, int width = 2);
38void drawMark(QPainter *pa, const QRectF &rect, const QColor &boxInside, const QColor &boxOutside, const int penWidth, const int outLineLeng = 2);
39void drawBorder(QPainter *pa, const QRectF &rect, const QBrush &brush, int borderWidth, int radius);
40void drawArrow(QPainter *pa, const QRectF &rect, const QColor &color, Qt::ArrowType arrow, int width = 2);
41void drawPlus(QPainter *painter, const QRectF &rect, const QColor &color , qreal width);
42void drawSubtract(QPainter *painter, const QRectF &rect, const QColor &color, qreal width);
43
44void drawForkElement(QPainter *pa, const QRectF &rect);
45void drawArrowElement(Qt::ArrowType arrow, QPainter *pa, const QRectF &rect);
46void drawDecreaseElement(QPainter *pa, const QRectF &rect);
47void drawIncreaseElement(QPainter *pa, const QRectF &rect);
48void drawMarkElement(QPainter *pa, const QRectF &rect);
49void drawSelectElement(QPainter *pa, const QRectF &rect);
50void drawEditElement(QPainter *pa, const QRectF &rect);
51void drawExpandElement(QPainter *pa, const QRectF &rect);
52void drawReduceElement(QPainter *pa, const QRectF &rect);
53void drawLockElement(QPainter *pa, const QRectF &rect);
54void drawUnlockElement(QPainter *pa, const QRectF &rect);
55void drawMediaVolumeElement(QPainter *pa, const QRectF &rect);
56void drawMediaVolumeFullElement(QPainter *pa, const QRectF &rect);
57void drawMediaVolumeMutedElement(QPainter *pa, const QRectF &rect);
58void drawMediaVolumeLeftElement(QPainter *pa, const QRectF &rect);
59void drawMediaVolumeRightElement(QPainter *pa, const QRectF &rect);
60void drawArrowEnter(QPainter *pa, const QRectF &rect);
61void drawArrowLeave(QPainter *pa, const QRectF &rect);
62void drawArrowNext(QPainter *pa, const QRectF &rect);
63void drawArrowPrev(QPainter *pa, const QRectF &rect);
64void drawShowPassword(QPainter *pa, const QRectF &rect);
65void drawHidePassword(QPainter *pa, const QRectF &rect);
66void drawCloseButton(QPainter *pa, const QRectF &rect);
67void drawIndicatorMajuscule(QPainter *pa, const QRectF &rect);
68void drawIndicatorUnchecked(QPainter *pa, const QRectF &rect);
69void drawIndicatorChecked(QPainter *pa, const QRectF &rect);
70void drawDeleteButton(QPainter *pa, const QRectF &rect);
71void drawAddButton(QPainter *pa, const QRectF &rect);
72
73void drawTitleBarMenuButton(QPainter *pa, const QRectF &rect);
74void drawTitleBarMinButton(QPainter *pa, const QRectF &rect);
75void drawTitleBarMaxButton(QPainter *pa, const QRectF &rect);
76void drawTitleBarCloseButton(QPainter *pa, const QRectF &rect);
77void drawTitleBarNormalButton(QPainter *pa, const QRectF &rect);
78void drawTitleQuitFullButton(QPainter *pa, const QRectF &rect);
79void drawArrowUp(QPainter *pa, const QRectF &rect);
80void drawArrowDown(QPainter *pa, const QRectF &rect);
81void drawArrowLeft(QPainter *pa, const QRectF &rect);
82void drawArrowRight(QPainter *pa, const QRectF &rect);
83void drawArrowBack(QPainter *pa, const QRectF &rect);
84void drawArrowForward(QPainter *pa, const QRectF &rect);
85void drawLineEditClearButton(QPainter *pa, const QRectF &rect);
86
87Q_DECLARE_OPERATORS_FOR_FLAGS(Corners)
88}
89
90class DViewItemAction;
91class DStyle : public QCommonStyle
92{
93 Q_OBJECT
94
95public:
96 enum PrimitiveElement {
97 PE_ItemBackground = QStyle::PE_CustomBase + 1, //列表项的背景色
98 PE_IconButtonPanel,
99 PE_IconButtonIcon,
100 PE_Icon,
101 PE_SwitchButtonGroove,
102 PE_SwitchButtonHandle,
103 PE_FloatingWidget,
104 PE_CustomBase = QStyle::PE_CustomBase + 0xf00000
105 };
106
107 enum ControlElement {
108 CE_IconButton = QStyle::CE_CustomBase + 1,
109 CE_SwitchButton,
110 CE_FloatingWidget,
111 CE_ButtonBoxButton,
112 CE_ButtonBoxButtonBevel,
113 CE_ButtonBoxButtonLabel,
114 CE_TextButton,
115 CE_CustomBase = QStyle::CE_CustomBase + 0xf00000
116 };
117
118 enum PixelMetric {
119 PM_FocusBorderWidth = QStyle::PM_CustomBase + 1, //控件焦点状态的边框宽度
120 PM_FocusBorderSpacing, //控件内容和border之间的间隔
121 PM_FrameRadius, //控件的圆角大小
122 PM_ShadowRadius, //控件阴影效果的半径
123 PM_ShadowHOffset, //阴影在水平方向的偏移
124 PM_ShadowVOffset, //阴影在竖直方向的偏移
125 PM_FrameMargins, //控件的margins区域,控件内容 = 控件大小 - FrameMargins
126 PM_IconButtonIconSize,
127 PM_TopLevelWindowRadius, //窗口的圆角大小
128 PM_SwitchButtonHandleWidth,
129 PM_SwithcButtonHandleHeight,
130 PM_FloatingWidgetRadius, //(基类)的圆角半径:控件内容-Radius < 控件内容 < 控件显示大小
131 PM_FloatingWidgetShadowRadius, //(基类)的阴影Radius区域:控件内容 < 控件内容+阴影margins < 控件内容+阴影margins+阴影Radius = 控件显示大小
132 PM_FloatingWidgetShadowMargins, //(基类)阴影的宽度 = 控件显示大小 - 阴影Radius - 控件内容
133 PM_FloatingWidgetShadowHOffset, //(基类)的阴影水平偏移
134 PM_FloatingWidgetShadowVOffset, //(基类)的阴影竖直偏移
135 PM_ContentsMargins, //内容的边距(一般只用于左右边距)
136 PM_ContentsSpacing, //内容的间距(可用于列表项中每一项的距离)
137 PM_ButtonMinimizedSize, //按钮控件的最小大小
138 PM_CustomBase = QStyle::PM_CustomBase + 0xf00000
139 };
140
141 enum SubElement {
142 SE_IconButtonIcon = QStyle::SE_CustomBase + 1,
143 SE_SwitchButtonGroove,
144 SE_SwitchButtonHandle,
145 SE_FloatingWidget,
146 SE_ButtonBoxButtonContents,
147 SE_ButtonBoxButtonFocusRect,
148 SE_CustomBase = QStyle::SE_CustomBase + 0xf00000
149 };
150
151 enum ContentsType {
152 CT_IconButton = QStyle::CT_CustomBase + 1,
153 CT_SwitchButton,
154 CT_FloatingWidget,
155 CT_ButtonBoxButton,
156 CT_CustomBase = QStyle::CT_CustomBase + 0xf00000
157 };
158
159 enum StyleState {
160 SS_NormalState = 0x00000000,
161 SS_HoverState = 0x00000001,
162 SS_PressState = 0x00000002,
163 SS_StateCustomBase = 0x000000f0,
164
165 StyleState_Mask = 0x000000ff,
166 SS_CheckedFlag = 0x00000100,
167 SS_SelectedFlag = 0x00000200,
168 SS_FocusFlag = 0x00000400,
169 SS_FlagCustomBase = 0xf00000
170 };
171 Q_DECLARE_FLAGS(StateFlags, StyleState)
172
173 enum StandardPixmap {
174 SP_ForkElement = QStyle::SP_CustomBase + 1,
175 SP_DecreaseElement, //减少(-)
176 SP_IncreaseElement, //增加(+)
177 SP_MarkElement, //对勾
178 SP_SelectElement, //选择(...)
179 SP_EditElement, //编辑
180 SP_ExpandElement, //展开
181 SP_ReduceElement, //收缩
182 SP_LockElement, //锁定
183 SP_UnlockElement, //解锁
184 SP_MediaVolumeLowElement, //音量
185 SP_MediaVolumeHighElement, //满音量
186 SP_MediaVolumeMutedElement, //静音
187 SP_MediaVolumeLeftElement, //左声道
188 SP_MediaVolumeRightElement, //右声道
189 SP_ArrowEnter, //进入
190 SP_ArrowLeave, //离开
191 SP_ArrowNext, //下一页
192 SP_ArrowPrev, //上一页
193 SP_ShowPassword, //显示密码
194 SP_HidePassword, //因此密码
195 SP_CloseButton, //关闭按钮(X)
196 SP_IndicatorMajuscule, //大写标识
197 SP_IndicatorSearch, //搜索标识(放大镜)
198 SP_IndicatorUnchecked, //搜索标识(对应对勾的选中状态)
199 SP_IndicatorChecked, //搜索标识(对勾)
200 SP_DeleteButton, //删除按钮
201 SP_AddButton, //新增按钮
202 SP_TitleQuitFullButton, //标题栏(「」)
203 SP_TitleMoreButton, //标题栏 "更多" 按钮
204
205 SP_Title_SS_LeftButton, //标题栏左分屏按钮
206 SP_Title_SS_RightButton, //标题栏右分屏按钮
207 SP_Title_SS_ShowMaximizeButton, //标题栏最大化分屏按钮
208 SP_Title_SS_ShowNormalButton, //标题栏还原分屏按钮
209 SP_CustomBase = QStyle::SP_CustomBase + 0xf00000
210 };
211
212 static QColor adjustColor(const QColor &base,
213 qint8 hueFloat = 0, qint8 saturationFloat = 0, qint8 lightnessFloat = 0,
214 qint8 redFloat = 0, qint8 greenFloat = 0, qint8 blueFloat = 0, qint8 alphaFloat = 0);
215 static QColor blendColor(const QColor &substrate, const QColor &superstratum);
216 static QPair<QIcon::Mode, QIcon::State> toIconModeState(const QStyleOption *option);
217 static DDciIcon::Mode toDciIconMode(const QStyleOption *option);
218
219 static void setTooltipTextFormat(Qt::TextFormat format);
220 static Qt::TextFormat tooltipTextFormat();
221 static DStyle::StyleState getState(const QStyleOption *option);
222 static void setFocusRectVisible(QWidget *widget, bool visible);
223 static void setFrameRadius(QWidget *widget, int radius);
224 static void setUncheckedItemIndicatorVisible(QWidget *widget, bool visible);
225 DStyle();
226
227 static void drawPrimitive(const QStyle *style, DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr);
228 static void drawControl(const QStyle *style, DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr);
229 static int pixelMetric(const QStyle *style, DStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr);
230 static QRect subElementRect(const QStyle *style, DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr);
231 static QSize sizeFromContents(const QStyle *style, DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr);
232 static QIcon standardIcon(const QStyle *style, StandardPixmap st, const QStyleOption *opt = nullptr, const QWidget *widget = 0);
233
234 inline void drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
235 { proxy()->drawPrimitive(static_cast<QStyle::PrimitiveElement>(pe), opt, p, w); }
236 inline void drawControl(DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
237 { proxy()->drawControl(static_cast<QStyle::ControlElement>(ce), opt, p, w); }
238 inline int pixelMetric(DStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const
239 { return proxy()->pixelMetric(static_cast<QStyle::PixelMetric>(m), opt, widget); }
240 inline QRect subElementRect(DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const
241 { return proxy()->subElementRect(static_cast<QStyle::SubElement>(r), opt, widget); }
242 inline QSize sizeFromContents(DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr) const
243 { return proxy()->sizeFromContents(static_cast<QStyle::ContentsType>(ct), opt, contentsSize, widget); }
244 inline QIcon standardIcon(DStyle::StandardPixmap st, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const
245 { return proxy()->standardIcon(static_cast<QStyle::StandardPixmap>(st), opt, widget); }
246
247 void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const override;
248 void drawControl(QStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const override;
249 int pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const override;
250 int styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *shret) const override;
251 QRect subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const override;
252 QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr) const override;
253 QIcon standardIcon(QStyle::StandardPixmap st, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const override;
254
255 QPalette standardPalette() const override;
256 QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override;
257
258 // 获取一个加工后的画笔
259 QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
260 QPalette::ColorGroup cg = QPalette::Normal,
261 QPalette::ColorRole role = QPalette::NoRole) const;
262 QBrush generatedBrush(StyleState state, const QStyleOption *option, const QBrush &base,
263 QPalette::ColorGroup cg = QPalette::Normal,
264 QPalette::ColorRole role = QPalette::NoRole) const;
265 virtual QBrush generatedBrush(StateFlags flags, const QBrush &base,
266 QPalette::ColorGroup cg = QPalette::Normal,
267 QPalette::ColorRole role = QPalette::NoRole,
268 const QStyleOption *option = nullptr) const;
269
270 QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
271 DPalette::ColorGroup cg = DPalette::Normal,
272 DPalette::ColorType type = DPalette::ItemBackground) const;
273 QBrush generatedBrush(StyleState state, const QStyleOption *option, const QBrush &base,
274 DPalette::ColorGroup cg = DPalette::Normal,
275 DPalette::ColorType type = DPalette::ItemBackground) const;
276 virtual QBrush generatedBrush(StateFlags flags, const QBrush &base,
277 DPalette::ColorGroup cg = DPalette::Normal,
278 DPalette::ColorType type = DPalette::ItemBackground,
279 const QStyleOption *option = nullptr) const;
280
281 using QCommonStyle::drawPrimitive;
282 using QCommonStyle::drawControl;
283 using QCommonStyle::pixelMetric;
284 using QCommonStyle::subElementRect;
285 using QCommonStyle::sizeFromContents;
286 using QCommonStyle::standardIcon;
287
288#if QT_CONFIG(itemviews)
289 static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth);
290 static QSize viewItemSize(const QStyle *style, const QStyleOptionViewItem *option, int role);
291 static void viewItemLayout(const QStyle *style, const QStyleOptionViewItem *opt, QRect *pixmapRect,
292 QRect *textRect, QRect *checkRect, bool sizehint);
293 virtual void viewItemLayout(const QStyleOptionViewItem *opt, QRect *pixmapRect,
294 QRect *textRect, QRect *checkRect, bool sizehint) const;
295
296 static QRect viewItemDrawText(const QStyle *style, QPainter *p, const QStyleOptionViewItem *option, const QRect &rect);
297 virtual QRect viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const;
298#endif
299};
300
302{
303public:
304 inline DStyleHelper(const QStyle *style = nullptr) {
305 setStyle(style);
306 }
307
308 inline void setStyle(const QStyle *style) {
309 m_style = style;
310 m_dstyle = qobject_cast<const DStyle*>(style);
311 }
312
313 inline const QStyle *style() const
314 { return m_style; }
315 inline const DStyle *dstyle() const
316 { return m_dstyle; }
317
318 inline QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
319 QPalette::ColorGroup cg = QPalette::Normal,
320 QPalette::ColorRole role = QPalette::NoRole) const
321 { return m_dstyle ? m_dstyle->generatedBrush(option, base, cg, role) : base; }
322 inline QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
323 QPalette::ColorGroup cg = QPalette::Normal,
324 DPalette::ColorType type = DPalette::NoType) const
325 { return m_dstyle ? m_dstyle->generatedBrush(option, base, cg, type) : base; }
326 inline QColor getColor(const QStyleOption *option, QPalette::ColorRole role) const
327 { return generatedBrush(option, option->palette.brush(role), option->palette.currentColorGroup(), role).color(); }
328 inline QColor getColor(const QStyleOption *option, const DPalette &palette, DPalette::ColorType type) const
329 { return generatedBrush(option, palette.brush(type), palette.currentColorGroup(), type).color(); }
330 template<class T>
331 inline QColor getColor(const T *option, DPalette::ColorType type) const
332 { return getColor(option, option->dpalette, type); }
333
334 inline void drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
335 { m_dstyle ? m_dstyle->drawPrimitive(pe, opt, p, w) : DStyle::drawPrimitive(m_style, pe, opt, p, w); }
336 inline void drawControl(DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
337 { m_dstyle ? m_dstyle->drawControl(ce, opt, p, w) : DStyle::drawControl(m_style, ce, opt, p, w); }
338 inline int pixelMetric(DStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const
339 { return m_dstyle ? m_dstyle->pixelMetric(m, opt, widget) : DStyle::pixelMetric(m_style, m, opt, widget); }
340 inline QRect subElementRect(DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const
341 { return m_dstyle ? m_dstyle->subElementRect(r, opt, widget) : DStyle::subElementRect(m_style, r, opt, widget); }
342 inline QSize sizeFromContents(DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr) const
343 { return m_dstyle ? m_dstyle->sizeFromContents(ct, opt, contentsSize, widget) : DStyle::sizeFromContents(m_style, ct, opt, contentsSize, widget); }
344 inline QIcon standardIcon(DStyle::StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget = nullptr) const
345 { return m_dstyle ? m_dstyle->standardIcon(standardIcon, opt, widget) : DStyle::standardIcon(m_style, standardIcon, opt, widget); }
346
347private:
348 const QStyle *m_style;
349 const DStyle *m_dstyle;
350};
351
352class DStylePainter : public QPainter
353{
354public:
355 inline DStylePainter() : QPainter(), widget(nullptr), wstyle(nullptr) {}
356 inline explicit DStylePainter(QWidget *w) { begin(w, w); }
357 inline DStylePainter(QPaintDevice *pd, QWidget *w) { begin(pd, w); }
358 inline bool begin(QWidget *w) { return begin(w, w); }
359 inline bool begin(QPaintDevice *pd, QWidget *w) {
360 Q_ASSERT_X(w, "DStylePainter::DStylePainter", "Widget must be non-zero");
361 widget = w;
362 wstyle = w->style();
363 dstyle.setStyle(wstyle);
364 return QPainter::begin(pd);
365 };
366 inline void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt);
367 inline void drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption &opt);
368 inline void drawControl(QStyle::ControlElement ce, const QStyleOption &opt);
369 inline void drawControl(DStyle::ControlElement ce, const QStyleOption &opt);
370 inline void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt);
371 inline void drawItemText(const QRect &r, int flags, const QPalette &pal, bool enabled,
372 const QString &text, QPalette::ColorRole textRole = QPalette::NoRole);
373 inline void drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap);
374 inline QStyle *style() const { return wstyle; }
375
376private:
377 QWidget *widget;
378 QStyle *wstyle;
379 DStyleHelper dstyle;
380 Q_DISABLE_COPY(DStylePainter)
381};
382
383void DStylePainter::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt)
384{
385 wstyle->drawPrimitive(pe, &opt, this, widget);
386}
387
388void DStylePainter::drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption &opt)
389{
390 dstyle.drawPrimitive(pe, &opt, this, widget);
391}
392
393void DStylePainter::drawControl(QStyle::ControlElement ce, const QStyleOption &opt)
394{
395 wstyle->drawControl(ce, &opt, this, widget);
396}
397
398void DStylePainter::drawControl(DStyle::ControlElement ce, const QStyleOption &opt)
399{
400 dstyle.drawControl(ce, &opt, this, widget);
401}
402
403void DStylePainter::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt)
404{
405 wstyle->drawComplexControl(cc, &opt, this, widget);
406}
407
408void DStylePainter::drawItemText(const QRect &r, int flags, const QPalette &pal, bool enabled,
409 const QString &text, QPalette::ColorRole textRole)
410{
411 wstyle->drawItemText(this, r, flags, pal, enabled, text, textRole);
412}
413
414void DStylePainter::drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap)
415{
416 wstyle->drawItemPixmap(this, r, flags, pixmap);
417}
418
419class DStyledIconEngine : public QIconEngine
420{
421public:
422 static void drawIcon(const QIcon &icon, QPainter *pa, const QRectF &rect);
423
424 typedef std::function<void(QPainter *, const QRectF &rect)> DrawFun;
425 DStyledIconEngine(DrawFun drawFun, const QString &iconName = QString());
426
427 void bindDrawFun(DrawFun drawFun);
428 void setIconName(const QString &name);
429
430 QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
431 void paint(QPainter *painter, const QPalette &palette, const QRectF &rect);
432 void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override;
433
434 QIconEngine *clone() const override;
435 void setFrontRole(const QWidget* widget, QPalette::ColorRole role);
436
437protected:
438 void virtual_hook(int id, void *data) override;
439
440 DrawFun m_drawFun = nullptr;
441 QString m_iconName;
442 QPalette::ColorRole m_painterRole;
443 const QWidget *m_widget;
444};
445
446DWIDGET_END_NAMESPACE
447
448#endif // DSTYLE_H
Definition: dstyle.h:302
Definition: dstyle.h:353
DStyle 提供了一个 Dtk 控件的基础类.
Definition: dstyle.h:92
QBrush generatedBrush(const QStyleOption *option, const QBrush &base, QPalette::ColorGroup cg=QPalette::Normal, QPalette::ColorRole role=QPalette::NoRole) const
获取一个加工后的画刷
Definition: dstyle.cpp:2256
DStyledIconEngine一个修改的 QIconEngine 类.
Definition: dstyle.h:420
ArrowType
SizeMode
TextFormat