42 QTransform t(r.width(), 0, 0, r.height(), r.x(), r.y());
43 if (brush->gradient() && brush->gradient()->coordinateMode() != QGradient::ObjectMode)
44 brush->setTransform(t * brush->transform());
46 brush->setTransform(brush->transform() * t);
49void QEmulationPaintEngine::fill(
const QVectorPath &path,
const QBrush &brush)
51 QPainterState *s = state();
53 if (s->bgMode == Qt::OpaqueMode) {
54 Qt::BrushStyle style = brush.style();
55 if ((style >= Qt::Dense1Pattern && style <= Qt::DiagCrossPattern) || (style == Qt::TexturePattern ))
56 real_engine->fill(path, s->bgBrush);
59 Qt::BrushStyle style = qbrush_style(brush);
60 if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern) {
61 QGradient::CoordinateMode coMode = brush.gradient()->coordinateMode();
62 if (coMode > QGradient::LogicalMode) {
64 const QPaintDevice *d = real_engine->painter()->device();
65 QRectF r = (coMode == QGradient::StretchToDeviceMode) ? QRectF(0, 0, d->width(), d->height()) : path.controlPointRect();
66 combineXForm(©, r);
67 real_engine->fill(path, copy);
70 }
else if (style == Qt::TexturePattern) {
71 qreal dpr = qHasPixmapTexture(brush) ? brush.texture().devicePixelRatio() : brush.textureImage().devicePixelRatio();
72 if (!qFuzzyCompare(dpr, qreal(1.0))) {
74 combineXForm(©, QRectF(0, 0, 1.0/dpr, 1.0/dpr));
75 real_engine->fill(path, copy);
80 real_engine->fill(path, brush);
83void QEmulationPaintEngine::stroke(
const QVectorPath &path,
const QPen &pen)
85 QPainterState *s = state();
87 if (s->bgMode == Qt::OpaqueMode && pen.style() > Qt::SolidLine) {
89 bgPen.setBrush(s->bgBrush);
90 bgPen.setStyle(Qt::SolidLine);
91 real_engine->stroke(path, bgPen);
94 QBrush brush = pen.brush();
96 Qt::BrushStyle style = qbrush_style(brush);
97 if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern ) {
98 QGradient::CoordinateMode coMode = brush.gradient()->coordinateMode();
99 if (coMode > QGradient::LogicalMode) {
100 const QPaintDevice *d = real_engine->painter()->device();
101 QRectF r = (coMode == QGradient::StretchToDeviceMode) ? QRectF(0, 0, d->width(), d->height()) : path.controlPointRect();
102 combineXForm(&brush, r);
103 copy.setBrush(brush);
104 real_engine->stroke(path, copy);
109 real_engine->stroke(path, pen);
124void QEmulationPaintEngine::drawTextItem(
const QPointF &p,
const QTextItem &textItem)
126 if (state()->bgMode == Qt::OpaqueMode) {
127 const QTextItemInt &ti =
static_cast<
const QTextItemInt &>(textItem);
128 QRectF rect(p.x(), p.y() - ti.ascent.toReal(), ti.width.toReal(), (ti.ascent + ti.descent).toReal());
132 QPainterState *s = state();
133 Qt::BrushStyle style = qbrush_style(s->pen.brush());
134 if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern)
136 QPen savedPen = s->pen;
137 QGradient g = *s->pen.brush().gradient();
139 if (g.coordinateMode() > QGradient::LogicalMode) {
140 QBrush copy = s->pen.brush();
141 const QPaintDevice *d = real_engine->painter()->device();
142 const QTextItemInt &ti =
static_cast<
const QTextItemInt &>(textItem);
143 QRectF r = (g.coordinateMode() == QGradient::StretchToDeviceMode) ?
144 QRectF(0, 0, d->width(), d->height()) :
145 QRectF(p.x(), p.y() - ti.ascent.toReal(), ti.width.toReal(), (ti.ascent + ti.descent + 1).toReal());
146 combineXForm(©, r);
147 g.setCoordinateMode(QGradient::LogicalMode);
149 brush.setTransform(copy.transform());
150 s->pen.setBrush(brush);
152 real_engine->drawTextItem(p, textItem);
159 real_engine->drawTextItem(p, textItem);
174void QEmulationPaintEngine::drawImage(
const QRectF &r,
const QImage &pm,
const QRectF &sr, Qt::ImageConversionFlags flags)
176 real_engine->drawImage(r, pm, sr, flags);
237 qreal pts[] = { r.x(), r.y(), r.x() + r.width(), r.y(),
238 r.x() + r.width(), r.y() + r.height(), r.x(), r.y() + r.height() };