aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/SkDeferredCanvas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/SkDeferredCanvas.cpp')
-rw-r--r--src/utils/SkDeferredCanvas.cpp29
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(