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