Qt 4.8
qpaintengine_preview.cpp
Go to the documentation of this file.
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 #include <private/qpaintengine_preview_p.h>
43 #include <private/qpainter_p.h>
44 #include <private/qpaintengine_p.h>
45 #include <private/qpicture_p.h>
46 
47 #include <QtGui/qprintengine.h>
48 #include <QtGui/qpainter.h>
49 #include <QtGui/qpicture.h>
50 
51 #ifndef QT_NO_PRINTPREVIEWWIDGET
53 
55 {
57 public:
60 
65 
68 };
69 
70 
72  : QPaintEngine(*(new QPreviewPaintEnginePrivate), PaintEngineFeatures(AllFeatures & ~ObjectBoundingModeGradients))
73 {
75  d->proxy_print_engine = 0;
76  d->proxy_paint_engine = 0;
77 }
78 
80 {
82 
83  qDeleteAll(d->pages);
84 }
85 
87 {
89 
90  qDeleteAll(d->pages);
91  d->pages.clear();
92 
93  QPicture *page = new QPicture;
94  page->d_func()->in_memory_only = true;
95  d->painter = new QPainter(page);
96  d->engine = d->painter->paintEngine();
97  d->pages.append(page);
98  d->state = QPrinter::Active;
99  return true;
100 }
101 
103 {
105 
106  delete d->painter;
107  d->painter = 0;
108  d->engine = 0;
109  d->state = QPrinter::Idle;
110  return true;
111 }
112 
114 {
116  d->engine->updateState(state);
117 }
118 
120 {
122  d->engine->drawPath(path);
123 }
124 
125 void QPreviewPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode)
126 {
128  d->engine->drawPolygon(points, pointCount, mode);
129 }
130 
131 void QPreviewPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
132 {
134  d->engine->drawTextItem(p, textItem);
135 }
136 
137 void QPreviewPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
138 {
140  d->engine->drawPixmap(r, pm, sr);
141 }
142 
143 void QPreviewPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &p)
144 {
146  d->engine->drawTiledPixmap(r, pm, p);
147 }
148 
150 {
152 
153  QPicture *page = new QPicture;
154  page->d_func()->in_memory_only = true;
155  QPainter *tmp_painter = new QPainter(page);
156  QPaintEngine *tmp_engine = tmp_painter->paintEngine();
157 
158  // copy the painter state from the original painter
159  Q_ASSERT(painter()->d_func()->state && tmp_painter->d_func()->state);
160  *tmp_painter->d_func()->state = *painter()->d_func()->state;
161 
162  // composition modes aren't supported on a QPrinter and yields a
163  // warning, so ignore it for now
164  tmp_engine->setDirty(DirtyFlags(AllDirty & ~DirtyCompositionMode));
165  tmp_engine->syncState();
166 
167  delete d->painter;
168  d->painter = tmp_painter;
169  d->pages.append(page);
170  d->engine = tmp_engine;
171  return true;
172 }
173 
175 {
177  end();
178  qDeleteAll(d->pages);
179  d->state = QPrinter::Aborted;
180 
181  return true;
182 }
183 
185 {
187  return d->pages;
188 }
189 
191 {
193  d->proxy_print_engine = printEngine;
194  d->proxy_paint_engine = paintEngine;
195 }
196 
198 {
200  d->proxy_print_engine->setProperty(key, value);
201 }
202 
204 {
205  Q_D(const QPreviewPaintEngine);
206  return d->proxy_print_engine->property(key);
207 }
208 
210 {
211  Q_D(const QPreviewPaintEngine);
212  return d->proxy_print_engine->metric(id);
213 }
214 
216 {
217  Q_D(const QPreviewPaintEngine);
218  return d->state;
219 }
220 
222 
223 #endif
The QVariant class acts like a union for the most common Qt data types.
Definition: qvariant.h:92
The QPainter class performs low-level painting on widgets and other paint devices.
Definition: qpainter.h:86
QList< const QPicture * > pages()
double d
Definition: qnumeric_p.h:62
bool abort()
Instructs the print engine to abort the printing process.
PrinterState
Definition: qprinter.h:119
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
void syncState()
Updates all dirty states in this engine.
The QPainterPath class provides a container for painting operations, enabling graphical shapes to be ...
Definition: qpainterpath.h:67
QPaintEngineState * state
Definition: qpaintengine.h:239
The QPointF class defines a point in the plane using floating point precision.
Definition: qpoint.h:214
void setProxyEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine)
bool begin(QPaintDevice *dev)
Reimplement this function to initialise your paint engine when painting is to start on the paint devi...
void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &p)
Reimplement this function to draw the pixmap in the given rect, starting at the given p...
QList< const QPicture * > pages
QPrinter::PrinterState state
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
#define Q_D(Class)
Definition: qglobal.h:2482
void drawPath(const QPainterPath &path)
The default implementation ignores the path and does nothing.
QPainter * painter() const
Returns the paint engine&#39;s painter.
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
The QRectF class defines a rectangle in the plane using floating point precision. ...
Definition: qrect.h:511
void setProperty(PrintEnginePropertyKey key, const QVariant &value)
Sets the print engine&#39;s property specified by key to the given value.
void updateState(const QPaintEngineState &state)
Reimplement this function to update the state of a paint engine.
void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode)
Reimplement this virtual function to draw the polygon defined by the pointCount first points in point...
The QPrintEngine class defines an interface for how QPrinter interacts with a given printing subsyste...
Definition: qprintengine.h:56
bool newPage()
Instructs the print engine to start a new page.
The QPrinter class is a paint device that paints on a printer.
Definition: qprinter.h:66
QPrinter::PrinterState printerState() const
Returns the current state of the printer being used by the print engine.
QPaintEngine * paintEngine() const
Returns the paint engine that the painter is currently operating on if the painter is active; otherwi...
Definition: qpainter.cpp:1991
void setDirty(DirtyFlags df)
Definition: qpaintengine.h:349
The QPaintEngine class provides an abstract definition of how QPainter draws to a given device on a g...
Definition: qpaintengine.h:90
bool end()
Reimplement this function to finish painting on the current paint device.
friend class QPainter
Definition: qpaintengine.h:277
int metric(QPaintDevice::PaintDeviceMetric) const
Returns the metric for the given id.
#define Q_DECLARE_PUBLIC(Class)
Definition: qglobal.h:2477
QVariant property(PrintEnginePropertyKey key) const
Returns the print engine&#39;s property specified by key.
int key
void drawTextItem(const QPointF &p, const QTextItem &textItem)
This function draws the text item textItem at position p.
The QPixmap class is an off-screen image representation that can be used as a paint device...
Definition: qpixmap.h:71
The QPaintEngineState class provides information about the active paint engine&#39;s current state...
Definition: qpaintengine.h:289
The QTextItem class provides all the information required to draw text in a custom paint engine...
Definition: qpaintengine.h:68
The QPicture class is a paint device that records and replays QPainter commands.
Definition: qpicture.h:58
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
Definition: qalgorithms.h:319
void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
Reimplement this function to draw the part of the pm specified by the sr rectangle in the given r...
The QList class is a template class that provides lists.
Definition: qdatastream.h:62
PrintEnginePropertyKey
This enum is used to communicate properties between the print engine and QPrinter.
Definition: qprintengine.h:60