From 32704674f64cb6a14356dfebe060cd3484c06cc7 Mon Sep 17 00:00:00 2001 From: reed Date: Wed, 16 Dec 2015 08:27:10 -0800 Subject: Revert of remove drawSprite from canvas (patchset #4 id:60001 of https://codereview.chromium.org/1534443003/ ) Reason for revert: need to remove an override in chrome Original issue's description: > remove drawSprite from canvas > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/4657ce2324ea197507c4ba728d81138f56da13b1 TBR=fmalita@chromium.org,robertphillips@google.com,senorblanco@chromium.org,mtklein@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1529803004 --- src/utils/SkDumpCanvas.cpp | 7 +++++++ src/utils/SkLuaCanvas.cpp | 7 +++++++ src/utils/SkNWayCanvas.cpp | 7 +++++++ src/utils/SkPaintFilterCanvas.cpp | 6 ++++++ src/utils/android/SkAndroidSDKCanvas.cpp | 7 +++++++ src/utils/android/SkAndroidSDKCanvas.h | 2 ++ src/utils/debugger/SkDebugCanvas.cpp | 4 ++++ src/utils/debugger/SkDebugCanvas.h | 1 + src/utils/debugger/SkDrawCommand.cpp | 31 +++++++++++++++++++++++++++++++ src/utils/debugger/SkDrawCommand.h | 16 ++++++++++++++++ 10 files changed, 88 insertions(+) (limited to 'src/utils') diff --git a/src/utils/SkDumpCanvas.cpp b/src/utils/SkDumpCanvas.cpp index a5005610ae..8d0209d964 100644 --- a/src/utils/SkDumpCanvas.cpp +++ b/src/utils/SkDumpCanvas.cpp @@ -397,6 +397,13 @@ void SkDumpCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, cons bs.c_str(), rs.c_str()); } +void SkDumpCanvas::onDrawSprite(const SkBitmap& bitmap, int x, int y, const SkPaint* paint) { + SkString str; + bitmap.toString(&str); + this->dump(kDrawBitmap_Verb, paint, "drawSprite(%s %d %d)", str.c_str(), + x, y); +} + void SkDumpCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) { SkString str; diff --git a/src/utils/SkLuaCanvas.cpp b/src/utils/SkLuaCanvas.cpp index 4916decccb..ada76666fe 100644 --- a/src/utils/SkLuaCanvas.cpp +++ b/src/utils/SkLuaCanvas.cpp @@ -245,6 +245,13 @@ void SkLuaCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const } } +void SkLuaCanvas::onDrawSprite(const SkBitmap& bitmap, int x, int y, const SkPaint* paint) { + AUTO_LUA("drawSprite"); + if (paint) { + lua.pushPaint(*paint, "paint"); + } +} + void SkLuaCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) { AUTO_LUA("drawText"); diff --git a/src/utils/SkNWayCanvas.cpp b/src/utils/SkNWayCanvas.cpp index 05909a33fa..fb8d0ee13e 100644 --- a/src/utils/SkNWayCanvas.cpp +++ b/src/utils/SkNWayCanvas.cpp @@ -224,6 +224,13 @@ void SkNWayCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, cons } } +void SkNWayCanvas::onDrawSprite(const SkBitmap& bitmap, int x, int y, const SkPaint* paint) { + Iter iter(fList); + while (iter.next()) { + iter->drawSprite(bitmap, x, y, paint); + } +} + void SkNWayCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) { Iter iter(fList); diff --git a/src/utils/SkPaintFilterCanvas.cpp b/src/utils/SkPaintFilterCanvas.cpp index ce1e4b7dbf..dff1514acb 100644 --- a/src/utils/SkPaintFilterCanvas.cpp +++ b/src/utils/SkPaintFilterCanvas.cpp @@ -110,6 +110,12 @@ void SkPaintFilterCanvas::onDrawBitmapNine(const SkBitmap& bm, const SkIRect& ce this->INHERITED::onDrawBitmapNine(bm, center, dst, apf.paint()); } +void SkPaintFilterCanvas::onDrawSprite(const SkBitmap& bm, int left, int top, + const SkPaint* paint) { + AutoPaintFilter apf(this, kBitmap_Type, paint); + this->INHERITED::onDrawSprite(bm, left, top, apf.paint()); +} + void SkPaintFilterCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xmode, diff --git a/src/utils/android/SkAndroidSDKCanvas.cpp b/src/utils/android/SkAndroidSDKCanvas.cpp index 9e1463d966..e6f802fc5b 100644 --- a/src/utils/android/SkAndroidSDKCanvas.cpp +++ b/src/utils/android/SkAndroidSDKCanvas.cpp @@ -156,6 +156,13 @@ void SkAndroidSDKCanvas::onDrawBitmapNine(const SkBitmap& bitmap, FILTER_PTR(paint); fProxyTarget->drawBitmapNine(bitmap, center, dst, filteredPaint); } +void SkAndroidSDKCanvas::onDrawSprite(const SkBitmap& bitmap, + int left, + int top, + const SkPaint* paint) { + FILTER_PTR(paint); + fProxyTarget->drawSprite(bitmap, left, top, filteredPaint); +} void SkAndroidSDKCanvas::onDrawVertices(VertexMode vMode, int vertexCount, const SkPoint vertices[], diff --git a/src/utils/android/SkAndroidSDKCanvas.h b/src/utils/android/SkAndroidSDKCanvas.h index 1605db44f6..08b73f144c 100644 --- a/src/utils/android/SkAndroidSDKCanvas.h +++ b/src/utils/android/SkAndroidSDKCanvas.h @@ -46,6 +46,8 @@ protected: const SkPaint* paint, SkCanvas::SrcRectConstraint) override; void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint) override; + void onDrawSprite(const SkBitmap& bitmap, int left, int top, + const SkPaint* paint) override; void onDrawVertices(VertexMode vMode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xMode, const uint16_t indices[], int indexCount, diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp index 86937392a6..f163cc5470 100644 --- a/src/utils/debugger/SkDebugCanvas.cpp +++ b/src/utils/debugger/SkDebugCanvas.cpp @@ -484,6 +484,10 @@ void SkDebugCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, this->addDrawCommand(new SkDrawDRRectCommand(outer, inner, paint)); } +void SkDebugCanvas::onDrawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint) { + this->addDrawCommand(new SkDrawSpriteCommand(bitmap, left, top, paint)); +} + void SkDebugCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) { this->addDrawCommand(new SkDrawTextCommand(text, byteLength, x, y, paint)); diff --git a/src/utils/debugger/SkDebugCanvas.h b/src/utils/debugger/SkDebugCanvas.h index 7de2b59437..612ee5756f 100644 --- a/src/utils/debugger/SkDebugCanvas.h +++ b/src/utils/debugger/SkDebugCanvas.h @@ -205,6 +205,7 @@ protected: const SkPaint*, SrcRectConstraint) override; void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, const SkPaint*) override; + void onDrawSprite(const SkBitmap&, int left, int top, const SkPaint*) override; void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; diff --git a/src/utils/debugger/SkDrawCommand.cpp b/src/utils/debugger/SkDrawCommand.cpp index 9ebb81e74a..330c2c9183 100644 --- a/src/utils/debugger/SkDrawCommand.cpp +++ b/src/utils/debugger/SkDrawCommand.cpp @@ -48,6 +48,7 @@ const char* SkDrawCommand::GetCommandString(OpType type) { case kDrawPosTextH_OpType: return "DrawPosTextH"; case kDrawRect_OpType: return "DrawRect"; case kDrawRRect_OpType: return "DrawRRect"; + case kDrawSprite_OpType: return "DrawSprite"; case kDrawText_OpType: return "DrawText"; case kDrawTextBlob_OpType: return "DrawTextBlob"; case kDrawTextOnPath_OpType: return "DrawTextOnPath"; @@ -798,6 +799,36 @@ bool SkDrawDRRectCommand::render(SkCanvas* canvas) const { return true; } +SkDrawSpriteCommand::SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, + const SkPaint* paint) + : INHERITED(kDrawSprite_OpType) { + fBitmap = bitmap; + fLeft = left; + fTop = top; + if (paint) { + fPaint = *paint; + fPaintPtr = &fPaint; + } else { + fPaintPtr = nullptr; + } + + fInfo.push(SkObjectParser::BitmapToString(bitmap)); + fInfo.push(SkObjectParser::IntToString(left, "Left: ")); + fInfo.push(SkObjectParser::IntToString(top, "Top: ")); + if (paint) { + fInfo.push(SkObjectParser::PaintToString(*paint)); + } +} + +void SkDrawSpriteCommand::execute(SkCanvas* canvas) const { + canvas->drawSprite(fBitmap, fLeft, fTop, fPaintPtr); +} + +bool SkDrawSpriteCommand::render(SkCanvas* canvas) const { + render_bitmap(canvas, fBitmap); + return true; +} + SkDrawTextCommand::SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) : INHERITED(kDrawText_OpType) { diff --git a/src/utils/debugger/SkDrawCommand.h b/src/utils/debugger/SkDrawCommand.h index 9da05eeedb..c7e5f008a4 100644 --- a/src/utils/debugger/SkDrawCommand.h +++ b/src/utils/debugger/SkDrawCommand.h @@ -41,6 +41,7 @@ public: kDrawPosTextH_OpType, kDrawRect_OpType, kDrawRRect_OpType, + kDrawSprite_OpType, kDrawText_OpType, kDrawTextBlob_OpType, kDrawTextOnPath_OpType, @@ -517,6 +518,21 @@ private: typedef SkDrawCommand INHERITED; }; +class SkDrawSpriteCommand : public SkDrawCommand { +public: + SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint); + void execute(SkCanvas* canvas) const override; + bool render(SkCanvas* canvas) const override; +private: + SkBitmap fBitmap; + int fLeft; + int fTop; + SkPaint fPaint; + SkPaint* fPaintPtr; + + typedef SkDrawCommand INHERITED; +}; + class SkDrawVerticesCommand : public SkDrawCommand { public: SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount, -- cgit v1.2.3