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