diff options
74 files changed, 359 insertions, 114 deletions
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp index 5432dee2a1..fc550fb8bc 100644 --- a/gm/imagefiltersbase.cpp +++ b/gm/imagefiltersbase.cpp @@ -10,6 +10,7 @@ #include "SkCanvas.h" #include "SkColorFilter.h" #include "SkColorPriv.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkShader.h" diff --git a/include/core/SkBlendMode.h b/include/core/SkBlendMode.h index 3f8f30c510..71378b9cb3 100644 --- a/include/core/SkBlendMode.h +++ b/include/core/SkBlendMode.h @@ -47,7 +47,7 @@ enum class SkBlendMode { kSaturation, kColor, kLuminosity, - kLastMode = kLuminosity + kLastMode = kLuminosity, }; /** diff --git a/include/core/SkBlurTypes.h b/include/core/SkBlurTypes.h index 1272643330..490beafc0c 100644 --- a/include/core/SkBlurTypes.h +++ b/include/core/SkBlurTypes.h @@ -16,7 +16,7 @@ enum SkBlurStyle { kOuter_SkBlurStyle, //!< nothing inside, fuzzy outside kInner_SkBlurStyle, //!< fuzzy inside, nothing outside - kLastEnum_SkBlurStyle = kInner_SkBlurStyle + kLastEnum_SkBlurStyle = kInner_SkBlurStyle, }; #endif diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h index e8b09bae9c..8d86ce20cb 100644 --- a/include/core/SkColorFilter.h +++ b/include/core/SkColorFilter.h @@ -140,8 +140,22 @@ public: virtual void toString(SkString* str) const = 0; - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() - SK_DEFINE_FLATTENABLE_TYPE(SkColorFilter) + static void InitializeFlattenables(); + + static SkFlattenable::Type GetFlattenableType() { + return kSkColorFilter_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkColorFilter_Type; + } + + static sk_sp<SkColorFilter> Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp<SkColorFilter>(static_cast<SkColorFilter*>( + SkFlattenable::Deserialize( + kSkColorFilter_Type, data, size, procs).release())); + } protected: SkColorFilter() {} diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h index 8b75ade467..251eeea040 100644 --- a/include/core/SkColorSpace.h +++ b/include/core/SkColorSpace.h @@ -25,10 +25,14 @@ enum SkGammaNamed { * Describes a color gamut with primaries and a white point. */ struct SK_API SkColorSpacePrimaries { - float fRX, fRY; - float fGX, fGY; - float fBX, fBY; - float fWX, fWY; + float fRX; + float fRY; + float fGX; + float fGY; + float fBX; + float fBY; + float fWX; + float fWY; /** * Convert primaries and a white point to a toXYZD50 matrix, the preferred color gamut diff --git a/include/core/SkCoverageMode.h b/include/core/SkCoverageMode.h index 2aa063fd61..856b767c28 100644 --- a/include/core/SkCoverageMode.h +++ b/include/core/SkCoverageMode.h @@ -24,7 +24,7 @@ enum class SkCoverageMode { kReverseDifference, // B - A B*(1-A) kXor, // A ⊕ B A+B-2*A*B - kLast = kXor + kLast = kXor, }; #endif diff --git a/include/core/SkDeque.h b/include/core/SkDeque.h index 0b3e37f3d0..a00e3c2dfe 100644 --- a/include/core/SkDeque.h +++ b/include/core/SkDeque.h @@ -66,7 +66,7 @@ public: public: enum IterStart { kFront_IterStart, - kBack_IterStart + kBack_IterStart, }; /** diff --git a/include/core/SkDrawLooper.h b/include/core/SkDrawLooper.h index 4280daa4a9..5a4fe78d4f 100644 --- a/include/core/SkDrawLooper.h +++ b/include/core/SkDrawLooper.h @@ -97,7 +97,21 @@ public: virtual bool asABlurShadow(BlurShadowRec*) const; virtual void toString(SkString* str) const = 0; - SK_DEFINE_FLATTENABLE_TYPE(SkDrawLooper) + + static SkFlattenable::Type GetFlattenableType() { + return kSkDrawLooper_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkDrawLooper_Type; + } + + static sk_sp<SkDrawLooper> Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp<SkDrawLooper>(static_cast<SkDrawLooper*>( + SkFlattenable::Deserialize( + kSkDrawLooper_Type, data, size, procs).release())); + } protected: sk_sp<SkDrawLooper> makeColorSpace(SkColorSpaceXformer* xformer) const { diff --git a/include/core/SkDrawable.h b/include/core/SkDrawable.h index b6beca910e..cf0264867e 100644 --- a/include/core/SkDrawable.h +++ b/include/core/SkDrawable.h @@ -60,7 +60,21 @@ public: */ void notifyDrawingChanged(); - SK_DEFINE_FLATTENABLE_TYPE(SkDrawable) + static SkFlattenable::Type GetFlattenableType() { + return kSkDrawable_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkDrawable_Type; + } + + static sk_sp<SkDrawable> Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp<SkDrawable>(static_cast<SkDrawable*>( + SkFlattenable::Deserialize( + kSkDrawable_Type, data, size, procs).release())); + } + Factory getFactory() const override { return nullptr; } protected: diff --git a/include/core/SkFilterQuality.h b/include/core/SkFilterQuality.h index 54fae51fe1..8f53258006 100644 --- a/include/core/SkFilterQuality.h +++ b/include/core/SkFilterQuality.h @@ -20,7 +20,7 @@ enum SkFilterQuality { kMedium_SkFilterQuality, //!< typically bilerp + mipmaps for down-scaling kHigh_SkFilterQuality, //!< slowest but highest quality, typically bicubic or better - kLast_SkFilterQuality = kHigh_SkFilterQuality + kLast_SkFilterQuality = kHigh_SkFilterQuality, }; #endif diff --git a/include/core/SkFlattenable.h b/include/core/SkFlattenable.h index ed343c82ae..19fabe4086 100644 --- a/include/core/SkFlattenable.h +++ b/include/core/SkFlattenable.h @@ -17,61 +17,6 @@ class SkWriteBuffer; struct SkSerialProcs; struct SkDeserialProcs; -/* - * Flattening is straight-forward: - * 1. call getFactory() so we have a function-ptr to recreate the subclass - * 2. call flatten(buffer) to write out enough data for the factory to read - * - * Unflattening is easy for the caller: new_instance = factory(buffer) - * - * The complexity of supporting this is as follows. - * - * If your subclass wants to control unflattening, use this macro in your declaration: - * SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS - * This will provide a getFactory(), and require that the subclass implements CreateProc. - * - * For older buffers (before the DEEPFLATTENING change, the macros below declare - * a thin factory DeepCreateProc. It checks the version of the buffer, and if it is pre-deep, - * then it calls through to a (usually protected) constructor, passing the buffer. - * If the buffer is newer, then it directly calls the "real" factory: CreateProc. - */ - -#define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenables(); - -#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ - void flattenable::InitializeFlattenables() { - -#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ - } - -#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ - SkFlattenable::Register(#flattenable, flattenable::CreateProc, \ - flattenable::GetFlattenableType()); - -#define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \ - private: \ - static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); \ - friend class SkFlattenable::PrivateInitializer; \ - public: \ - Factory getFactory() const override { return CreateProc; } - -/** For SkFlattenable derived objects with a valid type - This macro should only be used in base class objects in core - */ -#define SK_DEFINE_FLATTENABLE_TYPE(flattenable) \ - static Type GetFlattenableType() { \ - return k##flattenable##_Type; \ - } \ - Type getFlattenableType() const override { \ - return k##flattenable##_Type; \ - } \ - static sk_sp<flattenable> Deserialize(const void* data, size_t size, \ - const SkDeserialProcs* procs = nullptr) { \ - return sk_sp<flattenable>(static_cast<flattenable*>( \ - SkFlattenable::Deserialize( \ - k##flattenable##_Type, data, size, procs).release()));\ - } - /** \class SkFlattenable SkFlattenable is the base class for objects that need to be flattened diff --git a/include/core/SkFontLCDConfig.h b/include/core/SkFontLCDConfig.h index 58b5a82b9c..ec738f1d61 100644 --- a/include/core/SkFontLCDConfig.h +++ b/include/core/SkFontLCDConfig.h @@ -23,7 +23,7 @@ public: */ enum LCDOrientation { kHorizontal_LCDOrientation = 0, //!< this is the default - kVertical_LCDOrientation = 1 + kVertical_LCDOrientation = 1, }; /** @deprecated set on Device creation. */ @@ -46,7 +46,7 @@ public: enum LCDOrder { kRGB_LCDOrder = 0, //!< this is the default kBGR_LCDOrder = 1, - kNONE_LCDOrder = 2 + kNONE_LCDOrder = 2, }; /** @deprecated set on Device creation. */ diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h index 70f5513843..c95fc432cc 100644 --- a/include/core/SkImageFilter.h +++ b/include/core/SkImageFilter.h @@ -250,8 +250,23 @@ public: sk_sp<SkImageFilter> input); virtual void toString(SkString* str) const = 0; - SK_DEFINE_FLATTENABLE_TYPE(SkImageFilter) - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + + static void InitializeFlattenables(); + + static SkFlattenable::Type GetFlattenableType() { + return kSkImageFilter_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkImageFilter_Type; + } + + static sk_sp<SkImageFilter> Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp<SkImageFilter>(static_cast<SkImageFilter*>( + SkFlattenable::Deserialize( + kSkImageFilter_Type, data, size, procs).release())); + } protected: class Common { diff --git a/include/core/SkMaskFilter.h b/include/core/SkMaskFilter.h index bd2a20b825..8158e7a3eb 100644 --- a/include/core/SkMaskFilter.h +++ b/include/core/SkMaskFilter.h @@ -60,7 +60,21 @@ public: sk_sp<SkMaskFilter> makeWithMatrix(const SkMatrix&) const; virtual void toString(SkString* str) const = 0; - SK_DEFINE_FLATTENABLE_TYPE(SkMaskFilter) + + static SkFlattenable::Type GetFlattenableType() { + return kSkMaskFilter_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkMaskFilter_Type; + } + + static sk_sp<SkMaskFilter> Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp<SkMaskFilter>(static_cast<SkMaskFilter*>( + SkFlattenable::Deserialize( + kSkMaskFilter_Type, data, size, procs).release())); + } private: static void InitializeFlattenables(); diff --git a/include/core/SkPathEffect.h b/include/core/SkPathEffect.h index 97b48ea503..b734575299 100644 --- a/include/core/SkPathEffect.h +++ b/include/core/SkPathEffect.h @@ -146,15 +146,29 @@ public: virtual DashType asADash(DashInfo* info) const; virtual void toString(SkString* str) const = 0; - SK_DEFINE_FLATTENABLE_TYPE(SkPathEffect) + + static void InitializeFlattenables(); + + static SkFlattenable::Type GetFlattenableType() { + return kSkPathEffect_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkPathEffect_Type; + } + + static sk_sp<SkPathEffect> Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp<SkPathEffect>(static_cast<SkPathEffect*>( + SkFlattenable::Deserialize( + kSkPathEffect_Type, data, size, procs).release())); + } #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK /// Override for subclasses as appropriate. virtual bool exposedInAndroidJavaAPI() const { return false; } #endif - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() - protected: SkPathEffect() {} diff --git a/include/effects/Sk1DPathEffect.h b/include/effects/Sk1DPathEffect.h index 88a36ff7c6..a78aded601 100644 --- a/include/effects/Sk1DPathEffect.h +++ b/include/effects/Sk1DPathEffect.h @@ -8,6 +8,7 @@ #ifndef Sk1DPathEffect_DEFINED #define Sk1DPathEffect_DEFINED +#include "SkFlattenable.h" #include "SkPathEffect.h" #include "SkPath.h" @@ -62,7 +63,8 @@ public: SkStrokeRec*, const SkRect*) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath1DPathEffect) + + Factory getFactory() const override { return CreateProc; } protected: SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style); @@ -73,6 +75,9 @@ protected: SkScalar next(SkPath*, SkScalar, SkPathMeasure&) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkPath fPath; // copied from constructor SkScalar fAdvance; // copied from constructor SkScalar fInitialOffset; // computed from phase diff --git a/include/effects/Sk2DPathEffect.h b/include/effects/Sk2DPathEffect.h index 5ebadab0d5..841e5b8ab2 100644 --- a/include/effects/Sk2DPathEffect.h +++ b/include/effects/Sk2DPathEffect.h @@ -8,6 +8,7 @@ #ifndef Sk2DPathEffect_DEFINED #define Sk2DPathEffect_DEFINED +#include "SkFlattenable.h" #include "SkPath.h" #include "SkPathEffect.h" #include "SkMatrix.h" @@ -66,7 +67,8 @@ public: SkStrokeRec*, const SkRect*) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLine2DPathEffect) + + Factory getFactory() const override { return CreateProc; } protected: SkLine2DPathEffect(SkScalar width, const SkMatrix& matrix) @@ -78,6 +80,9 @@ protected: void nextSpan(int u, int v, int ucount, SkPath*) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkScalar fWidth; typedef Sk2DPathEffect INHERITED; @@ -94,7 +99,8 @@ public: } void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath2DPathEffect) + + Factory getFactory() const override { return CreateProc; } protected: SkPath2DPathEffect(const SkMatrix&, const SkPath&); @@ -103,6 +109,9 @@ protected: void next(const SkPoint&, int u, int v, SkPath*) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkPath fPath; typedef Sk2DPathEffect INHERITED; diff --git a/include/effects/SkAlphaThresholdFilter.h b/include/effects/SkAlphaThresholdFilter.h index 9bb69f004d..884efff389 100644 --- a/include/effects/SkAlphaThresholdFilter.h +++ b/include/effects/SkAlphaThresholdFilter.h @@ -26,7 +26,7 @@ public: const SkImageFilter::CropRect* cropRect = nullptr); - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP(); + static void InitializeFlattenables(); }; #endif diff --git a/include/effects/SkArithmeticImageFilter.h b/include/effects/SkArithmeticImageFilter.h index a8b7100abb..40b91e8fd6 100644 --- a/include/effects/SkArithmeticImageFilter.h +++ b/include/effects/SkArithmeticImageFilter.h @@ -17,7 +17,7 @@ public: sk_sp<SkImageFilter> foreground, const SkImageFilter::CropRect* cropRect); - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP(); + static void InitializeFlattenables(); private: SkArithmeticImageFilter(); // can't instantiate diff --git a/include/effects/SkColorFilterImageFilter.h b/include/effects/SkColorFilterImageFilter.h index 491a2b05b0..f422b0901a 100644 --- a/include/effects/SkColorFilterImageFilter.h +++ b/include/effects/SkColorFilterImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkColorFilterImageFilter_DEFINED #define SkColorFilterImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" class SkColorFilter; @@ -19,7 +20,8 @@ public: const CropRect* cropRect = nullptr); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorFilterImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -34,6 +36,8 @@ private: SkColorFilterImageFilter(sk_sp<SkColorFilter> cf, sk_sp<SkImageFilter> input, const CropRect* cropRect); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; sk_sp<SkColorFilter> fColorFilter; diff --git a/include/effects/SkComposeImageFilter.h b/include/effects/SkComposeImageFilter.h index 0bfb7d8c5c..7c86126638 100644 --- a/include/effects/SkComposeImageFilter.h +++ b/include/effects/SkComposeImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkComposeImageFilter_DEFINED #define SkComposeImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" class SK_API SkComposeImageFilter : public SkImageFilter { @@ -17,7 +18,8 @@ public: SkRect computeFastBounds(const SkRect& src) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: explicit SkComposeImageFilter(sk_sp<SkImageFilter> inputs[2]) : INHERITED(inputs, 2, nullptr) { @@ -32,6 +34,9 @@ protected: bool onCanHandleComplexCTM() const override { return true; } private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + typedef SkImageFilter INHERITED; }; diff --git a/include/effects/SkCornerPathEffect.h b/include/effects/SkCornerPathEffect.h index ac9401a7bc..0f052b880d 100644 --- a/include/effects/SkCornerPathEffect.h +++ b/include/effects/SkCornerPathEffect.h @@ -8,6 +8,7 @@ #ifndef SkCornerPathEffect_DEFINED #define SkCornerPathEffect_DEFINED +#include "SkFlattenable.h" #include "SkPathEffect.h" /** \class SkCornerPathEffect @@ -28,7 +29,8 @@ public: SkStrokeRec*, const SkRect*) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkCornerPathEffect) + + Factory getFactory() const override { return CreateProc; } #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK bool exposedInAndroidJavaAPI() const override { return true; } @@ -36,6 +38,8 @@ public: protected: ~SkCornerPathEffect() override; + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; explicit SkCornerPathEffect(SkScalar radius); void flatten(SkWriteBuffer&) const override; diff --git a/include/effects/SkDiscretePathEffect.h b/include/effects/SkDiscretePathEffect.h index eb2a994982..252e6de8a3 100644 --- a/include/effects/SkDiscretePathEffect.h +++ b/include/effects/SkDiscretePathEffect.h @@ -8,6 +8,7 @@ #ifndef SkDiscretePathEffect_DEFINED #define SkDiscretePathEffect_DEFINED +#include "SkFlattenable.h" #include "SkPathEffect.h" /** \class SkDiscretePathEffect @@ -35,7 +36,8 @@ public: SkStrokeRec*, const SkRect*) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiscretePathEffect) + + Factory getFactory() const override { return CreateProc; } #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK bool exposedInAndroidJavaAPI() const override { return true; } @@ -48,6 +50,9 @@ protected: void flatten(SkWriteBuffer&) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkScalar fSegLength, fPerterb; /* Caller-supplied 32 bit seed assist */ diff --git a/include/effects/SkDisplacementMapEffect.h b/include/effects/SkDisplacementMapEffect.h index daf03d742c..929086cabd 100644 --- a/include/effects/SkDisplacementMapEffect.h +++ b/include/effects/SkDisplacementMapEffect.h @@ -31,8 +31,6 @@ public: sk_sp<SkImageFilter> color, const CropRect* cropRect = nullptr); - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDisplacementMapEffect) - SkRect computeFastBounds(const SkRect& src) const override; virtual SkIRect onFilterBounds(const SkIRect& src, const SkMatrix& ctm, @@ -43,6 +41,8 @@ public: void toString(SkString* str) const override; + Factory getFactory() const override { return CreateProc; } + protected: sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&, SkIPoint* offset) const override; @@ -54,6 +54,9 @@ protected: void flatten(SkWriteBuffer&) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + ChannelSelectorType fXChannelSelector; ChannelSelectorType fYChannelSelector; SkScalar fScale; diff --git a/include/effects/SkDropShadowImageFilter.h b/include/effects/SkDropShadowImageFilter.h index d1ee44c168..e8c5740f9d 100644 --- a/include/effects/SkDropShadowImageFilter.h +++ b/include/effects/SkDropShadowImageFilter.h @@ -9,6 +9,7 @@ #define SkDropShadowImageFilter_DEFINED #include "SkColor.h" +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkScalar.h" @@ -30,7 +31,8 @@ public: SkRect computeFastBounds(const SkRect&) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDropShadowImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -44,6 +46,8 @@ private: SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY, SkColor, ShadowMode shadowMode, sk_sp<SkImageFilter> input, const CropRect* cropRect); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; SkScalar fDx, fDy, fSigmaX, fSigmaY; SkColor fColor; diff --git a/include/effects/SkGradientShader.h b/include/effects/SkGradientShader.h index 9821c4be82..278fc25735 100644 --- a/include/effects/SkGradientShader.h +++ b/include/effects/SkGradientShader.h @@ -224,7 +224,7 @@ public: return MakeSweep(cx, cy, colors, std::move(colorSpace), pos, count, 0, nullptr); } - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + static void InitializeFlattenables(); }; #endif diff --git a/include/effects/SkHighContrastFilter.h b/include/effects/SkHighContrastFilter.h index fd97c7d48d..ed33576bb4 100644 --- a/include/effects/SkHighContrastFilter.h +++ b/include/effects/SkHighContrastFilter.h @@ -72,12 +72,13 @@ struct SkHighContrastConfig { * not valid, e.g. if you try to call it with a contrast outside the range of * -1.0 to 1.0. */ + class SK_API SkHighContrastFilter { public: // Returns the filter, or nullptr if the config is invalid. static sk_sp<SkColorFilter> Make(const SkHighContrastConfig& config); - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + static void InitializeFlattenables(); }; #endif diff --git a/include/effects/SkImageSource.h b/include/effects/SkImageSource.h index 6ef855ab93..d25cb6dc36 100644 --- a/include/effects/SkImageSource.h +++ b/include/effects/SkImageSource.h @@ -8,6 +8,7 @@ #ifndef SkImageSource_DEFINED #define SkImageSource_DEFINED +#include "SkFlattenable.h" #include "SkImage.h" #include "SkImageFilter.h" @@ -22,7 +23,8 @@ public: SkRect computeFastBounds(const SkRect& src) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageSource) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -40,6 +42,8 @@ private: const SkRect& srcRect, const SkRect& dstRect, SkFilterQuality); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; sk_sp<SkImage> fImage; SkRect fSrcRect, fDstRect; diff --git a/include/effects/SkLightingImageFilter.h b/include/effects/SkLightingImageFilter.h index ce941bc124..5c25020637 100644 --- a/include/effects/SkLightingImageFilter.h +++ b/include/effects/SkLightingImageFilter.h @@ -39,7 +39,7 @@ public: SkScalar shininess, sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr); ~SkLightingImageFilter() override; - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + static void InitializeFlattenables(); protected: SkLightingImageFilter(sk_sp<SkImageFilterLight> light, diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h index bdf02d322e..14f2d4f773 100644 --- a/include/effects/SkLumaColorFilter.h +++ b/include/effects/SkLumaColorFilter.h @@ -24,6 +24,9 @@ class SkRasterPipeline; * C' = [ Lum * a, 0, 0, 0 ] * */ + + #include "SkFlattenable.h" + class SK_API SkLumaColorFilter : public SkColorFilter { public: static sk_sp<SkColorFilter> Make(); @@ -34,7 +37,8 @@ public: #endif void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLumaColorFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -43,6 +47,8 @@ private: SkLumaColorFilter(); void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool shaderIsOpaque) const override; + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; typedef SkColorFilter INHERITED; }; diff --git a/include/effects/SkMagnifierImageFilter.h b/include/effects/SkMagnifierImageFilter.h index dda4190322..382f62bc52 100644 --- a/include/effects/SkMagnifierImageFilter.h +++ b/include/effects/SkMagnifierImageFilter.h @@ -19,7 +19,8 @@ public: const CropRect* cropRect = nullptr); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMagnifierImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: SkMagnifierImageFilter(const SkRect& srcRect, @@ -33,6 +34,9 @@ protected: sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkRect fSrcRect; SkScalar fInset; diff --git a/include/effects/SkMatrixConvolutionImageFilter.h b/include/effects/SkMatrixConvolutionImageFilter.h index 5361fef928..cb4f087a75 100644 --- a/include/effects/SkMatrixConvolutionImageFilter.h +++ b/include/effects/SkMatrixConvolutionImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkMatrixConvolutionImageFilter_DEFINED #define SkMatrixConvolutionImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkScalar.h" #include "SkSize.h" @@ -68,7 +69,8 @@ public: const CropRect* cropRect = nullptr); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixConvolutionImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: SkMatrixConvolutionImageFilter(const SkISize& kernelSize, @@ -90,6 +92,9 @@ protected: bool affectsTransparentBlack() const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkISize fKernelSize; SkScalar* fKernel; SkScalar fGain; diff --git a/include/effects/SkMergeImageFilter.h b/include/effects/SkMergeImageFilter.h index b1a85d5c74..5fc6bcb010 100644 --- a/include/effects/SkMergeImageFilter.h +++ b/include/effects/SkMergeImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkMergeImageFilter_DEFINED #define SkMergeImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" class SK_API SkMergeImageFilter : public SkImageFilter { @@ -25,7 +26,8 @@ public: } void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -36,6 +38,8 @@ protected: private: SkMergeImageFilter(sk_sp<SkImageFilter>* const filters, int count, const CropRect* cropRect); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; typedef SkImageFilter INHERITED; }; diff --git a/include/effects/SkMorphologyImageFilter.h b/include/effects/SkMorphologyImageFilter.h index d88a31dc65..ceb4867a79 100644 --- a/include/effects/SkMorphologyImageFilter.h +++ b/include/effects/SkMorphologyImageFilter.h @@ -9,6 +9,7 @@ #define SkMorphologyImageFilter_DEFINED #include "SkColor.h" +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkSize.h" @@ -62,7 +63,8 @@ public: const CropRect* cropRect = nullptr); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: Op op() const override { return kDilate_Op; } @@ -72,6 +74,8 @@ private: sk_sp<SkImageFilter> input, const CropRect* cropRect) : INHERITED(radiusX, radiusY, input, cropRect) {} + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; typedef SkMorphologyImageFilter INHERITED; }; @@ -84,7 +88,8 @@ public: const CropRect* cropRect = nullptr); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: Op op() const override { return kErode_Op; } @@ -93,6 +98,8 @@ private: SkErodeImageFilter(int radiusX, int radiusY, sk_sp<SkImageFilter> input, const CropRect* cropRect) : INHERITED(radiusX, radiusY, input, cropRect) {} + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; typedef SkMorphologyImageFilter INHERITED; }; diff --git a/include/effects/SkOffsetImageFilter.h b/include/effects/SkOffsetImageFilter.h index 2d7b14f652..f352a76e07 100644 --- a/include/effects/SkOffsetImageFilter.h +++ b/include/effects/SkOffsetImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkOffsetImageFilter_DEFINED #define SkOffsetImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkPoint.h" @@ -20,7 +21,8 @@ public: SkRect computeFastBounds(const SkRect& src) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkOffsetImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -32,6 +34,8 @@ protected: private: SkOffsetImageFilter(SkScalar dx, SkScalar dy, sk_sp<SkImageFilter> input, const CropRect*); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; SkVector fOffset; diff --git a/include/effects/SkOverdrawColorFilter.h b/include/effects/SkOverdrawColorFilter.h index 63f636a0cc..33eb27fcc2 100644 --- a/include/effects/SkOverdrawColorFilter.h +++ b/include/effects/SkOverdrawColorFilter.h @@ -36,7 +36,7 @@ public: static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer); Factory getFactory() const override { return CreateProc; } - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + static void InitializeFlattenables(); protected: void flatten(SkWriteBuffer& buffer) const override; diff --git a/include/effects/SkPaintImageFilter.h b/include/effects/SkPaintImageFilter.h index b27c2624b1..bf7c51b50e 100644 --- a/include/effects/SkPaintImageFilter.h +++ b/include/effects/SkPaintImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkPaintImageFilter_DEFINED #define SkPaintImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkPaint.h" @@ -27,7 +28,8 @@ public: bool affectsTransparentBlack() const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPaintImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -37,6 +39,8 @@ protected: private: SkPaintImageFilter(const SkPaint& paint, const CropRect* rect); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; SkPaint fPaint; diff --git a/include/effects/SkPerlinNoiseShader.h b/include/effects/SkPerlinNoiseShader.h index 6b9bcd86d1..1623520cd6 100644 --- a/include/effects/SkPerlinNoiseShader.h +++ b/include/effects/SkPerlinNoiseShader.h @@ -51,7 +51,7 @@ public: static sk_sp<SkShader> MakeImprovedNoise(SkScalar baseFrequencyX, SkScalar baseFrequencyY, int numOctaves, SkScalar z); - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + static void InitializeFlattenables(); private: SkPerlinNoiseShader() = delete; diff --git a/include/effects/SkPictureImageFilter.h b/include/effects/SkPictureImageFilter.h index 1885cfe6ae..0cde3988c5 100644 --- a/include/effects/SkPictureImageFilter.h +++ b/include/effects/SkPictureImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkPictureImageFilter_DEFINED #define SkPictureImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkPicture.h" @@ -25,7 +26,8 @@ public: static sk_sp<SkImageFilter> Make(sk_sp<SkPicture> picture, const SkRect& cropRect); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: /* Constructs an SkPictureImageFilter object from an SkReadBuffer. @@ -42,6 +44,8 @@ protected: private: explicit SkPictureImageFilter(sk_sp<SkPicture> picture); SkPictureImageFilter(sk_sp<SkPicture> picture, const SkRect& cropRect, sk_sp<SkColorSpace>); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; sk_sp<SkPicture> fPicture; SkRect fCropRect; diff --git a/include/effects/SkTableColorFilter.h b/include/effects/SkTableColorFilter.h index 2695f42357..3989b5ac2d 100644 --- a/include/effects/SkTableColorFilter.h +++ b/include/effects/SkTableColorFilter.h @@ -36,7 +36,7 @@ public: const uint8_t tableG[256], const uint8_t tableB[256]); - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() + static void InitializeFlattenables(); }; #endif diff --git a/include/effects/SkTileImageFilter.h b/include/effects/SkTileImageFilter.h index f62d8a02d4..c2e38823d0 100644 --- a/include/effects/SkTileImageFilter.h +++ b/include/effects/SkTileImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkTileImageFilter_DEFINED #define SkTileImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" class SK_API SkTileImageFilter : public SkImageFilter { @@ -28,7 +29,8 @@ public: SkRect computeFastBounds(const SkRect& src) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTileImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer& buffer) const override; @@ -40,6 +42,8 @@ protected: private: SkTileImageFilter(const SkRect& srcRect, const SkRect& dstRect, sk_sp<SkImageFilter> input) : INHERITED(&input, 1, nullptr), fSrcRect(srcRect), fDstRect(dstRect) {} + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; SkRect fSrcRect; SkRect fDstRect; diff --git a/include/effects/SkToSRGBColorFilter.h b/include/effects/SkToSRGBColorFilter.h index 03bb37b172..797e9d81dc 100644 --- a/include/effects/SkToSRGBColorFilter.h +++ b/include/effects/SkToSRGBColorFilter.h @@ -8,6 +8,7 @@ #ifndef SkToSRGBColorFilter_DEFINED #define SkToSRGBColorFilter_DEFINED +#include "SkFlattenable.h" #include "SkColorFilter.h" #include "SkRefCnt.h" @@ -27,13 +28,16 @@ public: #endif void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkToSRGBColorFilter) + + Factory getFactory() const override { return CreateProc; } private: void flatten(SkWriteBuffer&) const override; SkToSRGBColorFilter(sk_sp<SkColorSpace>); void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool shaderIsOpaque) const override; + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; sk_sp<SkColorSpace> fSrcColorSpace; diff --git a/include/effects/SkXfermodeImageFilter.h b/include/effects/SkXfermodeImageFilter.h index e677813288..c403d2fbe6 100644 --- a/include/effects/SkXfermodeImageFilter.h +++ b/include/effects/SkXfermodeImageFilter.h @@ -25,7 +25,7 @@ public: return Make(mode, std::move(background), nullptr, nullptr); } - SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP(); + static void InitializeFlattenables(); private: SkXfermodeImageFilter(); // can't instantiate diff --git a/src/core/SkColorMatrixFilterRowMajor255.h b/src/core/SkColorMatrixFilterRowMajor255.h index 0260379ef9..8c774504e9 100644 --- a/src/core/SkColorMatrixFilterRowMajor255.h +++ b/src/core/SkColorMatrixFilterRowMajor255.h @@ -8,6 +8,7 @@ #ifndef SkColorMatrixFilter_DEFINED #define SkColorMatrixFilter_DEFINED +#include "SkFlattenable.h" #include "SkColorFilter.h" class SkColorMatrixFilterRowMajor255 : public SkColorFilter { @@ -29,7 +30,7 @@ public: void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter) + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -37,6 +38,8 @@ protected: private: void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool shaderIsOpaque) const override; + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; SkScalar fMatrix[20]; float fTranspose[20]; // for Sk4s diff --git a/src/core/SkFlattenablePriv.h b/src/core/SkFlattenablePriv.h new file mode 100644 index 0000000000..381de93b1e --- /dev/null +++ b/src/core/SkFlattenablePriv.h @@ -0,0 +1,69 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkFlattenablePriv_DEFINED +#define SkFlattenablePriv_DEFINED + +#include "SkFlattenable.h" + +/* + * Flattening is straight-forward: + * 1. call getFactory() so we have a function-ptr to recreate the subclass + * 2. call flatten(buffer) to write out enough data for the factory to read + * + * Unflattening is easy for the caller: new_instance = factory(buffer) + * + * The complexity of supporting this is as follows. + * + * If your subclass wants to control unflattening, use this macro in your declaration: + * SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS + * This will provide a getFactory(), and require that the subclass implements CreateProc. + * + * For older buffers (before the DEEPFLATTENING change, the macros below declare + * a thin factory DeepCreateProc. It checks the version of the buffer, and if it is pre-deep, + * then it calls through to a (usually protected) constructor, passing the buffer. + * If the buffer is newer, then it directly calls the "real" factory: CreateProc. + */ + +#define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenables(); + +#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ + void flattenable::InitializeFlattenables() { + +#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ + } + +#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ + SkFlattenable::Register(#flattenable, flattenable::CreateProc, \ + flattenable::GetFlattenableType()); + +#define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \ + private: \ + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); \ + friend class SkFlattenable::PrivateInitializer; \ + public: \ + Factory getFactory() const override { return CreateProc; } + +/** For SkFlattenable derived objects with a valid type + This macro should only be used in base class objects in core + */ +#define SK_DEFINE_FLATTENABLE_TYPE(flattenable) \ + static Type GetFlattenableType() { \ + return k##flattenable##_Type; \ + } \ + Type getFlattenableType() const override { \ + return k##flattenable##_Type; \ + } \ + static sk_sp<flattenable> Deserialize(const void* data, size_t size, \ + const SkDeserialProcs* procs = nullptr) { \ + return sk_sp<flattenable>(static_cast<flattenable*>( \ + SkFlattenable::Deserialize( \ + k##flattenable##_Type, data, size, procs).release()));\ + } + + +#endif diff --git a/src/core/SkGlobalInitialization_core.cpp b/src/core/SkGlobalInitialization_core.cpp index f4f2ec8cb7..cb4d1d0549 100644 --- a/src/core/SkGlobalInitialization_core.cpp +++ b/src/core/SkGlobalInitialization_core.cpp @@ -11,7 +11,7 @@ #include "SkColorShader.h" #include "SkComposeShader.h" #include "SkEmptyShader.h" -#include "SkFlattenable.h" +#include "SkFlattenablePriv.h" #include "SkImageShader.h" #include "SkLocalMatrixShader.h" #include "SkMatrixImageFilter.h" diff --git a/src/core/SkLocalMatrixImageFilter.h b/src/core/SkLocalMatrixImageFilter.h index 89a7e9d145..f4ca73c185 100644 --- a/src/core/SkLocalMatrixImageFilter.h +++ b/src/core/SkLocalMatrixImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkLocalMatrixImageFilter_DEFINED #define SkLocalMatrixImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" /** @@ -19,7 +20,8 @@ public: static sk_sp<SkImageFilter> Make(const SkMatrix& localM, sk_sp<SkImageFilter> input); void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: void flatten(SkWriteBuffer&) const override; @@ -31,6 +33,8 @@ protected: private: SkLocalMatrixImageFilter(const SkMatrix& localM, sk_sp<SkImageFilter> input); + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; SkMatrix fLocalM; diff --git a/src/core/SkMatrixImageFilter.h b/src/core/SkMatrixImageFilter.h index b43df9166d..32d4adc448 100644 --- a/src/core/SkMatrixImageFilter.h +++ b/src/core/SkMatrixImageFilter.h @@ -8,6 +8,7 @@ #ifndef SkMatrixImageFilter_DEFINED #define SkMatrixImageFilter_DEFINED +#include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkMatrix.h" @@ -32,7 +33,8 @@ public: SkRect computeFastBounds(const SkRect&) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixImageFilter) + + Factory getFactory() const override { return CreateProc; } protected: SkMatrixImageFilter(const SkMatrix& transform, @@ -47,6 +49,9 @@ protected: MapDirection, const SkIRect* inputRect) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkMatrix fTransform; SkFilterQuality fFilterQuality; typedef SkImageFilter INHERITED; diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h index a2a629f2c1..d2018e5cb9 100644 --- a/src/core/SkModeColorFilter.h +++ b/src/core/SkModeColorFilter.h @@ -6,6 +6,7 @@ */ #include "SkColorFilter.h" +#include "SkFlattenable.h" #ifndef SkModeColorFilter_DEFINED #define SkModeColorFilter_DEFINED @@ -24,11 +25,12 @@ public: void toString(SkString* str) const override; + Factory getFactory() const override { return CreateProc; } + #if SK_SUPPORT_GPU std::unique_ptr<GrFragmentProcessor> asFragmentProcessor( GrContext*, const GrColorSpaceInfo&) const override; #endif - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) protected: SkModeColorFilter(SkColor color, SkBlendMode mode); @@ -41,6 +43,9 @@ protected: sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkColor fColor; SkBlendMode fMode; // cache diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp index 514d04622e..845a26ac0f 100644 --- a/src/effects/SkColorFilterImageFilter.cpp +++ b/src/effects/SkColorFilterImageFilter.cpp @@ -10,6 +10,7 @@ #include "SkCanvas.h" #include "SkColorFilter.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/effects/SkDashImpl.h b/src/effects/SkDashImpl.h index f5c4244dc3..13ec155847 100644 --- a/src/effects/SkDashImpl.h +++ b/src/effects/SkDashImpl.h @@ -22,7 +22,8 @@ public: DashType asADash(DashInfo* info) const override; void toString(SkString* str) const override; - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDashImpl) + + Factory getFactory() const override { return CreateProc; } #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK bool exposedInAndroidJavaAPI() const override { return true; } @@ -33,6 +34,9 @@ protected: void flatten(SkWriteBuffer&) const override; private: + static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); + friend class SkFlattenable::PrivateInitializer; + SkScalar* fIntervals; int32_t fCount; SkScalar fPhase; diff --git a/src/effects/SkDashPathEffect.cpp b/src/effects/SkDashPathEffect.cpp index cdadcf907d..1a2c635a7f 100644 --- a/src/effects/SkDashPathEffect.cpp +++ b/src/effects/SkDashPathEffect.cpp @@ -8,6 +8,7 @@ #include "SkDashPathEffect.h" #include "SkDashImpl.h" #include "SkDashPathPriv.h" +#include "SkFlattenablePriv.h" #include "SkReadBuffer.h" #include "SkWriteBuffer.h" #include "SkStrokeRec.h" diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp index d40e521b0a..f1b704e1c8 100644 --- a/src/effects/SkDisplacementMapEffect.cpp +++ b/src/effects/SkDisplacementMapEffect.cpp @@ -9,6 +9,7 @@ #include "SkBitmap.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp index 7532894bce..1a0ce2ee6b 100644 --- a/src/effects/SkDropShadowImageFilter.cpp +++ b/src/effects/SkDropShadowImageFilter.cpp @@ -10,6 +10,7 @@ #include "SkBlurImageFilter.h" #include "SkCanvas.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/effects/SkEmbossMaskFilter.h b/src/effects/SkEmbossMaskFilter.h index bc992a09b5..67d068cdb7 100644 --- a/src/effects/SkEmbossMaskFilter.h +++ b/src/effects/SkEmbossMaskFilter.h @@ -8,6 +8,7 @@ #ifndef SkEmbossMaskFilter_DEFINED #define SkEmbossMaskFilter_DEFINED +#include "SkFlattenablePriv.h" #include "SkMaskFilterBase.h" /** \class SkEmbossMaskFilter diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index 0a1330583a..7c4f9b790d 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -9,6 +9,7 @@ #include "SkBitmap.h" #include "SkColorData.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkPoint3.h" #include "SkReadBuffer.h" diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp index 75e9817b8d..3a6679d2e3 100644 --- a/src/effects/SkMagnifierImageFilter.cpp +++ b/src/effects/SkMagnifierImageFilter.cpp @@ -10,6 +10,7 @@ #include "SkBitmap.h" #include "SkColorData.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp index 848676afaf..585103a008 100644 --- a/src/effects/SkMatrixConvolutionImageFilter.cpp +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp @@ -9,6 +9,7 @@ #include "SkBitmap.h" #include "SkColorData.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp index 41d545e187..debe332e84 100644 --- a/src/effects/SkMergeImageFilter.cpp +++ b/src/effects/SkMergeImageFilter.cpp @@ -9,6 +9,7 @@ #include "SkCanvas.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" #include "SkSpecialSurface.h" diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index e421fdd28a..9d87aa033b 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -10,6 +10,7 @@ #include "SkBitmap.h" #include "SkColorData.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkOpts.h" #include "SkReadBuffer.h" diff --git a/src/effects/SkOffsetImageFilter.cpp b/src/effects/SkOffsetImageFilter.cpp index 5b1533b371..19aa68ec2f 100644 --- a/src/effects/SkOffsetImageFilter.cpp +++ b/src/effects/SkOffsetImageFilter.cpp @@ -8,6 +8,7 @@ #include "SkOffsetImageFilter.h" #include "SkColorSpaceXformer.h" #include "SkCanvas.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkMatrix.h" #include "SkPaint.h" diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp index 93a494d1e7..66fea1fe3f 100644 --- a/src/effects/SkPictureImageFilter.cpp +++ b/src/effects/SkPictureImageFilter.cpp @@ -10,6 +10,7 @@ #include "SkCanvas.h" #include "SkColorSpaceXformCanvas.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageSource.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp index 1aac5814c5..f96af87a81 100644 --- a/src/effects/SkTileImageFilter.cpp +++ b/src/effects/SkTileImageFilter.cpp @@ -8,6 +8,7 @@ #include "SkTileImageFilter.h" #include "SkColorSpaceXformer.h" #include "SkCanvas.h" +#include "SkFlattenablePriv.h" #include "SkImage.h" #include "SkImageFilterPriv.h" #include "SkMatrix.h" diff --git a/src/effects/SkTrimPE.h b/src/effects/SkTrimPE.h index 7a05e72074..b7ed0c7c00 100644 --- a/src/effects/SkTrimPE.h +++ b/src/effects/SkTrimPE.h @@ -8,6 +8,7 @@ #ifndef SkTrimImpl_DEFINED #define SkTrimImpl_DEFINED +#include "SkFlattenablePriv.h" #include "SkPathEffect.h" #include "SkTrimPathEffect.h" diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp index 9123818c84..0aa33d9cc0 100644 --- a/src/effects/SkXfermodeImageFilter.cpp +++ b/src/effects/SkXfermodeImageFilter.cpp @@ -10,6 +10,7 @@ #include "SkCanvas.h" #include "SkColorData.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkImageFilterPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" diff --git a/src/shaders/SkShaderBase.h b/src/shaders/SkShaderBase.h index cddc5540ee..53ec0dc853 100644 --- a/src/shaders/SkShaderBase.h +++ b/src/shaders/SkShaderBase.h @@ -9,6 +9,7 @@ #define SkShaderBase_DEFINED #include "SkFilterQuality.h" +#include "SkFlattenablePriv.h" #include "SkMask.h" #include "SkMatrix.h" #include "SkShader.h" diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp index 78f514c1c6..a574b7d46d 100644 --- a/src/shaders/gradients/SkGradientShader.cpp +++ b/src/shaders/gradients/SkGradientShader.cpp @@ -9,6 +9,7 @@ #include "Sk4fLinearGradient.h" #include "SkColorSpace_XYZ.h" #include "SkColorSpaceXformer.h" +#include "SkFlattenablePriv.h" #include "SkFloatBits.h" #include "SkGradientBitmapCache.h" #include "SkGradientShaderPriv.h" diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp index 5049dd6f59..dfd5ba4886 100644 --- a/src/utils/SkShadowUtils.cpp +++ b/src/utils/SkShadowUtils.cpp @@ -12,6 +12,7 @@ #include "SkColorData.h" #include "SkDevice.h" #include "SkDrawShadowInfo.h" +#include "SkFlattenablePriv.h" #include "SkMaskFilter.h" #include "SkPath.h" #include "SkPM4f.h" diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp index aee1d405be..9f942d26c3 100644 --- a/tests/CanvasTest.cpp +++ b/tests/CanvasTest.cpp @@ -53,7 +53,7 @@ #include "SkClipOpPriv.h" #include "SkColor.h" #include "SkDocument.h" -#include "SkFlattenable.h" +#include "SkFlattenablePriv.h" #include "SkImageFilter.h" #include "SkImageInfo.h" #include "SkMalloc.h" diff --git a/tests/QuickRejectTest.cpp b/tests/QuickRejectTest.cpp index 103a31d936..d673ceb844 100644 --- a/tests/QuickRejectTest.cpp +++ b/tests/QuickRejectTest.cpp @@ -10,6 +10,7 @@ #include "SkCanvas.h" #include "SkColorSpaceXformer.h" #include "SkDrawLooper.h" +#include "SkFlattenablePriv.h" #include "SkLightingImageFilter.h" #include "SkPoint3.h" #include "SkTypes.h" diff --git a/tools/bookmaker/bookmaker.h b/tools/bookmaker/bookmaker.h index c755beec43..322aa4c446 100644 --- a/tools/bookmaker/bookmaker.h +++ b/tools/bookmaker/bookmaker.h @@ -76,6 +76,7 @@ enum class KeyWord { kUint32_t, kUint64_t, kUint8_t, + kUintPtr_t, kUnion, kUnsigned, kVoid, diff --git a/tools/bookmaker/includeParser.cpp b/tools/bookmaker/includeParser.cpp index ebc2384d61..12bd787eb8 100644 --- a/tools/bookmaker/includeParser.cpp +++ b/tools/bookmaker/includeParser.cpp @@ -50,6 +50,7 @@ const IncludeKey kKeyWords[] = { { "uint32_t", KeyWord::kUint32_t, KeyProperty::kNumber }, { "uint64_t", KeyWord::kUint64_t, KeyProperty::kNumber }, { "uint8_t", KeyWord::kUint8_t, KeyProperty::kNumber }, + { "uintptr_t", KeyWord::kUintPtr_t, KeyProperty::kNumber }, { "union", KeyWord::kUnion, KeyProperty::kObject }, { "unsigned", KeyWord::kUnsigned, KeyProperty::kNumber }, { "void", KeyWord::kVoid, KeyProperty::kNumber }, diff --git a/tools/bookmaker/includeWriter.cpp b/tools/bookmaker/includeWriter.cpp index b183a958ec..62e8205e3d 100644 --- a/tools/bookmaker/includeWriter.cpp +++ b/tools/bookmaker/includeWriter.cpp @@ -1018,6 +1018,7 @@ void IncludeWriter::structSizeMembers(const Definition& child) { case KeyWord::kUint16_t: case KeyWord::kUint32_t: case KeyWord::kUint64_t: + case KeyWord::kUintPtr_t: case KeyWord::kSize_t: case KeyWord::kFloat: case KeyWord::kBool: @@ -1502,6 +1503,7 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti case KeyWord::kUint16_t: case KeyWord::kUint32_t: case KeyWord::kUint64_t: + case KeyWord::kUintPtr_t: case KeyWord::kUnsigned: case KeyWord::kSize_t: case KeyWord::kFloat: diff --git a/tools/bookmaker/parserCommon.cpp b/tools/bookmaker/parserCommon.cpp index 0ce45dc1ff..3733aed366 100644 --- a/tools/bookmaker/parserCommon.cpp +++ b/tools/bookmaker/parserCommon.cpp @@ -23,6 +23,13 @@ bool ParserCommon::parseFile(const char* fileOrPath, const char* suffix, OneFile } else if (OneFile::kNo == oneFile) { SkOSFile::Iter it(fileOrPath, suffix); for (SkString file; it.next(&file); ) { + // FIXME: skip difficult file for now + if (string::npos != string(file.c_str()).find("SkFontArguments")) { + continue; + } + if (string::npos != string(file.c_str()).find("SkFontStyle")) { + continue; + } SkString p = SkOSPath::Join(fileOrPath, file.c_str()); const char* hunk = p.c_str(); if (!SkStrEndsWith(hunk, suffix)) { |