Index: src/core/SkRecordDraw.cpp |
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp |
index f512ecf0154c01eaffec3d6219ecfd91ff3fe126..849e8f92b249aa422cb3b538b6f06f2a10d9d2c1 100644 |
--- a/src/core/SkRecordDraw.cpp |
+++ b/src/core/SkRecordDraw.cpp |
@@ -111,6 +111,7 @@ |
DRAW(DrawPosTextH, drawPosTextH(r.text, r.byteLength, r.xpos, r.y, r.paint)); |
DRAW(DrawRRect, drawRRect(r.rrect, r.paint)); |
DRAW(DrawRect, drawRect(r.rect, r.paint)); |
+DRAW(DrawSprite, drawSprite(r.bitmap.shallowCopy(), r.left, r.top, r.paint)); |
DRAW(DrawText, drawText(r.text, r.byteLength, r.x, r.y, r.paint)); |
DRAW(DrawTextBlob, drawTextBlob(r.blob, r.x, r.y, r.paint)); |
DRAW(DrawTextOnPath, drawTextOnPath(r.text, r.byteLength, r.path, &r.matrix, r.paint)); |
@@ -388,6 +389,14 @@ |
Bounds bounds(const DrawPaint&) const { return fCurrentClipBounds; } |
Bounds bounds(const NoOp&) const { return Bounds::MakeEmpty(); } // NoOps don't draw. |
+ Bounds bounds(const DrawSprite& op) const { // Ignores the matrix, but respects the clip. |
+ SkRect rect = Bounds::MakeXYWH(op.left, op.top, op.bitmap.width(), op.bitmap.height()); |
+ if (!rect.intersect(fCurrentClipBounds)) { |
+ return Bounds::MakeEmpty(); |
+ } |
+ return rect; |
+ } |
+ |
Bounds bounds(const DrawRect& op) const { return this->adjustAndMap(op.rect, &op.paint); } |
Bounds bounds(const DrawOval& op) const { return this->adjustAndMap(op.oval, &op.paint); } |
Bounds bounds(const DrawRRect& op) const { |