aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/imagefiltersbase.cpp1
-rw-r--r--include/core/SkBlendMode.h2
-rw-r--r--include/core/SkBlurTypes.h2
-rw-r--r--include/core/SkColorFilter.h18
-rw-r--r--include/core/SkColorSpace.h12
-rw-r--r--include/core/SkCoverageMode.h2
-rw-r--r--include/core/SkDeque.h2
-rw-r--r--include/core/SkDrawLooper.h16
-rw-r--r--include/core/SkDrawable.h16
-rw-r--r--include/core/SkFilterQuality.h2
-rw-r--r--include/core/SkFlattenable.h55
-rw-r--r--include/core/SkFontLCDConfig.h4
-rw-r--r--include/core/SkImageFilter.h19
-rw-r--r--include/core/SkMaskFilter.h16
-rw-r--r--include/core/SkPathEffect.h20
-rw-r--r--include/effects/Sk1DPathEffect.h7
-rw-r--r--include/effects/Sk2DPathEffect.h13
-rw-r--r--include/effects/SkAlphaThresholdFilter.h2
-rw-r--r--include/effects/SkArithmeticImageFilter.h2
-rw-r--r--include/effects/SkColorFilterImageFilter.h6
-rw-r--r--include/effects/SkComposeImageFilter.h7
-rw-r--r--include/effects/SkCornerPathEffect.h6
-rw-r--r--include/effects/SkDiscretePathEffect.h7
-rw-r--r--include/effects/SkDisplacementMapEffect.h7
-rw-r--r--include/effects/SkDropShadowImageFilter.h6
-rw-r--r--include/effects/SkGradientShader.h2
-rw-r--r--include/effects/SkHighContrastFilter.h3
-rw-r--r--include/effects/SkImageSource.h6
-rw-r--r--include/effects/SkLightingImageFilter.h2
-rw-r--r--include/effects/SkLumaColorFilter.h8
-rw-r--r--include/effects/SkMagnifierImageFilter.h6
-rw-r--r--include/effects/SkMatrixConvolutionImageFilter.h7
-rw-r--r--include/effects/SkMergeImageFilter.h6
-rw-r--r--include/effects/SkMorphologyImageFilter.h11
-rw-r--r--include/effects/SkOffsetImageFilter.h6
-rw-r--r--include/effects/SkOverdrawColorFilter.h2
-rw-r--r--include/effects/SkPaintImageFilter.h6
-rw-r--r--include/effects/SkPerlinNoiseShader.h2
-rw-r--r--include/effects/SkPictureImageFilter.h6
-rw-r--r--include/effects/SkTableColorFilter.h2
-rw-r--r--include/effects/SkTileImageFilter.h6
-rw-r--r--include/effects/SkToSRGBColorFilter.h6
-rw-r--r--include/effects/SkXfermodeImageFilter.h2
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.h5
-rw-r--r--src/core/SkFlattenablePriv.h69
-rw-r--r--src/core/SkGlobalInitialization_core.cpp2
-rw-r--r--src/core/SkLocalMatrixImageFilter.h6
-rw-r--r--src/core/SkMatrixImageFilter.h7
-rw-r--r--src/core/SkModeColorFilter.h7
-rw-r--r--src/effects/SkColorFilterImageFilter.cpp1
-rw-r--r--src/effects/SkDashImpl.h6
-rw-r--r--src/effects/SkDashPathEffect.cpp1
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp1
-rw-r--r--src/effects/SkDropShadowImageFilter.cpp1
-rw-r--r--src/effects/SkEmbossMaskFilter.h1
-rw-r--r--src/effects/SkLightingImageFilter.cpp1
-rw-r--r--src/effects/SkMagnifierImageFilter.cpp1
-rw-r--r--src/effects/SkMatrixConvolutionImageFilter.cpp1
-rw-r--r--src/effects/SkMergeImageFilter.cpp1
-rw-r--r--src/effects/SkMorphologyImageFilter.cpp1
-rw-r--r--src/effects/SkOffsetImageFilter.cpp1
-rw-r--r--src/effects/SkPictureImageFilter.cpp1
-rw-r--r--src/effects/SkTileImageFilter.cpp1
-rw-r--r--src/effects/SkTrimPE.h1
-rw-r--r--src/effects/SkXfermodeImageFilter.cpp1
-rw-r--r--src/shaders/SkShaderBase.h1
-rw-r--r--src/shaders/gradients/SkGradientShader.cpp1
-rw-r--r--src/utils/SkShadowUtils.cpp1
-rw-r--r--tests/CanvasTest.cpp2
-rw-r--r--tests/QuickRejectTest.cpp1
-rw-r--r--tools/bookmaker/bookmaker.h1
-rw-r--r--tools/bookmaker/includeParser.cpp1
-rw-r--r--tools/bookmaker/includeWriter.cpp2
-rw-r--r--tools/bookmaker/parserCommon.cpp7
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)) {