| OLD | NEW |
| (Empty) |
| 1 | |
| 2 /* | |
| 3 * Copyright 2012 Google Inc. | |
| 4 * | |
| 5 * Use of this source code is governed by a BSD-style license that can be | |
| 6 * found in the LICENSE file. | |
| 7 */ | |
| 8 | |
| 9 #ifndef SKDRAWCOMMAND_H_ | |
| 10 #define SKDRAWCOMMAND_H_ | |
| 11 | |
| 12 #include "SkPictureFlat.h" | |
| 13 #include "SkCanvas.h" | |
| 14 #include "SkString.h" | |
| 15 | |
| 16 class SkDrawCommand { | |
| 17 public: | |
| 18 /* TODO(chudy): Remove subclasses. */ | |
| 19 SkDrawCommand(DrawType drawType); | |
| 20 SkDrawCommand(); | |
| 21 | |
| 22 virtual ~SkDrawCommand(); | |
| 23 | |
| 24 virtual SkString toString(); | |
| 25 | |
| 26 virtual const char* toCString() { | |
| 27 return GetCommandString(fDrawType); | |
| 28 } | |
| 29 | |
| 30 bool isVisible() const { | |
| 31 return fVisible; | |
| 32 } | |
| 33 | |
| 34 void setVisible(bool toggle) { | |
| 35 fVisible = toggle; | |
| 36 } | |
| 37 | |
| 38 SkTDArray<SkString*>* Info() {return &fInfo; }; | |
| 39 virtual void execute(SkCanvas* canvas)=0; | |
| 40 /** Does nothing by default, but used by save() and restore()-type | |
| 41 subclassse to track unresolved save() calls. */ | |
| 42 virtual void trackSaveState(int* state) { }; | |
| 43 DrawType getType() { return fDrawType; }; | |
| 44 | |
| 45 virtual bool render(SkCanvas* canvas) const { return false; } | |
| 46 | |
| 47 static const char* GetCommandString(DrawType type); | |
| 48 | |
| 49 protected: | |
| 50 DrawType fDrawType; | |
| 51 SkTDArray<SkString*> fInfo; | |
| 52 | |
| 53 private: | |
| 54 bool fVisible; | |
| 55 }; | |
| 56 | |
| 57 class Restore : public SkDrawCommand { | |
| 58 public: | |
| 59 Restore(); | |
| 60 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 61 virtual void trackSaveState(int* state) SK_OVERRIDE; | |
| 62 | |
| 63 private: | |
| 64 typedef SkDrawCommand INHERITED; | |
| 65 }; | |
| 66 | |
| 67 class Clear : public SkDrawCommand { | |
| 68 public: | |
| 69 Clear(SkColor color); | |
| 70 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 71 private: | |
| 72 SkColor fColor; | |
| 73 | |
| 74 typedef SkDrawCommand INHERITED; | |
| 75 }; | |
| 76 | |
| 77 class ClipPath : public SkDrawCommand { | |
| 78 public: | |
| 79 ClipPath(const SkPath& path, SkRegion::Op op, bool doAA); | |
| 80 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 81 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 82 private: | |
| 83 SkPath fPath; | |
| 84 SkRegion::Op fOp; | |
| 85 bool fDoAA; | |
| 86 | |
| 87 typedef SkDrawCommand INHERITED; | |
| 88 }; | |
| 89 | |
| 90 class ClipRegion : public SkDrawCommand { | |
| 91 public: | |
| 92 ClipRegion(const SkRegion& region, SkRegion::Op op); | |
| 93 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 94 private: | |
| 95 SkRegion fRegion; | |
| 96 SkRegion::Op fOp; | |
| 97 | |
| 98 typedef SkDrawCommand INHERITED; | |
| 99 }; | |
| 100 | |
| 101 class ClipRect : public SkDrawCommand { | |
| 102 public: | |
| 103 ClipRect(const SkRect& rect, SkRegion::Op op, bool doAA); | |
| 104 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 105 | |
| 106 const SkRect& rect() const { return fRect; } | |
| 107 SkRegion::Op op() const { return fOp; } | |
| 108 bool doAA() const { return fDoAA; } | |
| 109 | |
| 110 private: | |
| 111 SkRect fRect; | |
| 112 SkRegion::Op fOp; | |
| 113 bool fDoAA; | |
| 114 | |
| 115 typedef SkDrawCommand INHERITED; | |
| 116 }; | |
| 117 | |
| 118 class ClipRRect : public SkDrawCommand { | |
| 119 public: | |
| 120 ClipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA); | |
| 121 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 122 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 123 | |
| 124 const SkRRect& rrect() const { return fRRect; } | |
| 125 SkRegion::Op op() const { return fOp; } | |
| 126 bool doAA() const { return fDoAA; } | |
| 127 | |
| 128 private: | |
| 129 SkRRect fRRect; | |
| 130 SkRegion::Op fOp; | |
| 131 bool fDoAA; | |
| 132 | |
| 133 typedef SkDrawCommand INHERITED; | |
| 134 }; | |
| 135 | |
| 136 class Concat : public SkDrawCommand { | |
| 137 public: | |
| 138 Concat(const SkMatrix& matrix); | |
| 139 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 140 private: | |
| 141 SkMatrix fMatrix; | |
| 142 | |
| 143 typedef SkDrawCommand INHERITED; | |
| 144 }; | |
| 145 | |
| 146 class DrawBitmap : public SkDrawCommand { | |
| 147 public: | |
| 148 DrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, | |
| 149 const SkPaint* paint); | |
| 150 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 151 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 152 private: | |
| 153 SkBitmap fBitmap; | |
| 154 SkScalar fLeft; | |
| 155 SkScalar fTop; | |
| 156 SkPaint fPaint; | |
| 157 SkPaint* fPaintPtr; | |
| 158 | |
| 159 typedef SkDrawCommand INHERITED; | |
| 160 }; | |
| 161 | |
| 162 class DrawBitmapMatrix : public SkDrawCommand { | |
| 163 public: | |
| 164 DrawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& matrix, | |
| 165 const SkPaint* paint); | |
| 166 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 167 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 168 private: | |
| 169 SkBitmap fBitmap; | |
| 170 SkMatrix fMatrix; | |
| 171 SkPaint fPaint; | |
| 172 SkPaint* fPaintPtr; | |
| 173 | |
| 174 typedef SkDrawCommand INHERITED; | |
| 175 }; | |
| 176 | |
| 177 class DrawBitmapNine : public SkDrawCommand { | |
| 178 public: | |
| 179 DrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, | |
| 180 const SkRect& dst, const SkPaint* paint); | |
| 181 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 182 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 183 private: | |
| 184 SkBitmap fBitmap; | |
| 185 SkIRect fCenter; | |
| 186 SkRect fDst; | |
| 187 SkPaint fPaint; | |
| 188 SkPaint* fPaintPtr; | |
| 189 | |
| 190 typedef SkDrawCommand INHERITED; | |
| 191 }; | |
| 192 | |
| 193 class DrawBitmapRect : public SkDrawCommand { | |
| 194 public: | |
| 195 DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, | |
| 196 const SkRect& dst, const SkPaint* paint); | |
| 197 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 198 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 199 | |
| 200 const SkBitmap& bitmap() const { return fBitmap; } | |
| 201 | |
| 202 // The non-const 'paint' method allows modification of this object's | |
| 203 // SkPaint. For this reason the ctor and setPaint method make a local copy. | |
| 204 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid | |
| 205 // (since only an SkPaint* is passed into the ctor). | |
| 206 const SkPaint* paint() const { return fPaintPtr; } | |
| 207 SkPaint* paint() { return fPaintPtr; } | |
| 208 | |
| 209 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; } | |
| 210 | |
| 211 const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; } | |
| 212 const SkRect& dstRect() const { return fDst; } | |
| 213 | |
| 214 void setSrcRect(const SkRect& src) { fSrc = src; } | |
| 215 void setDstRect(const SkRect& dst) { fDst = dst; } | |
| 216 | |
| 217 private: | |
| 218 SkBitmap fBitmap; | |
| 219 SkRect fSrc; | |
| 220 SkRect fDst; | |
| 221 SkPaint fPaint; | |
| 222 SkPaint* fPaintPtr; | |
| 223 | |
| 224 typedef SkDrawCommand INHERITED; | |
| 225 }; | |
| 226 | |
| 227 class DrawData : public SkDrawCommand { | |
| 228 public: | |
| 229 DrawData(const void* data, size_t length); | |
| 230 virtual ~DrawData() { delete [] fData; } | |
| 231 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 232 private: | |
| 233 char* fData; | |
| 234 size_t fLength; | |
| 235 | |
| 236 typedef SkDrawCommand INHERITED; | |
| 237 }; | |
| 238 | |
| 239 class BeginCommentGroup : public SkDrawCommand { | |
| 240 public: | |
| 241 BeginCommentGroup(const char* description); | |
| 242 virtual void execute(SkCanvas* canvas) SK_OVERRIDE { | |
| 243 canvas->beginCommentGroup(fDescription.c_str()); | |
| 244 }; | |
| 245 private: | |
| 246 SkString fDescription; | |
| 247 | |
| 248 typedef SkDrawCommand INHERITED; | |
| 249 }; | |
| 250 | |
| 251 class Comment : public SkDrawCommand { | |
| 252 public: | |
| 253 Comment(const char* kywd, const char* value); | |
| 254 virtual void execute(SkCanvas* canvas) SK_OVERRIDE { | |
| 255 canvas->addComment(fKywd.c_str(), fValue.c_str()); | |
| 256 }; | |
| 257 private: | |
| 258 SkString fKywd; | |
| 259 SkString fValue; | |
| 260 | |
| 261 typedef SkDrawCommand INHERITED; | |
| 262 }; | |
| 263 | |
| 264 class EndCommentGroup : public SkDrawCommand { | |
| 265 public: | |
| 266 EndCommentGroup(); | |
| 267 virtual void execute(SkCanvas* canvas) SK_OVERRIDE { | |
| 268 canvas->endCommentGroup(); | |
| 269 }; | |
| 270 private: | |
| 271 typedef SkDrawCommand INHERITED; | |
| 272 }; | |
| 273 | |
| 274 class DrawOval : public SkDrawCommand { | |
| 275 public: | |
| 276 DrawOval(const SkRect& oval, const SkPaint& paint); | |
| 277 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 278 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 279 private: | |
| 280 SkRect fOval; | |
| 281 SkPaint fPaint; | |
| 282 | |
| 283 typedef SkDrawCommand INHERITED; | |
| 284 }; | |
| 285 | |
| 286 class DrawPaint : public SkDrawCommand { | |
| 287 public: | |
| 288 DrawPaint(const SkPaint& paint); | |
| 289 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 290 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 291 private: | |
| 292 SkPaint fPaint; | |
| 293 | |
| 294 typedef SkDrawCommand INHERITED; | |
| 295 }; | |
| 296 | |
| 297 class DrawPath : public SkDrawCommand { | |
| 298 public: | |
| 299 DrawPath(const SkPath& path, const SkPaint& paint); | |
| 300 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 301 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 302 | |
| 303 private: | |
| 304 SkPath fPath; | |
| 305 SkPaint fPaint; | |
| 306 | |
| 307 typedef SkDrawCommand INHERITED; | |
| 308 }; | |
| 309 | |
| 310 class DrawPicture : public SkDrawCommand { | |
| 311 public: | |
| 312 DrawPicture(SkPicture& picture); | |
| 313 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 314 private: | |
| 315 SkPicture fPicture; | |
| 316 | |
| 317 typedef SkDrawCommand INHERITED; | |
| 318 }; | |
| 319 | |
| 320 class DrawPoints : public SkDrawCommand { | |
| 321 public: | |
| 322 DrawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint pts[], | |
| 323 const SkPaint& paint); | |
| 324 virtual ~DrawPoints() { delete [] fPts; } | |
| 325 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 326 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 327 private: | |
| 328 SkCanvas::PointMode fMode; | |
| 329 size_t fCount; | |
| 330 SkPoint* fPts; | |
| 331 SkPaint fPaint; | |
| 332 | |
| 333 typedef SkDrawCommand INHERITED; | |
| 334 }; | |
| 335 | |
| 336 /* TODO(chudy): DrawText is a predefined macro and was breaking something | |
| 337 * in the windows build of the debugger. | |
| 338 */ | |
| 339 class DrawTextC : public SkDrawCommand { | |
| 340 public: | |
| 341 DrawTextC(const void* text, size_t byteLength, SkScalar x, SkScalar y, | |
| 342 const SkPaint& paint); | |
| 343 virtual ~DrawTextC() { delete [] fText; } | |
| 344 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 345 private: | |
| 346 char* fText; | |
| 347 size_t fByteLength; | |
| 348 SkScalar fX; | |
| 349 SkScalar fY; | |
| 350 SkPaint fPaint; | |
| 351 | |
| 352 typedef SkDrawCommand INHERITED; | |
| 353 }; | |
| 354 | |
| 355 class DrawPosText : public SkDrawCommand { | |
| 356 public: | |
| 357 DrawPosText(const void* text, size_t byteLength, const SkPoint pos[], | |
| 358 const SkPaint& paint); | |
| 359 virtual ~DrawPosText() { delete [] fPos; delete [] fText; } | |
| 360 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 361 private: | |
| 362 char* fText; | |
| 363 size_t fByteLength; | |
| 364 SkPoint* fPos; | |
| 365 SkPaint fPaint; | |
| 366 | |
| 367 typedef SkDrawCommand INHERITED; | |
| 368 }; | |
| 369 | |
| 370 class DrawTextOnPath : public SkDrawCommand { | |
| 371 public: | |
| 372 DrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, | |
| 373 const SkMatrix* matrix, const SkPaint& paint); | |
| 374 virtual ~DrawTextOnPath() { delete [] fText; } | |
| 375 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 376 private: | |
| 377 char* fText; | |
| 378 size_t fByteLength; | |
| 379 SkPath fPath; | |
| 380 SkMatrix fMatrix; | |
| 381 SkPaint fPaint; | |
| 382 | |
| 383 typedef SkDrawCommand INHERITED; | |
| 384 }; | |
| 385 | |
| 386 class DrawPosTextH : public SkDrawCommand { | |
| 387 public: | |
| 388 DrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], | |
| 389 SkScalar constY, const SkPaint& paint); | |
| 390 virtual ~DrawPosTextH() { delete [] fXpos; delete [] fText; } | |
| 391 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 392 private: | |
| 393 SkScalar* fXpos; | |
| 394 char* fText; | |
| 395 size_t fByteLength; | |
| 396 SkScalar fConstY; | |
| 397 SkPaint fPaint; | |
| 398 | |
| 399 typedef SkDrawCommand INHERITED; | |
| 400 }; | |
| 401 | |
| 402 class DrawRectC : public SkDrawCommand { | |
| 403 public: | |
| 404 DrawRectC(const SkRect& rect, const SkPaint& paint); | |
| 405 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 406 | |
| 407 const SkRect& rect() const { return fRect; } | |
| 408 const SkPaint& paint() const { return fPaint; } | |
| 409 private: | |
| 410 SkRect fRect; | |
| 411 SkPaint fPaint; | |
| 412 | |
| 413 typedef SkDrawCommand INHERITED; | |
| 414 }; | |
| 415 | |
| 416 class DrawRRect : public SkDrawCommand { | |
| 417 public: | |
| 418 DrawRRect(const SkRRect& rrect, const SkPaint& paint); | |
| 419 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 420 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 421 private: | |
| 422 SkRRect fRRect; | |
| 423 SkPaint fPaint; | |
| 424 | |
| 425 typedef SkDrawCommand INHERITED; | |
| 426 }; | |
| 427 | |
| 428 class DrawSprite : public SkDrawCommand { | |
| 429 public: | |
| 430 DrawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint); | |
| 431 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 432 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; | |
| 433 private: | |
| 434 SkBitmap fBitmap; | |
| 435 int fLeft; | |
| 436 int fTop; | |
| 437 SkPaint fPaint; | |
| 438 SkPaint* fPaintPtr; | |
| 439 | |
| 440 typedef SkDrawCommand INHERITED; | |
| 441 }; | |
| 442 | |
| 443 class DrawVertices : public SkDrawCommand { | |
| 444 public: | |
| 445 DrawVertices(SkCanvas::VertexMode vmode, int vertexCount, | |
| 446 const SkPoint vertices[], const SkPoint texs[], | |
| 447 const SkColor colors[], SkXfermode* xfermode, | |
| 448 const uint16_t indices[], int indexCount, | |
| 449 const SkPaint& paint); | |
| 450 virtual ~DrawVertices(); | |
| 451 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 452 private: | |
| 453 SkCanvas::VertexMode fVmode; | |
| 454 int fVertexCount; | |
| 455 SkPoint* fVertices; | |
| 456 SkPoint* fTexs; | |
| 457 SkColor* fColors; | |
| 458 SkXfermode* fXfermode; | |
| 459 uint16_t* fIndices; | |
| 460 int fIndexCount; | |
| 461 SkPaint fPaint; | |
| 462 | |
| 463 typedef SkDrawCommand INHERITED; | |
| 464 }; | |
| 465 | |
| 466 class Rotate : public SkDrawCommand { | |
| 467 public: | |
| 468 Rotate(SkScalar degrees); | |
| 469 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 470 private: | |
| 471 SkScalar fDegrees; | |
| 472 | |
| 473 typedef SkDrawCommand INHERITED; | |
| 474 }; | |
| 475 | |
| 476 class Save : public SkDrawCommand { | |
| 477 public: | |
| 478 Save(SkCanvas::SaveFlags flags); | |
| 479 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 480 virtual void trackSaveState(int* state) SK_OVERRIDE; | |
| 481 private: | |
| 482 SkCanvas::SaveFlags fFlags; | |
| 483 | |
| 484 typedef SkDrawCommand INHERITED; | |
| 485 }; | |
| 486 | |
| 487 class SaveLayer : public SkDrawCommand { | |
| 488 public: | |
| 489 SaveLayer(const SkRect* bounds, const SkPaint* paint, | |
| 490 SkCanvas::SaveFlags flags); | |
| 491 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 492 virtual void trackSaveState(int* state) SK_OVERRIDE; | |
| 493 | |
| 494 const SkPaint* paint() const { return fPaintPtr; } | |
| 495 | |
| 496 private: | |
| 497 SkRect fBounds; | |
| 498 SkPaint fPaint; | |
| 499 SkPaint* fPaintPtr; | |
| 500 SkCanvas::SaveFlags fFlags; | |
| 501 | |
| 502 typedef SkDrawCommand INHERITED; | |
| 503 }; | |
| 504 | |
| 505 class Scale : public SkDrawCommand { | |
| 506 public: | |
| 507 Scale(SkScalar sx, SkScalar sy); | |
| 508 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 509 | |
| 510 SkScalar x() const { return fSx; } | |
| 511 SkScalar y() const { return fSy; } | |
| 512 | |
| 513 private: | |
| 514 SkScalar fSx; | |
| 515 SkScalar fSy; | |
| 516 | |
| 517 typedef SkDrawCommand INHERITED; | |
| 518 }; | |
| 519 | |
| 520 class SetMatrix : public SkDrawCommand { | |
| 521 public: | |
| 522 SetMatrix(const SkMatrix& matrix); | |
| 523 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 524 private: | |
| 525 SkMatrix fMatrix; | |
| 526 | |
| 527 typedef SkDrawCommand INHERITED; | |
| 528 }; | |
| 529 | |
| 530 class Skew : public SkDrawCommand { | |
| 531 public: | |
| 532 Skew(SkScalar sx, SkScalar sy); | |
| 533 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 534 private: | |
| 535 SkScalar fSx; | |
| 536 SkScalar fSy; | |
| 537 | |
| 538 typedef SkDrawCommand INHERITED; | |
| 539 }; | |
| 540 | |
| 541 class Translate : public SkDrawCommand { | |
| 542 public: | |
| 543 Translate(SkScalar dx, SkScalar dy); | |
| 544 virtual void execute(SkCanvas* canvas) SK_OVERRIDE; | |
| 545 | |
| 546 SkScalar x() const { return fDx; } | |
| 547 SkScalar y() const { return fDy; } | |
| 548 | |
| 549 private: | |
| 550 SkScalar fDx; | |
| 551 SkScalar fDy; | |
| 552 | |
| 553 typedef SkDrawCommand INHERITED; | |
| 554 }; | |
| 555 | |
| 556 #endif | |
| OLD | NEW |