1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SKDRAWCOMMAND_H_ 9 #define SKDRAWCOMMAND_H_ 10 11 #include "include/core/SkBitmap.h" 12 #include "include/core/SkCanvas.h" 13 #include "include/core/SkFlattenable.h" 14 #include "include/core/SkPath.h" 15 #include "include/core/SkRRect.h" 16 #include "include/core/SkRSXform.h" 17 #include "include/core/SkRegion.h" 18 #include "include/core/SkString.h" 19 #include "include/core/SkVertices.h" 20 #include "include/private/SkTDArray.h" 21 #include "src/core/SkDrawShadowInfo.h" 22 #include "src/core/SkTLazy.h" 23 #include "src/utils/SkJSONWriter.h" 24 #include "tools/UrlDataManager.h" 25 26 class DrawCommand { 27 public: 28 enum OpType { 29 kBeginDrawPicture_OpType, 30 kClear_OpType, 31 kClipPath_OpType, 32 kClipRegion_OpType, 33 kClipRect_OpType, 34 kClipRRect_OpType, 35 kConcat_OpType, 36 kDrawAnnotation_OpType, 37 kDrawBitmap_OpType, 38 kDrawBitmapLattice_OpType, 39 kDrawBitmapNine_OpType, 40 kDrawBitmapRect_OpType, 41 kDrawDRRect_OpType, 42 kDrawImage_OpType, 43 kDrawImageLattice_OpType, 44 kDrawImageNine_OpType, 45 kDrawImageRect_OpType, 46 kDrawOval_OpType, 47 kDrawArc_OpType, 48 kDrawPaint_OpType, 49 kDrawPatch_OpType, 50 kDrawPath_OpType, 51 kDrawPoints_OpType, 52 kDrawRect_OpType, 53 kDrawRRect_OpType, 54 kDrawRegion_OpType, 55 kDrawShadow_OpType, 56 kDrawTextBlob_OpType, 57 kDrawVertices_OpType, 58 kDrawAtlas_OpType, 59 kDrawDrawable_OpType, 60 kDrawEdgeAAQuad_OpType, 61 kDrawEdgeAAImageSet_OpType, 62 kEndDrawPicture_OpType, 63 kRestore_OpType, 64 kSave_OpType, 65 kSaveLayer_OpType, 66 kSetMatrix_OpType, 67 68 kLast_OpType = kSetMatrix_OpType 69 }; 70 71 static const int kOpTypeCount = kLast_OpType + 1; 72 73 static void WritePNG(SkBitmap bitmap, SkWStream& out); 74 75 DrawCommand(OpType opType); 76 ~DrawCommand()77 virtual ~DrawCommand() {} 78 isVisible()79 bool isVisible() const { return fVisible; } 80 setVisible(bool toggle)81 void setVisible(bool toggle) { fVisible = toggle; } 82 83 virtual void execute(SkCanvas*) const = 0; 84 render(SkCanvas * canvas)85 virtual bool render(SkCanvas* canvas) const { return false; } 86 87 virtual void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const; 88 89 static const char* GetCommandString(OpType type); 90 91 // Helper methods for converting things to JSON 92 static void MakeJsonColor(SkJSONWriter&, const SkColor color); 93 static void MakeJsonColor4f(SkJSONWriter&, const SkColor4f& color); 94 static void MakeJsonPoint(SkJSONWriter&, const SkPoint& point); 95 static void MakeJsonPoint(SkJSONWriter&, SkScalar x, SkScalar y); 96 static void MakeJsonPoint3(SkJSONWriter&, const SkPoint3& point); 97 static void MakeJsonRect(SkJSONWriter&, const SkRect& rect); 98 static void MakeJsonIRect(SkJSONWriter&, const SkIRect&); 99 static void MakeJsonMatrix(SkJSONWriter&, const SkMatrix&); 100 static void MakeJsonPath(SkJSONWriter&, const SkPath& path); 101 static void MakeJsonRegion(SkJSONWriter&, const SkRegion& region); 102 static void MakeJsonPaint(SkJSONWriter&, const SkPaint& paint, UrlDataManager& urlDataManager); 103 static void MakeJsonLattice(SkJSONWriter&, const SkCanvas::Lattice& lattice); 104 105 static void flatten(const SkFlattenable* flattenable, 106 SkJSONWriter& writer, 107 UrlDataManager& urlDataManager); 108 static bool flatten(const SkImage& image, SkJSONWriter& writer, UrlDataManager& urlDataManager); 109 static bool flatten(const SkBitmap& bitmap, 110 SkJSONWriter& writer, 111 UrlDataManager& urlDataManager); 112 113 private: 114 OpType fOpType; 115 bool fVisible; 116 }; 117 118 class RestoreCommand : public DrawCommand { 119 public: 120 RestoreCommand(); 121 void execute(SkCanvas* canvas) const override; 122 123 private: 124 typedef DrawCommand INHERITED; 125 }; 126 127 class ClearCommand : public DrawCommand { 128 public: 129 ClearCommand(SkColor color); 130 void execute(SkCanvas* canvas) const override; 131 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 132 133 private: 134 SkColor fColor; 135 136 typedef DrawCommand INHERITED; 137 }; 138 139 class ClipPathCommand : public DrawCommand { 140 public: 141 ClipPathCommand(const SkPath& path, SkClipOp op, bool doAA); 142 void execute(SkCanvas* canvas) const override; 143 bool render(SkCanvas* canvas) const override; 144 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 145 146 private: 147 SkPath fPath; 148 SkClipOp fOp; 149 bool fDoAA; 150 151 typedef DrawCommand INHERITED; 152 }; 153 154 class ClipRegionCommand : public DrawCommand { 155 public: 156 ClipRegionCommand(const SkRegion& region, SkClipOp op); 157 void execute(SkCanvas* canvas) const override; 158 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 159 160 private: 161 SkRegion fRegion; 162 SkClipOp fOp; 163 164 typedef DrawCommand INHERITED; 165 }; 166 167 class ClipRectCommand : public DrawCommand { 168 public: 169 ClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA); 170 void execute(SkCanvas* canvas) const override; 171 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 172 173 private: 174 SkRect fRect; 175 SkClipOp fOp; 176 bool fDoAA; 177 178 typedef DrawCommand INHERITED; 179 }; 180 181 class ClipRRectCommand : public DrawCommand { 182 public: 183 ClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA); 184 void execute(SkCanvas* canvas) const override; 185 bool render(SkCanvas* canvas) const override; 186 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 187 188 private: 189 SkRRect fRRect; 190 SkClipOp fOp; 191 bool fDoAA; 192 193 typedef DrawCommand INHERITED; 194 }; 195 196 class ConcatCommand : public DrawCommand { 197 public: 198 ConcatCommand(const SkMatrix& matrix); 199 void execute(SkCanvas* canvas) const override; 200 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 201 202 private: 203 SkMatrix fMatrix; 204 205 typedef DrawCommand INHERITED; 206 }; 207 208 class DrawAnnotationCommand : public DrawCommand { 209 public: 210 DrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value); 211 void execute(SkCanvas* canvas) const override; 212 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 213 214 private: 215 SkRect fRect; 216 SkString fKey; 217 sk_sp<SkData> fValue; 218 219 typedef DrawCommand INHERITED; 220 }; 221 222 class DrawBitmapCommand : public DrawCommand { 223 public: 224 DrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint); 225 void execute(SkCanvas* canvas) const override; 226 bool render(SkCanvas* canvas) const override; 227 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 228 229 private: 230 SkBitmap fBitmap; 231 SkScalar fLeft; 232 SkScalar fTop; 233 SkTLazy<SkPaint> fPaint; 234 235 typedef DrawCommand INHERITED; 236 }; 237 238 class DrawBitmapLatticeCommand : public DrawCommand { 239 public: 240 DrawBitmapLatticeCommand(const SkBitmap& bitmap, 241 const SkCanvas::Lattice& lattice, 242 const SkRect& dst, 243 const SkPaint* paint); 244 void execute(SkCanvas* canvas) const override; 245 bool render(SkCanvas* canvas) const override; 246 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 247 248 private: 249 SkBitmap fBitmap; 250 SkCanvas::Lattice fLattice; 251 SkRect fDst; 252 SkTLazy<SkPaint> fPaint; 253 254 typedef DrawCommand INHERITED; 255 }; 256 257 class DrawBitmapNineCommand : public DrawCommand { 258 public: 259 DrawBitmapNineCommand(const SkBitmap& bitmap, 260 const SkIRect& center, 261 const SkRect& dst, 262 const SkPaint* paint); 263 void execute(SkCanvas* canvas) const override; 264 bool render(SkCanvas* canvas) const override; 265 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 266 267 private: 268 SkBitmap fBitmap; 269 SkIRect fCenter; 270 SkRect fDst; 271 SkTLazy<SkPaint> fPaint; 272 273 typedef DrawCommand INHERITED; 274 }; 275 276 class DrawBitmapRectCommand : public DrawCommand { 277 public: 278 DrawBitmapRectCommand(const SkBitmap& bitmap, 279 const SkRect* src, 280 const SkRect& dst, 281 const SkPaint* paint, 282 SkCanvas::SrcRectConstraint); 283 void execute(SkCanvas* canvas) const override; 284 bool render(SkCanvas* canvas) const override; 285 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 286 287 private: 288 SkBitmap fBitmap; 289 SkTLazy<SkRect> fSrc; 290 SkRect fDst; 291 SkTLazy<SkPaint> fPaint; 292 SkCanvas::SrcRectConstraint fConstraint; 293 294 typedef DrawCommand INHERITED; 295 }; 296 297 class DrawImageCommand : public DrawCommand { 298 public: 299 DrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint); 300 void execute(SkCanvas* canvas) const override; 301 bool render(SkCanvas* canvas) const override; 302 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 303 304 private: 305 sk_sp<const SkImage> fImage; 306 SkScalar fLeft; 307 SkScalar fTop; 308 SkTLazy<SkPaint> fPaint; 309 310 typedef DrawCommand INHERITED; 311 }; 312 313 class DrawImageLatticeCommand : public DrawCommand { 314 public: 315 DrawImageLatticeCommand(const SkImage* image, 316 const SkCanvas::Lattice& lattice, 317 const SkRect& dst, 318 const SkPaint* paint); 319 void execute(SkCanvas* canvas) const override; 320 bool render(SkCanvas* canvas) const override; 321 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 322 323 private: 324 sk_sp<const SkImage> fImage; 325 SkCanvas::Lattice fLattice; 326 SkRect fDst; 327 SkTLazy<SkPaint> fPaint; 328 329 typedef DrawCommand INHERITED; 330 }; 331 332 class DrawImageNineCommand : public DrawCommand { 333 public: 334 DrawImageNineCommand(const SkImage* image, 335 const SkIRect& center, 336 const SkRect& dst, 337 const SkPaint* paint); 338 void execute(SkCanvas* canvas) const override; 339 bool render(SkCanvas* canvas) const override; 340 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 341 342 private: 343 sk_sp<const SkImage> fImage; 344 SkIRect fCenter; 345 SkRect fDst; 346 SkTLazy<SkPaint> fPaint; 347 348 typedef DrawCommand INHERITED; 349 }; 350 351 class DrawImageRectCommand : public DrawCommand { 352 public: 353 DrawImageRectCommand(const SkImage* image, 354 const SkRect* src, 355 const SkRect& dst, 356 const SkPaint* paint, 357 SkCanvas::SrcRectConstraint constraint); 358 void execute(SkCanvas* canvas) const override; 359 bool render(SkCanvas* canvas) const override; 360 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 361 362 private: 363 sk_sp<const SkImage> fImage; 364 SkTLazy<SkRect> fSrc; 365 SkRect fDst; 366 SkTLazy<SkPaint> fPaint; 367 SkCanvas::SrcRectConstraint fConstraint; 368 369 typedef DrawCommand INHERITED; 370 }; 371 372 class DrawOvalCommand : public DrawCommand { 373 public: 374 DrawOvalCommand(const SkRect& oval, const SkPaint& paint); 375 void execute(SkCanvas* canvas) const override; 376 bool render(SkCanvas* canvas) const override; 377 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 378 379 private: 380 SkRect fOval; 381 SkPaint fPaint; 382 383 typedef DrawCommand INHERITED; 384 }; 385 386 class DrawArcCommand : public DrawCommand { 387 public: 388 DrawArcCommand(const SkRect& oval, 389 SkScalar startAngle, 390 SkScalar sweepAngle, 391 bool useCenter, 392 const SkPaint& paint); 393 void execute(SkCanvas* canvas) const override; 394 bool render(SkCanvas* canvas) const override; 395 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 396 397 private: 398 SkRect fOval; 399 SkScalar fStartAngle; 400 SkScalar fSweepAngle; 401 bool fUseCenter; 402 SkPaint fPaint; 403 404 typedef DrawCommand INHERITED; 405 }; 406 407 class DrawPaintCommand : public DrawCommand { 408 public: 409 DrawPaintCommand(const SkPaint& paint); 410 void execute(SkCanvas* canvas) const override; 411 bool render(SkCanvas* canvas) const override; 412 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 413 414 private: 415 SkPaint fPaint; 416 417 typedef DrawCommand INHERITED; 418 }; 419 420 class DrawBehindCommand : public DrawCommand { 421 public: 422 DrawBehindCommand(const SkPaint& paint); 423 void execute(SkCanvas* canvas) const override; 424 bool render(SkCanvas* canvas) const override; 425 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 426 427 private: 428 SkPaint fPaint; 429 430 typedef DrawCommand INHERITED; 431 }; 432 433 class DrawPathCommand : public DrawCommand { 434 public: 435 DrawPathCommand(const SkPath& path, const SkPaint& paint); 436 void execute(SkCanvas* canvas) const override; 437 bool render(SkCanvas* canvas) const override; 438 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 439 440 private: 441 SkPath fPath; 442 SkPaint fPaint; 443 444 typedef DrawCommand INHERITED; 445 }; 446 447 class BeginDrawPictureCommand : public DrawCommand { 448 public: 449 BeginDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint); 450 451 void execute(SkCanvas* canvas) const override; 452 bool render(SkCanvas* canvas) const override; 453 454 private: 455 sk_sp<const SkPicture> fPicture; 456 SkTLazy<SkMatrix> fMatrix; 457 SkTLazy<SkPaint> fPaint; 458 459 typedef DrawCommand INHERITED; 460 }; 461 462 class EndDrawPictureCommand : public DrawCommand { 463 public: 464 EndDrawPictureCommand(bool restore); 465 466 void execute(SkCanvas* canvas) const override; 467 468 private: 469 bool fRestore; 470 471 typedef DrawCommand INHERITED; 472 }; 473 474 class DrawPointsCommand : public DrawCommand { 475 public: 476 DrawPointsCommand(SkCanvas::PointMode mode, 477 size_t count, 478 const SkPoint pts[], 479 const SkPaint& paint); 480 void execute(SkCanvas* canvas) const override; 481 bool render(SkCanvas* canvas) const override; 482 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 483 484 private: 485 SkCanvas::PointMode fMode; 486 SkTDArray<SkPoint> fPts; 487 SkPaint fPaint; 488 489 typedef DrawCommand INHERITED; 490 }; 491 492 class DrawRegionCommand : public DrawCommand { 493 public: 494 DrawRegionCommand(const SkRegion& region, const SkPaint& paint); 495 void execute(SkCanvas* canvas) const override; 496 bool render(SkCanvas* canvas) const override; 497 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 498 499 private: 500 SkRegion fRegion; 501 SkPaint fPaint; 502 503 typedef DrawCommand INHERITED; 504 }; 505 506 class DrawTextBlobCommand : public DrawCommand { 507 public: 508 DrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint); 509 510 void execute(SkCanvas* canvas) const override; 511 bool render(SkCanvas* canvas) const override; 512 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 513 514 private: 515 sk_sp<SkTextBlob> fBlob; 516 SkScalar fXPos; 517 SkScalar fYPos; 518 SkPaint fPaint; 519 520 typedef DrawCommand INHERITED; 521 }; 522 523 class DrawPatchCommand : public DrawCommand { 524 public: 525 DrawPatchCommand(const SkPoint cubics[12], 526 const SkColor colors[4], 527 const SkPoint texCoords[4], 528 SkBlendMode bmode, 529 const SkPaint& paint); 530 void execute(SkCanvas* canvas) const override; 531 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 532 533 private: 534 SkPoint fCubics[12]; 535 SkColor* fColorsPtr; 536 SkColor fColors[4]; 537 SkPoint* fTexCoordsPtr; 538 SkPoint fTexCoords[4]; 539 SkBlendMode fBlendMode; 540 SkPaint fPaint; 541 542 typedef DrawCommand INHERITED; 543 }; 544 545 class DrawRectCommand : public DrawCommand { 546 public: 547 DrawRectCommand(const SkRect& rect, const SkPaint& paint); 548 void execute(SkCanvas* canvas) const override; 549 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 550 551 private: 552 SkRect fRect; 553 SkPaint fPaint; 554 555 typedef DrawCommand INHERITED; 556 }; 557 558 class DrawRRectCommand : public DrawCommand { 559 public: 560 DrawRRectCommand(const SkRRect& rrect, const SkPaint& paint); 561 void execute(SkCanvas* canvas) const override; 562 bool render(SkCanvas* canvas) const override; 563 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 564 565 private: 566 SkRRect fRRect; 567 SkPaint fPaint; 568 569 typedef DrawCommand INHERITED; 570 }; 571 572 class DrawDRRectCommand : public DrawCommand { 573 public: 574 DrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint); 575 void execute(SkCanvas* canvas) const override; 576 bool render(SkCanvas* canvas) const override; 577 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 578 579 private: 580 SkRRect fOuter; 581 SkRRect fInner; 582 SkPaint fPaint; 583 584 typedef DrawCommand INHERITED; 585 }; 586 587 class DrawVerticesCommand : public DrawCommand { 588 public: 589 DrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&); 590 591 void execute(SkCanvas* canvas) const override; 592 593 private: 594 sk_sp<SkVertices> fVertices; 595 SkBlendMode fBlendMode; 596 SkPaint fPaint; 597 598 typedef DrawCommand INHERITED; 599 }; 600 601 class DrawAtlasCommand : public DrawCommand { 602 public: 603 DrawAtlasCommand(const SkImage*, 604 const SkRSXform[], 605 const SkRect[], 606 const SkColor[], 607 int, 608 SkBlendMode, 609 const SkRect*, 610 const SkPaint*); 611 612 void execute(SkCanvas* canvas) const override; 613 614 private: 615 sk_sp<const SkImage> fImage; 616 SkTDArray<SkRSXform> fXform; 617 SkTDArray<SkRect> fTex; 618 SkTDArray<SkColor> fColors; 619 SkBlendMode fBlendMode; 620 SkTLazy<SkRect> fCull; 621 SkTLazy<SkPaint> fPaint; 622 623 typedef DrawCommand INHERITED; 624 }; 625 626 class SaveCommand : public DrawCommand { 627 public: 628 SaveCommand(); 629 void execute(SkCanvas* canvas) const override; 630 631 private: 632 typedef DrawCommand INHERITED; 633 }; 634 635 class SaveLayerCommand : public DrawCommand { 636 public: 637 SaveLayerCommand(const SkCanvas::SaveLayerRec&); 638 void execute(SkCanvas* canvas) const override; 639 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 640 641 private: 642 SkTLazy<SkRect> fBounds; 643 SkTLazy<SkPaint> fPaint; 644 sk_sp<const SkImageFilter> fBackdrop; 645 uint32_t fSaveLayerFlags; 646 647 typedef DrawCommand INHERITED; 648 }; 649 650 class SetMatrixCommand : public DrawCommand { 651 public: 652 SetMatrixCommand(const SkMatrix& matrix); 653 void execute(SkCanvas* canvas) const override; 654 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 655 656 private: 657 SkMatrix fMatrix; 658 659 typedef DrawCommand INHERITED; 660 }; 661 662 class DrawShadowCommand : public DrawCommand { 663 public: 664 DrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec); 665 void execute(SkCanvas* canvas) const override; 666 bool render(SkCanvas* canvas) const override; 667 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override; 668 669 private: 670 SkPath fPath; 671 SkDrawShadowRec fShadowRec; 672 673 typedef DrawCommand INHERITED; 674 }; 675 676 class DrawDrawableCommand : public DrawCommand { 677 public: 678 DrawDrawableCommand(SkDrawable*, const SkMatrix*); 679 void execute(SkCanvas* canvas) const override; 680 681 private: 682 sk_sp<SkDrawable> fDrawable; 683 SkTLazy<SkMatrix> fMatrix; 684 685 typedef DrawCommand INHERITED; 686 }; 687 688 class DrawEdgeAAQuadCommand : public DrawCommand { 689 public: 690 DrawEdgeAAQuadCommand(const SkRect& rect, 691 const SkPoint clip[4], 692 SkCanvas::QuadAAFlags aa, 693 SkColor color, 694 SkBlendMode mode); 695 void execute(SkCanvas* canvas) const override; 696 697 private: 698 SkRect fRect; 699 SkPoint fClip[4]; 700 int fHasClip; 701 SkCanvas::QuadAAFlags fAA; 702 SkColor fColor; 703 SkBlendMode fMode; 704 705 typedef DrawCommand INHERITED; 706 }; 707 708 class DrawEdgeAAImageSetCommand : public DrawCommand { 709 public: 710 DrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[], 711 int count, 712 const SkPoint[], 713 const SkMatrix[], 714 const SkPaint*, 715 SkCanvas::SrcRectConstraint); 716 void execute(SkCanvas* canvas) const override; 717 718 private: 719 SkAutoTArray<SkCanvas::ImageSetEntry> fSet; 720 int fCount; 721 SkAutoTArray<SkPoint> fDstClips; 722 SkAutoTArray<SkMatrix> fPreViewMatrices; 723 SkTLazy<SkPaint> fPaint; 724 SkCanvas::SrcRectConstraint fConstraint; 725 726 typedef DrawCommand INHERITED; 727 }; 728 #endif 729