aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/debugger
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2018-05-18 16:59:13 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-20 18:18:06 +0000
commit78a764860bddd4ac8a18db87aaf21fb00a636166 (patch)
tree9ae07529b8f56406fa5890827782b592895245a0 /tools/debugger
parentda17f1e7df1d12798cc19bf7a751123b67bbba82 (diff)
Add drawBitmapLattice to SkDebugCanvas
One more step to full coverage of SkCanvas API. (Also, it would be nice to implement fromJSON for both lattice types, I'll attempt that in a follow up CL). Change-Id: I5fe55ca90b7859e40f5e8ec83bc12b7938674b60 Reviewed-on: https://skia-review.googlesource.com/129245 Reviewed-by: Joe Gregorio <jcgregorio@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tools/debugger')
-rw-r--r--tools/debugger/SkDebugCanvas.cpp5
-rw-r--r--tools/debugger/SkDebugCanvas.h8
-rw-r--r--tools/debugger/SkDrawCommand.cpp59
-rw-r--r--tools/debugger/SkDrawCommand.h20
4 files changed, 86 insertions, 6 deletions
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp
index 67f4bd3dc9..cf813b90d7 100644
--- a/tools/debugger/SkDebugCanvas.cpp
+++ b/tools/debugger/SkDebugCanvas.cpp
@@ -343,6 +343,11 @@ void SkDebugCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left,
this->addDrawCommand(new SkDrawBitmapCommand(bitmap, left, top, paint));
}
+void SkDebugCanvas::onDrawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice,
+ const SkRect& dst, const SkPaint* paint) {
+ this->addDrawCommand(new SkDrawBitmapLatticeCommand(bitmap, lattice, dst, paint));
+}
+
void SkDebugCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
this->addDrawCommand(new SkDrawBitmapRectCommand(bitmap, src, dst, paint,
diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h
index 66c46811d4..2987e0cc79 100644
--- a/tools/debugger/SkDebugCanvas.h
+++ b/tools/debugger/SkDebugCanvas.h
@@ -10,6 +10,7 @@
#define SKDEBUGCANVAS_H_
#include "SkCanvas.h"
+#include "SkCanvasVirtualEnforcer.h"
#include "SkDrawCommand.h"
#include "SkPath.h"
#include "SkPathOps.h"
@@ -22,7 +23,12 @@ class GrAuditTrail;
class SkNWayCanvas;
class SkPicture;
+// TODO: Continue filling in missing functionality so this can be switched on
+#if 0
+class SkDebugCanvas : public SkCanvasVirtualEnforcer<SkCanvas> {
+#else
class SkDebugCanvas : public SkCanvas {
+#endif
public:
SkDebugCanvas(int width, int height);
@@ -149,6 +155,8 @@ protected:
void onDrawPath(const SkPath&, const SkPaint&) override;
void onDrawRegion(const SkRegion&, const SkPaint&) override;
void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override;
+ void onDrawBitmapLattice(const SkBitmap&, const Lattice&, const SkRect&,
+ const SkPaint*) override;
void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
SrcRectConstraint) override;
void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp
index ba54c88924..2dc11f4ef5 100644
--- a/tools/debugger/SkDrawCommand.cpp
+++ b/tools/debugger/SkDrawCommand.cpp
@@ -225,6 +225,7 @@ const char* SkDrawCommand::GetCommandString(OpType type) {
case kConcat_OpType: return "Concat";
case kDrawAnnotation_OpType: return "DrawAnnotation";
case kDrawBitmap_OpType: return "DrawBitmap";
+ case kDrawBitmapLattice_OpType: return "DrawBitmapLattice";
case kDrawBitmapNine_OpType: return "DrawBitmapNine";
case kDrawBitmapRect_OpType: return "DrawBitmapRect";
case kDrawDRRect_OpType: return "DrawDRRect";
@@ -2076,6 +2077,57 @@ SkDrawBitmapCommand* SkDrawBitmapCommand::fromJSON(Json::Value& command,
return result;
}
+SkDrawBitmapLatticeCommand::SkDrawBitmapLatticeCommand(const SkBitmap& bitmap,
+ const SkCanvas::Lattice& lattice,
+ const SkRect& dst, const SkPaint* paint)
+ : INHERITED(kDrawBitmapLattice_OpType)
+ , fBitmap(bitmap)
+ , fLattice(lattice)
+ , fDst(dst) {
+
+ if (paint) {
+ fPaint.set(*paint);
+ }
+}
+
+void SkDrawBitmapLatticeCommand::execute(SkCanvas* canvas) const {
+ canvas->drawBitmapLattice(fBitmap, fLattice, fDst, fPaint.getMaybeNull());
+}
+
+bool SkDrawBitmapLatticeCommand::render(SkCanvas* canvas) const {
+ SkAutoCanvasRestore acr(canvas, true);
+ canvas->clear(0xFFFFFFFF);
+
+ xlate_and_scale_to_bounds(canvas, fDst);
+
+ this->execute(canvas);
+ return true;
+}
+
+Json::Value SkDrawBitmapLatticeCommand::toJSON(UrlDataManager& urlDataManager) const {
+ Json::Value result = INHERITED::toJSON(urlDataManager);
+ Json::Value encoded;
+ if (flatten(fBitmap, &encoded, urlDataManager)) {
+ result[SKDEBUGCANVAS_ATTRIBUTE_BITMAP] = encoded;
+ result[SKDEBUGCANVAS_ATTRIBUTE_LATTICE] = MakeJsonLattice(fLattice);
+ result[SKDEBUGCANVAS_ATTRIBUTE_DST] = MakeJsonRect(fDst);
+ if (fPaint.isValid()) {
+ result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = MakeJsonPaint(*fPaint.get(), urlDataManager);
+ }
+ }
+
+ SkString desc;
+ result[SKDEBUGCANVAS_ATTRIBUTE_SHORTDESC] = Json::Value(str_append(&desc, fDst)->c_str());
+
+ return result;
+}
+
+SkDrawBitmapLatticeCommand* SkDrawBitmapLatticeCommand::fromJSON(Json::Value& command,
+ UrlDataManager& urlDataManager) {
+ SkDEBUGFAIL("Not implemented yet.");
+ return nullptr;
+}
+
SkDrawBitmapNineCommand::SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
const SkRect& dst, const SkPaint* paint)
: INHERITED(kDrawBitmapNine_OpType) {
@@ -2324,12 +2376,7 @@ SkDrawImageLatticeCommand::SkDrawImageLatticeCommand(const SkImage* image,
}
void SkDrawImageLatticeCommand::execute(SkCanvas* canvas) const {
- SkLatticeIter iter(fLattice, fDst);
- SkRect srcR, dstR;
- while (iter.next(&srcR, &dstR)) {
- canvas->legacy_drawImageRect(fImage.get(), &srcR, dstR,
- fPaint.getMaybeNull(), SkCanvas::kStrict_SrcRectConstraint);
- }
+ canvas->drawImageLattice(fImage.get(), fLattice, fDst, fPaint.getMaybeNull());
}
bool SkDrawImageLatticeCommand::render(SkCanvas* canvas) const {
diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h
index 257029c913..a52eb43762 100644
--- a/tools/debugger/SkDrawCommand.h
+++ b/tools/debugger/SkDrawCommand.h
@@ -35,6 +35,7 @@ public:
kConcat_OpType,
kDrawAnnotation_OpType,
kDrawBitmap_OpType,
+ kDrawBitmapLattice_OpType,
kDrawBitmapNine_OpType,
kDrawBitmapRect_OpType,
kDrawDRRect_OpType,
@@ -265,6 +266,25 @@ private:
typedef SkDrawCommand INHERITED;
};
+class SkDrawBitmapLatticeCommand : public SkDrawCommand {
+public:
+ SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
+ const SkRect& dst, const SkPaint* paint);
+ void execute(SkCanvas* canvas) const override;
+ bool render(SkCanvas* canvas) const override;
+ Json::Value toJSON(UrlDataManager& urlDataManager) const override;
+ static SkDrawBitmapLatticeCommand* fromJSON(Json::Value& command,
+ UrlDataManager& urlDataManager);
+
+private:
+ SkBitmap fBitmap;
+ SkCanvas::Lattice fLattice;
+ SkRect fDst;
+ SkTLazy<SkPaint> fPaint;
+
+ typedef SkDrawCommand INHERITED;
+};
+
class SkDrawBitmapNineCommand : public SkDrawCommand {
public:
SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,