5#include <private/qpaintengine_preview_p.h>
6#include <private/qpainter_p.h>
7#include <private/qpaintengine_p.h>
8#include <private/qpicture_p.h>
10#include <QtPrintSupport/qprintengine.h>
11#include <QtGui/qpainter.h>
12#include <QtGui/qpicture.h>
16class QPreviewPaintEnginePrivate :
public QPaintEnginePrivate
18 Q_DECLARE_PUBLIC(QPreviewPaintEngine)
20 QPreviewPaintEnginePrivate() : state(QPrinter::Idle) {}
21 ~QPreviewPaintEnginePrivate() {}
23 QList<
const QPicture *> pages;
24 QPaintEngine *engine =
nullptr;
25 QPainter *painter =
nullptr;
26 QPrinter::PrinterState state;
28 QPaintEngine *proxy_paint_engine;
29 QPrintEngine *proxy_print_engine;
33QPreviewPaintEngine::QPreviewPaintEngine()
34 : QPaintEngine(*(
new QPreviewPaintEnginePrivate), PaintEngineFeatures(AllFeatures & ~ObjectBoundingModeGradients))
36 Q_D(QPreviewPaintEngine);
37 d->proxy_print_engine =
nullptr;
38 d->proxy_paint_engine =
nullptr;
41QPreviewPaintEngine::~QPreviewPaintEngine()
43 Q_D(QPreviewPaintEngine);
48bool QPreviewPaintEngine::begin(QPaintDevice *)
50 Q_D(QPreviewPaintEngine);
56 d->state = QPrinter::Active;
60bool QPreviewPaintEngine::end()
62 Q_D(QPreviewPaintEngine);
67 d->state = QPrinter::Idle;
71void QPreviewPaintEngine::updateState(
const QPaintEngineState &state)
73 Q_D(QPreviewPaintEngine);
74 d->engine->updateState(state);
77void QPreviewPaintEngine::drawPath(
const QPainterPath &path)
79 Q_D(QPreviewPaintEngine);
80 d->engine->drawPath(path);
83void QPreviewPaintEngine::drawPolygon(
const QPointF *points,
int pointCount, PolygonDrawMode mode)
85 Q_D(QPreviewPaintEngine);
86 d->engine->drawPolygon(points, pointCount, mode);
89void QPreviewPaintEngine::drawTextItem(
const QPointF &p,
const QTextItem &textItem)
91 Q_D(QPreviewPaintEngine);
92 d->engine->drawTextItem(p, textItem);
95void QPreviewPaintEngine::drawPixmap(
const QRectF &r,
const QPixmap &pm,
const QRectF &sr)
97 Q_D(QPreviewPaintEngine);
98 d->engine->drawPixmap(r, pm, sr);
101void QPreviewPaintEngine::drawTiledPixmap(
const QRectF &r,
const QPixmap &pm,
const QPointF &p)
103 Q_D(QPreviewPaintEngine);
104 d->engine->drawTiledPixmap(r, pm, p);
107void QPreviewPaintEngine::startPage()
109 Q_D(QPreviewPaintEngine);
111 QPicture *page =
new QPicture;
112 page->d_func()->in_memory_only =
true;
113 QPainter *pagePainter =
new QPainter(page);
114 QPaintEngine *pageEngine = pagePainter->paintEngine();
116 Q_ASSERT(painter()->d_func()->state && pagePainter->d_func()->state);
117 *pagePainter->d_func()->state = *painter()->d_func()->state;
121 pageEngine->setDirty(DirtyFlags(AllDirty & ~DirtyCompositionMode));
122 pageEngine->syncState();
125 d->painter = pagePainter;
126 d->pages.append(page);
127 d->engine = pageEngine;
130bool QPreviewPaintEngine::newPage()
136bool QPreviewPaintEngine::abort()
138 Q_D(QPreviewPaintEngine);
140 qDeleteAll(d->pages);
141 d->state = QPrinter::Aborted;
146QList<
const QPicture *> QPreviewPaintEngine::pages()
148 Q_D(QPreviewPaintEngine);
152void QPreviewPaintEngine::setProxyEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine)
154 Q_D(QPreviewPaintEngine);
155 d->proxy_print_engine = printEngine;
156 d->proxy_paint_engine = paintEngine;
159void QPreviewPaintEngine::setProperty(PrintEnginePropertyKey key,
const QVariant &value)
161 Q_D(QPreviewPaintEngine);
162 d->proxy_print_engine->setProperty(key, value);
165QVariant QPreviewPaintEngine::property(PrintEnginePropertyKey key)
const
167 Q_D(
const QPreviewPaintEngine);
168 return d->proxy_print_engine->property(key);
171int QPreviewPaintEngine::metric(QPaintDevice::PaintDeviceMetric id)
const
173 Q_D(
const QPreviewPaintEngine);
174 return d->proxy_print_engine->metric(id);
177QPrinter::PrinterState QPreviewPaintEngine::printerState()
const
179 Q_D(
const QPreviewPaintEngine);