41 QTransform t(r.width(), 0, 0, r.height(), r.x(), r.y());
42 if (brush->gradient() && brush->gradient()->coordinateMode() != QGradient::ObjectMode)
43 brush->setTransform(t * brush->transform());
45 brush->setTransform(brush->transform() * t);
48void QEmulationPaintEngine::fill(
const QVectorPath &path,
const QBrush &brush)
50 QPainterState *s = state();
52 if (s->bgMode == Qt::OpaqueMode) {
53 Qt::BrushStyle style = brush.style();
54 if ((style >= Qt::Dense1Pattern && style <= Qt::DiagCrossPattern) || (style == Qt::TexturePattern ))
55 real_engine->fill(path, s->bgBrush);
58 Qt::BrushStyle style = qbrush_style(brush);
59 if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern) {
60 QGradient::CoordinateMode coMode = brush.gradient()->coordinateMode();
61 if (coMode > QGradient::LogicalMode) {
63 const QPaintDevice *d = real_engine->painter()->device();
64 QRectF r = (coMode == QGradient::StretchToDeviceMode) ? QRectF(0, 0, d->width(), d->height()) : path.controlPointRect();
65 combineXForm(©, r);
66 real_engine->fill(path, copy);
69 }
else if (style == Qt::TexturePattern) {
70 qreal dpr = qHasPixmapTexture(brush) ? brush.texture().devicePixelRatio() : brush.textureImage().devicePixelRatio();
71 if (!qFuzzyCompare(dpr, qreal(1.0))) {
73 combineXForm(©, QRectF(0, 0, 1.0/dpr, 1.0/dpr));
74 real_engine->fill(path, copy);
79 real_engine->fill(path, brush);
82void QEmulationPaintEngine::stroke(
const QVectorPath &path,
const QPen &pen)
84 QPainterState *s = state();
86 if (s->bgMode == Qt::OpaqueMode && pen.style() > Qt::SolidLine) {
88 bgPen.setBrush(s->bgBrush);
89 bgPen.setStyle(Qt::SolidLine);
90 real_engine->stroke(path, bgPen);
93 QBrush brush = pen.brush();
95 Qt::BrushStyle style = qbrush_style(brush);
96 if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern ) {
97 QGradient::CoordinateMode coMode = brush.gradient()->coordinateMode();
98 if (coMode > QGradient::LogicalMode) {
99 const QPaintDevice *d = real_engine->painter()->device();
100 QRectF r = (coMode == QGradient::StretchToDeviceMode) ? QRectF(0, 0, d->width(), d->height()) : path.controlPointRect();
101 combineXForm(&brush, r);
102 copy.setBrush(brush);
103 real_engine->stroke(path, copy);
108 real_engine->stroke(path, pen);
123void QEmulationPaintEngine::drawTextItem(
const QPointF &p,
const QTextItem &textItem)
125 if (state()->bgMode == Qt::OpaqueMode) {
126 const QTextItemInt &ti =
static_cast<
const QTextItemInt &>(textItem);
127 QRectF rect(p.x(), p.y() - ti.ascent.toReal(), ti.width.toReal(), (ti.ascent + ti.descent).toReal());
131 QPainterState *s = state();
132 Qt::BrushStyle style = qbrush_style(s->pen.brush());
133 if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern)
135 QPen savedPen = s->pen;
136 QGradient g = *s->pen.brush().gradient();
138 if (g.coordinateMode() > QGradient::LogicalMode) {
139 QBrush copy = s->pen.brush();
140 const QPaintDevice *d = real_engine->painter()->device();
141 const QTextItemInt &ti =
static_cast<
const QTextItemInt &>(textItem);
142 QRectF r = (g.coordinateMode() == QGradient::StretchToDeviceMode) ?
143 QRectF(0, 0, d->width(), d->height()) :
144 QRectF(p.x(), p.y() - ti.ascent.toReal(), ti.width.toReal(), (ti.ascent + ti.descent + 1).toReal());
145 combineXForm(©, r);
146 g.setCoordinateMode(QGradient::LogicalMode);
148 brush.setTransform(copy.transform());
149 s->pen.setBrush(brush);
151 real_engine->drawTextItem(p, textItem);
158 real_engine->drawTextItem(p, textItem);
173void QEmulationPaintEngine::drawImage(
const QRectF &r,
const QImage &pm,
const QRectF &sr, Qt::ImageConversionFlags flags)
175 real_engine->drawImage(r, pm, sr, flags);
236 qreal pts[] = { r.x(), r.y(), r.x() + r.width(), r.y(),
237 r.x() + r.width(), r.y() + r.height(), r.x(), r.y() + r.height() };