aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/debugger/SkDrawCommand.cpp
diff options
context:
space:
mode:
authorGravatar Stan Iliev <stani@google.com>2017-01-12 16:20:50 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-12 21:55:35 +0000
commitac42aebb7b49ef3d916da1e5a75b4c7cd4cfb119 (patch)
treef7826078a58bc8c046f5e1852ffa6d331bd64271 /tools/debugger/SkDrawCommand.cpp
parentb46fff60bc82fe6f0c64b2241d854a121f7cb5f9 (diff)
Add support for drawImageLattice in SKIA debugger
Add support in SKIA debugger for SkCanvas.drawImageLattice calls. Test: Tested with an SKP from android settings app. Change-Id: I3f39f353dca8a3a2854241e7ef995d4d8c635f3e Reviewed-on: https://skia-review.googlesource.com/6882 Commit-Queue: Stan Iliev <stani@google.com> Reviewed-by: Joe Gregorio <jcgregorio@google.com> Reviewed-by: Derek Sollenberger <djsollen@google.com>
Diffstat (limited to 'tools/debugger/SkDrawCommand.cpp')
-rw-r--r--tools/debugger/SkDrawCommand.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp
index 6dea988831..3bb1b90867 100644
--- a/tools/debugger/SkDrawCommand.cpp
+++ b/tools/debugger/SkDrawCommand.cpp
@@ -28,6 +28,7 @@
#include "SkWriteBuffer.h"
#include "picture_utils.h"
#include "SkClipOpPriv.h"
+#include <SkLatticeIter.h>
#define SKDEBUGCANVAS_ATTRIBUTE_COMMAND "command"
#define SKDEBUGCANVAS_ATTRIBUTE_VISIBLE "visible"
@@ -105,6 +106,12 @@
#define SKDEBUGCANVAS_ATTRIBUTE_WIDTH "width"
#define SKDEBUGCANVAS_ATTRIBUTE_HEIGHT "height"
#define SKDEBUGCANVAS_ATTRIBUTE_ALPHA "alpha"
+#define SKDEBUGCANVAS_ATTRIBUTE_LATTICE "lattice"
+#define SKDEBUGCANVAS_ATTRIBUTE_LATTICEXCOUNT "xCount"
+#define SKDEBUGCANVAS_ATTRIBUTE_LATTICEYCOUNT "yCount"
+#define SKDEBUGCANVAS_ATTRIBUTE_LATTICEXDIVS "xDivs"
+#define SKDEBUGCANVAS_ATTRIBUTE_LATTICEYDIVS "yDivs"
+#define SKDEBUGCANVAS_ATTRIBUTE_LATTICEFLAGS "flags"
#define SKDEBUGCANVAS_VERB_MOVE "move"
#define SKDEBUGCANVAS_VERB_LINE "line"
@@ -210,6 +217,7 @@ const char* SkDrawCommand::GetCommandString(OpType type) {
case kDrawClear_OpType: return "DrawClear";
case kDrawDRRect_OpType: return "DrawDRRect";
case kDrawImage_OpType: return "DrawImage";
+ case kDrawImageLattice_OpType: return "DrawImageLattice";
case kDrawImageRect_OpType: return "DrawImageRect";
case kDrawOval_OpType: return "DrawOval";
case kDrawPaint_OpType: return "DrawPaint";
@@ -1178,6 +1186,38 @@ Json::Value SkDrawCommand::MakeJsonPaint(const SkPaint& paint, UrlDataManager& u
return result;
}
+Json::Value SkDrawCommand::MakeJsonLattice(const SkCanvas::Lattice& lattice) {
+ Json::Value result(Json::objectValue);
+ result[SKDEBUGCANVAS_ATTRIBUTE_LATTICEXCOUNT] = Json::Value(lattice.fXCount);
+ result[SKDEBUGCANVAS_ATTRIBUTE_LATTICEYCOUNT] = Json::Value(lattice.fYCount);
+ if (nullptr != lattice.fBounds) {
+ result[SKDEBUGCANVAS_ATTRIBUTE_BOUNDS] = MakeJsonIRect(*lattice.fBounds);
+ }
+ Json::Value XDivs(Json::arrayValue);
+ for (int i = 0; i < lattice.fXCount; i++) {
+ XDivs.append(Json::Value(lattice.fXDivs[i]));
+ }
+ result[SKDEBUGCANVAS_ATTRIBUTE_LATTICEXDIVS] = XDivs;
+ Json::Value YDivs(Json::arrayValue);
+ for (int i = 0; i < lattice.fYCount; i++) {
+ YDivs.append(Json::Value(lattice.fYDivs[i]));
+ }
+ result[SKDEBUGCANVAS_ATTRIBUTE_LATTICEYDIVS] = YDivs;
+ if (nullptr != lattice.fFlags) {
+ Json::Value flags(Json::arrayValue);
+ int flagCount = 0;
+ for (int row = 0; row < lattice.fYCount+1; row++) {
+ Json::Value flagsRow(Json::arrayValue);
+ for (int column = 0; column < lattice.fXCount+1; column++) {
+ flagsRow.append(Json::Value(lattice.fFlags[flagCount++]));
+ }
+ flags.append(flagsRow);
+ }
+ result[SKDEBUGCANVAS_ATTRIBUTE_LATTICEFLAGS] = flags;
+ }
+ return result;
+}
+
static SkPoint get_json_point(Json::Value point) {
return SkPoint::Make(point[0].asFloat(), point[1].asFloat());
}
@@ -2167,6 +2207,60 @@ SkDrawImageCommand* SkDrawImageCommand::fromJSON(Json::Value& command,
return result;
}
+SkDrawImageLatticeCommand::SkDrawImageLatticeCommand(const SkImage* image,
+ const SkCanvas::Lattice& lattice,
+ const SkRect& dst, const SkPaint* paint)
+ : INHERITED(kDrawImageLattice_OpType)
+ , fImage(SkRef(image))
+ , fLattice(lattice)
+ , fDst(dst) {
+
+ fInfo.push(SkObjectParser::ImageToString(image));
+ fInfo.push(SkObjectParser::LatticeToString(lattice));
+ fInfo.push(SkObjectParser::RectToString(dst, "Dst: "));
+ if (paint) {
+ fPaint.set(*paint);
+ fInfo.push(SkObjectParser::PaintToString(*paint));
+ }
+}
+
+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);
+ }
+}
+
+bool SkDrawImageLatticeCommand::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 SkDrawImageLatticeCommand::toJSON(UrlDataManager& urlDataManager) const {
+ Json::Value result = INHERITED::toJSON(urlDataManager);
+ Json::Value encoded;
+ if (flatten(*fImage.get(), &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;
+}
+
SkDrawImageRectCommand::SkDrawImageRectCommand(const SkImage* image, const SkRect* src,
const SkRect& dst, const SkPaint* paint,
SkCanvas::SrcRectConstraint constraint)