1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the QtGui 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 Digia. For licensing terms and
14** conditions see http://qt.digia.com/licensing. For further information
15** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 2.1 requirements
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24**
25** In addition, as a special exception, Digia gives you certain additional
26** rights. These rights are described in the Digia Qt LGPL Exception
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28**
29** GNU General Public License Usage
30** Alternatively, this file may be used under the terms of the GNU
31** General Public License version 3.0 as published by the Free Software
32** Foundation and appearing in the file LICENSE.GPL included in the
33** packaging of this file. Please review the following information to
34** ensure the GNU General Public License version 3.0 requirements will be
35** met: http://www.gnu.org/copyleft/gpl.html.
36**
37**
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QPAINTENGINE_BLITTER_P_H
43#define QPAINTENGINE_BLITTER_P_H
44
45#include "private/qpaintengine_raster_p.h"
46
47#ifndef QT_NO_BLITTABLE
48QT_BEGIN_NAMESPACE
49
50class QBlitterPaintEnginePrivate;
51class QBlittablePixmapData;
52class QBlittable;
53
54class Q_GUI_EXPORT QBlitterPaintEngine : public QRasterPaintEngine
55{
56 Q_DECLARE_PRIVATE(QBlitterPaintEngine);
57public:
58 QBlitterPaintEngine(QBlittablePixmapData *p);
59
60 virtual QPaintEngine::Type type() const { return Blitter; }
61
62 virtual bool begin(QPaintDevice *pdev);
63 virtual bool end();
64
65 // Call down into QBlittable
66 virtual void fill(const QVectorPath &path, const QBrush &brush);
67 virtual void fillRect(const QRectF &rect, const QBrush &brush);
68 virtual void fillRect(const QRectF &rect, const QColor &color);
69 virtual void drawRects(const QRect *rects, int rectCount);
70 virtual void drawRects(const QRectF *rects, int rectCount);
71 void drawPixmap(const QPointF &p, const QPixmap &pm);
72 void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
73
74 // State tracking
75 void setState(QPainterState *s);
76 virtual void clipEnabledChanged();
77 virtual void penChanged();
78 virtual void brushChanged();
79 virtual void opacityChanged();
80 virtual void compositionModeChanged();
81 virtual void renderHintsChanged();
82 virtual void transformChanged();
83
84 // Override to lock the QBlittable before using raster
85 void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
86 void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);
87 void fillPath(const QPainterPath &path, QSpanData *fillData);
88 void fillPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
89 void drawEllipse(const QRectF &rect);
90 void drawImage(const QPointF &p, const QImage &img);
91 void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
92 Qt::ImageConversionFlags flags = Qt::AutoColor);
93 void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr);
94 void drawTextItem(const QPointF &p, const QTextItem &textItem);
95 void drawPoints(const QPointF *points, int pointCount);
96 void drawPoints(const QPoint *points, int pointCount);
97 void stroke(const QVectorPath &path, const QPen &pen);
98 void drawStaticTextItem(QStaticTextItem *);
99};
100
101QT_END_NAMESPACE
102#endif //QT_NO_BLITTABLE
103#endif // QPAINTENGINE_BLITTER_P_H
104
105