1 /****************************************************************************
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Copyright (C) 2016 Ivailo Monev
6 ** This file is part of the QtGui module of the Katie Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser
12 ** General Public License version 2.1 as published by the Free Software
13 ** Foundation and appearing in the file LICENSE.LGPL included in the
14 ** packaging of this file. Please review the following information to
15 ** ensure the GNU Lesser General Public License version 2.1 requirements
16 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
20 ****************************************************************************/
22 #ifndef QPAINTENGINEEX_P_H
23 #define QPAINTENGINEEX_P_H
29 // This file is not part of the Katie API. It exists purely as an
30 // implementation detail. This header file may change from version to
31 // version without notice, or even be removed.
36 #include <QtGui/qpaintengine.h>
38 #include "qpaintengine_p.h"
39 #include "qstroker_p.h"
40 #include "qpainter_p.h"
41 #include "qvectorpath_p.h"
49 class QPaintEngineExPrivate;
52 class QRectVectorPath : public QVectorPath {
54 inline void set(const QRect &r) {
56 qreal right = r.x() + r.width();
58 qreal bottom = r.y() + r.height();
69 inline void set(const QRectF &r) {
71 qreal right = r.x() + r.width();
73 qreal bottom = r.y() + r.height();
83 inline QRectVectorPath(const QRect &r)
84 : QVectorPath(pts, 4, 0, QVectorPath::RectangleHint | QVectorPath::ImplicitClose)
88 inline QRectVectorPath(const QRectF &r)
89 : QVectorPath(pts, 4, 0, QVectorPath::RectangleHint | QVectorPath::ImplicitClose)
93 inline QRectVectorPath()
94 : QVectorPath(pts, 4, 0, QVectorPath::RectangleHint | QVectorPath::ImplicitClose)
100 #ifndef QT_NO_DEBUG_STREAM
101 QDebug Q_GUI_EXPORT &operator<<(QDebug &, const QVectorPath &path);
104 class Q_GUI_EXPORT QPaintEngineEx : public QPaintEngine
106 Q_DECLARE_PRIVATE(QPaintEngineEx)
110 virtual QPainterState *createState(QPainterState *orig) const;
112 virtual void draw(const QVectorPath &path);
113 virtual void fill(const QVectorPath &path, const QBrush &brush) = 0;
114 virtual void stroke(const QVectorPath &path, const QPen &pen);
116 virtual void clip(const QVectorPath &path, Qt::ClipOperation op) = 0;
117 virtual void clip(const QRect &rect, Qt::ClipOperation op);
118 virtual void clip(const QRegion ®ion, Qt::ClipOperation op);
119 virtual void clip(const QPainterPath &path, Qt::ClipOperation op);
121 virtual void clipEnabledChanged() = 0;
122 virtual void penChanged() = 0;
123 virtual void brushChanged() = 0;
124 virtual void brushOriginChanged() = 0;
125 virtual void opacityChanged() = 0;
126 virtual void compositionModeChanged() = 0;
127 virtual void renderHintsChanged() = 0;
128 virtual void transformChanged() = 0;
130 virtual void fillRect(const QRectF &rect, const QBrush &brush);
131 virtual void fillRect(const QRectF &rect, const QColor &color);
133 virtual void drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, Qt::SizeMode mode);
135 virtual void drawRects(const QRect *rects, int rectCount);
136 virtual void drawRects(const QRectF *rects, int rectCount);
138 virtual void drawLines(const QLine *lines, int lineCount);
139 virtual void drawLines(const QLineF *lines, int lineCount);
141 virtual void drawEllipse(const QRectF &r);
142 virtual void drawEllipse(const QRect &r);
144 virtual void drawPath(const QPainterPath &path);
146 virtual void drawPoints(const QPointF *points, int pointCount);
147 virtual void drawPoints(const QPoint *points, int pointCount);
149 virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
150 virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);
152 virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0;
153 virtual void drawPixmap(const QPointF &pos, const QPixmap &pm);
155 virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
156 Qt::ImageConversionFlags flags = Qt::AutoColor) = 0;
157 virtual void drawImage(const QPointF &pos, const QImage &image);
159 virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);
161 virtual void updateState(const QPaintEngineState &state);
163 virtual void setState(QPainterState *s);
164 inline QPainterState *state() { return static_cast<QPainterState *>(QPaintEngine::state); }
165 inline const QPainterState *state() const { return static_cast<const QPainterState *>(QPaintEngine::state); }
167 virtual bool supportsTransformations(const qreal pixelSize, const QTransform &m) const;
170 QPaintEngineEx(QPaintEngineExPrivate &data);
173 class Q_GUI_EXPORT QPaintEngineExPrivate : public QPaintEnginePrivate
175 Q_DECLARE_PUBLIC(QPaintEngineEx)
177 QPaintEngineExPrivate();
178 ~QPaintEngineExPrivate();
182 StrokeHandler *strokeHandler;
183 QStrokerOps *activeStroker;