| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkDrawCommand.h" | 8 #include "SkDrawCommand.h" |
| 9 | 9 |
| 10 #include "SkBlurMaskFilter.h" | 10 #include "SkBlurMaskFilter.h" |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 , fVisible(true) { | 173 , fVisible(true) { |
| 174 } | 174 } |
| 175 | 175 |
| 176 SkDrawCommand::~SkDrawCommand() { | 176 SkDrawCommand::~SkDrawCommand() { |
| 177 fInfo.deleteAll(); | 177 fInfo.deleteAll(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 const char* SkDrawCommand::GetCommandString(OpType type) { | 180 const char* SkDrawCommand::GetCommandString(OpType type) { |
| 181 switch (type) { | 181 switch (type) { |
| 182 case kBeginDrawPicture_OpType: return "BeginDrawPicture"; | 182 case kBeginDrawPicture_OpType: return "BeginDrawPicture"; |
| 183 case kBeginDrawShadowedPicture_OpType: return "BeginDrawShadowedPicture"
; | |
| 184 case kClipPath_OpType: return "ClipPath"; | 183 case kClipPath_OpType: return "ClipPath"; |
| 185 case kClipRegion_OpType: return "ClipRegion"; | 184 case kClipRegion_OpType: return "ClipRegion"; |
| 186 case kClipRect_OpType: return "ClipRect"; | 185 case kClipRect_OpType: return "ClipRect"; |
| 187 case kClipRRect_OpType: return "ClipRRect"; | 186 case kClipRRect_OpType: return "ClipRRect"; |
| 188 case kConcat_OpType: return "Concat"; | 187 case kConcat_OpType: return "Concat"; |
| 189 case kDrawAnnotation_OpType: return "DrawAnnotation"; | 188 case kDrawAnnotation_OpType: return "DrawAnnotation"; |
| 190 case kDrawBitmap_OpType: return "DrawBitmap"; | 189 case kDrawBitmap_OpType: return "DrawBitmap"; |
| 191 case kDrawBitmapNine_OpType: return "DrawBitmapNine"; | 190 case kDrawBitmapNine_OpType: return "DrawBitmapNine"; |
| 192 case kDrawBitmapRect_OpType: return "DrawBitmapRect"; | 191 case kDrawBitmapRect_OpType: return "DrawBitmapRect"; |
| 193 case kDrawClear_OpType: return "DrawClear"; | 192 case kDrawClear_OpType: return "DrawClear"; |
| 194 case kDrawDRRect_OpType: return "DrawDRRect"; | 193 case kDrawDRRect_OpType: return "DrawDRRect"; |
| 195 case kDrawImage_OpType: return "DrawImage"; | 194 case kDrawImage_OpType: return "DrawImage"; |
| 196 case kDrawImageRect_OpType: return "DrawImageRect"; | 195 case kDrawImageRect_OpType: return "DrawImageRect"; |
| 197 case kDrawOval_OpType: return "DrawOval"; | 196 case kDrawOval_OpType: return "DrawOval"; |
| 198 case kDrawPaint_OpType: return "DrawPaint"; | 197 case kDrawPaint_OpType: return "DrawPaint"; |
| 199 case kDrawPatch_OpType: return "DrawPatch"; | 198 case kDrawPatch_OpType: return "DrawPatch"; |
| 200 case kDrawPath_OpType: return "DrawPath"; | 199 case kDrawPath_OpType: return "DrawPath"; |
| 201 case kDrawPoints_OpType: return "DrawPoints"; | 200 case kDrawPoints_OpType: return "DrawPoints"; |
| 202 case kDrawPosText_OpType: return "DrawPosText"; | 201 case kDrawPosText_OpType: return "DrawPosText"; |
| 203 case kDrawPosTextH_OpType: return "DrawPosTextH"; | 202 case kDrawPosTextH_OpType: return "DrawPosTextH"; |
| 204 case kDrawRect_OpType: return "DrawRect"; | 203 case kDrawRect_OpType: return "DrawRect"; |
| 205 case kDrawRRect_OpType: return "DrawRRect"; | 204 case kDrawRRect_OpType: return "DrawRRect"; |
| 206 case kDrawText_OpType: return "DrawText"; | 205 case kDrawText_OpType: return "DrawText"; |
| 207 case kDrawTextBlob_OpType: return "DrawTextBlob"; | 206 case kDrawTextBlob_OpType: return "DrawTextBlob"; |
| 208 case kDrawTextOnPath_OpType: return "DrawTextOnPath"; | 207 case kDrawTextOnPath_OpType: return "DrawTextOnPath"; |
| 209 case kDrawTextRSXform_OpType: return "DrawTextRSXform"; | 208 case kDrawTextRSXform_OpType: return "DrawTextRSXform"; |
| 210 case kDrawVertices_OpType: return "DrawVertices"; | 209 case kDrawVertices_OpType: return "DrawVertices"; |
| 211 case kEndDrawPicture_OpType: return "EndDrawPicture"; | 210 case kEndDrawPicture_OpType: return "EndDrawPicture"; |
| 212 case kEndDrawShadowedPicture_OpType: return "EndDrawShadowedPicture"; | |
| 213 case kRestore_OpType: return "Restore"; | 211 case kRestore_OpType: return "Restore"; |
| 214 case kSave_OpType: return "Save"; | 212 case kSave_OpType: return "Save"; |
| 215 case kSaveLayer_OpType: return "SaveLayer"; | 213 case kSaveLayer_OpType: return "SaveLayer"; |
| 216 case kSetMatrix_OpType: return "SetMatrix"; | 214 case kSetMatrix_OpType: return "SetMatrix"; |
| 217 case kTranslateZ_OpType: return "TranslateZ"; | 215 case kTranslateZ_OpType: return "TranslateZ"; |
| 218 default: | 216 default: |
| 219 SkDebugf("OpType error 0x%08x\n", type); | 217 SkDebugf("OpType error 0x%08x\n", type); |
| 220 SkASSERT(0); | 218 SkASSERT(0); |
| 221 break; | 219 break; |
| 222 } | 220 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 INSTALL_FACTORY(DrawTextRSXform); | 263 INSTALL_FACTORY(DrawTextRSXform); |
| 266 INSTALL_FACTORY(DrawTextBlob); | 264 INSTALL_FACTORY(DrawTextBlob); |
| 267 | 265 |
| 268 INSTALL_FACTORY(DrawRect); | 266 INSTALL_FACTORY(DrawRect); |
| 269 INSTALL_FACTORY(DrawRRect); | 267 INSTALL_FACTORY(DrawRRect); |
| 270 INSTALL_FACTORY(DrawDRRect); | 268 INSTALL_FACTORY(DrawDRRect); |
| 271 INSTALL_FACTORY(DrawPatch); | 269 INSTALL_FACTORY(DrawPatch); |
| 272 INSTALL_FACTORY(Save); | 270 INSTALL_FACTORY(Save); |
| 273 INSTALL_FACTORY(SaveLayer); | 271 INSTALL_FACTORY(SaveLayer); |
| 274 INSTALL_FACTORY(SetMatrix); | 272 INSTALL_FACTORY(SetMatrix); |
| 275 #ifdef SK_EXPERIMENTAL_SHADOWING | 273 |
| 276 INSTALL_FACTORY(TranslateZ); | 274 INSTALL_FACTORY(TranslateZ); |
| 277 #endif | |
| 278 } | 275 } |
| 279 SkString name = SkString(command[SKDEBUGCANVAS_ATTRIBUTE_COMMAND].asCString(
)); | 276 SkString name = SkString(command[SKDEBUGCANVAS_ATTRIBUTE_COMMAND].asCString(
)); |
| 280 FROM_JSON* factory = factories.find(name); | 277 FROM_JSON* factory = factories.find(name); |
| 281 if (factory == nullptr) { | 278 if (factory == nullptr) { |
| 282 SkDebugf("no JSON factory for '%s'\n", name.c_str()); | 279 SkDebugf("no JSON factory for '%s'\n", name.c_str()); |
| 283 return nullptr; | 280 return nullptr; |
| 284 } | 281 } |
| 285 return (*factory)(command, urlDataManager); | 282 return (*factory)(command, urlDataManager); |
| 286 } | 283 } |
| 287 | 284 |
| (...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1487 | 1484 |
| 1488 static void extract_json_matrix(Json::Value& matrix, SkMatrix* result) { | 1485 static void extract_json_matrix(Json::Value& matrix, SkMatrix* result) { |
| 1489 SkScalar values[] = { | 1486 SkScalar values[] = { |
| 1490 matrix[0][0].asFloat(), matrix[0][1].asFloat(), matrix[0][2].asFloat(), | 1487 matrix[0][0].asFloat(), matrix[0][1].asFloat(), matrix[0][2].asFloat(), |
| 1491 matrix[1][0].asFloat(), matrix[1][1].asFloat(), matrix[1][2].asFloat(), | 1488 matrix[1][0].asFloat(), matrix[1][1].asFloat(), matrix[1][2].asFloat(), |
| 1492 matrix[2][0].asFloat(), matrix[2][1].asFloat(), matrix[2][2].asFloat() | 1489 matrix[2][0].asFloat(), matrix[2][1].asFloat(), matrix[2][2].asFloat() |
| 1493 }; | 1490 }; |
| 1494 result->set9(values); | 1491 result->set9(values); |
| 1495 } | 1492 } |
| 1496 | 1493 |
| 1497 #ifdef SK_EXPERIMENTAL_SHADOWING | |
| 1498 // somehow this is only used in shadows... | |
| 1499 static void extract_json_scalar(Json::Value& scalar, SkScalar* result) { | 1494 static void extract_json_scalar(Json::Value& scalar, SkScalar* result) { |
| 1500 SkScalar value = scalar.asFloat(); | 1495 SkScalar value = scalar.asFloat(); |
| 1501 *result = value; | 1496 *result = value; |
| 1502 } | 1497 } |
| 1503 #endif | |
| 1504 | 1498 |
| 1505 static void extract_json_path(Json::Value& path, SkPath* result) { | 1499 static void extract_json_path(Json::Value& path, SkPath* result) { |
| 1506 const char* fillType = path[SKDEBUGCANVAS_ATTRIBUTE_FILLTYPE].asCString(); | 1500 const char* fillType = path[SKDEBUGCANVAS_ATTRIBUTE_FILLTYPE].asCString(); |
| 1507 if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_WINDING)) { | 1501 if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_WINDING)) { |
| 1508 result->setFillType(SkPath::kWinding_FillType); | 1502 result->setFillType(SkPath::kWinding_FillType); |
| 1509 } | 1503 } |
| 1510 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_EVENODD)) { | 1504 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_EVENODD)) { |
| 1511 result->setFillType(SkPath::kEvenOdd_FillType); | 1505 result->setFillType(SkPath::kEvenOdd_FillType); |
| 1512 } | 1506 } |
| 1513 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_INVERSEWINDING)) { | 1507 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_INVERSEWINDING)) { |
| (...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2380 | 2374 |
| 2381 SkEndDrawPictureCommand::SkEndDrawPictureCommand(bool restore) | 2375 SkEndDrawPictureCommand::SkEndDrawPictureCommand(bool restore) |
| 2382 : INHERITED(kEndDrawPicture_OpType) , fRestore(restore) { } | 2376 : INHERITED(kEndDrawPicture_OpType) , fRestore(restore) { } |
| 2383 | 2377 |
| 2384 void SkEndDrawPictureCommand::execute(SkCanvas* canvas) const { | 2378 void SkEndDrawPictureCommand::execute(SkCanvas* canvas) const { |
| 2385 if (fRestore) { | 2379 if (fRestore) { |
| 2386 canvas->restore(); | 2380 canvas->restore(); |
| 2387 } | 2381 } |
| 2388 } | 2382 } |
| 2389 | 2383 |
| 2390 SkBeginDrawShadowedPictureCommand::SkBeginDrawShadowedPictureCommand(const SkPic
ture* picture, | |
| 2391 const SkMat
rix* matrix, | |
| 2392 const SkPai
nt* paint) | |
| 2393 : INHERITED(kBeginDrawShadowedPicture_OpType) | |
| 2394 , fPicture(SkRef(picture)) { | |
| 2395 | |
| 2396 SkString* str = new SkString; | |
| 2397 str->appendf("SkPicture: L: %f T: %f R: %f B: %f", | |
| 2398 picture->cullRect().fLeft, picture->cullRect().fTop, | |
| 2399 picture->cullRect().fRight, picture->cullRect().fBottom); | |
| 2400 fInfo.push(str); | |
| 2401 | |
| 2402 if (matrix) { | |
| 2403 fMatrix.set(*matrix); | |
| 2404 fInfo.push(SkObjectParser::MatrixToString(*matrix)); | |
| 2405 } | |
| 2406 | |
| 2407 if (paint) { | |
| 2408 fPaint.set(*paint); | |
| 2409 fInfo.push(SkObjectParser::PaintToString(*paint)); | |
| 2410 } | |
| 2411 } | |
| 2412 | |
| 2413 void SkBeginDrawShadowedPictureCommand::execute(SkCanvas* canvas) const { | |
| 2414 if (fPaint.isValid()) { | |
| 2415 SkRect bounds = fPicture->cullRect(); | |
| 2416 if (fMatrix.isValid()) { | |
| 2417 fMatrix.get()->mapRect(&bounds); | |
| 2418 } | |
| 2419 canvas->saveLayer(&bounds, fPaint.get()); | |
| 2420 } | |
| 2421 | |
| 2422 if (fMatrix.isValid()) { | |
| 2423 if (!fPaint.isValid()) { | |
| 2424 canvas->save(); | |
| 2425 } | |
| 2426 canvas->concat(*fMatrix.get()); | |
| 2427 } | |
| 2428 } | |
| 2429 | |
| 2430 bool SkBeginDrawShadowedPictureCommand::render(SkCanvas* canvas) const { | |
| 2431 canvas->clear(0xFFFFFFFF); | |
| 2432 canvas->save(); | |
| 2433 | |
| 2434 xlate_and_scale_to_bounds(canvas, fPicture->cullRect()); | |
| 2435 | |
| 2436 canvas->drawPicture(fPicture.get()); | |
| 2437 | |
| 2438 canvas->restore(); | |
| 2439 | |
| 2440 return true; | |
| 2441 } | |
| 2442 | |
| 2443 SkEndDrawShadowedPictureCommand::SkEndDrawShadowedPictureCommand(bool restore) | |
| 2444 : INHERITED(kEndDrawShadowedPicture_OpType) , fRestore(restore) { } | |
| 2445 | |
| 2446 void SkEndDrawShadowedPictureCommand::execute(SkCanvas* canvas) const { | |
| 2447 if (fRestore) { | |
| 2448 canvas->restore(); | |
| 2449 } | |
| 2450 } | |
| 2451 | |
| 2452 SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, | 2384 SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, |
| 2453 const SkPoint pts[], const SkPaint& pai
nt) | 2385 const SkPoint pts[], const SkPaint& pai
nt) |
| 2454 : INHERITED(kDrawPoints_OpType) { | 2386 : INHERITED(kDrawPoints_OpType) { |
| 2455 fMode = mode; | 2387 fMode = mode; |
| 2456 fCount = count; | 2388 fCount = count; |
| 2457 fPts = new SkPoint[count]; | 2389 fPts = new SkPoint[count]; |
| 2458 memcpy(fPts, pts, count * sizeof(SkPoint)); | 2390 memcpy(fPts, pts, count * sizeof(SkPoint)); |
| 2459 fPaint = paint; | 2391 fPaint = paint; |
| 2460 | 2392 |
| 2461 fInfo.push(SkObjectParser::PointsToString(pts, count)); | 2393 fInfo.push(SkObjectParser::PointsToString(pts, count)); |
| (...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3378 return new SkSetMatrixCommand(matrix); | 3310 return new SkSetMatrixCommand(matrix); |
| 3379 } | 3311 } |
| 3380 | 3312 |
| 3381 SkTranslateZCommand::SkTranslateZCommand(SkScalar z) | 3313 SkTranslateZCommand::SkTranslateZCommand(SkScalar z) |
| 3382 : INHERITED(kTranslateZ_OpType) { | 3314 : INHERITED(kTranslateZ_OpType) { |
| 3383 fZTranslate = z; | 3315 fZTranslate = z; |
| 3384 fInfo.push(SkObjectParser::ScalarToString(fZTranslate, "drawDepthTranslation
")); | 3316 fInfo.push(SkObjectParser::ScalarToString(fZTranslate, "drawDepthTranslation
")); |
| 3385 } | 3317 } |
| 3386 | 3318 |
| 3387 void SkTranslateZCommand::execute(SkCanvas* canvas) const { | 3319 void SkTranslateZCommand::execute(SkCanvas* canvas) const { |
| 3388 #ifdef SK_EXPERIMENTAL_SHADOWING | |
| 3389 canvas->translateZ(fZTranslate); | 3320 canvas->translateZ(fZTranslate); |
| 3390 #endif | |
| 3391 } | 3321 } |
| 3392 | 3322 |
| 3393 Json::Value SkTranslateZCommand::toJSON(UrlDataManager& urlDataManager) const { | 3323 Json::Value SkTranslateZCommand::toJSON(UrlDataManager& urlDataManager) const { |
| 3394 Json::Value result = INHERITED::toJSON(urlDataManager); | 3324 Json::Value result = INHERITED::toJSON(urlDataManager); |
| 3395 result[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS] = MakeJsonScalar(fZTranslate)
; | 3325 result[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS] = MakeJsonScalar(fZTranslate)
; |
| 3396 return result; | 3326 return result; |
| 3397 } | 3327 } |
| 3398 | 3328 |
| 3399 SkTranslateZCommand* SkTranslateZCommand::fromJSON(Json::Value& command, | 3329 SkTranslateZCommand* SkTranslateZCommand::fromJSON(Json::Value& command, |
| 3400 UrlDataManager& urlDataManager) { | 3330 UrlDataManager& urlDataManager) { |
| 3401 SkScalar z; | 3331 SkScalar z; |
| 3402 #ifdef SK_EXPERIMENTAL_SHADOWING | |
| 3403 extract_json_scalar(command[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS], &z); | 3332 extract_json_scalar(command[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS], &z); |
| 3404 #else | |
| 3405 z = 0; | |
| 3406 #endif | |
| 3407 return new SkTranslateZCommand(z); | 3333 return new SkTranslateZCommand(z); |
| 3408 } | 3334 } |
| OLD | NEW |