| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkDrawCommand.h" | 10 #include "SkDrawCommand.h" |
| 11 #include "SkObjectParser.h" | 11 #include "SkObjectParser.h" |
| 12 #include "SkPicture.h" | 12 #include "SkPicture.h" |
| 13 #include "SkTextBlob.h" | 13 #include "SkTextBlob.h" |
| 14 | 14 |
| 15 // TODO(chudy): Refactor into non subclass model. | 15 // TODO(chudy): Refactor into non subclass model. |
| 16 | 16 |
| 17 SkDrawCommand::SkDrawCommand(OpType type) | 17 SkDrawCommand::SkDrawCommand(OpType type) |
| 18 : fOpType(type) | 18 : fOpType(type) |
| 19 , fVisible(true) { | 19 , fVisible(true) { |
| 20 } | 20 } |
| 21 | 21 |
| 22 SkDrawCommand::~SkDrawCommand() { | 22 SkDrawCommand::~SkDrawCommand() { |
| 23 fInfo.deleteAll(); | 23 fInfo.deleteAll(); |
| 24 } | 24 } |
| 25 | 25 |
| 26 const char* SkDrawCommand::GetCommandString(OpType type) { | 26 const char* SkDrawCommand::GetCommandString(OpType type) { |
| 27 switch (type) { | 27 switch (type) { |
| 28 case kBeginCommentGroup_OpType: return "BeginCommentGroup"; | 28 case kBeginCommentGroup_OpType: return "BeginCommentGroup"; |
| 29 case kBeginDrawPicture_OpType: return "BeginDrawPicture"; |
| 29 case kClipPath_OpType: return "ClipPath"; | 30 case kClipPath_OpType: return "ClipPath"; |
| 30 case kClipRegion_OpType: return "ClipRegion"; | 31 case kClipRegion_OpType: return "ClipRegion"; |
| 31 case kClipRect_OpType: return "ClipRect"; | 32 case kClipRect_OpType: return "ClipRect"; |
| 32 case kClipRRect_OpType: return "ClipRRect"; | 33 case kClipRRect_OpType: return "ClipRRect"; |
| 33 case kComment_OpType: return "Comment"; | 34 case kComment_OpType: return "Comment"; |
| 34 case kConcat_OpType: return "Concat"; | 35 case kConcat_OpType: return "Concat"; |
| 35 case kDrawBitmap_OpType: return "DrawBitmap"; | 36 case kDrawBitmap_OpType: return "DrawBitmap"; |
| 36 case kDrawBitmapNine_OpType: return "DrawBitmapNine"; | 37 case kDrawBitmapNine_OpType: return "DrawBitmapNine"; |
| 37 case kDrawBitmapRect_OpType: return "DrawBitmapRect"; | 38 case kDrawBitmapRect_OpType: return "DrawBitmapRect"; |
| 38 case kDrawClear_OpType: return "DrawClear"; | 39 case kDrawClear_OpType: return "DrawClear"; |
| 39 case kDrawDRRect_OpType: return "DrawDRRect"; | 40 case kDrawDRRect_OpType: return "DrawDRRect"; |
| 40 case kDrawOval_OpType: return "DrawOval"; | 41 case kDrawOval_OpType: return "DrawOval"; |
| 41 case kDrawPaint_OpType: return "DrawPaint"; | 42 case kDrawPaint_OpType: return "DrawPaint"; |
| 42 case kDrawPatch_OpType: return "DrawPatch"; | 43 case kDrawPatch_OpType: return "DrawPatch"; |
| 43 case kDrawPath_OpType: return "DrawPath"; | 44 case kDrawPath_OpType: return "DrawPath"; |
| 44 case kDrawPicture_OpType: return "DrawPicture"; | |
| 45 case kDrawPoints_OpType: return "DrawPoints"; | 45 case kDrawPoints_OpType: return "DrawPoints"; |
| 46 case kDrawPosText_OpType: return "DrawPosText"; | 46 case kDrawPosText_OpType: return "DrawPosText"; |
| 47 case kDrawPosTextH_OpType: return "DrawPosTextH"; | 47 case kDrawPosTextH_OpType: return "DrawPosTextH"; |
| 48 case kDrawRect_OpType: return "DrawRect"; | 48 case kDrawRect_OpType: return "DrawRect"; |
| 49 case kDrawRRect_OpType: return "DrawRRect"; | 49 case kDrawRRect_OpType: return "DrawRRect"; |
| 50 case kDrawSprite_OpType: return "DrawSprite"; | 50 case kDrawSprite_OpType: return "DrawSprite"; |
| 51 case kDrawText_OpType: return "DrawText"; | 51 case kDrawText_OpType: return "DrawText"; |
| 52 case kDrawTextBlob_OpType: return "DrawTextBlob"; | 52 case kDrawTextBlob_OpType: return "DrawTextBlob"; |
| 53 case kDrawTextOnPath_OpType: return "DrawTextOnPath"; | 53 case kDrawTextOnPath_OpType: return "DrawTextOnPath"; |
| 54 case kDrawVertices_OpType: return "DrawVertices"; | 54 case kDrawVertices_OpType: return "DrawVertices"; |
| 55 case kEndCommentGroup_OpType: return "EndCommentGroup"; | 55 case kEndCommentGroup_OpType: return "EndCommentGroup"; |
| 56 case kEndDrawPicture_OpType: return "EndDrawPicture"; |
| 56 case kRestore_OpType: return "Restore"; | 57 case kRestore_OpType: return "Restore"; |
| 57 case kSave_OpType: return "Save"; | 58 case kSave_OpType: return "Save"; |
| 58 case kSaveLayer_OpType: return "SaveLayer"; | 59 case kSaveLayer_OpType: return "SaveLayer"; |
| 59 case kSetMatrix_OpType: return "SetMatrix"; | 60 case kSetMatrix_OpType: return "SetMatrix"; |
| 60 default: | 61 default: |
| 61 SkDebugf("OpType error 0x%08x\n", type); | 62 SkDebugf("OpType error 0x%08x\n", type); |
| 62 SkASSERT(0); | 63 SkASSERT(0); |
| 63 break; | 64 break; |
| 64 } | 65 } |
| 65 SkDEBUGFAIL("DrawType UNUSED\n"); | 66 SkDEBUGFAIL("DrawType UNUSED\n"); |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 | 439 |
| 439 void SkDrawPathCommand::execute(SkCanvas* canvas) const { | 440 void SkDrawPathCommand::execute(SkCanvas* canvas) const { |
| 440 canvas->drawPath(fPath, fPaint); | 441 canvas->drawPath(fPath, fPaint); |
| 441 } | 442 } |
| 442 | 443 |
| 443 bool SkDrawPathCommand::render(SkCanvas* canvas) const { | 444 bool SkDrawPathCommand::render(SkCanvas* canvas) const { |
| 444 render_path(canvas, fPath); | 445 render_path(canvas, fPath); |
| 445 return true; | 446 return true; |
| 446 } | 447 } |
| 447 | 448 |
| 448 SkDrawPictureCommand::SkDrawPictureCommand(const SkPicture* picture, | 449 SkBeginDrawPictureCommand::SkBeginDrawPictureCommand(const SkPicture* picture, |
| 449 const SkMatrix* matrix, | 450 const SkMatrix* matrix, |
| 450 const SkPaint* paint) | 451 const SkPaint* paint) |
| 451 : INHERITED(kDrawPicture_OpType) | 452 : INHERITED(kBeginDrawPicture_OpType) |
| 452 , fPicture(SkRef(picture)) | 453 , fPicture(SkRef(picture)) { |
| 453 , fMatrixPtr(NULL) | 454 |
| 454 , fPaintPtr(NULL) { | 455 SkString* str = new SkString; |
| 456 str->appendf("SkPicture: L: %f T: %f R: %f B: %f", |
| 457 picture->cullRect().fLeft, picture->cullRect().fTop, |
| 458 picture->cullRect().fRight, picture->cullRect().fBottom); |
| 459 fInfo.push(str); |
| 455 | 460 |
| 456 if (matrix) { | 461 if (matrix) { |
| 457 fMatrix = *matrix; | 462 fMatrix.set(*matrix); |
| 458 fMatrixPtr = &fMatrix; | 463 fInfo.push(SkObjectParser::MatrixToString(*matrix)); |
| 459 } | |
| 460 if (paint) { | |
| 461 fPaint = *paint; | |
| 462 fPaintPtr = &fPaint; | |
| 463 } | 464 } |
| 464 | 465 |
| 465 SkString* temp = new SkString; | 466 if (paint) { |
| 466 temp->appendf("SkPicture: L: %f T: %f R: %f B: %f", | 467 fPaint.set(*paint); |
| 467 picture->cullRect().fLeft, picture->cullRect().fTop, | 468 fInfo.push(SkObjectParser::PaintToString(*paint)); |
| 468 picture->cullRect().fRight, picture->cullRect().fBottom); | |
| 469 fInfo.push(temp); | |
| 470 if (matrix) { | |
| 471 fInfo.push(SkObjectParser::MatrixToString(*matrix)); | |
| 472 } | 469 } |
| 473 if (paint) { | 470 |
| 474 fInfo.push(SkObjectParser::PaintToString(*paint)); | 471 } |
| 472 |
| 473 void SkBeginDrawPictureCommand::execute(SkCanvas* canvas) const { |
| 474 if (fPaint.isValid()) { |
| 475 SkRect bounds = fPicture->cullRect(); |
| 476 if (fMatrix.isValid()) { |
| 477 fMatrix.get()->mapRect(&bounds); |
| 478 } |
| 479 canvas->saveLayer(&bounds, fPaint.get()); |
| 480 } |
| 481 |
| 482 if (fMatrix.isValid()) { |
| 483 if (!fPaint.isValid()) { |
| 484 canvas->save(); |
| 485 } |
| 486 canvas->concat(*fMatrix.get()); |
| 475 } | 487 } |
| 476 } | 488 } |
| 477 | 489 |
| 478 void SkDrawPictureCommand::execute(SkCanvas* canvas) const { | 490 bool SkBeginDrawPictureCommand::render(SkCanvas* canvas) const { |
| 479 canvas->drawPicture(fPicture, fMatrixPtr, fPaintPtr); | |
| 480 } | |
| 481 | |
| 482 bool SkDrawPictureCommand::render(SkCanvas* canvas) const { | |
| 483 canvas->clear(0xFFFFFFFF); | 491 canvas->clear(0xFFFFFFFF); |
| 484 canvas->save(); | 492 canvas->save(); |
| 485 | 493 |
| 486 xlate_and_scale_to_bounds(canvas, fPicture->cullRect()); | 494 xlate_and_scale_to_bounds(canvas, fPicture->cullRect()); |
| 487 | 495 |
| 488 canvas->drawPicture(fPicture.get()); | 496 canvas->drawPicture(fPicture.get()); |
| 489 | 497 |
| 490 canvas->restore(); | 498 canvas->restore(); |
| 491 | 499 |
| 492 return true; | 500 return true; |
| 493 } | 501 } |
| 494 | 502 |
| 503 SkEndDrawPictureCommand::SkEndDrawPictureCommand(bool restore) |
| 504 : INHERITED(kEndDrawPicture_OpType) , fRestore(restore) { } |
| 505 |
| 506 void SkEndDrawPictureCommand::execute(SkCanvas* canvas) const { |
| 507 if (fRestore) { |
| 508 canvas->restore(); |
| 509 } |
| 510 } |
| 511 |
| 495 SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, | 512 SkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, |
| 496 const SkPoint pts[], const SkPaint& pai
nt) | 513 const SkPoint pts[], const SkPaint& pai
nt) |
| 497 : INHERITED(kDrawPoints_OpType) { | 514 : INHERITED(kDrawPoints_OpType) { |
| 498 fMode = mode; | 515 fMode = mode; |
| 499 fCount = count; | 516 fCount = count; |
| 500 fPts = new SkPoint[count]; | 517 fPts = new SkPoint[count]; |
| 501 memcpy(fPts, pts, count * sizeof(SkPoint)); | 518 memcpy(fPts, pts, count * sizeof(SkPoint)); |
| 502 fPaint = paint; | 519 fPaint = paint; |
| 503 | 520 |
| 504 fInfo.push(SkObjectParser::PointsToString(pts, count)); | 521 fInfo.push(SkObjectParser::PointsToString(pts, count)); |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 894 | 911 |
| 895 void SkSetMatrixCommand::setUserMatrix(const SkMatrix& userMatrix) { | 912 void SkSetMatrixCommand::setUserMatrix(const SkMatrix& userMatrix) { |
| 896 fUserMatrix = userMatrix; | 913 fUserMatrix = userMatrix; |
| 897 } | 914 } |
| 898 | 915 |
| 899 void SkSetMatrixCommand::execute(SkCanvas* canvas) const { | 916 void SkSetMatrixCommand::execute(SkCanvas* canvas) const { |
| 900 SkMatrix temp = SkMatrix::Concat(fUserMatrix, fMatrix); | 917 SkMatrix temp = SkMatrix::Concat(fUserMatrix, fMatrix); |
| 901 canvas->setMatrix(temp); | 918 canvas->setMatrix(temp); |
| 902 } | 919 } |
| 903 | 920 |
| OLD | NEW |