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