8#include <dtkwidget_global.h>
12#include <QCommonStyle>
15#include <QStyleOption>
22DWIDGET_BEGIN_NAMESPACE
32Q_DECLARE_FLAGS(Corners, Corner)
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);
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);
44void drawForkElement(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);
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);
87Q_DECLARE_OPERATORS_FOR_FLAGS(Corners)
96 enum PrimitiveElement {
97 PE_ItemBackground = QStyle::PE_CustomBase + 1,
101 PE_SwitchButtonGroove,
102 PE_SwitchButtonHandle,
104 PE_CustomBase = QStyle::PE_CustomBase + 0xf00000
107 enum ControlElement {
108 CE_IconButton = QStyle::CE_CustomBase + 1,
112 CE_ButtonBoxButtonBevel,
113 CE_ButtonBoxButtonLabel,
115 CE_CustomBase = QStyle::CE_CustomBase + 0xf00000
119 PM_FocusBorderWidth = QStyle::PM_CustomBase + 1,
120 PM_FocusBorderSpacing,
126 PM_IconButtonIconSize,
127 PM_TopLevelWindowRadius,
128 PM_SwitchButtonHandleWidth,
129 PM_SwithcButtonHandleHeight,
130 PM_FloatingWidgetRadius,
131 PM_FloatingWidgetShadowRadius,
132 PM_FloatingWidgetShadowMargins,
133 PM_FloatingWidgetShadowHOffset,
134 PM_FloatingWidgetShadowVOffset,
137 PM_ButtonMinimizedSize,
138 PM_CustomBase = QStyle::PM_CustomBase + 0xf00000
142 SE_IconButtonIcon = QStyle::SE_CustomBase + 1,
143 SE_SwitchButtonGroove,
144 SE_SwitchButtonHandle,
146 SE_ButtonBoxButtonContents,
147 SE_ButtonBoxButtonFocusRect,
148 SE_CustomBase = QStyle::SE_CustomBase + 0xf00000
152 CT_IconButton = QStyle::CT_CustomBase + 1,
156 CT_CustomBase = QStyle::CT_CustomBase + 0xf00000
160 SS_NormalState = 0x00000000,
161 SS_HoverState = 0x00000001,
162 SS_PressState = 0x00000002,
163 SS_StateCustomBase = 0x000000f0,
165 StyleState_Mask = 0x000000ff,
166 SS_CheckedFlag = 0x00000100,
167 SS_SelectedFlag = 0x00000200,
168 SS_FocusFlag = 0x00000400,
169 SS_FlagCustomBase = 0xf00000
171 Q_DECLARE_FLAGS(StateFlags, StyleState)
173 enum StandardPixmap {
174 SP_ForkElement = QStyle::SP_CustomBase + 1,
184 SP_MediaVolumeLowElement,
185 SP_MediaVolumeHighElement,
186 SP_MediaVolumeMutedElement,
187 SP_MediaVolumeLeftElement,
188 SP_MediaVolumeRightElement,
196 SP_IndicatorMajuscule,
198 SP_IndicatorUnchecked,
202 SP_TitleQuitFullButton,
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
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);
217 static DDciIcon::Mode toDciIconMode(
const QStyleOption *option);
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);
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);
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); }
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;
255 QPalette standardPalette()
const override;
256 QPixmap generatedIconPixmap(QIcon::Mode iconMode,
const QPixmap &pixmap,
const QStyleOption *opt)
const override;
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;
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;
281 using QCommonStyle::drawPrimitive;
282 using QCommonStyle::drawControl;
283 using QCommonStyle::pixelMetric;
284 using QCommonStyle::subElementRect;
285 using QCommonStyle::sizeFromContents;
286 using QCommonStyle::standardIcon;
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;
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;
308 inline void setStyle(
const QStyle *style) {
310 m_dstyle = qobject_cast<const DStyle*>(style);
313 inline const QStyle *style()
const
315 inline const DStyle *dstyle()
const
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(); }
331 inline QColor getColor(
const T *option, DPalette::ColorType type)
const
332 {
return getColor(option, option->dpalette, type); }
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); }
348 const QStyle *m_style;
355 inline DStylePainter() : QPainter(), widget(
nullptr), wstyle(
nullptr) {}
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");
363 dstyle.setStyle(wstyle);
364 return QPainter::begin(pd);
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; }
383void DStylePainter::drawPrimitive(QStyle::PrimitiveElement pe,
const QStyleOption &opt)
385 wstyle->drawPrimitive(pe, &opt,
this, widget);
388void DStylePainter::drawPrimitive(DStyle::PrimitiveElement pe,
const QStyleOption &opt)
390 dstyle.drawPrimitive(pe, &opt,
this, widget);
393void DStylePainter::drawControl(QStyle::ControlElement ce,
const QStyleOption &opt)
395 wstyle->drawControl(ce, &opt,
this, widget);
398void DStylePainter::drawControl(DStyle::ControlElement ce,
const QStyleOption &opt)
400 dstyle.drawControl(ce, &opt,
this, widget);
403void DStylePainter::drawComplexControl(QStyle::ComplexControl cc,
const QStyleOptionComplex &opt)
405 wstyle->drawComplexControl(cc, &opt,
this, widget);
408void DStylePainter::drawItemText(
const QRect &r,
int flags,
const QPalette &pal,
bool enabled,
409 const QString &text, QPalette::ColorRole textRole)
411 wstyle->drawItemText(
this, r, flags, pal, enabled, text, textRole);
414void DStylePainter::drawItemPixmap(
const QRect &r,
int flags,
const QPixmap &pixmap)
416 wstyle->drawItemPixmap(
this, r, flags, pixmap);
422 static void drawIcon(
const QIcon &icon, QPainter *pa,
const QRectF &rect);
424 typedef std::function<void(QPainter *,
const QRectF &rect)> DrawFun;
427 void bindDrawFun(DrawFun drawFun);
428 void setIconName(
const QString &name);
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;
434 QIconEngine *clone()
const override;
435 void setFrontRole(
const QWidget* widget, QPalette::ColorRole role);
438 void virtual_hook(
int id,
void *data)
override;
440 DrawFun m_drawFun =
nullptr;
442 QPalette::ColorRole m_painterRole;
443 const QWidget *m_widget;