1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtWidgets module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef QSTYLEPAINTER_H
41 #define QSTYLEPAINTER_H
42 
43 #include <QtWidgets/qtwidgetsglobal.h>
44 #include <QtGui/qpainter.h>
45 #include <QtWidgets/qstyle.h>
46 #include <QtWidgets/qwidget.h>
47 
48 QT_BEGIN_NAMESPACE
49 
50 
51 class QStylePainter : public QPainter
52 {
53 public:
QStylePainter()54     inline QStylePainter() : QPainter(), widget(nullptr), wstyle(nullptr) {}
QStylePainter(QWidget * w)55     inline explicit QStylePainter(QWidget *w) { begin(w, w); }
QStylePainter(QPaintDevice * pd,QWidget * w)56     inline QStylePainter(QPaintDevice *pd, QWidget *w) { begin(pd, w); }
begin(QWidget * w)57     inline bool begin(QWidget *w) { return begin(w, w); }
begin(QPaintDevice * pd,QWidget * w)58     inline bool begin(QPaintDevice *pd, QWidget *w) {
59         Q_ASSERT_X(w, "QStylePainter::QStylePainter", "Widget must be non-zero");
60         widget = w;
61         wstyle = w->style();
62         return QPainter::begin(pd);
63     };
64     inline void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt);
65     inline void drawControl(QStyle::ControlElement ce, const QStyleOption &opt);
66     inline void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt);
67     inline void drawItemText(const QRect &r, int flags, const QPalette &pal, bool enabled,
68                              const QString &text, QPalette::ColorRole textRole = QPalette::NoRole);
69     inline void drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap);
style()70     inline QStyle *style() const { return wstyle; }
71 
72 private:
73     QWidget *widget;
74     QStyle *wstyle;
75     Q_DISABLE_COPY(QStylePainter)
76 };
77 
drawPrimitive(QStyle::PrimitiveElement pe,const QStyleOption & opt)78 void QStylePainter::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt)
79 {
80     wstyle->drawPrimitive(pe, &opt, this, widget);
81 }
82 
drawControl(QStyle::ControlElement ce,const QStyleOption & opt)83 void QStylePainter::drawControl(QStyle::ControlElement ce, const QStyleOption &opt)
84 {
85     wstyle->drawControl(ce, &opt, this, widget);
86 }
87 
drawComplexControl(QStyle::ComplexControl cc,const QStyleOptionComplex & opt)88 void QStylePainter::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt)
89 {
90     wstyle->drawComplexControl(cc, &opt, this, widget);
91 }
92 
drawItemText(const QRect & r,int flags,const QPalette & pal,bool enabled,const QString & text,QPalette::ColorRole textRole)93 void QStylePainter::drawItemText(const QRect &r, int flags, const QPalette &pal, bool enabled,
94                                  const QString &text, QPalette::ColorRole textRole)
95 {
96     wstyle->drawItemText(this, r, flags, pal, enabled, text, textRole);
97 }
98 
drawItemPixmap(const QRect & r,int flags,const QPixmap & pixmap)99 void QStylePainter::drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap)
100 {
101     wstyle->drawItemPixmap(this, r, flags, pixmap);
102 }
103 
104 QT_END_NAMESPACE
105 
106 #endif // QSTYLEPAINTER_H
107