clean up flattenable macro cruft
I'm finding it easier to reason about the code without most of these
macros, but SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY still looks useful.
Adding flattenable:: to CreateProc helps enforce that we pass the
correct type name. The name is not currently used, but I'd like to.
Change-Id: I87c77eb6020fb3ae4696d8f73d09de62fd814875
Reviewed-on: https://skia-review.googlesource.com/c/163840
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 5bc7006..1b0b9c2 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -274,8 +274,8 @@
#include "SkModeColorFilter.h"
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkComposeColorFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSRGBGammaColorFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+void SkColorFilter::InitializeFlattenables() {
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkComposeColorFilter)
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter)
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSRGBGammaColorFilter)
+}
diff --git a/src/core/SkFlattenablePriv.h b/src/core/SkFlattenablePriv.h
index 381de93..a5228fe 100644
--- a/src/core/SkFlattenablePriv.h
+++ b/src/core/SkFlattenablePriv.h
@@ -22,48 +22,18 @@
* 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, \
+#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()));\
- }
-
+#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 flattenable::CreateProc; }
#endif
diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp
index 470f984..dfd6a55 100644
--- a/src/core/SkMaskFilter.cpp
+++ b/src/core/SkMaskFilter.cpp
@@ -631,7 +631,7 @@
SkMask::Format getFormat() const override { return as_MFB(fFilter)->getFormat(); }
- SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixMF)
+ SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixMF)
protected:
#if SK_SUPPORT_GPU
diff --git a/src/core/SkNormalSource.cpp b/src/core/SkNormalSource.cpp
index ad1f5a3..54f77f4 100644
--- a/src/core/SkNormalSource.cpp
+++ b/src/core/SkNormalSource.cpp
@@ -12,11 +12,8 @@
// Generating vtable
SkNormalSource::~SkNormalSource() {}
-////////////////////////////////////////////////////////////////////////////
+void SkNormalSource::InitializeFlattenables() {
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkNormalMapSourceImpl)
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkNormalFlatSourceImpl)
+}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkNormalSource)
-SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkNormalMapSourceImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkNormalFlatSourceImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
-
-////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkNormalSource.h b/src/core/SkNormalSource.h
index 7339890..639c4c1 100644
--- a/src/core/SkNormalSource.h
+++ b/src/core/SkNormalSource.h
@@ -68,8 +68,15 @@
*/
static sk_sp<SkNormalSource> MakeFlat();
- SK_DEFINE_FLATTENABLE_TYPE(SkNormalSource)
- SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
+ static Type GetFlattenableType() { return kSkNormalSource_Type; }
+ Type getFlattenableType() const override { return GetFlattenableType(); }
+
+ static sk_sp<SkNormalSource> Deserialize(const void* data, size_t size,
+ const SkDeserialProcs* procs = nullptr) {
+ return sk_sp<SkNormalSource>(static_cast<SkNormalSource*>(
+ SkFlattenable::Deserialize(GetFlattenableType(), data, size, procs).release()));
+ }
+ static void InitializeFlattenables();
};
#endif
diff --git a/src/core/SkPathEffect.cpp b/src/core/SkPathEffect.cpp
index ef0a473..7d75627 100644
--- a/src/core/SkPathEffect.cpp
+++ b/src/core/SkPathEffect.cpp
@@ -197,7 +197,7 @@
return SkComposePathEffect::Make(std::move(outer), std::move(inner));
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkPathEffect)
+void SkPathEffect::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkComposePathEffect)
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSumPathEffect)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp
index 5fe01c6..ef863e9 100644
--- a/src/effects/SkHighContrastFilter.cpp
+++ b/src/effects/SkHighContrastFilter.cpp
@@ -151,9 +151,9 @@
return sk_make_sp<SkHighContrast_Filter>(config);
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkHighContrastFilter)
+void SkHighContrastFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkHighContrast_Filter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
#if SK_SUPPORT_GPU
class HighContrastFilterEffect : public GrFragmentProcessor {
diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp
index 12c9921..8f1b333 100644
--- a/src/effects/SkOverdrawColorFilter.cpp
+++ b/src/effects/SkOverdrawColorFilter.cpp
@@ -83,9 +83,9 @@
return SkOverdrawColorFilter::Make(colors);
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkOverdrawColorFilter)
+void SkOverdrawColorFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkOverdrawColorFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
#if SK_SUPPORT_GPU
std::unique_ptr<GrFragmentProcessor> SkOverdrawColorFilter::asFragmentProcessor(
diff --git a/src/effects/SkShaderMaskFilter.cpp b/src/effects/SkShaderMaskFilter.cpp
index f2160a1..05940ec 100644
--- a/src/effects/SkShaderMaskFilter.cpp
+++ b/src/effects/SkShaderMaskFilter.cpp
@@ -128,6 +128,6 @@
return shader ? sk_sp<SkMaskFilter>(new SkShaderMF(std::move(shader))) : nullptr;
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkShaderMaskFilter)
+void SkShaderMaskFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkShaderMF)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index d12a070..7e3ad48 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -473,6 +473,6 @@
return sk_make_sp<SkTable_ColorFilter>(tableA, tableR, tableG, tableB);
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter)
+void SkTableColorFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/effects/imagefilters/SkAlphaThresholdFilter.cpp b/src/effects/imagefilters/SkAlphaThresholdFilter.cpp
index 4e2b0f4..9cababc 100644
--- a/src/effects/imagefilters/SkAlphaThresholdFilter.cpp
+++ b/src/effects/imagefilters/SkAlphaThresholdFilter.cpp
@@ -55,9 +55,9 @@
typedef SkImageFilter INHERITED;
};
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkAlphaThresholdFilter)
+void SkAlphaThresholdFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkAlphaThresholdFilterImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
static SkScalar pin_0_1(SkScalar x) {
return SkMinScalar(SkMaxScalar(x, 0), 1);
diff --git a/src/effects/imagefilters/SkArithmeticImageFilter.cpp b/src/effects/imagefilters/SkArithmeticImageFilter.cpp
index bd72e3a..29df301 100644
--- a/src/effects/imagefilters/SkArithmeticImageFilter.cpp
+++ b/src/effects/imagefilters/SkArithmeticImageFilter.cpp
@@ -471,6 +471,6 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkArithmeticImageFilter)
+void SkArithmeticImageFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(ArithmeticImageFilterImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/effects/imagefilters/SkBlurImageFilter.cpp b/src/effects/imagefilters/SkBlurImageFilter.cpp
index 8186448..053a208 100644
--- a/src/effects/imagefilters/SkBlurImageFilter.cpp
+++ b/src/effects/imagefilters/SkBlurImageFilter.cpp
@@ -66,9 +66,9 @@
SkBlurImageFilter::TileMode fTileMode;
};
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkImageFilter)
+void SkImageFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurImageFilterImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/effects/imagefilters/SkLightingImageFilter.cpp b/src/effects/imagefilters/SkLightingImageFilter.cpp
index 33d853a..e57504c 100644
--- a/src/effects/imagefilters/SkLightingImageFilter.cpp
+++ b/src/effects/imagefilters/SkLightingImageFilter.cpp
@@ -2190,7 +2190,7 @@
#endif
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
+void SkLightingImageFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/effects/imagefilters/SkXfermodeImageFilter.cpp b/src/effects/imagefilters/SkXfermodeImageFilter.cpp
index d7637f2..4246bae 100644
--- a/src/effects/imagefilters/SkXfermodeImageFilter.cpp
+++ b/src/effects/imagefilters/SkXfermodeImageFilter.cpp
@@ -370,7 +370,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermodeImageFilter)
+void SkXfermodeImageFilter::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkXfermodeImageFilter_Base)
// manually register the legacy serialized name "SkXfermodeImageFilter"
SkFlattenable::Register("SkXfermodeImageFilter", SkXfermodeImageFilter_Base::CreateProc,
@@ -380,4 +380,4 @@
SkFlattenable::Register("SkArithmeticImageFilter",
SkXfermodeImageFilter_Base::LegacyArithmeticCreateProc,
SkFlattenable::kSkImageFilter_Type);
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/shaders/SkColorShader.h b/src/shaders/SkColorShader.h
index e8625c0..1b29044 100644
--- a/src/shaders/SkColorShader.h
+++ b/src/shaders/SkColorShader.h
@@ -107,7 +107,7 @@
std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
#endif
- SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorShader)
+ SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColor4Shader)
protected:
SkColor4Shader(SkReadBuffer&);
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp
index 670b668..c200889 100644
--- a/src/shaders/SkImageShader.cpp
+++ b/src/shaders/SkImageShader.cpp
@@ -242,9 +242,9 @@
tmx, tmy, localMatrix);
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkShaderBase)
-SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkImageShader)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+void SkShaderBase::InitializeFlattenables() {
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkImageShader)
+}
bool SkImageShader::onAppendStages(const StageRec& rec) const {
SkRasterPipeline* p = rec.fPipeline;
diff --git a/src/shaders/SkLightingShader.cpp b/src/shaders/SkLightingShader.cpp
index f3019cd..73e40bb 100644
--- a/src/shaders/SkLightingShader.cpp
+++ b/src/shaders/SkLightingShader.cpp
@@ -496,8 +496,6 @@
///////////////////////////////////////////////////////////////////////////////
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader)
+void SkLightingShader::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
-
-///////////////////////////////////////////////////////////////////////////////
+}
diff --git a/src/shaders/SkLightingShader.h b/src/shaders/SkLightingShader.h
index 62c881c..f7e63b2 100644
--- a/src/shaders/SkLightingShader.h
+++ b/src/shaders/SkLightingShader.h
@@ -34,7 +34,7 @@
static sk_sp<SkShader> Make(sk_sp<SkShader> diffuseShader, sk_sp<SkNormalSource> normalSource,
sk_sp<SkLights> lights);
- SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
+ static void InitializeFlattenables();
};
#endif
diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp
index a5e9381..357df0a 100644
--- a/src/shaders/SkPerlinNoiseShader.cpp
+++ b/src/shaders/SkPerlinNoiseShader.cpp
@@ -1537,6 +1537,6 @@
nullptr));
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkPerlinNoiseShader)
+void SkPerlinNoiseShader::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPerlinNoiseShaderImpl)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}
diff --git a/src/shaders/SkShaderBase.h b/src/shaders/SkShaderBase.h
index 23e5ff4..b607cc8 100644
--- a/src/shaders/SkShaderBase.h
+++ b/src/shaders/SkShaderBase.h
@@ -197,8 +197,15 @@
return nullptr;
}
- SK_DEFINE_FLATTENABLE_TYPE(SkShaderBase)
- SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
+ static Type GetFlattenableType() { return kSkShaderBase_Type; }
+ Type getFlattenableType() const override { return GetFlattenableType(); }
+
+ static sk_sp<SkShaderBase> Deserialize(const void* data, size_t size,
+ const SkDeserialProcs* procs = nullptr) {
+ return sk_sp<SkShaderBase>(static_cast<SkShaderBase*>(
+ SkFlattenable::Deserialize(GetFlattenableType(), data, size, procs).release()));
+ }
+ static void InitializeFlattenables();
protected:
SkShaderBase(const SkMatrix* localMatrix = nullptr);
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index e5801de..9d00708 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -776,9 +776,9 @@
return sk_make_sp<SkSweepGradient>(SkPoint::Make(cx, cy), t0, t1, desc);
}
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkGradientShader)
+void SkGradientShader::InitializeFlattenables() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLinearGradient)
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkRadialGradient)
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSweepGradient)
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTwoPointConicalGradient)
-SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
+}