197 qreal sw = sr.width();
198 qreal sh = sr.height();
201 qreal dw = dr.width();
202 qreal dh = dr.height();
204 if (sw == -1 || sh == -1) {
208 if (sx != 0 || sy != 0 || sw != image.width() || sh != image.height())
209 image = image.copy(sx, sy, sw, sh);
211 if (sw != dw || sh != dh)
212 image = image.scaled(dw, dh);
215 p->beginNativePainting();
218 DrawImageShadow shadowMaker(image, QPointF(dx, dy));
219 shadowMaker.paintShapeAndShadow(p, state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
221 p->drawImage(dx, dy, image);
224 p->endNativePainting();
234 p->scale(scaleFactor.x(), scaleFactor.y());
235 QTransform originMatrix = p->worldTransform();
237 QPen pen = makePen(state);
238 setPainterState(p, state, pen);
245 state.matrix = takeMatrix();
246 p->setWorldTransform(state.matrix * originMatrix);
251 QPainter::CompositionMode cm = p->compositionMode();
252 p->setCompositionMode(QPainter::CompositionMode_Clear);
253 p->fillRect(takeRect(), Qt::white);
254 p->setCompositionMode(cm);
259 QRectF r = takeRect();
260 if (
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor))
261 fillRectShadow(p, r, state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
263 p->fillRect(r, p->brush());
268 state.shadowColor = takeColor();
273 state.shadowBlur = takeShadowBlur();
278 state.shadowOffsetX = takeShadowOffsetX();
283 state.shadowOffsetY = takeShadowOffsetY();
288 state.fillStyle = takeFillStyle();
291 p->setBrush(state.fillStyle);
296 state.strokeStyle = takeStrokeStyle();
299 QPen nPen = p->pen();
300 nPen.setBrush(state.strokeStyle);
306 state.lineWidth = takeLineWidth();
307 QPen nPen = p->pen();
309 nPen.setWidthF(state.lineWidth);
315 state.lineCap = takeLineCap();
316 QPen nPen = p->pen();
317 nPen.setCapStyle(state.lineCap);
323 state.lineJoin = takeLineJoin();
324 QPen nPen = p->pen();
325 nPen.setJoinStyle(state.lineJoin);
331 const qreal count = takeReal();
332 QVector<qreal> pattern;
333 pattern.reserve(count);
334 for (uint i = 0; i < count; i++) {
335 pattern.append(takeReal());
337 state.lineDash = pattern;
338 QPen nPen = p->pen();
340 nPen.setDashPattern(pattern);
342 nPen.setStyle(Qt::SolidLine);
348 state.lineDashOffset = takeReal();
349 QPen nPen = p->pen();
350 nPen.setDashOffset(state.lineDashOffset);
356 state.miterLimit = takeMiterLimit();
357 QPen nPen = p->pen();
358 nPen.setMiterLimit(state.miterLimit);
367 QPainterPath path = takePath();
369 if (
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor))
370 fillShadowPath(p,path, state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
372 p->fillPath(path, p->brush());
377 if (
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor))
378 strokeShadowPath(p,takePath(), state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
380 p->strokePath(takePath(), p->pen());
386 state.clipPath = takePath();
387 p->setClipping(state
.clip);
389 p->setClipPath(state.clipPath);
394 state.globalAlpha = takeGlobalAlpha();
395 p->setOpacity(state.globalAlpha);
400 state.globalCompositeOperation = takeGlobalCompositeOperation();
401 p->setCompositionMode(state.globalCompositeOperation);
406 QRectF sr = takeRect();
407 QRectF dr = takeRect();
408 qt_drawImage(p, state, takeImage(), sr, dr,
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor));
413 QRectF sr = takeRect();
414 QRectF dr = takeRect();
416 QQmlRefPointer<QQuickCanvasPixmap> pix = takePixmap();
417 Q_ASSERT(!pix.isNull());
419 const bool hasShadow =
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
421 qt_drawImage(p, state, pix->image(), sr, dr, hasShadow);
void replay(QPainter *painter, QQuickContext2D::State &state, const QVector2D &scaleFactor)
void qt_image_boxblur(QImage &image, int radius, bool quality)
static void strokeShadowPath(QPainter *p, const QPainterPath &path, qreal offsetX, qreal offsetY, qreal blur, const QColor &color)
#define HAS_SHADOW(offsetX, offsetY, blur, color)
static void fillShadowPath(QPainter *p, const QPainterPath &path, qreal offsetX, qreal offsetY, qreal blur, const QColor &color)
static void fillRectShadow(QPainter *p, QRectF shadowRect, qreal offsetX, qreal offsetY, qreal blur, const QColor &color)
static void qt_drawImage(QPainter *p, QQuickContext2D::State &state, QImage image, const QRectF &sr, const QRectF &dr, bool shadow=false)