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"
; |
183 case kClipPath_OpType: return "ClipPath"; | 184 case kClipPath_OpType: return "ClipPath"; |
184 case kClipRegion_OpType: return "ClipRegion"; | 185 case kClipRegion_OpType: return "ClipRegion"; |
185 case kClipRect_OpType: return "ClipRect"; | 186 case kClipRect_OpType: return "ClipRect"; |
186 case kClipRRect_OpType: return "ClipRRect"; | 187 case kClipRRect_OpType: return "ClipRRect"; |
187 case kConcat_OpType: return "Concat"; | 188 case kConcat_OpType: return "Concat"; |
188 case kDrawAnnotation_OpType: return "DrawAnnotation"; | 189 case kDrawAnnotation_OpType: return "DrawAnnotation"; |
189 case kDrawBitmap_OpType: return "DrawBitmap"; | 190 case kDrawBitmap_OpType: return "DrawBitmap"; |
190 case kDrawBitmapNine_OpType: return "DrawBitmapNine"; | 191 case kDrawBitmapNine_OpType: return "DrawBitmapNine"; |
191 case kDrawBitmapRect_OpType: return "DrawBitmapRect"; | 192 case kDrawBitmapRect_OpType: return "DrawBitmapRect"; |
192 case kDrawClear_OpType: return "DrawClear"; | 193 case kDrawClear_OpType: return "DrawClear"; |
193 case kDrawDRRect_OpType: return "DrawDRRect"; | 194 case kDrawDRRect_OpType: return "DrawDRRect"; |
194 case kDrawImage_OpType: return "DrawImage"; | 195 case kDrawImage_OpType: return "DrawImage"; |
195 case kDrawImageRect_OpType: return "DrawImageRect"; | 196 case kDrawImageRect_OpType: return "DrawImageRect"; |
196 case kDrawOval_OpType: return "DrawOval"; | 197 case kDrawOval_OpType: return "DrawOval"; |
197 case kDrawPaint_OpType: return "DrawPaint"; | 198 case kDrawPaint_OpType: return "DrawPaint"; |
198 case kDrawPatch_OpType: return "DrawPatch"; | 199 case kDrawPatch_OpType: return "DrawPatch"; |
199 case kDrawPath_OpType: return "DrawPath"; | 200 case kDrawPath_OpType: return "DrawPath"; |
200 case kDrawPoints_OpType: return "DrawPoints"; | 201 case kDrawPoints_OpType: return "DrawPoints"; |
201 case kDrawPosText_OpType: return "DrawPosText"; | 202 case kDrawPosText_OpType: return "DrawPosText"; |
202 case kDrawPosTextH_OpType: return "DrawPosTextH"; | 203 case kDrawPosTextH_OpType: return "DrawPosTextH"; |
203 case kDrawRect_OpType: return "DrawRect"; | 204 case kDrawRect_OpType: return "DrawRect"; |
204 case kDrawRRect_OpType: return "DrawRRect"; | 205 case kDrawRRect_OpType: return "DrawRRect"; |
205 case kDrawText_OpType: return "DrawText"; | 206 case kDrawText_OpType: return "DrawText"; |
206 case kDrawTextBlob_OpType: return "DrawTextBlob"; | 207 case kDrawTextBlob_OpType: return "DrawTextBlob"; |
207 case kDrawTextOnPath_OpType: return "DrawTextOnPath"; | 208 case kDrawTextOnPath_OpType: return "DrawTextOnPath"; |
208 case kDrawTextRSXform_OpType: return "DrawTextRSXform"; | 209 case kDrawTextRSXform_OpType: return "DrawTextRSXform"; |
209 case kDrawVertices_OpType: return "DrawVertices"; | 210 case kDrawVertices_OpType: return "DrawVertices"; |
210 case kEndDrawPicture_OpType: return "EndDrawPicture"; | 211 case kEndDrawPicture_OpType: return "EndDrawPicture"; |
| 212 case kEndDrawShadowedPicture_OpType: return "EndDrawShadowedPicture"; |
211 case kRestore_OpType: return "Restore"; | 213 case kRestore_OpType: return "Restore"; |
212 case kSave_OpType: return "Save"; | 214 case kSave_OpType: return "Save"; |
213 case kSaveLayer_OpType: return "SaveLayer"; | 215 case kSaveLayer_OpType: return "SaveLayer"; |
214 case kSetMatrix_OpType: return "SetMatrix"; | 216 case kSetMatrix_OpType: return "SetMatrix"; |
215 case kTranslateZ_OpType: return "TranslateZ"; | 217 case kTranslateZ_OpType: return "TranslateZ"; |
216 default: | 218 default: |
217 SkDebugf("OpType error 0x%08x\n", type); | 219 SkDebugf("OpType error 0x%08x\n", type); |
218 SkASSERT(0); | 220 SkASSERT(0); |
219 break; | 221 break; |
220 } | 222 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 INSTALL_FACTORY(DrawTextRSXform); | 265 INSTALL_FACTORY(DrawTextRSXform); |
264 INSTALL_FACTORY(DrawTextBlob); | 266 INSTALL_FACTORY(DrawTextBlob); |
265 | 267 |
266 INSTALL_FACTORY(DrawRect); | 268 INSTALL_FACTORY(DrawRect); |
267 INSTALL_FACTORY(DrawRRect); | 269 INSTALL_FACTORY(DrawRRect); |
268 INSTALL_FACTORY(DrawDRRect); | 270 INSTALL_FACTORY(DrawDRRect); |
269 INSTALL_FACTORY(DrawPatch); | 271 INSTALL_FACTORY(DrawPatch); |
270 INSTALL_FACTORY(Save); | 272 INSTALL_FACTORY(Save); |
271 INSTALL_FACTORY(SaveLayer); | 273 INSTALL_FACTORY(SaveLayer); |
272 INSTALL_FACTORY(SetMatrix); | 274 INSTALL_FACTORY(SetMatrix); |
273 | 275 #ifdef SK_USE_SHADOWS |
274 INSTALL_FACTORY(TranslateZ); | 276 INSTALL_FACTORY(TranslateZ); |
| 277 #endif |
275 } | 278 } |
276 SkString name = SkString(command[SKDEBUGCANVAS_ATTRIBUTE_COMMAND].asCString(
)); | 279 SkString name = SkString(command[SKDEBUGCANVAS_ATTRIBUTE_COMMAND].asCString(
)); |
277 FROM_JSON* factory = factories.find(name); | 280 FROM_JSON* factory = factories.find(name); |
278 if (factory == nullptr) { | 281 if (factory == nullptr) { |
279 SkDebugf("no JSON factory for '%s'\n", name.c_str()); | 282 SkDebugf("no JSON factory for '%s'\n", name.c_str()); |
280 return nullptr; | 283 return nullptr; |
281 } | 284 } |
282 return (*factory)(command, urlDataManager); | 285 return (*factory)(command, urlDataManager); |
283 } | 286 } |
284 | 287 |
(...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1484 | 1487 |
1485 static void extract_json_matrix(Json::Value& matrix, SkMatrix* result) { | 1488 static void extract_json_matrix(Json::Value& matrix, SkMatrix* result) { |
1486 SkScalar values[] = { | 1489 SkScalar values[] = { |
1487 matrix[0][0].asFloat(), matrix[0][1].asFloat(), matrix[0][2].asFloat(), | 1490 matrix[0][0].asFloat(), matrix[0][1].asFloat(), matrix[0][2].asFloat(), |
1488 matrix[1][0].asFloat(), matrix[1][1].asFloat(), matrix[1][2].asFloat(), | 1491 matrix[1][0].asFloat(), matrix[1][1].asFloat(), matrix[1][2].asFloat(), |
1489 matrix[2][0].asFloat(), matrix[2][1].asFloat(), matrix[2][2].asFloat() | 1492 matrix[2][0].asFloat(), matrix[2][1].asFloat(), matrix[2][2].asFloat() |
1490 }; | 1493 }; |
1491 result->set9(values); | 1494 result->set9(values); |
1492 } | 1495 } |
1493 | 1496 |
| 1497 #ifdef SK_USE_SHADOWS |
| 1498 // somehow this is only used in shadows... |
1494 static void extract_json_scalar(Json::Value& scalar, SkScalar* result) { | 1499 static void extract_json_scalar(Json::Value& scalar, SkScalar* result) { |
1495 SkScalar value = scalar.asFloat(); | 1500 SkScalar value = scalar.asFloat(); |
1496 *result = value; | 1501 *result = value; |
1497 } | 1502 } |
| 1503 #endif |
1498 | 1504 |
1499 static void extract_json_path(Json::Value& path, SkPath* result) { | 1505 static void extract_json_path(Json::Value& path, SkPath* result) { |
1500 const char* fillType = path[SKDEBUGCANVAS_ATTRIBUTE_FILLTYPE].asCString(); | 1506 const char* fillType = path[SKDEBUGCANVAS_ATTRIBUTE_FILLTYPE].asCString(); |
1501 if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_WINDING)) { | 1507 if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_WINDING)) { |
1502 result->setFillType(SkPath::kWinding_FillType); | 1508 result->setFillType(SkPath::kWinding_FillType); |
1503 } | 1509 } |
1504 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_EVENODD)) { | 1510 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_EVENODD)) { |
1505 result->setFillType(SkPath::kEvenOdd_FillType); | 1511 result->setFillType(SkPath::kEvenOdd_FillType); |
1506 } | 1512 } |
1507 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_INVERSEWINDING)) { | 1513 else if (!strcmp(fillType, SKDEBUGCANVAS_FILLTYPE_INVERSEWINDING)) { |
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2374 | 2380 |
2375 SkEndDrawPictureCommand::SkEndDrawPictureCommand(bool restore) | 2381 SkEndDrawPictureCommand::SkEndDrawPictureCommand(bool restore) |
2376 : INHERITED(kEndDrawPicture_OpType) , fRestore(restore) { } | 2382 : INHERITED(kEndDrawPicture_OpType) , fRestore(restore) { } |
2377 | 2383 |
2378 void SkEndDrawPictureCommand::execute(SkCanvas* canvas) const { | 2384 void SkEndDrawPictureCommand::execute(SkCanvas* canvas) const { |
2379 if (fRestore) { | 2385 if (fRestore) { |
2380 canvas->restore(); | 2386 canvas->restore(); |
2381 } | 2387 } |
2382 } | 2388 } |
2383 | 2389 |
| 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 |
2384 SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, | 2452 SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, |
2385 const SkPoint pts[], const SkPaint& pai
nt) | 2453 const SkPoint pts[], const SkPaint& pai
nt) |
2386 : INHERITED(kDrawPoints_OpType) { | 2454 : INHERITED(kDrawPoints_OpType) { |
2387 fMode = mode; | 2455 fMode = mode; |
2388 fCount = count; | 2456 fCount = count; |
2389 fPts = new SkPoint[count]; | 2457 fPts = new SkPoint[count]; |
2390 memcpy(fPts, pts, count * sizeof(SkPoint)); | 2458 memcpy(fPts, pts, count * sizeof(SkPoint)); |
2391 fPaint = paint; | 2459 fPaint = paint; |
2392 | 2460 |
2393 fInfo.push(SkObjectParser::PointsToString(pts, count)); | 2461 fInfo.push(SkObjectParser::PointsToString(pts, count)); |
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3310 return new SkSetMatrixCommand(matrix); | 3378 return new SkSetMatrixCommand(matrix); |
3311 } | 3379 } |
3312 | 3380 |
3313 SkTranslateZCommand::SkTranslateZCommand(SkScalar z) | 3381 SkTranslateZCommand::SkTranslateZCommand(SkScalar z) |
3314 : INHERITED(kTranslateZ_OpType) { | 3382 : INHERITED(kTranslateZ_OpType) { |
3315 fZTranslate = z; | 3383 fZTranslate = z; |
3316 fInfo.push(SkObjectParser::ScalarToString(fZTranslate, "drawDepthTranslation
")); | 3384 fInfo.push(SkObjectParser::ScalarToString(fZTranslate, "drawDepthTranslation
")); |
3317 } | 3385 } |
3318 | 3386 |
3319 void SkTranslateZCommand::execute(SkCanvas* canvas) const { | 3387 void SkTranslateZCommand::execute(SkCanvas* canvas) const { |
| 3388 #ifdef SK_USE_SHADOWS |
3320 canvas->translateZ(fZTranslate); | 3389 canvas->translateZ(fZTranslate); |
| 3390 #endif |
3321 } | 3391 } |
3322 | 3392 |
3323 Json::Value SkTranslateZCommand::toJSON(UrlDataManager& urlDataManager) const { | 3393 Json::Value SkTranslateZCommand::toJSON(UrlDataManager& urlDataManager) const { |
3324 Json::Value result = INHERITED::toJSON(urlDataManager); | 3394 Json::Value result = INHERITED::toJSON(urlDataManager); |
3325 result[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS] = MakeJsonScalar(fZTranslate)
; | 3395 result[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS] = MakeJsonScalar(fZTranslate)
; |
3326 return result; | 3396 return result; |
3327 } | 3397 } |
3328 | 3398 |
3329 SkTranslateZCommand* SkTranslateZCommand::fromJSON(Json::Value& command, | 3399 SkTranslateZCommand* SkTranslateZCommand::fromJSON(Json::Value& command, |
3330 UrlDataManager& urlDataManager) { | 3400 UrlDataManager& urlDataManager) { |
3331 SkScalar z; | 3401 SkScalar z; |
| 3402 #ifdef SK_USE_SHADOWS |
3332 extract_json_scalar(command[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS], &z); | 3403 extract_json_scalar(command[SKDEBUGCANVAS_ATTRIBUTE_DRAWDEPTHTRANS], &z); |
| 3404 #else |
| 3405 z = 0; |
| 3406 #endif |
3333 return new SkTranslateZCommand(z); | 3407 return new SkTranslateZCommand(z); |
3334 } | 3408 } |
OLD | NEW |