196 qreal sw = sr.width();
197 qreal sh = sr.height();
200 qreal dw = dr.width();
201 qreal dh = dr.height();
203 if (sw == -1 || sh == -1) {
207 if (sx != 0 || sy != 0 || sw != image.width() || sh != image.height())
208 image = image.copy(sx, sy, sw, sh);
210 if (sw != dw || sh != dh)
211 image = image.scaled(dw, dh);
214 p->beginNativePainting();
217 DrawImageShadow shadowMaker(image, QPointF(dx, dy));
218 shadowMaker.paintShapeAndShadow(p, state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
220 p->drawImage(dx, dy, image);
223 p->endNativePainting();
233 p->scale(scaleFactor.x(), scaleFactor.y());
234 QTransform originMatrix = p->worldTransform();
236 QPen pen = makePen(state);
237 setPainterState(p, state, pen);
244 state.matrix = takeMatrix();
245 p->setWorldTransform(state.matrix * originMatrix);
250 QPainter::CompositionMode cm = p->compositionMode();
251 p->setCompositionMode(QPainter::CompositionMode_Clear);
252 p->fillRect(takeRect(), Qt::white);
253 p->setCompositionMode(cm);
258 QRectF r = takeRect();
259 if (
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor))
260 fillRectShadow(p, r, state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
262 p->fillRect(r, p->brush());
267 state.shadowColor = takeColor();
272 state.shadowBlur = takeShadowBlur();
277 state.shadowOffsetX = takeShadowOffsetX();
282 state.shadowOffsetY = takeShadowOffsetY();
287 state.fillStyle = takeFillStyle();
290 p->setBrush(state.fillStyle);
295 state.strokeStyle = takeStrokeStyle();
298 QPen nPen = p->pen();
299 nPen.setBrush(state.strokeStyle);
305 state.lineWidth = takeLineWidth();
306 QPen nPen = p->pen();
308 nPen.setWidthF(state.lineWidth);
314 state.lineCap = takeLineCap();
315 QPen nPen = p->pen();
316 nPen.setCapStyle(state.lineCap);
322 state.lineJoin = takeLineJoin();
323 QPen nPen = p->pen();
324 nPen.setJoinStyle(state.lineJoin);
330 const qreal count = takeReal();
331 QVector<qreal> pattern;
332 pattern.reserve(count);
333 for (uint i = 0; i < count; i++) {
334 pattern.append(takeReal());
336 state.lineDash = pattern;
337 QPen nPen = p->pen();
339 nPen.setDashPattern(pattern);
341 nPen.setStyle(Qt::SolidLine);
347 state.lineDashOffset = takeReal();
348 QPen nPen = p->pen();
349 nPen.setDashOffset(state.lineDashOffset);
355 state.miterLimit = takeMiterLimit();
356 QPen nPen = p->pen();
357 nPen.setMiterLimit(state.miterLimit);
366 QPainterPath path = takePath();
368 if (
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor))
369 fillShadowPath(p,path, state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
371 p->fillPath(path, p->brush());
376 if (
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor))
377 strokeShadowPath(p,takePath(), state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
379 p->strokePath(takePath(), p->pen());
385 state.clipPath = takePath();
386 p->setClipping(state
.clip);
388 p->setClipPath(state.clipPath);
393 state.globalAlpha = takeGlobalAlpha();
394 p->setOpacity(state.globalAlpha);
399 state.globalCompositeOperation = takeGlobalCompositeOperation();
400 p->setCompositionMode(state.globalCompositeOperation);
405 QRectF sr = takeRect();
406 QRectF dr = takeRect();
407 qt_drawImage(p, state, takeImage(), sr, dr,
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor));
412 QRectF sr = takeRect();
413 QRectF dr = takeRect();
415 QQmlRefPointer<QQuickCanvasPixmap> pix = takePixmap();
416 Q_ASSERT(!pix.isNull());
418 const bool hasShadow =
HAS_SHADOW(state.shadowOffsetX, state.shadowOffsetY, state.shadowBlur, state.shadowColor);
420 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)