| 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 |