| /* | |
| * Copyright 2015 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkRemote_DEFINED | |
| #define SkRemote_DEFINED | |
| #include "SkPaint.h" | |
| #include "SkRegion.h" | |
| #include "SkRemote_protocol.h" | |
| #include "SkTypes.h" | |
| class SkCanvas; | |
| class SkMatrix; | |
| class SkPath; | |
| class SkShader; | |
| class SkTextBlob; | |
| class SkXfermode; | |
| // TODO: document | |
| namespace SkRemote { | |
| // General purpose identifier. Holds a Type and a 56-bit value. | |
| class ID { | |
| public: | |
| ID() {} | |
| ID(Type type, uint64_t val) { | |
| fVal = (uint64_t)type << 56 | val; | |
| SkASSERT(this->type() == type && this->val() == val); | |
| } | |
| Type type() const { return (Type)(fVal >> 56); } | |
| uint64_t val() const { return fVal & ~((uint64_t)0xFF << 56); } | |
| bool operator==(ID o) const { return fVal == o.fVal; } | |
| private: | |
| uint64_t fVal; | |
| }; | |
| // Fields from SkPaint used by stroke, fill, and text draws. | |
| struct Misc { | |
| SkColor fColor; | |
| SkFilterQuality fFilterQuality; | |
| bool fAntiAlias, fDither; | |
| static Misc CreateFrom(const SkPaint&); | |
| void applyTo(SkPaint*) const; | |
| }; | |
| // Fields from SkPaint used by stroke draws only. | |
| struct Stroke { | |
| SkScalar fWidth, fMiter; | |
| SkPaint::Cap fCap; | |
| SkPaint::Join fJoin; | |
| static Stroke CreateFrom(const SkPaint&); | |
| void applyTo(SkPaint*) const; | |
| }; | |
| // TODO: document | |
| struct Encoder { | |
| virtual ~Encoder() {} | |
| virtual ID define(const SkMatrix&) = 0; | |
| virtual ID define(const Misc&) = 0; | |
| virtual ID define(const SkPath&) = 0; | |
| virtual ID define(const Stroke&) = 0; | |
| virtual ID define(const SkTextBlob*) = 0; | |
| virtual ID define(SkPathEffect*) = 0; | |
| virtual ID define(SkShader*) = 0; | |
| virtual ID define(SkXfermode*) = 0; | |
| virtual ID define(SkMaskFilter*) = 0; | |
| virtual ID define(SkColorFilter*) = 0; | |
| virtual ID define(SkRasterizer*) = 0; | |
| virtual ID define(SkDrawLooper*) = 0; | |
| virtual ID define(SkImageFilter*) = 0; | |
| virtual ID define(SkAnnotation*) = 0; | |
| virtual void undefine(ID) = 0; | |
| // TODO: do these all belong here in CommonIDs? | |
| struct CommonIDs { | |
| ID misc, patheffect, shader, xfermode, maskfilter, | |
| colorfilter, rasterizer, looper, imagefilter, annotation; | |
| }; | |
| virtual void save() = 0; | |
| virtual void restore() = 0; | |
| virtual void saveLayer(ID bounds, CommonIDs, uint32_t saveLayerFlags) = 0; | |
| virtual void setMatrix(ID matrix) = 0; | |
| virtual void clipPath(ID path, SkRegion::Op, bool aa) = 0; | |
| virtual void fillPath(ID path, CommonIDs) = 0; | |
| virtual void strokePath(ID path, CommonIDs, ID stroke) = 0; | |
| virtual void fillText(ID text, SkPoint, CommonIDs) = 0; | |
| virtual void strokeText(ID text, SkPoint, CommonIDs, ID stroke) = 0; | |
| }; | |
| // None of these factories take ownership of their arguments. | |
| // Returns a new SkCanvas that translates to the Encoder API. | |
| SkCanvas* NewCanvas(Encoder*); | |
| // Returns an Encoder that translates back to the SkCanvas API. | |
| Encoder* NewDecoder(SkCanvas*); | |
| // Wraps another Encoder with a cache. TODO: parameterize | |
| Encoder* NewCachingEncoder(Encoder*); | |
| } // namespace SkRemote | |
| #endif//SkRemote_DEFINED |