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" | |
9 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
10 #include "SkColorFilter.h" | 9 #include "SkColorFilter.h" |
11 #include "SkDrawLooper.h" | 10 #include "SkDrawLooper.h" |
12 #include "SkImage.h" | 11 #include "SkImage.h" |
13 #include "SkImageFilter.h" | 12 #include "SkImageFilter.h" |
14 #include "SkMaskFilter.h" | 13 #include "SkMaskFilter.h" |
15 #include "SkNinePatchIter.h" | 14 #include "SkNinePatchIter.h" |
16 #include "SkPath.h" | 15 #include "SkPath.h" |
17 #include "SkPathEffect.h" | 16 #include "SkPathEffect.h" |
18 #include "SkRasterizer.h" | 17 #include "SkRasterizer.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 : fEncoder(encoder) { | 119 : fEncoder(encoder) { |
121 fIDs.misc = fEncoder->define(Misc::CreateFrom(paint)); | 120 fIDs.misc = fEncoder->define(Misc::CreateFrom(paint)); |
122 fIDs.patheffect = fEncoder->define(paint.getPathEffect()); | 121 fIDs.patheffect = fEncoder->define(paint.getPathEffect()); |
123 fIDs.shader = fEncoder->define(paint.getShader()); | 122 fIDs.shader = fEncoder->define(paint.getShader()); |
124 fIDs.xfermode = fEncoder->define(paint.getXfermode()); | 123 fIDs.xfermode = fEncoder->define(paint.getXfermode()); |
125 fIDs.maskfilter = fEncoder->define(paint.getMaskFilter()); | 124 fIDs.maskfilter = fEncoder->define(paint.getMaskFilter()); |
126 fIDs.colorfilter = fEncoder->define(paint.getColorFilter()); | 125 fIDs.colorfilter = fEncoder->define(paint.getColorFilter()); |
127 fIDs.rasterizer = fEncoder->define(paint.getRasterizer()); | 126 fIDs.rasterizer = fEncoder->define(paint.getRasterizer()); |
128 fIDs.looper = fEncoder->define(paint.getLooper()); | 127 fIDs.looper = fEncoder->define(paint.getLooper()); |
129 fIDs.imagefilter = fEncoder->define(paint.getImageFilter()); | 128 fIDs.imagefilter = fEncoder->define(paint.getImageFilter()); |
130 fIDs.annotation = fEncoder->define(paint.getAnnotation()); | |
131 } | 129 } |
132 ~AutoCommonIDs() { | 130 ~AutoCommonIDs() { |
133 if (fEncoder) { | 131 if (fEncoder) { |
134 fEncoder->undefine(fIDs.misc); | 132 fEncoder->undefine(fIDs.misc); |
135 fEncoder->undefine(fIDs.patheffect); | 133 fEncoder->undefine(fIDs.patheffect); |
136 fEncoder->undefine(fIDs.shader); | 134 fEncoder->undefine(fIDs.shader); |
137 fEncoder->undefine(fIDs.xfermode); | 135 fEncoder->undefine(fIDs.xfermode); |
138 fEncoder->undefine(fIDs.maskfilter); | 136 fEncoder->undefine(fIDs.maskfilter); |
139 fEncoder->undefine(fIDs.colorfilter); | 137 fEncoder->undefine(fIDs.colorfilter); |
140 fEncoder->undefine(fIDs.rasterizer); | 138 fEncoder->undefine(fIDs.rasterizer); |
141 fEncoder->undefine(fIDs.looper); | 139 fEncoder->undefine(fIDs.looper); |
142 fEncoder->undefine(fIDs.imagefilter); | 140 fEncoder->undefine(fIDs.imagefilter); |
143 fEncoder->undefine(fIDs.annotation); | |
144 } | 141 } |
145 } | 142 } |
146 | 143 |
147 AutoCommonIDs(AutoCommonIDs&& o) : fEncoder(o.fEncoder), fIDs(o.fIDs
) { | 144 AutoCommonIDs(AutoCommonIDs&& o) : fEncoder(o.fEncoder), fIDs(o.fIDs
) { |
148 o.fEncoder = nullptr; | 145 o.fEncoder = nullptr; |
149 } | 146 } |
150 AutoID& operator=(AutoID&&) = delete; | 147 AutoID& operator=(AutoID&&) = delete; |
151 | 148 |
152 operator Encoder::CommonIDs () const { return fIDs; } | 149 operator Encoder::CommonIDs () const { return fIDs; } |
153 | 150 |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 ID define(const Stroke& v)O{return this->define(Type::kStroke,
&fStroke, v);} | 451 ID define(const Stroke& v)O{return this->define(Type::kStroke,
&fStroke, v);} |
455 ID define(const SkTextBlob* v)O{return this->define(Type::kTextBlob,
&fTextBlob, v);} | 452 ID define(const SkTextBlob* v)O{return this->define(Type::kTextBlob,
&fTextBlob, v);} |
456 ID define(SkPathEffect* v)O{return this->define(Type::kPathEffect,
&fPathEffect, v);} | 453 ID define(SkPathEffect* v)O{return this->define(Type::kPathEffect,
&fPathEffect, v);} |
457 ID define(SkShader* v)O{return this->define(Type::kShader,
&fShader, v);} | 454 ID define(SkShader* v)O{return this->define(Type::kShader,
&fShader, v);} |
458 ID define(SkXfermode* v)O{return this->define(Type::kXfermode,
&fXfermode, v);} | 455 ID define(SkXfermode* v)O{return this->define(Type::kXfermode,
&fXfermode, v);} |
459 ID define(SkMaskFilter* v)O{return this->define(Type::kMaskFilter,
&fMaskFilter, v);} | 456 ID define(SkMaskFilter* v)O{return this->define(Type::kMaskFilter,
&fMaskFilter, v);} |
460 ID define(SkColorFilter* v)O{return this->define(Type::kColorFilter,
&fColorFilter, v);} | 457 ID define(SkColorFilter* v)O{return this->define(Type::kColorFilter,
&fColorFilter, v);} |
461 ID define(SkRasterizer* v)O{return this->define(Type::kRasterizer,
&fRasterizer, v);} | 458 ID define(SkRasterizer* v)O{return this->define(Type::kRasterizer,
&fRasterizer, v);} |
462 ID define(SkDrawLooper* v)O{return this->define(Type::kDrawLooper,
&fDrawLooper, v);} | 459 ID define(SkDrawLooper* v)O{return this->define(Type::kDrawLooper,
&fDrawLooper, v);} |
463 ID define(SkImageFilter* v)O{return this->define(Type::kImageFilter,
&fImageFilter, v);} | 460 ID define(SkImageFilter* v)O{return this->define(Type::kImageFilter,
&fImageFilter, v);} |
464 ID define(SkAnnotation* v)O{return this->define(Type::kAnnotation,
&fAnnotation, v);} | |
465 #undef O | 461 #undef O |
466 | 462 |
467 | 463 |
468 void undefine(ID id) override { | 464 void undefine(ID id) override { |
469 switch(id.type()) { | 465 switch(id.type()) { |
470 case Type::kMatrix: return fMatrix .remove(id); | 466 case Type::kMatrix: return fMatrix .remove(id); |
471 case Type::kMisc: return fMisc .remove(id); | 467 case Type::kMisc: return fMisc .remove(id); |
472 case Type::kPath: return fPath .remove(id); | 468 case Type::kPath: return fPath .remove(id); |
473 case Type::kStroke: return fStroke .remove(id); | 469 case Type::kStroke: return fStroke .remove(id); |
474 case Type::kTextBlob: return fTextBlob .remove(id); | 470 case Type::kTextBlob: return fTextBlob .remove(id); |
475 case Type::kPathEffect: return fPathEffect .remove(id); | 471 case Type::kPathEffect: return fPathEffect .remove(id); |
476 case Type::kShader: return fShader .remove(id); | 472 case Type::kShader: return fShader .remove(id); |
477 case Type::kXfermode: return fXfermode .remove(id); | 473 case Type::kXfermode: return fXfermode .remove(id); |
478 case Type::kMaskFilter: return fMaskFilter .remove(id); | 474 case Type::kMaskFilter: return fMaskFilter .remove(id); |
479 case Type::kColorFilter: return fColorFilter.remove(id); | 475 case Type::kColorFilter: return fColorFilter.remove(id); |
480 case Type::kRasterizer: return fRasterizer .remove(id); | 476 case Type::kRasterizer: return fRasterizer .remove(id); |
481 case Type::kDrawLooper: return fDrawLooper .remove(id); | 477 case Type::kDrawLooper: return fDrawLooper .remove(id); |
482 case Type::kImageFilter: return fImageFilter.remove(id); | 478 case Type::kImageFilter: return fImageFilter.remove(id); |
483 case Type::kAnnotation: return fAnnotation .remove(id); | |
484 }; | 479 }; |
485 } | 480 } |
486 | 481 |
487 void applyCommon(const CommonIDs& common, SkPaint* paint) const { | 482 void applyCommon(const CommonIDs& common, SkPaint* paint) const { |
488 fMisc.find(common.misc).applyTo(paint); | 483 fMisc.find(common.misc).applyTo(paint); |
489 paint->setPathEffect (fPathEffect .find(common.patheffect)); | 484 paint->setPathEffect (fPathEffect .find(common.patheffect)); |
490 paint->setShader (fShader .find(common.shader)); | 485 paint->setShader (fShader .find(common.shader)); |
491 paint->setXfermode (fXfermode .find(common.xfermode)); | 486 paint->setXfermode (fXfermode .find(common.xfermode)); |
492 paint->setMaskFilter (fMaskFilter .find(common.maskfilter)); | 487 paint->setMaskFilter (fMaskFilter .find(common.maskfilter)); |
493 paint->setColorFilter(fColorFilter.find(common.colorfilter)); | 488 paint->setColorFilter(fColorFilter.find(common.colorfilter)); |
494 paint->setRasterizer (fRasterizer .find(common.rasterizer)); | 489 paint->setRasterizer (fRasterizer .find(common.rasterizer)); |
495 paint->setLooper (fDrawLooper .find(common.looper)); | 490 paint->setLooper (fDrawLooper .find(common.looper)); |
496 paint->setImageFilter(fImageFilter.find(common.imagefilter)); | 491 paint->setImageFilter(fImageFilter.find(common.imagefilter)); |
497 paint->setAnnotation (fAnnotation .find(common.annotation)); | |
498 } | 492 } |
499 | 493 |
500 void save() override { fCanvas->save(); } | 494 void save() override { fCanvas->save(); } |
501 void restore() override { fCanvas->restore(); } | 495 void restore() override { fCanvas->restore(); } |
502 void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveLayerFlags fla
gs) override { | 496 void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveLayerFlags fla
gs) override { |
503 SkPaint paint; | 497 SkPaint paint; |
504 this->applyCommon(common, &paint); | 498 this->applyCommon(common, &paint); |
505 SkRect rect; | 499 SkRect rect; |
506 | 500 |
507 fCanvas->saveLayer({ fPath.find(bounds).isRect(&rect) ? &rect : null
ptr, | 501 fCanvas->saveLayer({ fPath.find(bounds).isRect(&rect) ? &rect : null
ptr, |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 IDMap<Stroke , Type::kStroke > fStroke; | 604 IDMap<Stroke , Type::kStroke > fStroke; |
611 ReffedIDMap<const SkTextBlob, Type::kTextBlob > fTextBlob; | 605 ReffedIDMap<const SkTextBlob, Type::kTextBlob > fTextBlob; |
612 ReffedIDMap<SkPathEffect , Type::kPathEffect > fPathEffect; | 606 ReffedIDMap<SkPathEffect , Type::kPathEffect > fPathEffect; |
613 ReffedIDMap<SkShader , Type::kShader > fShader; | 607 ReffedIDMap<SkShader , Type::kShader > fShader; |
614 ReffedIDMap<SkXfermode , Type::kXfermode > fXfermode; | 608 ReffedIDMap<SkXfermode , Type::kXfermode > fXfermode; |
615 ReffedIDMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; | 609 ReffedIDMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; |
616 ReffedIDMap<SkColorFilter , Type::kColorFilter> fColorFilter; | 610 ReffedIDMap<SkColorFilter , Type::kColorFilter> fColorFilter; |
617 ReffedIDMap<SkRasterizer , Type::kRasterizer > fRasterizer; | 611 ReffedIDMap<SkRasterizer , Type::kRasterizer > fRasterizer; |
618 ReffedIDMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; | 612 ReffedIDMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; |
619 ReffedIDMap<SkImageFilter , Type::kImageFilter> fImageFilter; | 613 ReffedIDMap<SkImageFilter , Type::kImageFilter> fImageFilter; |
620 ReffedIDMap<SkAnnotation , Type::kAnnotation > fAnnotation; | |
621 | 614 |
622 SkCanvas* fCanvas; | 615 SkCanvas* fCanvas; |
623 uint64_t fNextID = 0; | 616 uint64_t fNextID = 0; |
624 }; | 617 }; |
625 | 618 |
626 Encoder* NewDecoder(SkCanvas* canvas) { return new Decoder(canvas); } | 619 Encoder* NewDecoder(SkCanvas* canvas) { return new Decoder(canvas); } |
627 | 620 |
628 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // | 621 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // |
629 | 622 |
630 class CachingEncoder final : public Encoder { | 623 class CachingEncoder final : public Encoder { |
(...skipping 15 matching lines...) Expand all Loading... |
646 fStroke .foreach(undef); | 639 fStroke .foreach(undef); |
647 fTextBlob .foreach(undef); | 640 fTextBlob .foreach(undef); |
648 fPathEffect .foreach(undef); | 641 fPathEffect .foreach(undef); |
649 fShader .foreach(undef); | 642 fShader .foreach(undef); |
650 fXfermode .foreach(undef); | 643 fXfermode .foreach(undef); |
651 fMaskFilter .foreach(undef); | 644 fMaskFilter .foreach(undef); |
652 fColorFilter.foreach(undef); | 645 fColorFilter.foreach(undef); |
653 fRasterizer .foreach(undef); | 646 fRasterizer .foreach(undef); |
654 fDrawLooper .foreach(undef); | 647 fDrawLooper .foreach(undef); |
655 fImageFilter.foreach(undef); | 648 fImageFilter.foreach(undef); |
656 fAnnotation .foreach(undef); | |
657 } | 649 } |
658 | 650 |
659 template <typename Map, typename T> | 651 template <typename Map, typename T> |
660 ID define(Map* map, const T& v) { | 652 ID define(Map* map, const T& v) { |
661 if (const ID* id = map->find(v)) { | 653 if (const ID* id = map->find(v)) { |
662 return *id; | 654 return *id; |
663 } | 655 } |
664 ID id = fWrapped->define(v); | 656 ID id = fWrapped->define(v); |
665 map->set(v, id); | 657 map->set(v, id); |
666 return id; | 658 return id; |
667 } | 659 } |
668 | 660 |
669 ID define(const SkMatrix& v) override { return this->define(&fMatrix
, v); } | 661 ID define(const SkMatrix& v) override { return this->define(&fMatrix
, v); } |
670 ID define(const Misc& v) override { return this->define(&fMisc
, v); } | 662 ID define(const Misc& v) override { return this->define(&fMisc
, v); } |
671 ID define(const SkPath& v) override { return this->define(&fPath
, v); } | 663 ID define(const SkPath& v) override { return this->define(&fPath
, v); } |
672 ID define(const Stroke& v) override { return this->define(&fStroke
, v); } | 664 ID define(const Stroke& v) override { return this->define(&fStroke
, v); } |
673 ID define(const SkTextBlob* v) override { return this->define(&fTextBlob
, v); } | 665 ID define(const SkTextBlob* v) override { return this->define(&fTextBlob
, v); } |
674 ID define(SkPathEffect* v) override { return this->define(&fPathEffe
ct , v); } | 666 ID define(SkPathEffect* v) override { return this->define(&fPathEffe
ct , v); } |
675 ID define(SkShader* v) override { return this->define(&fShader
, v); } | 667 ID define(SkShader* v) override { return this->define(&fShader
, v); } |
676 ID define(SkXfermode* v) override { return this->define(&fXfermode
, v); } | 668 ID define(SkXfermode* v) override { return this->define(&fXfermode
, v); } |
677 ID define(SkMaskFilter* v) override { return this->define(&fMaskFilt
er , v); } | 669 ID define(SkMaskFilter* v) override { return this->define(&fMaskFilt
er , v); } |
678 ID define(SkColorFilter* v) override { return this->define(&fColorFil
ter, v); } | 670 ID define(SkColorFilter* v) override { return this->define(&fColorFil
ter, v); } |
679 ID define(SkRasterizer* v) override { return this->define(&fRasteriz
er , v); } | 671 ID define(SkRasterizer* v) override { return this->define(&fRasteriz
er , v); } |
680 ID define(SkDrawLooper* v) override { return this->define(&fDrawLoop
er , v); } | 672 ID define(SkDrawLooper* v) override { return this->define(&fDrawLoop
er , v); } |
681 ID define(SkImageFilter* v) override { return this->define(&fImageFil
ter, v); } | 673 ID define(SkImageFilter* v) override { return this->define(&fImageFil
ter, v); } |
682 ID define(SkAnnotation* v) override { return this->define(&fAnnotati
on , v); } | |
683 | 674 |
684 void undefine(ID) override {} | 675 void undefine(ID) override {} |
685 | 676 |
686 void save() override { fWrapped-> save(); } | 677 void save() override { fWrapped-> save(); } |
687 void restore() override { fWrapped->restore(); } | 678 void restore() override { fWrapped->restore(); } |
688 void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveLayerFlags fla
gs) override { | 679 void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveLayerFlags fla
gs) override { |
689 fWrapped->saveLayer(bounds, common, flags); | 680 fWrapped->saveLayer(bounds, common, flags); |
690 } | 681 } |
691 | 682 |
692 void setMatrix(ID matrix) override { fWrapped->setMatrix(matrix); } | 683 void setMatrix(ID matrix) override { fWrapped->setMatrix(matrix); } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 SkTHashMap<Stroke, ID> fStroke; | 733 SkTHashMap<Stroke, ID> fStroke; |
743 RefKeyMap<const SkTextBlob, Type::kTextBlob > fTextBlob; | 734 RefKeyMap<const SkTextBlob, Type::kTextBlob > fTextBlob; |
744 RefKeyMap<SkPathEffect , Type::kPathEffect > fPathEffect; | 735 RefKeyMap<SkPathEffect , Type::kPathEffect > fPathEffect; |
745 RefKeyMap<SkShader , Type::kShader > fShader; | 736 RefKeyMap<SkShader , Type::kShader > fShader; |
746 RefKeyMap<SkXfermode , Type::kXfermode > fXfermode; | 737 RefKeyMap<SkXfermode , Type::kXfermode > fXfermode; |
747 RefKeyMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; | 738 RefKeyMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter; |
748 RefKeyMap<SkColorFilter , Type::kColorFilter> fColorFilter; | 739 RefKeyMap<SkColorFilter , Type::kColorFilter> fColorFilter; |
749 RefKeyMap<SkRasterizer , Type::kRasterizer > fRasterizer; | 740 RefKeyMap<SkRasterizer , Type::kRasterizer > fRasterizer; |
750 RefKeyMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; | 741 RefKeyMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper; |
751 RefKeyMap<SkImageFilter , Type::kImageFilter> fImageFilter; | 742 RefKeyMap<SkImageFilter , Type::kImageFilter> fImageFilter; |
752 RefKeyMap<SkAnnotation , Type::kAnnotation > fAnnotation; | |
753 | 743 |
754 Encoder* fWrapped; | 744 Encoder* fWrapped; |
755 }; | 745 }; |
756 | 746 |
757 Encoder* NewCachingEncoder(Encoder* wrapped) { return new CachingEncoder(wra
pped); } | 747 Encoder* NewCachingEncoder(Encoder* wrapped) { return new CachingEncoder(wra
pped); } |
758 | 748 |
759 } // namespace SkRemote | 749 } // namespace SkRemote |
OLD | NEW |