OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "SkAnnotation.h" | 8 #include "SkAnnotation.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkColorFilter.h" | 10 #include "SkColorFilter.h" |
11 #include "SkDrawLooper.h" | 11 #include "SkDrawLooper.h" |
12 #include "SkImage.h" | 12 #include "SkImage.h" |
13 #include "SkImageFilter.h" | 13 #include "SkImageFilter.h" |
14 #include "SkMaskFilter.h" | 14 #include "SkMaskFilter.h" |
15 #include "SkNinePatchIter.h" | 15 #include "SkNinePatchIter.h" |
16 #include "SkPath.h" | 16 #include "SkPath.h" |
17 #include "SkPathEffect.h" | 17 #include "SkPathEffect.h" |
18 #include "SkRasterizer.h" | 18 #include "SkRasterizer.h" |
19 #include "SkRect.h" | 19 #include "SkRect.h" |
20 #include "SkRemote.h" | 20 #include "SkRemote.h" |
21 #include "SkShader.h" | 21 #include "SkShader.h" |
22 #include "SkTHash.h" | 22 #include "SkTHash.h" |
| 23 #include "SkTextBlob.h" |
23 | 24 |
24 namespace SkRemote { | 25 namespace SkRemote { |
25 | 26 |
26 Misc Misc::CreateFrom(const SkPaint& paint) { | 27 Misc Misc::CreateFrom(const SkPaint& paint) { |
27 Misc misc = { | 28 Misc misc = { |
28 paint.getColor(), | 29 paint.getColor(), |
29 paint.getFilterQuality(), | 30 paint.getFilterQuality(), |
30 paint.isAntiAlias(), | 31 paint.isAntiAlias(), |
31 paint.isDither(), | 32 paint.isDither(), |
32 }; | 33 }; |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 const SkIRect& center, | 352 const SkIRect& center, |
352 const SkRect& dst, | 353 const SkRect& dst, |
353 const SkPaint* paint) override { | 354 const SkPaint* paint) override { |
354 SkNinePatchIter iter(image->width(), image->height(), center, dst); | 355 SkNinePatchIter iter(image->width(), image->height(), center, dst); |
355 SkRect s,d; | 356 SkRect s,d; |
356 while (iter.next(&s, &d)) { | 357 while (iter.next(&s, &d)) { |
357 this->onDrawImageRect(image, &s, d, paint, kStrict_SrcRectConstr
aint); | 358 this->onDrawImageRect(image, &s, d, paint, kStrict_SrcRectConstr
aint); |
358 } | 359 } |
359 } | 360 } |
360 | 361 |
| 362 void onDrawTextBlob(const SkTextBlob* text, |
| 363 SkScalar x, |
| 364 SkScalar y, |
| 365 const SkPaint& paint) override { |
| 366 SkPoint offset{x,y}; |
| 367 auto t = this->id(text); |
| 368 auto common = this->commonIDs(paint); |
| 369 |
| 370 if (paint.getStyle() == SkPaint::kFill_Style) { |
| 371 fEncoder->fillText(t, offset, common); |
| 372 } else { |
| 373 // TODO: handle kStrokeAndFill_Style |
| 374 fEncoder->strokeText(t, offset, common, this->id(Stroke::CreateF
rom(paint))); |
| 375 } |
| 376 } |
| 377 |
361 void onDrawText(const void* text, size_t byteLength, | 378 void onDrawText(const void* text, size_t byteLength, |
362 SkScalar x, SkScalar y, const SkPaint& paint) override { | 379 SkScalar x, SkScalar y, const SkPaint& paint) override { |
363 // Text-as-paths is a temporary hack. | 380 // Text-as-paths is a temporary hack. |
364 // TODO: send SkTextBlobs and SkTypefaces | 381 // TODO: send SkTextBlobs and SkTypefaces |
365 SkPath path; | 382 SkPath path; |
366 paint.getTextPath(text, byteLength, x, y, &path); | 383 paint.getTextPath(text, byteLength, x, y, &path); |
367 this->onDrawPath(path, paint); | 384 this->onDrawPath(path, paint); |
368 } | 385 } |
369 | 386 |
370 void onDrawPosText(const void* text, size_t byteLength, | 387 void onDrawPosText(const void* text, size_t byteLength, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 442 |
426 private: | 443 private: |
427 template <typename Map, typename T> | 444 template <typename Map, typename T> |
428 ID define(Type type, Map* map, const T& val) { | 445 ID define(Type type, Map* map, const T& val) { |
429 ID id(type, fNextID++); | 446 ID id(type, fNextID++); |
430 map->set(id, val); | 447 map->set(id, val); |
431 return id; | 448 return id; |
432 } | 449 } |
433 | 450 |
434 #define O override | 451 #define O override |
435 ID define(const SkMatrix& v) O {return this->define(Type::kMatrix,
&fMatrix, v);} | 452 ID define(const SkMatrix& v)O{return this->define(Type::kMatrix,
&fMatrix, v);} |
436 ID define(const Misc& v) O {return this->define(Type::kMisc,
&fMisc, v);} | 453 ID define(const Misc& v)O{return this->define(Type::kMisc,
&fMisc, v);} |
437 ID define(const SkPath& v) O {return this->define(Type::kPath,
&fPath, v);} | 454 ID define(const SkPath& v)O{return this->define(Type::kPath,
&fPath, v);} |
438 ID define(const Stroke& v) O {return this->define(Type::kStroke,
&fStroke, v);} | 455 ID define(const Stroke& v)O{return this->define(Type::kStroke,
&fStroke, v);} |
439 ID define(SkPathEffect* v) O {return this->define(Type::kPathEffect,
&fPathEffect, v);} | 456 ID define(const SkTextBlob* v)O{return this->define(Type::kTextBlob,
&fTextBlob, v);} |
440 ID define(SkShader* v) O {return this->define(Type::kShader,
&fShader, v);} | 457 ID define(SkPathEffect* v)O{return this->define(Type::kPathEffect,
&fPathEffect, v);} |
441 ID define(SkXfermode* v) O {return this->define(Type::kXfermode,
&fXfermode, v);} | 458 ID define(SkShader* v)O{return this->define(Type::kShader,
&fShader, v);} |
442 ID define(SkMaskFilter* v) O {return this->define(Type::kMaskFilter,
&fMaskFilter, v);} | 459 ID define(SkXfermode* v)O{return this->define(Type::kXfermode,
&fXfermode, v);} |
443 ID define(SkColorFilter* v) O {return this->define(Type::kColorFilter,
&fColorFilter, v);} | 460 ID define(SkMaskFilter* v)O{return this->define(Type::kMaskFilter,
&fMaskFilter, v);} |
444 ID define(SkRasterizer* v) O {return this->define(Type::kRasterizer,
&fRasterizer, v);} | 461 ID define(SkColorFilter* v)O{return this->define(Type::kColorFilter,
&fColorFilter, v);} |
445 ID define(SkDrawLooper* v) O {return this->define(Type::kDrawLooper,
&fDrawLooper, v);} | 462 ID define(SkRasterizer* v)O{return this->define(Type::kRasterizer,
&fRasterizer, v);} |
446 ID define(SkImageFilter* v) O {return this->define(Type::kImageFilter,
&fImageFilter, v);} | 463 ID define(SkDrawLooper* v)O{return this->define(Type::kDrawLooper,
&fDrawLooper, v);} |
447 ID define(SkAnnotation* v) O {return this->define(Type::kAnnotation,
&fAnnotation, v);} | 464 ID define(SkImageFilter* v)O{return this->define(Type::kImageFilter,
&fImageFilter, v);} |
| 465 ID define(SkAnnotation* v)O{return this->define(Type::kAnnotation,
&fAnnotation, v);} |
448 #undef O | 466 #undef O |
449 | 467 |
450 | 468 |
451 void undefine(ID id) override { | 469 void undefine(ID id) override { |
452 switch(id.type()) { | 470 switch(id.type()) { |
453 case Type::kMatrix: return fMatrix .remove(id); | 471 case Type::kMatrix: return fMatrix .remove(id); |
454 case Type::kMisc: return fMisc .remove(id); | 472 case Type::kMisc: return fMisc .remove(id); |
455 case Type::kPath: return fPath .remove(id); | 473 case Type::kPath: return fPath .remove(id); |
456 case Type::kStroke: return fStroke .remove(id); | 474 case Type::kStroke: return fStroke .remove(id); |
| 475 case Type::kTextBlob: return fTextBlob .remove(id); |
457 case Type::kPathEffect: return fPathEffect .remove(id); | 476 case Type::kPathEffect: return fPathEffect .remove(id); |
458 case Type::kShader: return fShader .remove(id); | 477 case Type::kShader: return fShader .remove(id); |
459 case Type::kXfermode: return fXfermode .remove(id); | 478 case Type::kXfermode: return fXfermode .remove(id); |
460 case Type::kMaskFilter: return fMaskFilter .remove(id); | 479 case Type::kMaskFilter: return fMaskFilter .remove(id); |
461 case Type::kColorFilter: return fColorFilter.remove(id); | 480 case Type::kColorFilter: return fColorFilter.remove(id); |
462 case Type::kRasterizer: return fRasterizer .remove(id); | 481 case Type::kRasterizer: return fRasterizer .remove(id); |
463 case Type::kDrawLooper: return fDrawLooper .remove(id); | 482 case Type::kDrawLooper: return fDrawLooper .remove(id); |
464 case Type::kImageFilter: return fImageFilter.remove(id); | 483 case Type::kImageFilter: return fImageFilter.remove(id); |
465 case Type::kAnnotation: return fAnnotation .remove(id); | 484 case Type::kAnnotation: return fAnnotation .remove(id); |
466 }; | 485 }; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 this->applyCommon(common, &paint); | 518 this->applyCommon(common, &paint); |
500 fCanvas->drawPath(fPath.find(path), paint); | 519 fCanvas->drawPath(fPath.find(path), paint); |
501 } | 520 } |
502 void strokePath(ID path, CommonIDs common, ID stroke) override { | 521 void strokePath(ID path, CommonIDs common, ID stroke) override { |
503 SkPaint paint; | 522 SkPaint paint; |
504 paint.setStyle(SkPaint::kStroke_Style); | 523 paint.setStyle(SkPaint::kStroke_Style); |
505 this->applyCommon(common, &paint); | 524 this->applyCommon(common, &paint); |
506 fStroke.find(stroke).applyTo(&paint); | 525 fStroke.find(stroke).applyTo(&paint); |
507 fCanvas->drawPath(fPath.find(path), paint); | 526 fCanvas->drawPath(fPath.find(path), paint); |
508 } | 527 } |
| 528 void fillText(ID text, SkPoint offset, CommonIDs common) override { |
| 529 SkPaint paint; |
| 530 paint.setStyle(SkPaint::kFill_Style); |
| 531 this->applyCommon(common, &paint); |
| 532 fCanvas->drawTextBlob(fTextBlob.find(text), offset.x(), offset.y(),
paint); |
| 533 } |
| 534 void strokeText(ID text, SkPoint offset, CommonIDs common, ID stroke) ov
erride { |
| 535 SkPaint paint; |
| 536 this->applyCommon(common, &paint); |
| 537 fStroke.find(stroke).applyTo(&paint); |
| 538 fCanvas->drawTextBlob(fTextBlob.find(text), offset.x(), offset.y(),
paint); |
| 539 } |
509 | 540 |
510 // Maps ID -> T. | 541 // Maps ID -> T. |
511 template <typename T, Type kType> | 542 template <typename T, Type kType> |
512 class IDMap { | 543 class IDMap { |
513 public: | 544 public: |
514 ~IDMap() { | 545 ~IDMap() { |
515 // A well-behaved client always cleans up its definitions. | 546 // A well-behaved client always cleans up its definitions. |
516 SkASSERT(fMap.count() == 0); | 547 SkASSERT(fMap.count() == 0); |
517 } | 548 } |
518 | 549 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
565 T** val = fMap.find(id); | 596 T** val = fMap.find(id); |
566 SkASSERT(val); | 597 SkASSERT(val); |
567 return *val; | 598 return *val; |
568 } | 599 } |
569 | 600 |
570 private: | 601 private: |
571 SkTHashMap<ID, T*> fMap; | 602 SkTHashMap<ID, T*> fMap; |
572 }; | 603 }; |
573 | 604 |
574 | 605 |
575 IDMap<SkMatrix , Type::kMatrix > fMatrix; | 606 IDMap<SkMatrix , Type::kMatrix > fMatrix; |
576 IDMap<Misc , Type::kMisc > fMisc; | 607 IDMap<Misc , Type::kMisc > fMisc; |
577 IDMap<SkPath , Type::kPath > fPath; | 608 IDMap<SkPath , Type::kPath > fPath; |
578 IDMap<Stroke , Type::kStroke > fStroke; | 609 IDMap<Stroke , Type::kStroke > fStroke; |
579 ReffedIDMap<SkPathEffect , Type::kPathEffect > fPathEffect; | 610 ReffedIDMap<const SkTextBlob, Type::kTextBlob > fTextBlob; |
580 ReffedIDMap<SkShader , Type::kShader > fShader; | 611 ReffedIDMap<SkPathEffect , Type::kPathEffect > fPathEffect; |
581 ReffedIDMap<SkXfermode , Type::kXfermode > fXfermode; | 612 ReffedIDMap<SkShader , Type::kShader > fShader; |
582 ReffedIDMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; | 613 ReffedIDMap<SkXfermode , Type::kXfermode > fXfermode; |
583 ReffedIDMap<SkColorFilter, Type::kColorFilter> fColorFilter; | 614 ReffedIDMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; |
584 ReffedIDMap<SkRasterizer , Type::kRasterizer > fRasterizer; | 615 ReffedIDMap<SkColorFilter , Type::kColorFilter> fColorFilter; |
585 ReffedIDMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; | 616 ReffedIDMap<SkRasterizer , Type::kRasterizer > fRasterizer; |
586 ReffedIDMap<SkImageFilter, Type::kImageFilter> fImageFilter; | 617 ReffedIDMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; |
587 ReffedIDMap<SkAnnotation , Type::kAnnotation > fAnnotation; | 618 ReffedIDMap<SkImageFilter , Type::kImageFilter> fImageFilter; |
| 619 ReffedIDMap<SkAnnotation , Type::kAnnotation > fAnnotation; |
588 | 620 |
589 SkCanvas* fCanvas; | 621 SkCanvas* fCanvas; |
590 uint64_t fNextID = 0; | 622 uint64_t fNextID = 0; |
591 }; | 623 }; |
592 | 624 |
593 Encoder* NewDecoder(SkCanvas* canvas) { return new Decoder(canvas); } | 625 Encoder* NewDecoder(SkCanvas* canvas) { return new Decoder(canvas); } |
594 | 626 |
595 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // | 627 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // |
596 | 628 |
597 class CachingEncoder final : public Encoder { | 629 class CachingEncoder final : public Encoder { |
598 public: | 630 public: |
599 explicit CachingEncoder(Encoder* wrapped) : fWrapped(wrapped) {} | 631 explicit CachingEncoder(Encoder* wrapped) : fWrapped(wrapped) {} |
600 | 632 |
601 private: | 633 private: |
602 struct Undef { | 634 struct Undef { |
603 Encoder* fEncoder; | 635 Encoder* fEncoder; |
604 template <typename T> | 636 template <typename T> |
605 void operator()(const T&, ID* id) const { fEncoder->undefine(*id); } | 637 void operator()(const T&, ID* id) const { fEncoder->undefine(*id); } |
606 }; | 638 }; |
607 | 639 |
608 ~CachingEncoder() override { | 640 ~CachingEncoder() override { |
609 Undef undef{fWrapped}; | 641 Undef undef{fWrapped}; |
610 fMatrix .foreach(undef); | 642 fMatrix .foreach(undef); |
611 fMisc .foreach(undef); | 643 fMisc .foreach(undef); |
612 fPath .foreach(undef); | 644 fPath .foreach(undef); |
| 645 fStroke .foreach(undef); |
| 646 fTextBlob .foreach(undef); |
613 fPathEffect .foreach(undef); | 647 fPathEffect .foreach(undef); |
614 fStroke .foreach(undef); | |
615 fShader .foreach(undef); | 648 fShader .foreach(undef); |
616 fXfermode .foreach(undef); | 649 fXfermode .foreach(undef); |
617 fMaskFilter .foreach(undef); | 650 fMaskFilter .foreach(undef); |
618 fColorFilter.foreach(undef); | 651 fColorFilter.foreach(undef); |
619 fRasterizer .foreach(undef); | 652 fRasterizer .foreach(undef); |
620 fDrawLooper .foreach(undef); | 653 fDrawLooper .foreach(undef); |
621 fImageFilter.foreach(undef); | 654 fImageFilter.foreach(undef); |
622 fAnnotation .foreach(undef); | 655 fAnnotation .foreach(undef); |
623 } | 656 } |
624 | 657 |
625 template <typename Map, typename T> | 658 template <typename Map, typename T> |
626 ID define(Map* map, const T& v) { | 659 ID define(Map* map, const T& v) { |
627 if (const ID* id = map->find(v)) { | 660 if (const ID* id = map->find(v)) { |
628 return *id; | 661 return *id; |
629 } | 662 } |
630 ID id = fWrapped->define(v); | 663 ID id = fWrapped->define(v); |
631 map->set(v, id); | 664 map->set(v, id); |
632 return id; | 665 return id; |
633 } | 666 } |
634 | 667 |
635 ID define(const SkMatrix& v) override { return this->define(&fMatrix
, v); } | 668 ID define(const SkMatrix& v) override { return this->define(&fMatrix
, v); } |
636 ID define(const Misc& v) override { return this->define(&fMisc
, v); } | 669 ID define(const Misc& v) override { return this->define(&fMisc
, v); } |
637 ID define(const SkPath& v) override { return this->define(&fPath
, v); } | 670 ID define(const SkPath& v) override { return this->define(&fPath
, v); } |
638 ID define(const Stroke& v) override { return this->define(&fStroke
, v); } | 671 ID define(const Stroke& v) override { return this->define(&fStroke
, v); } |
639 ID define(SkPathEffect* v) override { return this->define(&fPathEffect
, v); } | 672 ID define(const SkTextBlob* v) override { return this->define(&fTextBlob
, v); } |
640 ID define(SkShader* v) override { return this->define(&fShader
, v); } | 673 ID define(SkPathEffect* v) override { return this->define(&fPathEffe
ct , v); } |
641 ID define(SkXfermode* v) override { return this->define(&fXfermode
, v); } | 674 ID define(SkShader* v) override { return this->define(&fShader
, v); } |
642 ID define(SkMaskFilter* v) override { return this->define(&fMaskFilter
, v); } | 675 ID define(SkXfermode* v) override { return this->define(&fXfermode
, v); } |
643 ID define(SkColorFilter* v) override { return this->define(&fColorFilte
r, v); } | 676 ID define(SkMaskFilter* v) override { return this->define(&fMaskFilt
er , v); } |
644 ID define(SkRasterizer* v) override { return this->define(&fRasterizer
, v); } | 677 ID define(SkColorFilter* v) override { return this->define(&fColorFil
ter, v); } |
645 ID define(SkDrawLooper* v) override { return this->define(&fDrawLooper
, v); } | 678 ID define(SkRasterizer* v) override { return this->define(&fRasteriz
er , v); } |
646 ID define(SkImageFilter* v) override { return this->define(&fImageFilte
r, v); } | 679 ID define(SkDrawLooper* v) override { return this->define(&fDrawLoop
er , v); } |
647 ID define(SkAnnotation* v) override { return this->define(&fAnnotation
, v); } | 680 ID define(SkImageFilter* v) override { return this->define(&fImageFil
ter, v); } |
| 681 ID define(SkAnnotation* v) override { return this->define(&fAnnotati
on , v); } |
648 | 682 |
649 void undefine(ID) override {} | 683 void undefine(ID) override {} |
650 | 684 |
651 void save() override { fWrapped-> save(); } | 685 void save() override { fWrapped-> save(); } |
652 void restore() override { fWrapped->restore(); } | 686 void restore() override { fWrapped->restore(); } |
653 void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveFlags flags) o
verride { | 687 void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveFlags flags) o
verride { |
654 fWrapped->saveLayer(bounds, common, flags); | 688 fWrapped->saveLayer(bounds, common, flags); |
655 } | 689 } |
656 | 690 |
657 void setMatrix(ID matrix) override { fWrapped->setMatrix(matrix); } | 691 void setMatrix(ID matrix) override { fWrapped->setMatrix(matrix); } |
658 | 692 |
659 void clipPath(ID path, SkRegion::Op op, bool aa) override { | 693 void clipPath(ID path, SkRegion::Op op, bool aa) override { |
660 fWrapped->clipPath(path, op, aa); | 694 fWrapped->clipPath(path, op, aa); |
661 } | 695 } |
662 void fillPath(ID path, CommonIDs common) override { | 696 void fillPath(ID path, CommonIDs common) override { |
663 fWrapped->fillPath(path, common); | 697 fWrapped->fillPath(path, common); |
664 } | 698 } |
665 void strokePath(ID path, CommonIDs common, ID stroke) override { | 699 void strokePath(ID path, CommonIDs common, ID stroke) override { |
666 fWrapped->strokePath(path, common, stroke); | 700 fWrapped->strokePath(path, common, stroke); |
667 } | 701 } |
| 702 void fillText(ID text, SkPoint offset, CommonIDs common) override { |
| 703 fWrapped->fillText(text, offset, common); |
| 704 } |
| 705 void strokeText(ID text, SkPoint offset, CommonIDs common, ID stroke) ov
erride { |
| 706 fWrapped->strokeText(text, offset, common, stroke); |
| 707 } |
668 | 708 |
669 // Maps const T* -> ID, and refs the key. | 709 // Maps const T* -> ID, and refs the key. |
670 template <typename T, Type kType> | 710 template <typename T, Type kType> |
671 class RefKeyMap { | 711 class RefKeyMap { |
672 public: | 712 public: |
673 RefKeyMap() {} | 713 RefKeyMap() {} |
674 ~RefKeyMap() { fMap.foreach([](const T* key, ID*) { SkSafeUnref(key)
; }); } | 714 ~RefKeyMap() { fMap.foreach([](const T* key, ID*) { SkSafeUnref(key)
; }); } |
675 | 715 |
676 void set(const T* key, ID id) { | 716 void set(const T* key, ID id) { |
677 SkASSERT(id.type() == kType); | 717 SkASSERT(id.type() == kType); |
(...skipping 10 matching lines...) Expand all Loading... |
688 } | 728 } |
689 | 729 |
690 template <typename Fn> | 730 template <typename Fn> |
691 void foreach(const Fn& fn) { | 731 void foreach(const Fn& fn) { |
692 fMap.foreach(fn); | 732 fMap.foreach(fn); |
693 } | 733 } |
694 private: | 734 private: |
695 SkTHashMap<const T*, ID> fMap; | 735 SkTHashMap<const T*, ID> fMap; |
696 }; | 736 }; |
697 | 737 |
698 SkTHashMap<SkMatrix, ID> fMatrix; | 738 SkTHashMap<SkMatrix, ID> fMatrix; |
699 SkTHashMap<Misc, ID, MiscHash> fMisc; | 739 SkTHashMap<Misc, ID, MiscHash> fMisc; |
700 SkTHashMap<SkPath, ID> fPath; | 740 SkTHashMap<SkPath, ID> fPath; |
701 SkTHashMap<Stroke, ID> fStroke; | 741 SkTHashMap<Stroke, ID> fStroke; |
702 RefKeyMap<SkPathEffect , Type::kPathEffect > fPathEffect; | 742 RefKeyMap<const SkTextBlob, Type::kTextBlob > fTextBlob; |
703 RefKeyMap<SkShader , Type::kShader > fShader; | 743 RefKeyMap<SkPathEffect , Type::kPathEffect > fPathEffect; |
704 RefKeyMap<SkXfermode , Type::kXfermode > fXfermode; | 744 RefKeyMap<SkShader , Type::kShader > fShader; |
705 RefKeyMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; | 745 RefKeyMap<SkXfermode , Type::kXfermode > fXfermode; |
706 RefKeyMap<SkColorFilter, Type::kColorFilter> fColorFilter; | 746 RefKeyMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; |
707 RefKeyMap<SkRasterizer , Type::kRasterizer > fRasterizer; | 747 RefKeyMap<SkColorFilter , Type::kColorFilter> fColorFilter; |
708 RefKeyMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; | 748 RefKeyMap<SkRasterizer , Type::kRasterizer > fRasterizer; |
709 RefKeyMap<SkImageFilter, Type::kImageFilter> fImageFilter; | 749 RefKeyMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; |
710 RefKeyMap<SkAnnotation , Type::kAnnotation > fAnnotation; | 750 RefKeyMap<SkImageFilter , Type::kImageFilter> fImageFilter; |
| 751 RefKeyMap<SkAnnotation , Type::kAnnotation > fAnnotation; |
711 | 752 |
712 Encoder* fWrapped; | 753 Encoder* fWrapped; |
713 }; | 754 }; |
714 | 755 |
715 Encoder* NewCachingEncoder(Encoder* wrapped) { return new CachingEncoder(wra
pped); } | 756 Encoder* NewCachingEncoder(Encoder* wrapped) { return new CachingEncoder(wra
pped); } |
716 | 757 |
717 } // namespace SkRemote | 758 } // namespace SkRemote |
OLD | NEW |