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

Side by Side Diff: include/core/SkFlattenable.h

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: New serialization method Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef SkFlattenable_DEFINED 10 #ifndef SkFlattenable_DEFINED
11 #define SkFlattenable_DEFINED 11 #define SkFlattenable_DEFINED
12 12
13 #include "SkRefCnt.h" 13 #include "SkRefCnt.h"
14 14
15 class SkFlattenableReadBuffer; 15 class SkFlattenableReadBuffer;
16 class SkFlattenableWriteBuffer; 16 class SkFlattenableWriteBuffer;
17 17
18 #define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 18 #define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \
19 SkFlattenable::Registrar(#flattenable, flattenable::CreateProc); 19 SkFlattenable::Registrar(#flattenable, flattenable::CreateProc);
20 20
21 #define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenab les(); 21 #define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenab les();
22 22
23 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ 23 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \
24 void flattenable::InitializeFlattenables() { 24 void flattenable::InitializeFlattenables() {
25 25
26 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ 26 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \
27 } 27 }
28 28
29 #define SK_DECLARE_UNFLATTENABLE_OBJECT() \ 29 #define SK_DECLARE_UNFLATTENABLE_OBJECT() \
30 virtual Factory getFactory() SK_OVERRIDE { return NULL; }; \ 30 virtual Factory getFactory() SK_OVERRIDE { return NULL; };
31 31
32 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \ 32 #define SK_DEFINE_FLATTENABLE_TYPE_FCNT(flattenable) \
mtklein 2013/09/24 22:52:18 OK, I give up. What's FCNT stand for / short for?
sugoi1 2013/09/25 21:15:27 Sorry, typo, I meant FNCT, as in function. The nam
33 static bool IsA(SkFlattenable::Type type) { \
34 return (flattenable::GetType() == type) || INHERITED::IsA(type); \
35 } \
36 virtual SkFlattenable::Type getFlattenableType() SK_OVERRIDE { \
37 return flattenable::GetType(); \
38 }
39
40 #define SK_DEFINE_FLATTENABLE_TYPE(flattenable) \
mtklein 2013/09/24 22:52:18 Normally I love macros which cleverly do things li
sugoi1 2013/09/25 21:15:27 I not against this, but I sort of like the fact th
41 static SkFlattenable::Type GetType() { \
42 return SkFlattenable::k##flattenable; \
43 } \
44 SK_DEFINE_FLATTENABLE_TYPE_FCNT(flattenable)
45
46 /** Only for SkFlattenable derived objects that have implementations hidden in a cpp file
47 */
48 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_UTILS() \
mtklein 2013/09/24 22:52:18 May SK_DECLARE_FLATTENABLE_DESERIALIZATION and SK_
sugoi1 2013/09/25 21:15:27 I didn't invent the PUBLIC name, it was there befo
49 static SkFlattenable::Factory GetFactory(SkFlattenable::Type); \
50 static SkFlattenable::TypeCheck GetTypeCheck(SkFlattenable::Type);
51
52 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION(flattenable) \
33 virtual Factory getFactory() SK_OVERRIDE { return CreateProc; } \ 53 virtual Factory getFactory() SK_OVERRIDE { return CreateProc; } \
34 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { \ 54 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { \
35 return SkNEW_ARGS(flattenable, (buffer)); \ 55 return SkNEW_ARGS(flattenable, (buffer)); \
36 } 56 }
37 57
58 /** For SkFlattenable derived objects defined within the skia library
59 */
60 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \
mtklein 2013/09/24 22:52:18 I think we'll be better off in the long term if we
sugoi1 2013/09/25 21:15:27 All right, I'll try to combine them into fewer mac
61 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION(flattenable) \
62 SK_DEFINE_FLATTENABLE_TYPE(flattenable)
63
64 /** For SkFlattenable derived objects defined outside of the skia (sample code, gms, etc).
65 Since these external object won't go through the ipc serialization, they are not given
66 a "Type" in the SkFlattenable::Type enum and there is no need to modify SkFl attenable.h
67 to add these derived classes. Note that the type is set to SkFlattenable::kN one here.
68 */
69 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS_EXTERN(flattenable) \
70 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION(flattenable) \
71 static SkFlattenable::Type GetType() { \
72 return SkFlattenable::kNone; \
73 } \
74 SK_DEFINE_FLATTENABLE_TYPE_FCNT(flattenable)
75
38 /** \class SkFlattenable 76 /** \class SkFlattenable
39 77
40 SkFlattenable is the base class for objects that need to be flattened 78 SkFlattenable is the base class for objects that need to be flattened
41 into a data stream for either transport or as part of the key to the 79 into a data stream for either transport or as part of the key to the
42 font cache. 80 font cache.
43 */ 81 */
44 class SK_API SkFlattenable : public SkRefCnt { 82 class SK_API SkFlattenable : public SkRefCnt {
45 public: 83 public:
84 enum Type {
mtklein 2013/09/24 22:52:18 Do you have any opinion on whether we want to limi
mtklein 2013/09/24 22:52:18 It'll help to add some comments here about how thi
sugoi1 2013/09/25 21:15:27 I don't see any reason to exclude types from it. T
sugoi1 2013/09/25 21:15:27 I added the comment about not reordering and a not
85 kNone,
mtklein 2013/09/24 22:52:18 Oh I so hate to ask you to do this, but you're goi
sugoi1 2013/09/25 21:15:27 No problem, that's easy enough.
86 kSkFlattenable,
87 kBATShader,
88 kSk2DPathEffect,
89 kSk3DShader,
90 kSkAnnotation,
91 kSkArithmeticMode_scalar,
92 kSkAvoidXfermode,
93 kSkBicubicImageFilter,
94 kSkBitmapProcShader,
95 kSkBitmapSource,
96 kSkBlurDrawLooper,
97 kSkBlurImageFilter,
98 kSkBlurMaskFilterImpl,
99 kSkClearXfermode,
100 kSkColorFilter,
101 kSkColorFilterImageFilter,
102 kSkColorMatrixFilter,
103 kSkColorShader,
104 kSkColorTable,
105 kSkComposeImageFilter,
106 kSkComposePathEffect,
107 kSkComposeShader,
108 kSkCornerPathEffect,
109 kSkCosineMapper,
110 kSkData,
111 kSkDataPixelRef,
112 kSkDataSet,
113 kSkDataTable,
114 kSkDiffuseLightingImageFilter,
115 kSkDilateImageFilter,
116 kSkDiscreteMapper,
117 kSkDiscretePathEffect,
118 kSkDisplacementMapEffect,
119 kSkDistantLight,
120 kSkDownSampleImageFilter,
121 kSkDrawLooper,
122 kSkDropShadowImageFilter,
123 kSkDstInXfermode,
124 kSkDstOutXfermode,
125 kSkEmbossMaskFilter,
126 kSkEmptyShader,
127 kSkErodeImageFilter,
128 kSkFilterShader,
129 kSkImageFilter,
130 kSkImageRef_GlobalPool,
131 kSkKernel33MaskFilter,
132 kSkLayerDrawLooper,
133 kSkLayerRasterizer,
134 kSkLerpXfermode,
135 kSkLight,
136 kSkLightingColorFilter,
137 kSkLightingColorFilter_JustAdd,
138 kSkLightingColorFilter_JustMul,
139 kSkLightingColorFilter_NoPin,
140 kSkLightingColorFilter_SingleMul,
141 kSkLinearGradient,
142 kSkLine2DPathEffect,
143 kSkLumaMaskXfermode,
144 kSkLumaMaskXfermodeSrcOver,
145 kSkMagnifierImageFilter,
146 kSkMallocPixelRef,
147 kSkMaskFilter,
148 kSkMatrixConvolutionImageFilter,
149 kSkMergeImageFilter,
150 kSkModeColorFilter,
151 kSkOffsetImageFilter,
152 kSkPathEffect,
153 kSkPath1DPathEffect,
154 kSkPath2DPathEffect,
155 kSkPerlinNoiseShader,
156 kSkPixelRef,
157 kSkPixelXorXfermode,
158 kSkPointLight,
159 kSkProcCoeffXfermode,
160 kSkProcXfermode,
161 kSkRadialGradient,
162 kSkRasterizer,
163 kSkRectShaderImageFilter,
164 kSkShader,
165 kSkSpecularLightingImageFilter,
166 kSkSpotLight,
167 kSkSrcXfermode,
168 kSkStippleMaskFilter,
169 kSkSumPathEffect,
170 kSkSweepGradient,
171 kSkTable_ColorFilter,
172 kSkTableMaskFilter,
173 kSkTransparentShader,
174 kSkTriColorShader,
175 kSkTwoPointConicalGradient,
176 kSkTwoPointRadialGradient,
177 kSkUnitMapper,
178 kSkXfermode,
179 kSkXfermodeImageFilter,
180 kSrc_SkModeColorFilter,
181 kSrcOver_SkModeColorFilter,
182 kTypeCount
183 };
mtklein 2013/09/24 22:52:18 Can you add a comment betwe kSrcOver_SkModeColorFi
sugoi1 2013/09/25 21:15:27 Done.
184
46 SK_DECLARE_INST_COUNT(SkFlattenable) 185 SK_DECLARE_INST_COUNT(SkFlattenable)
47 186
48 typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&); 187 typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&);
188 typedef bool (*TypeCheck)(SkFlattenable::Type);
49 189
50 SkFlattenable() {} 190 SkFlattenable() {}
51 191
52 /** Implement this to return a factory function pointer that can be called 192 /** Implement this to return a factory function pointer that can be called
53 to recreate your class given a buffer (previously written to by your 193 to recreate your class given a buffer (previously written to by your
54 override of flatten(). 194 override of flatten().
55 */ 195 */
56 virtual Factory getFactory() = 0; 196 virtual Factory getFactory() = 0;
57 197
58 static Factory NameToFactory(const char name[]); 198 static Factory NameToFactory(const char name[]);
59 static const char* FactoryToName(Factory); 199 static const char* FactoryToName(Factory);
60 static void Register(const char name[], Factory); 200 static void Register(const char name[], Factory);
61 201
202 /** Returns the class id
mtklein 2013/09/24 22:52:18 Let's flesh out this (and related comments): /**
sugoi1 2013/09/25 21:15:27 Done.
203 */
204 static SkFlattenable::Type GetType() {
205 return SkFlattenable::kSkFlattenable;
206 }
207
208 /** Returns the class id of an object
209 */
210 virtual SkFlattenable::Type getFlattenableType() = 0;
211
212 /** Returns whether the current object is of the given type
213 */
214 static bool IsA(SkFlattenable::Type type) {
215 return (GetType() == type);
216 }
217
218 /** Returns the factory function required to create the given type
219 */
220 static Factory TypeToFactory(Type type);
221
222 /** Checks if typeA is a typeB
223 * For example, if typeA is kSkImageFilter and typeB is kSkFlattenable, thi s would return true
224 * Inversely, if typeA is kSkFlattenable and typeB is kSkImageFilter, this would return false
225 */
226 static bool TypeIsA(SkFlattenable::Type typeA, SkFlattenable::Type typeB);
mtklein 2013/09/24 22:52:18 Does this need to be public?
sugoi1 2013/09/25 21:15:27 It needs to be accessible inside SkValidatingReadB
227
62 class Registrar { 228 class Registrar {
63 public: 229 public:
64 Registrar(const char name[], Factory factory) { 230 Registrar(const char name[], Factory factory) {
65 SkFlattenable::Register(name, factory); 231 SkFlattenable::Register(name, factory);
66 } 232 }
67 }; 233 };
68 234
69 protected: 235 protected:
70 SkFlattenable(SkFlattenableReadBuffer&) {} 236 SkFlattenable(SkFlattenableReadBuffer&) {}
71 /** Override this to write data specific to your subclass into the buffer, 237 /** Override this to write data specific to your subclass into the buffer,
72 being sure to call your super-class' version first. This data will later 238 being sure to call your super-class' version first. This data will later
73 be passed to your Factory function, returned by getFactory(). 239 be passed to your Factory function, returned by getFactory().
74 */ 240 */
75 virtual void flatten(SkFlattenableWriteBuffer&) const; 241 virtual void flatten(SkFlattenableWriteBuffer&) const;
76 242
77 private: 243 private:
78 static void InitializeFlattenables(); 244 static void InitializeFlattenables();
79 245
80 friend class SkGraphics; 246 friend class SkGraphics;
81 friend class SkFlattenableWriteBuffer; 247 friend class SkFlattenableWriteBuffer;
82 248
83 typedef SkRefCnt INHERITED; 249 typedef SkRefCnt INHERITED;
84 }; 250 };
85 251
86 #endif 252 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698