diff options
author | 2015-06-25 12:32:03 -0700 | |
---|---|---|
committer | 2015-06-25 12:32:03 -0700 | |
commit | 4c21dc5ddf3b482293ed34eead876d8d61a662c3 (patch) | |
tree | 390454c66e28c94a8a59b8d5ca881ef4b94e9fe2 /src/utils | |
parent | b4022965a280dd1ed64d6103dd29e2189abe6e00 (diff) |
add drawImageNine
this also exposes nine-patch drawing directly to devices, and creates a shared iterator for unrolling a nine-patch into single rect->rect draws.
BUG=skia:
Review URL: https://codereview.chromium.org/1211583003
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/SkDeferredCanvas.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index ccf0b012b1..8e34235848 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -229,6 +229,9 @@ protected: void drawImageRect(const SkDraw&, const SkImage*, const SkRect*, const SkRect&, const SkPaint&) override {SkASSERT(0);} + void drawImageNine(const SkDraw&, const SkImage*, const SkIRect&, const SkRect&, + const SkPaint&) override + {SkASSERT(0);} void drawText(const SkDraw&, const void* text, size_t len, SkScalar x, SkScalar y, const SkPaint& paint) override {SkASSERT(0);} @@ -903,6 +906,19 @@ void SkDeferredCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, this->recordedDrawCommand(); } +void SkDeferredCanvas::onDrawImageNine(const SkImage* image, const SkIRect& center, + const SkRect& dst, const SkPaint* paint) { + if (fDeferredDrawing && + this->isFullFrame(&dst, paint) && + isPaintOpaque(paint, image)) { + this->getDeferredDevice()->skipPendingCommands(); + } + + AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); + this->drawingCanvas()->drawImageNine(image, center, dst, paint); + this->recordedDrawCommand(); +} + void SkDeferredCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint) { |