summaryrefslogtreecommitdiff
path: root/src/openvg/qpaintengine_vg_p.h
blob: 59aad461bef2186246bfce082f335b0e9c6671e8 (plain)
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
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtOpenVG module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** As a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef QPAINTENGINE_VG_P_H
#define QPAINTENGINE_VG_P_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtGui/private/qpaintengineex_p.h>
#include <QtGui/private/qtextureglyphcache_p.h>

QT_BEGIN_NAMESPACE

struct QFixedPoint;
class QVGPaintEnginePrivate;
class QPixmapData;
class QVGEGLWindowSurfacePrivate;

class Q_OPENVG_EXPORT QVGPainterState : public QPainterState
{
public:
    QVGPainterState(QVGPainterState& other);
    QVGPainterState();
    ~QVGPainterState();

    bool isNew;
    QRegion clipRegion;
    QPaintEngine::DirtyFlags savedDirty;
};

class Q_OPENVG_EXPORT QVGPaintEngine : public QPaintEngineEx
{
    Q_DECLARE_PRIVATE(QVGPaintEngine)
public:
    QVGPaintEngine();
    ~QVGPaintEngine();

    Type type() const { return OpenVG; }

    QPainterState *createState(QPainterState *orig) const;

    bool begin(QPaintDevice *pdev);
    bool end();

    void draw(const QVectorPath &path);
    void fill(const QVectorPath &path, const QBrush &brush);
    void stroke(const QVectorPath &path, const QPen &pen);

    void clip(const QVectorPath &path, Qt::ClipOperation op);
    void clip(const QRect &rect, Qt::ClipOperation op);
    void clip(const QRegion &region, Qt::ClipOperation op);
    void clip(const QPainterPath &path, Qt::ClipOperation op);

    void clipEnabledChanged();
    void penChanged();
    void brushChanged();
    void brushOriginChanged();
    void opacityChanged();
    void compositionModeChanged();
    void renderHintsChanged();
    void transformChanged();

    void fillRect(const QRectF &rect, const QBrush &brush);
    void fillRect(const QRectF &rect, const QColor &color);

    void drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, Qt::SizeMode mode);

    void drawRects(const QRect *rects, int rectCount);
    void drawRects(const QRectF *rects, int rectCount);

    void drawLines(const QLine *lines, int lineCount);
    void drawLines(const QLineF *lines, int lineCount);

    void drawEllipse(const QRectF &r);
    void drawEllipse(const QRect &r);

    void drawPath(const QPainterPath &path);

    void drawPoints(const QPointF *points, int pointCount);
    void drawPoints(const QPoint *points, int pointCount);

    void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
    void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);

    void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
    void drawPixmap(const QPointF &pos, const QPixmap &pm);

    void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
                   Qt::ImageConversionFlags flags = Qt::AutoColor);
    void drawImage(const QPointF &pos, const QImage &image);

    void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);

    void drawPixmapFragments(const QPainter::PixmapFragment *drawingData, int dataCount, const QPixmap &pixmap,
                             QFlags<QPainter::PixmapFragmentHint> hints);

    void drawTextItem(const QPointF &p, const QTextItem &textItem);
    void drawStaticTextItem(QStaticTextItem *staticTextItem);
    bool drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFont &font,
                          QFontEngine *fontEngine, const QPointF &p,
                          const QFixedPoint *positions);

    void setState(QPainterState *s);
    QVGPainterState *state() { return static_cast<QVGPainterState *>(QPaintEngineEx::state()); }
    const QVGPainterState *state() const { return static_cast<const QVGPainterState *>(QPaintEngineEx::state()); }

    void beginNativePainting();
    void endNativePainting();

    QPixmapFilter *pixmapFilter(int type, const QPixmapFilter *prototype);

    QVGPaintEnginePrivate *vgPrivate() { Q_D(QVGPaintEngine); return d; }

    void fillRegion(const QRegion& region, const QColor& color, const QSize& surfaceSize);
    bool supportsTransformations(qreal, const QTransform &) const { return true; }

protected:
    QVGPaintEngine(QVGPaintEnginePrivate &data);

private:
    void restoreState(QPaintEngine::DirtyFlags dirty);
    void updateScissor();
    QRegion defaultClipRegion();
    bool isDefaultClipRegion(const QRegion& region);
    bool isDefaultClipRect(const QRect& rect);
    bool clearRect(const QRectF &rect, const QColor &color);
    bool canVgWritePixels(const QImage &image) const;
};

QT_END_NAMESPACE

#endif