override getTypeName() instead of using table
This should let getTypeName() and serialization work even
when deserialization factories haven't been registered.
I've made getTypeName() pure virtual like getFactory(),
and moved all the overrides into SK_FLATTENABLE_HOOKS,
cleaning up all the various ways we've done it before.
All the subclasses override getTypeName() and getFactory()
privately, so there should be no need to document them?
Change-Id: I723cb20099d250c2f2a10be266e3aacc6a061937
Reviewed-on: https://skia-review.googlesource.com/c/163543
Reviewed-by: Cary Clark <caryclark@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/include/core/SkDrawable.h b/include/core/SkDrawable.h
index 34335a7..48cca6d 100644
--- a/include/core/SkDrawable.h
+++ b/include/core/SkDrawable.h
@@ -123,6 +123,7 @@
}
Factory getFactory() const override { return nullptr; }
+ const char* getTypeName() const override { return nullptr; }
protected:
SkDrawable();
diff --git a/include/core/SkFlattenable.h b/include/core/SkFlattenable.h
index eae0a97..2714436 100644
--- a/include/core/SkFlattenable.h
+++ b/include/core/SkFlattenable.h
@@ -52,21 +52,8 @@
/**
* Returns the name of the object's class.
- *
- * Subclasses should override this function if they intend to provide
- * support for flattening without using the global registry.
- *
- * If the flattenable is registered, there is no need to override.
*/
- virtual const char* getTypeName() const {
- #ifdef SK_DISABLE_READBUFFER
- // Should not be reachable by PathKit WebAssembly Code.
- SkASSERT(false);
- return nullptr;
- #else
- return FactoryToName(getFactory());
- #endif
- }
+ virtual const char* getTypeName() const = 0;
static Factory NameToFactory(const char name[]);
static const char* FactoryToName(Factory);
@@ -110,4 +97,15 @@
typedef SkRefCnt INHERITED;
};
+#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(type) \
+ SkFlattenable::Register(#type, \
+ type::CreateProc, \
+ type::GetFlattenableType());
+
+#define SK_FLATTENABLE_HOOKS(type) \
+ static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&); \
+ friend class SkFlattenable::PrivateInitializer; \
+ Factory getFactory() const override { return type::CreateProc; } \
+ const char* getTypeName() const override { return #type; }
+
#endif
diff --git a/include/effects/Sk1DPathEffect.h b/include/effects/Sk1DPathEffect.h
index bfaa896..b767ae5 100644
--- a/include/effects/Sk1DPathEffect.h
+++ b/include/effects/Sk1DPathEffect.h
@@ -58,8 +58,6 @@
*/
static sk_sp<SkPathEffect> Make(const SkPath& path, SkScalar advance, SkScalar phase, Style);
- Factory getFactory() const override { return CreateProc; }
-
protected:
SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style);
void flatten(SkWriteBuffer&) const override;
@@ -70,8 +68,7 @@
SkScalar next(SkPath*, SkScalar, SkPathMeasure&) const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkPath1DPathEffect)
SkPath fPath; // copied from constructor
SkScalar fAdvance; // copied from constructor
diff --git a/include/effects/Sk2DPathEffect.h b/include/effects/Sk2DPathEffect.h
index e29ce1e..5d7a208 100644
--- a/include/effects/Sk2DPathEffect.h
+++ b/include/effects/Sk2DPathEffect.h
@@ -60,8 +60,6 @@
}
- Factory getFactory() const override { return CreateProc; }
-
protected:
SkLine2DPathEffect(SkScalar width, const SkMatrix& matrix)
: Sk2DPathEffect(matrix), fWidth(width) {
@@ -73,8 +71,7 @@
void nextSpan(int u, int v, int ucount, SkPath*) const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkLine2DPathEffect)
SkScalar fWidth;
@@ -91,8 +88,6 @@
return sk_sp<SkPathEffect>(new SkPath2DPathEffect(matrix, path));
}
- Factory getFactory() const override { return CreateProc; }
-
protected:
SkPath2DPathEffect(const SkMatrix&, const SkPath&);
void flatten(SkWriteBuffer&) const override;
@@ -100,8 +95,7 @@
void next(const SkPoint&, int u, int v, SkPath*) const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkPath2DPathEffect)
SkPath fPath;
diff --git a/include/effects/SkColorFilterImageFilter.h b/include/effects/SkColorFilterImageFilter.h
index 8f83827..99be9ed 100644
--- a/include/effects/SkColorFilterImageFilter.h
+++ b/include/effects/SkColorFilterImageFilter.h
@@ -17,8 +17,6 @@
sk_sp<SkImageFilter> input,
const CropRect* cropRect = nullptr);
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
@@ -29,11 +27,11 @@
bool affectsTransparentBlack() const override;
private:
+ SK_FLATTENABLE_HOOKS(SkColorFilterImageFilter)
+
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 acde1d6..ab3ce63 100644
--- a/include/effects/SkComposeImageFilter.h
+++ b/include/effects/SkComposeImageFilter.h
@@ -17,8 +17,6 @@
SkRect computeFastBounds(const SkRect& src) const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
explicit SkComposeImageFilter(sk_sp<SkImageFilter> inputs[2]) : INHERITED(inputs, 2, nullptr) {
SkASSERT(inputs[0].get());
@@ -32,8 +30,7 @@
bool onCanHandleComplexCTM() const override { return true; }
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkComposeImageFilter)
typedef SkImageFilter INHERITED;
};
diff --git a/include/effects/SkCornerPathEffect.h b/include/effects/SkCornerPathEffect.h
index f35f32e..b4807f5 100644
--- a/include/effects/SkCornerPathEffect.h
+++ b/include/effects/SkCornerPathEffect.h
@@ -25,22 +25,20 @@
return radius > 0 ? sk_sp<SkPathEffect>(new SkCornerPathEffect(radius)) : nullptr;
}
- Factory getFactory() const override { return CreateProc; }
-
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
bool exposedInAndroidJavaAPI() const override { return true; }
#endif
protected:
~SkCornerPathEffect() override;
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
explicit SkCornerPathEffect(SkScalar radius);
void flatten(SkWriteBuffer&) const override;
bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkCornerPathEffect)
+
SkScalar fRadius;
typedef SkPathEffect INHERITED;
diff --git a/include/effects/SkDiscretePathEffect.h b/include/effects/SkDiscretePathEffect.h
index 99bfb3a..aa043db 100644
--- a/include/effects/SkDiscretePathEffect.h
+++ b/include/effects/SkDiscretePathEffect.h
@@ -32,8 +32,6 @@
*/
static sk_sp<SkPathEffect> Make(SkScalar segLength, SkScalar dev, uint32_t seedAssist = 0);
- Factory getFactory() const override { return CreateProc; }
-
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
bool exposedInAndroidJavaAPI() const override { return true; }
#endif
@@ -46,8 +44,7 @@
bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkDiscretePathEffect)
SkScalar fSegLength, fPerterb;
diff --git a/include/effects/SkDisplacementMapEffect.h b/include/effects/SkDisplacementMapEffect.h
index 1790e47..a5fd1bd 100644
--- a/include/effects/SkDisplacementMapEffect.h
+++ b/include/effects/SkDisplacementMapEffect.h
@@ -39,8 +39,6 @@
SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix& ctm,
MapDirection, const SkIRect* inputRect) const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
SkIPoint* offset) const override;
@@ -52,8 +50,7 @@
void flatten(SkWriteBuffer&) const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkDisplacementMapEffect)
ChannelSelectorType fXChannelSelector;
ChannelSelectorType fYChannelSelector;
diff --git a/include/effects/SkDropShadowImageFilter.h b/include/effects/SkDropShadowImageFilter.h
index c86550d..b28d244 100644
--- a/include/effects/SkDropShadowImageFilter.h
+++ b/include/effects/SkDropShadowImageFilter.h
@@ -31,8 +31,6 @@
SkRect computeFastBounds(const SkRect&) const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
@@ -42,11 +40,11 @@
MapDirection, const SkIRect* inputRect) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkDropShadowImageFilter)
+
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/SkImageSource.h b/include/effects/SkImageSource.h
index 11bc7ed..13aede1 100644
--- a/include/effects/SkImageSource.h
+++ b/include/effects/SkImageSource.h
@@ -22,8 +22,6 @@
SkRect computeFastBounds(const SkRect& src) const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
@@ -35,13 +33,13 @@
MapDirection, const SkIRect* inputRect) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkImageSource)
+
explicit SkImageSource(sk_sp<SkImage>);
SkImageSource(sk_sp<SkImage>,
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/SkLayerDrawLooper.h b/include/effects/SkLayerDrawLooper.h
index 18a9b93..b18b32c 100644
--- a/include/effects/SkLayerDrawLooper.h
+++ b/include/effects/SkLayerDrawLooper.h
@@ -75,9 +75,6 @@
bool asABlurShadow(BlurShadowRec* rec) const override;
- Factory getFactory() const override { return CreateProc; }
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer);
-
protected:
sk_sp<SkDrawLooper> onMakeColorSpace(SkColorSpaceXformer*) const override;
@@ -86,6 +83,8 @@
void flatten(SkWriteBuffer&) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkLayerDrawLooper)
+
struct Rec {
Rec* fNext;
SkPaint fPaint;
diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h
index 38886f8..500dae9 100644
--- a/include/effects/SkLumaColorFilter.h
+++ b/include/effects/SkLumaColorFilter.h
@@ -36,17 +36,15 @@
GrContext*, const GrColorSpaceInfo&) const override;
#endif
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkLumaColorFilter)
+
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 5a383dc..f060b48 100644
--- a/include/effects/SkMagnifierImageFilter.h
+++ b/include/effects/SkMagnifierImageFilter.h
@@ -18,8 +18,6 @@
sk_sp<SkImageFilter> input,
const CropRect* cropRect = nullptr);
- Factory getFactory() const override { return CreateProc; }
-
protected:
SkMagnifierImageFilter(const SkRect& srcRect,
SkScalar inset,
@@ -32,8 +30,7 @@
sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkMagnifierImageFilter)
SkRect fSrcRect;
SkScalar fInset;
diff --git a/include/effects/SkMatrixConvolutionImageFilter.h b/include/effects/SkMatrixConvolutionImageFilter.h
index ccee2fd..bde0863 100644
--- a/include/effects/SkMatrixConvolutionImageFilter.h
+++ b/include/effects/SkMatrixConvolutionImageFilter.h
@@ -68,8 +68,6 @@
sk_sp<SkImageFilter> input,
const CropRect* cropRect = nullptr);
- Factory getFactory() const override { return CreateProc; }
-
protected:
SkMatrixConvolutionImageFilter(const SkISize& kernelSize,
const SkScalar* kernel,
@@ -90,8 +88,7 @@
bool affectsTransparentBlack() const override;
private:
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
+ SK_FLATTENABLE_HOOKS(SkMatrixConvolutionImageFilter)
SkISize fKernelSize;
SkScalar* fKernel;
diff --git a/include/effects/SkMergeImageFilter.h b/include/effects/SkMergeImageFilter.h
index 978c07e..ed66596 100644
--- a/include/effects/SkMergeImageFilter.h
+++ b/include/effects/SkMergeImageFilter.h
@@ -25,8 +25,6 @@
return Make(array, 2, cropRect);
}
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
@@ -35,9 +33,9 @@
bool onCanHandleComplexCTM() const override { return true; }
private:
+ SK_FLATTENABLE_HOOKS(SkMergeImageFilter)
+
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 aa9edfd..5ed624f 100644
--- a/include/effects/SkMorphologyImageFilter.h
+++ b/include/effects/SkMorphologyImageFilter.h
@@ -62,18 +62,16 @@
sk_sp<SkImageFilter> input,
const CropRect* cropRect = nullptr);
- Factory getFactory() const override { return CreateProc; }
-
protected:
Op op() const override { return kDilate_Op; }
private:
+ SK_FLATTENABLE_HOOKS(SkDilateImageFilter)
+
SkDilateImageFilter(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;
};
@@ -85,17 +83,15 @@
sk_sp<SkImageFilter> input,
const CropRect* cropRect = nullptr);
- Factory getFactory() const override { return CreateProc; }
-
protected:
Op op() const override { return kErode_Op; }
private:
+ SK_FLATTENABLE_HOOKS(SkErodeImageFilter)
+
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 bbf19a9..e9a771c 100644
--- a/include/effects/SkOffsetImageFilter.h
+++ b/include/effects/SkOffsetImageFilter.h
@@ -20,8 +20,6 @@
SkRect computeFastBounds(const SkRect& src) const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
@@ -31,9 +29,9 @@
MapDirection, const SkIRect* inputRect) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkOffsetImageFilter)
+
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 37aa813..d678f26 100644
--- a/include/effects/SkOverdrawColorFilter.h
+++ b/include/effects/SkOverdrawColorFilter.h
@@ -32,14 +32,14 @@
GrContext*, const GrColorSpaceInfo&) const override;
#endif
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer);
- Factory getFactory() const override { return CreateProc; }
static void InitializeFlattenables();
protected:
void flatten(SkWriteBuffer& buffer) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkOverdrawColorFilter)
+
SkOverdrawColorFilter(const SkPMColor colors[kNumColors]) {
memcpy(fColors, colors, kNumColors * sizeof(SkPMColor));
}
diff --git a/include/effects/SkPaintImageFilter.h b/include/effects/SkPaintImageFilter.h
index 8765665..4b6772e 100644
--- a/include/effects/SkPaintImageFilter.h
+++ b/include/effects/SkPaintImageFilter.h
@@ -27,8 +27,6 @@
bool affectsTransparentBlack() const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer&) const override;
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
@@ -36,9 +34,9 @@
sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkPaintImageFilter)
+
SkPaintImageFilter(const SkPaint& paint, const CropRect* rect);
- static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
- friend class SkFlattenable::PrivateInitializer;
SkPaint fPaint;
diff --git a/include/effects/SkPictureImageFilter.h b/include/effects/SkPictureImageFilter.h
index f3011ad..a1a5b38 100644
--- a/include/effects/SkPictureImageFilter.h
+++ b/include/effects/SkPictureImageFilter.h
@@ -26,8 +26,6 @@
static sk_sp<SkImageFilter> Make(sk_sp<SkPicture> picture, const SkRect& cropRect);
- Factory getFactory() const override { return CreateProc; }
-
protected:
/* Constructs an SkPictureImageFilter object from an SkReadBuffer.
* Note: If the SkPictureImageFilter object construction requires bitmap
@@ -41,10 +39,10 @@
sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkPictureImageFilter)
+
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/SkTileImageFilter.h b/include/effects/SkTileImageFilter.h
index 2310da3..bcd2f5b 100644
--- a/include/effects/SkTileImageFilter.h
+++ b/include/effects/SkTileImageFilter.h
@@ -28,8 +28,6 @@
MapDirection, const SkIRect* inputRect) const override;
SkRect computeFastBounds(const SkRect& src) const override;
- Factory getFactory() const override { return CreateProc; }
-
protected:
void flatten(SkWriteBuffer& buffer) const override;
@@ -38,10 +36,10 @@
sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
private:
+ SK_FLATTENABLE_HOOKS(SkTileImageFilter)
+
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 20264aa..f577fb9 100644
--- a/include/effects/SkToSRGBColorFilter.h
+++ b/include/effects/SkToSRGBColorFilter.h
@@ -27,15 +27,13 @@
GrContext*, const GrColorSpaceInfo&) const override;
#endif
- Factory getFactory() const override { return CreateProc; }
-
private:
+ SK_FLATTENABLE_HOOKS(SkToSRGBColorFilter)
+
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;