| Index: src/core/SkRemote.cpp
|
| diff --git a/src/core/SkRemote.cpp b/src/core/SkRemote.cpp
|
| index 236a1a8c24098a7ca992bb3b01604c9c97dca1bd..1209be014c6f92ab90399c8b36285ee25b02cfe3 100644
|
| --- a/src/core/SkRemote.cpp
|
| +++ b/src/core/SkRemote.cpp
|
| @@ -20,6 +20,7 @@
|
| #include "SkRemote.h"
|
| #include "SkShader.h"
|
| #include "SkTHash.h"
|
| +#include "SkTextBlob.h"
|
|
|
| namespace SkRemote {
|
|
|
| @@ -358,6 +359,22 @@ namespace SkRemote {
|
| }
|
| }
|
|
|
| + void onDrawTextBlob(const SkTextBlob* text,
|
| + SkScalar x,
|
| + SkScalar y,
|
| + const SkPaint& paint) override {
|
| + SkPoint offset{x,y};
|
| + auto t = this->id(text);
|
| + auto common = this->commonIDs(paint);
|
| +
|
| + if (paint.getStyle() == SkPaint::kFill_Style) {
|
| + fEncoder->fillText(t, offset, common);
|
| + } else {
|
| + // TODO: handle kStrokeAndFill_Style
|
| + fEncoder->strokeText(t, offset, common, this->id(Stroke::CreateFrom(paint)));
|
| + }
|
| + }
|
| +
|
| void onDrawText(const void* text, size_t byteLength,
|
| SkScalar x, SkScalar y, const SkPaint& paint) override {
|
| // Text-as-paths is a temporary hack.
|
| @@ -432,19 +449,20 @@ namespace SkRemote {
|
| }
|
|
|
| #define O override
|
| - ID define(const SkMatrix& v) O {return this->define(Type::kMatrix, &fMatrix, v);}
|
| - ID define(const Misc& v) O {return this->define(Type::kMisc, &fMisc, v);}
|
| - ID define(const SkPath& v) O {return this->define(Type::kPath, &fPath, v);}
|
| - ID define(const Stroke& v) O {return this->define(Type::kStroke, &fStroke, v);}
|
| - ID define(SkPathEffect* v) O {return this->define(Type::kPathEffect, &fPathEffect, v);}
|
| - ID define(SkShader* v) O {return this->define(Type::kShader, &fShader, v);}
|
| - ID define(SkXfermode* v) O {return this->define(Type::kXfermode, &fXfermode, v);}
|
| - ID define(SkMaskFilter* v) O {return this->define(Type::kMaskFilter, &fMaskFilter, v);}
|
| - ID define(SkColorFilter* v) O {return this->define(Type::kColorFilter, &fColorFilter, v);}
|
| - ID define(SkRasterizer* v) O {return this->define(Type::kRasterizer, &fRasterizer, v);}
|
| - ID define(SkDrawLooper* v) O {return this->define(Type::kDrawLooper, &fDrawLooper, v);}
|
| - ID define(SkImageFilter* v) O {return this->define(Type::kImageFilter, &fImageFilter, v);}
|
| - ID define(SkAnnotation* v) O {return this->define(Type::kAnnotation, &fAnnotation, v);}
|
| + ID define(const SkMatrix& v)O{return this->define(Type::kMatrix, &fMatrix, v);}
|
| + ID define(const Misc& v)O{return this->define(Type::kMisc, &fMisc, v);}
|
| + ID define(const SkPath& v)O{return this->define(Type::kPath, &fPath, v);}
|
| + ID define(const Stroke& v)O{return this->define(Type::kStroke, &fStroke, v);}
|
| + ID define(const SkTextBlob* v)O{return this->define(Type::kTextBlob, &fTextBlob, v);}
|
| + ID define(SkPathEffect* v)O{return this->define(Type::kPathEffect, &fPathEffect, v);}
|
| + ID define(SkShader* v)O{return this->define(Type::kShader, &fShader, v);}
|
| + ID define(SkXfermode* v)O{return this->define(Type::kXfermode, &fXfermode, v);}
|
| + ID define(SkMaskFilter* v)O{return this->define(Type::kMaskFilter, &fMaskFilter, v);}
|
| + ID define(SkColorFilter* v)O{return this->define(Type::kColorFilter, &fColorFilter, v);}
|
| + ID define(SkRasterizer* v)O{return this->define(Type::kRasterizer, &fRasterizer, v);}
|
| + ID define(SkDrawLooper* v)O{return this->define(Type::kDrawLooper, &fDrawLooper, v);}
|
| + ID define(SkImageFilter* v)O{return this->define(Type::kImageFilter, &fImageFilter, v);}
|
| + ID define(SkAnnotation* v)O{return this->define(Type::kAnnotation, &fAnnotation, v);}
|
| #undef O
|
|
|
|
|
| @@ -454,6 +472,7 @@ namespace SkRemote {
|
| case Type::kMisc: return fMisc .remove(id);
|
| case Type::kPath: return fPath .remove(id);
|
| case Type::kStroke: return fStroke .remove(id);
|
| + case Type::kTextBlob: return fTextBlob .remove(id);
|
| case Type::kPathEffect: return fPathEffect .remove(id);
|
| case Type::kShader: return fShader .remove(id);
|
| case Type::kXfermode: return fXfermode .remove(id);
|
| @@ -506,6 +525,18 @@ namespace SkRemote {
|
| fStroke.find(stroke).applyTo(&paint);
|
| fCanvas->drawPath(fPath.find(path), paint);
|
| }
|
| + void fillText(ID text, SkPoint offset, CommonIDs common) override {
|
| + SkPaint paint;
|
| + paint.setStyle(SkPaint::kFill_Style);
|
| + this->applyCommon(common, &paint);
|
| + fCanvas->drawTextBlob(fTextBlob.find(text), offset.x(), offset.y(), paint);
|
| + }
|
| + void strokeText(ID text, SkPoint offset, CommonIDs common, ID stroke) override {
|
| + SkPaint paint;
|
| + this->applyCommon(common, &paint);
|
| + fStroke.find(stroke).applyTo(&paint);
|
| + fCanvas->drawTextBlob(fTextBlob.find(text), offset.x(), offset.y(), paint);
|
| + }
|
|
|
| // Maps ID -> T.
|
| template <typename T, Type kType>
|
| @@ -572,19 +603,20 @@ namespace SkRemote {
|
| };
|
|
|
|
|
| - IDMap<SkMatrix , Type::kMatrix > fMatrix;
|
| - IDMap<Misc , Type::kMisc > fMisc;
|
| - IDMap<SkPath , Type::kPath > fPath;
|
| - IDMap<Stroke , Type::kStroke > fStroke;
|
| - ReffedIDMap<SkPathEffect , Type::kPathEffect > fPathEffect;
|
| - ReffedIDMap<SkShader , Type::kShader > fShader;
|
| - ReffedIDMap<SkXfermode , Type::kXfermode > fXfermode;
|
| - ReffedIDMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter;
|
| - ReffedIDMap<SkColorFilter, Type::kColorFilter> fColorFilter;
|
| - ReffedIDMap<SkRasterizer , Type::kRasterizer > fRasterizer;
|
| - ReffedIDMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper;
|
| - ReffedIDMap<SkImageFilter, Type::kImageFilter> fImageFilter;
|
| - ReffedIDMap<SkAnnotation , Type::kAnnotation > fAnnotation;
|
| + IDMap<SkMatrix , Type::kMatrix > fMatrix;
|
| + IDMap<Misc , Type::kMisc > fMisc;
|
| + IDMap<SkPath , Type::kPath > fPath;
|
| + IDMap<Stroke , Type::kStroke > fStroke;
|
| + ReffedIDMap<const SkTextBlob, Type::kTextBlob > fTextBlob;
|
| + ReffedIDMap<SkPathEffect , Type::kPathEffect > fPathEffect;
|
| + ReffedIDMap<SkShader , Type::kShader > fShader;
|
| + ReffedIDMap<SkXfermode , Type::kXfermode > fXfermode;
|
| + ReffedIDMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter;
|
| + ReffedIDMap<SkColorFilter , Type::kColorFilter> fColorFilter;
|
| + ReffedIDMap<SkRasterizer , Type::kRasterizer > fRasterizer;
|
| + ReffedIDMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper;
|
| + ReffedIDMap<SkImageFilter , Type::kImageFilter> fImageFilter;
|
| + ReffedIDMap<SkAnnotation , Type::kAnnotation > fAnnotation;
|
|
|
| SkCanvas* fCanvas;
|
| uint64_t fNextID = 0;
|
| @@ -610,8 +642,9 @@ namespace SkRemote {
|
| fMatrix .foreach(undef);
|
| fMisc .foreach(undef);
|
| fPath .foreach(undef);
|
| - fPathEffect .foreach(undef);
|
| fStroke .foreach(undef);
|
| + fTextBlob .foreach(undef);
|
| + fPathEffect .foreach(undef);
|
| fShader .foreach(undef);
|
| fXfermode .foreach(undef);
|
| fMaskFilter .foreach(undef);
|
| @@ -632,19 +665,20 @@ namespace SkRemote {
|
| return id;
|
| }
|
|
|
| - ID define(const SkMatrix& v) override { return this->define(&fMatrix , v); }
|
| - ID define(const Misc& v) override { return this->define(&fMisc , v); }
|
| - ID define(const SkPath& v) override { return this->define(&fPath , v); }
|
| - ID define(const Stroke& v) override { return this->define(&fStroke , v); }
|
| - ID define(SkPathEffect* v) override { return this->define(&fPathEffect , v); }
|
| - ID define(SkShader* v) override { return this->define(&fShader , v); }
|
| - ID define(SkXfermode* v) override { return this->define(&fXfermode , v); }
|
| - ID define(SkMaskFilter* v) override { return this->define(&fMaskFilter , v); }
|
| - ID define(SkColorFilter* v) override { return this->define(&fColorFilter, v); }
|
| - ID define(SkRasterizer* v) override { return this->define(&fRasterizer , v); }
|
| - ID define(SkDrawLooper* v) override { return this->define(&fDrawLooper , v); }
|
| - ID define(SkImageFilter* v) override { return this->define(&fImageFilter, v); }
|
| - ID define(SkAnnotation* v) override { return this->define(&fAnnotation , v); }
|
| + ID define(const SkMatrix& v) override { return this->define(&fMatrix , v); }
|
| + ID define(const Misc& v) override { return this->define(&fMisc , v); }
|
| + ID define(const SkPath& v) override { return this->define(&fPath , v); }
|
| + ID define(const Stroke& v) override { return this->define(&fStroke , v); }
|
| + ID define(const SkTextBlob* v) override { return this->define(&fTextBlob , v); }
|
| + ID define(SkPathEffect* v) override { return this->define(&fPathEffect , v); }
|
| + ID define(SkShader* v) override { return this->define(&fShader , v); }
|
| + ID define(SkXfermode* v) override { return this->define(&fXfermode , v); }
|
| + ID define(SkMaskFilter* v) override { return this->define(&fMaskFilter , v); }
|
| + ID define(SkColorFilter* v) override { return this->define(&fColorFilter, v); }
|
| + ID define(SkRasterizer* v) override { return this->define(&fRasterizer , v); }
|
| + ID define(SkDrawLooper* v) override { return this->define(&fDrawLooper , v); }
|
| + ID define(SkImageFilter* v) override { return this->define(&fImageFilter, v); }
|
| + ID define(SkAnnotation* v) override { return this->define(&fAnnotation , v); }
|
|
|
| void undefine(ID) override {}
|
|
|
| @@ -665,6 +699,12 @@ namespace SkRemote {
|
| void strokePath(ID path, CommonIDs common, ID stroke) override {
|
| fWrapped->strokePath(path, common, stroke);
|
| }
|
| + void fillText(ID text, SkPoint offset, CommonIDs common) override {
|
| + fWrapped->fillText(text, offset, common);
|
| + }
|
| + void strokeText(ID text, SkPoint offset, CommonIDs common, ID stroke) override {
|
| + fWrapped->strokeText(text, offset, common, stroke);
|
| + }
|
|
|
| // Maps const T* -> ID, and refs the key.
|
| template <typename T, Type kType>
|
| @@ -695,19 +735,20 @@ namespace SkRemote {
|
| SkTHashMap<const T*, ID> fMap;
|
| };
|
|
|
| - SkTHashMap<SkMatrix, ID> fMatrix;
|
| - SkTHashMap<Misc, ID, MiscHash> fMisc;
|
| - SkTHashMap<SkPath, ID> fPath;
|
| - SkTHashMap<Stroke, ID> fStroke;
|
| - RefKeyMap<SkPathEffect , Type::kPathEffect > fPathEffect;
|
| - RefKeyMap<SkShader , Type::kShader > fShader;
|
| - RefKeyMap<SkXfermode , Type::kXfermode > fXfermode;
|
| - RefKeyMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter;
|
| - RefKeyMap<SkColorFilter, Type::kColorFilter> fColorFilter;
|
| - RefKeyMap<SkRasterizer , Type::kRasterizer > fRasterizer;
|
| - RefKeyMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper;
|
| - RefKeyMap<SkImageFilter, Type::kImageFilter> fImageFilter;
|
| - RefKeyMap<SkAnnotation , Type::kAnnotation > fAnnotation;
|
| + SkTHashMap<SkMatrix, ID> fMatrix;
|
| + SkTHashMap<Misc, ID, MiscHash> fMisc;
|
| + SkTHashMap<SkPath, ID> fPath;
|
| + SkTHashMap<Stroke, ID> fStroke;
|
| + RefKeyMap<const SkTextBlob, Type::kTextBlob > fTextBlob;
|
| + RefKeyMap<SkPathEffect , Type::kPathEffect > fPathEffect;
|
| + RefKeyMap<SkShader , Type::kShader > fShader;
|
| + RefKeyMap<SkXfermode , Type::kXfermode > fXfermode;
|
| + RefKeyMap<SkMaskFilter , Type::kMaskFilter > fMaskFilter;
|
| + RefKeyMap<SkColorFilter , Type::kColorFilter> fColorFilter;
|
| + RefKeyMap<SkRasterizer , Type::kRasterizer > fRasterizer;
|
| + RefKeyMap<SkDrawLooper , Type::kDrawLooper > fDrawLooper;
|
| + RefKeyMap<SkImageFilter , Type::kImageFilter> fImageFilter;
|
| + RefKeyMap<SkAnnotation , Type::kAnnotation > fAnnotation;
|
|
|
| Encoder* fWrapped;
|
| };
|
|
|