Index: tools/json/SkJSONCanvas.cpp |
diff --git a/tools/json/SkJSONCanvas.cpp b/tools/json/SkJSONCanvas.cpp |
index 9361191c0a1b1fc900d7c94ec99d4fb622c35761..3c6fa05bb6fdf874d89fcc44abbd279e240e1dfe 100644 |
--- a/tools/json/SkJSONCanvas.cpp |
+++ b/tools/json/SkJSONCanvas.cpp |
@@ -510,15 +510,31 @@ Json::Value SkJSONCanvas::makePointMode(SkCanvas::PointMode mode) { |
}; |
} |
-void SkJSONCanvas::updateMatrix() { |
- const SkMatrix& matrix = this->getTotalMatrix(); |
- if (matrix != fLastMatrix) { |
- Json::Value command(Json::objectValue); |
- command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_MATRIX); |
- command[SKJSONCANVAS_ATTRIBUTE_MATRIX] = MakeMatrix(matrix); |
- fCommands.append(command); |
- fLastMatrix = matrix; |
+void SkJSONCanvas::didConcat(const SkMatrix& matrix) { |
+ Json::Value command(Json::objectValue); |
+ switch (matrix.getType()) { |
+ case SkMatrix::kTranslate_Mask: |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_TRANSLATE); |
+ command[SKJSONCANVAS_ATTRIBUTE_X] = Json::Value(matrix.get(SkMatrix::kMTransX)); |
+ command[SKJSONCANVAS_ATTRIBUTE_Y] = Json::Value(matrix.get(SkMatrix::kMTransY)); |
+ break; |
+ case SkMatrix::kScale_Mask: |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_SCALE); |
+ command[SKJSONCANVAS_ATTRIBUTE_X] = Json::Value(matrix.get(SkMatrix::kMScaleX)); |
+ command[SKJSONCANVAS_ATTRIBUTE_Y] = Json::Value(matrix.get(SkMatrix::kMScaleY)); |
+ break; |
+ default: |
+ this->didSetMatrix(this->getTotalMatrix()); |
+ return; |
} |
+ fCommands.append(command); |
+} |
+ |
+void SkJSONCanvas::didSetMatrix(const SkMatrix& matrix) { |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_MATRIX); |
+ command[SKJSONCANVAS_ATTRIBUTE_MATRIX] = this->makeMatrix(matrix); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawPaint(const SkPaint& paint) { |
@@ -529,7 +545,6 @@ void SkJSONCanvas::onDrawPaint(const SkPaint& paint) { |
} |
void SkJSONCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_RECT); |
command[SKJSONCANVAS_ATTRIBUTE_COORDS] = this->makeRect(rect); |
@@ -538,7 +553,6 @@ void SkJSONCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) { |
} |
void SkJSONCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_OVAL); |
command[SKJSONCANVAS_ATTRIBUTE_COORDS] = this->makeRect(rect); |
@@ -547,7 +561,6 @@ void SkJSONCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) { |
} |
void SkJSONCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_RRECT); |
command[SKJSONCANVAS_ATTRIBUTE_COORDS] = this->makeRRect(rrect); |
@@ -556,7 +569,6 @@ void SkJSONCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) { |
} |
void SkJSONCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_RRECT); |
command[SKJSONCANVAS_ATTRIBUTE_INNER] = this->makeRRect(inner); |
@@ -567,7 +579,6 @@ void SkJSONCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, cons |
void SkJSONCanvas::onDrawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint pts[], |
const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_POINTS); |
command[SKJSONCANVAS_ATTRIBUTE_MODE] = this->makePointMode(mode); |
@@ -584,15 +595,20 @@ void SkJSONCanvas::onDrawVertices(SkCanvas::VertexMode, int vertexCount, const S |
const SkPoint texs[], const SkColor colors[], SkXfermode*, |
const uint16_t indices[], int indexCount, const SkPaint&) { |
SkDebugf("unsupported: drawVertices\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_VERTICES); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], |
int count, SkXfermode::Mode, const SkRect* cull, const SkPaint*) { |
SkDebugf("unsupported: drawAtlas\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_ATLAS); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_PATH); |
command[SKJSONCANVAS_ATTRIBUTE_PATH] = this->makePath(path); |
@@ -604,7 +620,6 @@ void SkJSONCanvas::onDrawImage(const SkImage* image, SkScalar dx, SkScalar dy, |
const SkPaint* paint) { |
Json::Value encoded; |
if (flatten(*image, &encoded, fSendBinaries)) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_IMAGE); |
command[SKJSONCANVAS_ATTRIBUTE_IMAGE] = encoded; |
@@ -620,7 +635,6 @@ void SkJSONCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, cons |
const SkPaint* paint, SkCanvas::SrcRectConstraint constraint) { |
Json::Value encoded; |
if (flatten(*image, &encoded, fSendBinaries)) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_IMAGERECT); |
command[SKJSONCANVAS_ATTRIBUTE_IMAGE] = encoded; |
@@ -641,13 +655,15 @@ void SkJSONCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, cons |
void SkJSONCanvas::onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst, |
const SkPaint*) { |
SkDebugf("unsupported: drawImageNine\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_IMAGENINE); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar dx, SkScalar dy, |
const SkPaint* paint) { |
Json::Value encoded; |
if (flatten(bitmap, &encoded, fSendBinaries)) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_BITMAP); |
command[SKJSONCANVAS_ATTRIBUTE_BITMAP] = encoded; |
@@ -663,7 +679,6 @@ void SkJSONCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, c |
const SkPaint* paint, SkCanvas::SrcRectConstraint constraint) { |
Json::Value encoded; |
if (flatten(bitmap, &encoded, fSendBinaries)) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_BITMAPRECT); |
command[SKJSONCANVAS_ATTRIBUTE_BITMAP] = encoded; |
@@ -684,11 +699,13 @@ void SkJSONCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, c |
void SkJSONCanvas::onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, |
const SkPaint*) { |
SkDebugf("unsupported: drawBitmapNine\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_BITMAPNINE); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, |
SkScalar y, const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_TEXT); |
command[SKJSONCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) text, |
@@ -700,7 +717,6 @@ void SkJSONCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, |
void SkJSONCanvas::onDrawPosText(const void* text, size_t byteLength, |
const SkPoint pos[], const SkPaint& paint) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_POSTEXT); |
command[SKJSONCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) text, |
@@ -718,31 +734,51 @@ void SkJSONCanvas::onDrawPosTextH(const void* text, size_t byteLength, |
const SkScalar xpos[], SkScalar constY, |
const SkPaint& paint) { |
SkDebugf("unsupported: drawPosTextH\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_POSTEXTH); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawTextOnPath(const void* text, size_t byteLength, |
const SkPath& path, const SkMatrix* matrix, |
const SkPaint& paint) { |
- SkDebugf("unsupported: drawTextOnPath\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_TEXTONPATH); |
+ command[SKJSONCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) text, |
+ ((const char*) text) + byteLength); |
+ command[SKJSONCANVAS_ATTRIBUTE_PATH] = this->makePath(path); |
+ if (matrix != nullptr) { |
+ command[SKJSONCANVAS_ATTRIBUTE_MATRIX] = this->makeMatrix(*matrix); |
+ } |
+ command[SKJSONCANVAS_ATTRIBUTE_PAINT] = this->makePaint(paint); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, |
const SkPaint& paint) { |
SkDebugf("unsupported: drawTextBlob\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_TEXTBLOB); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], |
const SkPoint texCoords[4], SkXfermode* xmode, |
const SkPaint& paint) { |
SkDebugf("unsupported: drawPatch\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_PATCH); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onDrawDrawable(SkDrawable*, const SkMatrix*) { |
SkDebugf("unsupported: drawDrawable\n"); |
+ Json::Value command(Json::objectValue); |
+ command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_DRAWABLE); |
+ fCommands.append(command); |
} |
void SkJSONCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_CLIPRECT); |
command[SKJSONCANVAS_ATTRIBUTE_COORDS] = this->makeRect(rect); |
@@ -752,7 +788,6 @@ void SkJSONCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle |
} |
void SkJSONCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_CLIPRRECT); |
command[SKJSONCANVAS_ATTRIBUTE_COORDS] = this->makeRRect(rrect); |
@@ -762,7 +797,6 @@ void SkJSONCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeSt |
} |
void SkJSONCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_CLIPPATH); |
command[SKJSONCANVAS_ATTRIBUTE_PATH] = this->makePath(path); |
@@ -772,7 +806,6 @@ void SkJSONCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle |
} |
void SkJSONCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_CLIPREGION); |
command[SKJSONCANVAS_ATTRIBUTE_REGION] = this->makeRegion(deviceRgn); |
@@ -781,7 +814,6 @@ void SkJSONCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { |
} |
void SkJSONCanvas::willSave() { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_SAVE); |
fCommands.append(command); |
@@ -794,7 +826,6 @@ void SkJSONCanvas::willRestore() { |
} |
SkCanvas::SaveLayerStrategy SkJSONCanvas::getSaveLayerStrategy(const SaveLayerRec& rec) { |
- this->updateMatrix(); |
Json::Value command(Json::objectValue); |
command[SKJSONCANVAS_COMMAND] = Json::Value(SKJSONCANVAS_COMMAND_SAVELAYER); |
if (rec.fBounds != nullptr) { |