Index: tools/debugger/SkDrawCommand.cpp |
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp |
index 8f42cb70ecc3a2a09e33b82c3e7d85414cc23ed5..0bbf02055e99ff6206ea928cbdfbf2a838df402b 100644 |
--- a/tools/debugger/SkDrawCommand.cpp |
+++ b/tools/debugger/SkDrawCommand.cpp |
@@ -180,6 +180,7 @@ SkDrawCommand::~SkDrawCommand() { |
const char* SkDrawCommand::GetCommandString(OpType type) { |
switch (type) { |
case kBeginDrawPicture_OpType: return "BeginDrawPicture"; |
+ case kBeginDrawShadowedPicture_OpType: return "BeginDrawShadowedPicture"; |
case kClipPath_OpType: return "ClipPath"; |
case kClipRegion_OpType: return "ClipRegion"; |
case kClipRect_OpType: return "ClipRect"; |
@@ -208,6 +209,7 @@ const char* SkDrawCommand::GetCommandString(OpType type) { |
case kDrawTextRSXform_OpType: return "DrawTextRSXform"; |
case kDrawVertices_OpType: return "DrawVertices"; |
case kEndDrawPicture_OpType: return "EndDrawPicture"; |
+ case kEndDrawShadowedPicture_OpType: return "EndDrawShadowedPicture"; |
case kRestore_OpType: return "Restore"; |
case kSave_OpType: return "Save"; |
case kSaveLayer_OpType: return "SaveLayer"; |
@@ -270,8 +272,9 @@ SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command, UrlDataManager& url |
INSTALL_FACTORY(Save); |
INSTALL_FACTORY(SaveLayer); |
INSTALL_FACTORY(SetMatrix); |
- |
+#ifdef SK_USE_SHADOWS |
INSTALL_FACTORY(TranslateZ); |
+#endif |
} |
SkString name = SkString(command[SKDEBUGCANVAS_ATTRIBUTE_COMMAND].asCString()); |
FROM_JSON* factory = factories.find(name); |
@@ -1491,10 +1494,13 @@ static void extract_json_matrix(Json::Value& matrix, SkMatrix* result) { |
result->set9(values); |
} |
+#ifdef SK_USE_SHADOWS |
+// somehow this is only used in shadows... |
static void extract_json_scalar(Json::Value& scalar, SkScalar* result) { |
SkScalar value = scalar.asFloat(); |
*result = value; |
} |
+#endif |
static void extract_json_path(Json::Value& path, SkPath* result) { |
const char* fillType = path[SKDEBUGCANVAS_ATTRIBUTE_FILLTYPE].asCString(); |
@@ -2381,6 +2387,68 @@ void SkEndDrawPictureCommand::execute(SkCanvas* canvas) const { |
} |
} |
+SkBeginDrawShadowedPictureCommand::SkBeginDrawShadowedPictureCommand(const SkPicture* picture, |
+ const SkMatrix* matrix, |
+ const SkPaint* paint) |
+ : INHERITED(kBeginDrawShadowedPicture_OpType) |
+ , fPicture(SkRef(picture)) { |
+ |
+ SkString* str = new SkString; |
+ str->appendf("SkPicture: L: %f T: %f R: %f B: %f", |
+ picture->cullRect().fLeft, picture->cullRect().fTop, |
+ picture->cullRect().fRight, picture->cullRect().fBottom); |
+ fInfo.push(str); |
+ |
+ if (matrix) { |
+ fMatrix.set(*matrix); |
+ fInfo.push(SkObjectParser::MatrixToString(*matrix)); |
+ } |
+ |
+ if (paint) { |
+ fPaint.set(*paint); |
+ fInfo.push(SkObjectParser::PaintToString(*paint)); |
+ } |
+} |
+ |
+void SkBeginDrawShadowedPictureCommand::execute(SkCanvas* canvas) const { |
+ if (fPaint.isValid()) { |
+ SkRect bounds = fPicture->cullRect(); |
+ if (fMatrix.isValid()) { |
+ fMatrix.get()->mapRect(&bounds); |
+ } |
+ canvas->saveLayer(&bounds, fPaint.get()); |
+ } |
+ |
+ if (fMatrix.isValid()) { |
+ if (!fPaint.isValid()) { |
+ canvas->save(); |
+ } |
+ canvas->concat(*fMatrix.get()); |
+ } |
+} |
+ |
+bool SkBeginDrawShadowedPictureCommand::render(SkCanvas* canvas) const { |
+ canvas->clear(0xFFFFFFFF); |
+ canvas->save(); |
+ |
+ xlate_and_scale_to_bounds(canvas, fPicture->cullRect()); |
+ |
+ canvas->drawPicture(fPicture.get()); |
+ |
+ canvas->restore(); |
+ |
+ return true; |
+} |
+ |
+SkEndDrawShadowedPictureCommand::SkEndDrawShadowedPictureCommand(bool restore) |
+ : INHERITED(kEndDrawShadowedPicture_OpType) , fRestore(restore) { } |
+ |
+void SkEndDrawShadowedPictureCommand::execute(SkCanvas* canvas) const { |
+ if (fRestore) { |
+ canvas->restore(); |
+ } |
+} |
+ |
SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, |
const SkPoint pts[], const SkPaint& paint) |
: INHERITED(kDrawPoints_OpType) { |
@@ -3317,7 +3385,9 @@ SkTranslateZCommand::SkTranslateZCommand(SkScalar z) |
} |
void SkTranslateZCommand::execute(SkCanvas* canvas) const { |
+#ifdef SK_USE_SHADOWS |
canvas->translateZ(fZTranslate); |
+#endif |
} |
Json::Value SkTranslateZCommand::toJSON(UrlDataManager& urlDataManager) const { |
@@ -3329,6 +3399,10 @@ Json::Value SkTranslateZCommand::toJSON(UrlDataManager& urlDataManager) const { |
SkTranslateZCommand* SkTranslateZCommand::fromJSON(Json::Value& command, |
UrlDataManager& urlDataManager) { |
SkScalar z; |
+#ifdef SK_USE_SHADOWS |
extract_json_scalar(command[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS], &z); |
+#else |
+ z = 0; |
+#endif |
return new SkTranslateZCommand(z); |
} |