Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(319)

Unified Diff: include/core/SkFlattenable.h

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Integrating readFoo changes Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: include/core/SkFlattenable.h
diff --git a/include/core/SkFlattenable.h b/include/core/SkFlattenable.h
index 58e69fd416cb049b56d881942f6f77ebb676e93d..f398c81249507211605148ec8d060a16496f6f12 100644
--- a/include/core/SkFlattenable.h
+++ b/include/core/SkFlattenable.h
@@ -16,7 +16,7 @@ class SkFlattenableReadBuffer;
class SkFlattenableWriteBuffer;
#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \
- SkFlattenable::Registrar(#flattenable, flattenable::CreateProc);
+ SkFlattenable::Registrar(#flattenable, flattenable::CreateProc, flattenable::GetEffectType());
#define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenables();
@@ -35,6 +35,28 @@ class SkFlattenableWriteBuffer;
return SkNEW_ARGS(flattenable, (buffer)); \
}
+/** For SkFlattenable derived objects with a valid type
+ This macro should only be used in base class objects in core
+ */
+#define SK_DEFINE_FLATTENABLE_EFFECT_TYPE(flattenable) \
+ static SkEffectType GetEffectType() { \
+ return k##flattenable##_SkEffectType; \
+ }
+
+enum SkEffectType {
sugoi1 2013/10/16 15:05:32 I need this here for NameToType(), and so that all
+ kInvalid_SkEffectType,
reed1 2013/10/16 15:20:20 Hmmm, that might be the right way. I think sometim
sugoi1 2013/10/16 15:36:26 Done.
+ kColorFilter_SkEffectType,
+ kDrawLooper_SkEffectType,
+ kImageFilter_SkEffectType,
+ kMaskFilter_SkEffectType,
+ kPathEffect_SkEffectType,
+ kPixelRef_SkEffectType,
+ kRasterizer_SkEffectType,
+ kShader_SkEffectType,
+ kUnitMapper_SkEffectType,
+ kXfermode_SkEffectType,
+};
+
/** \class SkFlattenable
SkFlattenable is the base class for objects that need to be flattened
@@ -55,14 +77,20 @@ public:
*/
virtual Factory getFactory() = 0;
+ /** Returns the name of the object's class
+ */
+ const char* getTypeName() { return FactoryToName(getFactory()); }
+
static Factory NameToFactory(const char name[]);
static const char* FactoryToName(Factory);
- static void Register(const char name[], Factory);
+ static SkEffectType NameToType(const char name[]);
+
+ static void Register(const char name[], Factory, SkEffectType);
class Registrar {
public:
- Registrar(const char name[], Factory factory) {
- SkFlattenable::Register(name, factory);
+ Registrar(const char name[], Factory factory, SkEffectType type) {
+ SkFlattenable::Register(name, factory, type);
}
};
@@ -75,7 +103,7 @@ protected:
virtual void flatten(SkFlattenableWriteBuffer&) const;
private:
- static void InitializeFlattenables();
+ static void InitializeFlattenablesIfNeeded();
friend class SkGraphics;
friend class SkFlattenableWriteBuffer;

Powered by Google App Engine
This is Rietveld 408576698