diff options
Diffstat (limited to 'src/utils/SkDeferredCanvas.cpp')
-rw-r--r-- | src/utils/SkDeferredCanvas.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index 06f7bb089a..826865feed 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -866,6 +866,35 @@ void SkDeferredCanvas::drawBitmapNine(const SkBitmap& bitmap, this->recordedDrawCommand(); } +void SkDeferredCanvas::drawImage(const SkImage* image, SkScalar left, SkScalar top, + const SkPaint* paint) { + SkRect imageRect = SkRect::MakeXYWH(left, top, + SkIntToScalar(image->width()), SkIntToScalar(image->height())); + if (fDeferredDrawing && + this->isFullFrame(&imageRect, paint) && + (image->isOpaque() || isPaintOpaque(paint, 0))) { + this->getDeferredDevice()->skipPendingCommands(); + } + + AutoImmediateDrawIfNeeded autoDraw(*this, paint); + this->drawingCanvas()->drawImage(image, left, top, paint); + this->recordedDrawCommand(); +} + +void SkDeferredCanvas::drawImageRect(const SkImage* image, const SkRect* src, + const SkRect& dst, + const SkPaint* paint) { + if (fDeferredDrawing && + this->isFullFrame(&dst, paint) && + (image->isOpaque() || isPaintOpaque(paint, 0))) { + this->getDeferredDevice()->skipPendingCommands(); + } + + AutoImmediateDrawIfNeeded autoDraw(*this, paint); + this->drawingCanvas()->drawImageRect(image, src, dst, paint); + this->recordedDrawCommand(); +} + void SkDeferredCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint) { SkRect bitmapRect = SkRect::MakeXYWH( |