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

Side by Side Diff: src/effects/SkFlattenableUtils.cpp

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Minor comment fixes 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "SkFlattenableUtils.h"
9 #include "Sk1DPathEffect.h"
10 #include "Sk2DPathEffect.h"
11 #include "SkAnnotation.h"
12 #include "SkArithmeticMode.h"
13 #include "SkAvoidXfermode.h"
14 #include "SkBicubicImageFilter.h"
15 #include "SkBitmapProcShader.h"
16 #include "SkBitmapSource.h"
17 #include "SkBlurDrawLooper.h"
18 #include "SkBlurImageFilter.h"
19 #include "SkBlurMaskFilter.h"
20 #include "SkColorFilterImageFilter.h"
21 #include "SkColorMatrixFilter.h"
22 #include "SkColorShader.h"
23 #include "SkColorTable.h"
24 #include "SkComposeImageFilter.h"
25 #include "SkComposeShader.h"
26 #include "SkCornerPathEffect.h"
27 #include "SkData.h"
28 #include "SkDataSet.h"
29 #include "SkDataTable.h"
30 #include "SkDiscretePathEffect.h"
31 #include "SkDisplacementMapEffect.h"
32 #include "SkDropShadowImageFilter.h"
33 #include "SkEmbossMaskFilter.h"
34 #include "SkEmptyShader.h"
35 #include "SkFilterShader.h"
36 #include "SkImageRef_GlobalPool.h"
37 #include "SkKernel33MaskFilter.h"
38 #include "SkLayerDrawLooper.h"
39 #include "SkLayerRasterizer.h"
40 #include "SkLerpXfermode.h"
41 #include "SkLightingImageFilter.h"
42 #include "SkLumaXfermode.h"
43 #include "SkMagnifierImageFilter.h"
44 #include "SkMallocPixelRef.h"
45 #include "SkMatrixConvolutionImageFilter.h"
46 #include "SkMergeImageFilter.h"
47 #include "SkMorphologyImageFilter.h"
48 #include "SkOffsetImageFilter.h"
49 #include "SkPathEffect.h"
50 #include "SkPerlinNoiseShader.h"
51 #include "SkPixelXorXfermode.h"
52 #include "SkRectShaderImageFilter.h"
53 #include "SkStippleMaskFilter.h"
54 #include "SkTableColorFilter.h"
55 #include "SkTableMaskFilter.h"
56 #include "SkTestImageFilters.h"
57 #include "SkTileImageFilter.h"
58 #include "SkTransparentShader.h"
59 #include "SkUnitMappers.h"
60 #include "SkXfermode.h"
61 #include "SkXfermodeImageFilter.h"
62 #include "gradients/SkLinearGradient.h"
63 #include "gradients/SkRadialGradient.h"
64 #include "gradients/SkSweepGradient.h"
65 #include "gradients/SkTwoPointConicalGradient.h"
66 #include "gradients/SkTwoPointRadialGradient.h"
67
68 namespace {
69
70 #define REGISTER_TYPE(type) \
71 typeFunctions[SkFlattenable::k##type##_Type] = \
72 TypeFunctions(type::CreateProc, type::IsA);
73 #define REGISTER_TYPE_BASE(type, base) \
74 typeFunctions[SkFlattenable::k##type##_Type] = TypeFunctions( \
75 base::GetFactory(SkFlattenable::k##type##_Type), \
76 base::GetTypeCheck(SkFlattenable::k##type##_Type));
77
78 struct TypeFunctions {
79 TypeFunctions() : fFactory(0), fTypeCheck(0) {}
80 TypeFunctions(SkFlattenable::Factory factory, SkFlattenable::TypeCheck typeC heck) :
81 fFactory(factory), fTypeCheck(typeCheck) {}
82 SkFlattenable::Factory fFactory;
83 SkFlattenable::TypeCheck fTypeCheck;
84 };
85
86 const TypeFunctions& GetFunctions(SkFlattenable::Type type) {
87 static TypeFunctions typeFunctions[SkFlattenable::kTypeCount];
88 static bool init = false;
89 if (!init) {
90 // None : nothing to do
91 // SkFlattenable : nothing to do
92 // SkLightingImageFilter : uninstantiatable - nothing to do
93 // BATShader : not implemented - TODO
94 // Sk3DShader : local to SkBlitter.cpp - TODO
95 // SkLumaMaskXfermodeSrcOver : local to SkLumaXfermode.cpp - TODO
96 // SkDataPixelRef : in image library - skip
97 // SkTriColorShader : not implemented - TODO
98
99 REGISTER_TYPE(Sk2DPathEffect);
100 REGISTER_TYPE(SkAnnotation);
101 REGISTER_TYPE(SkAvoidXfermode);
102 REGISTER_TYPE(SkBicubicImageFilter);
103 REGISTER_TYPE(SkBitmapProcShader);
104 REGISTER_TYPE(SkBitmapSource);
105 REGISTER_TYPE(SkBlurDrawLooper);
106 REGISTER_TYPE(SkBlurImageFilter);
107 REGISTER_TYPE(SkColorFilterImageFilter);
108 REGISTER_TYPE(SkColorMatrixFilter);
109 REGISTER_TYPE(SkColorShader);
110 REGISTER_TYPE(SkColorTable);
111 REGISTER_TYPE(SkComposeImageFilter);
112 REGISTER_TYPE(SkComposePathEffect);
113 REGISTER_TYPE(SkComposeShader);
114 REGISTER_TYPE(SkCornerPathEffect);
115 REGISTER_TYPE(SkCosineMapper);
116 REGISTER_TYPE(SkData);
117 REGISTER_TYPE(SkDataSet);
118 REGISTER_TYPE(SkDataTable);
119 REGISTER_TYPE(SkDilateImageFilter);
120 REGISTER_TYPE(SkDiscreteMapper);
121 REGISTER_TYPE(SkDiscretePathEffect);
122 REGISTER_TYPE(SkDisplacementMapEffect);
123 REGISTER_TYPE(SkDownSampleImageFilter);
124 REGISTER_TYPE(SkDropShadowImageFilter);
125 REGISTER_TYPE(SkEmbossMaskFilter);
126 REGISTER_TYPE(SkEmptyShader);
127 REGISTER_TYPE(SkErodeImageFilter);
128 REGISTER_TYPE(SkFilterShader);
129 REGISTER_TYPE(SkImageRef_GlobalPool);
130 REGISTER_TYPE(SkKernel33MaskFilter);
131 REGISTER_TYPE(SkLayerDrawLooper);
132 REGISTER_TYPE(SkLayerRasterizer);
133 REGISTER_TYPE(SkLerpXfermode);
134 REGISTER_TYPE(SkLinearGradient);
135 REGISTER_TYPE(SkLine2DPathEffect);
136 REGISTER_TYPE(SkLumaMaskXfermode);
137 REGISTER_TYPE(SkMagnifierImageFilter);
138 REGISTER_TYPE(SkMallocPixelRef);
139 REGISTER_TYPE(SkMatrixConvolutionImageFilter);
140 REGISTER_TYPE(SkMergeImageFilter);
141 REGISTER_TYPE(SkOffsetImageFilter);
142 REGISTER_TYPE(SkPath1DPathEffect);
143 REGISTER_TYPE(SkPath2DPathEffect);
144 REGISTER_TYPE(SkPerlinNoiseShader);
145 REGISTER_TYPE(SkPixelXorXfermode);
146 REGISTER_TYPE(SkProcXfermode);
147 REGISTER_TYPE(SkRadialGradient);
148 REGISTER_TYPE(SkRectShaderImageFilter);
149 REGISTER_TYPE(SkStippleMaskFilter);
150 REGISTER_TYPE(SkSumPathEffect);
151 REGISTER_TYPE(SkSweepGradient);
152 REGISTER_TYPE(SkTableMaskFilter);
153 REGISTER_TYPE(SkTileImageFilter);
154 REGISTER_TYPE(SkTransparentShader);
155 REGISTER_TYPE(SkTwoPointConicalGradient);
156 REGISTER_TYPE(SkTwoPointRadialGradient);
157 REGISTER_TYPE(SkXfermodeImageFilter);
158
159 REGISTER_TYPE_BASE(SkArithmeticMode_scalar, SkArithmeticMode);
160 REGISTER_TYPE_BASE(SkBlurMaskFilterImpl, SkBlurMaskFilter);
161 REGISTER_TYPE_BASE(SkLightingColorFilter, SkColorFilter);
162 REGISTER_TYPE_BASE(SkLightingColorFilter_JustAdd, SkColorFilter);
163 REGISTER_TYPE_BASE(SkLightingColorFilter_JustMul, SkColorFilter);
164 REGISTER_TYPE_BASE(SkLightingColorFilter_NoPin, SkColorFilter);
165 REGISTER_TYPE_BASE(SkLightingColorFilter_SingleMul, SkColorFilter);
166 REGISTER_TYPE_BASE(SkLightingColorFilter_JustAdd, SkColorFilter);
167 REGISTER_TYPE_BASE(SkModeColorFilter, SkColorFilter);
168 REGISTER_TYPE_BASE(Src_SkModeColorFilter, SkColorFilter);
169 REGISTER_TYPE_BASE(SrcOver_SkModeColorFilter, SkColorFilter);
170 REGISTER_TYPE_BASE(SkDiffuseLightingImageFilter, SkLightingImageFilte r);
171 REGISTER_TYPE_BASE(SkDistantLight, SkLightingImageFilte r);
172 REGISTER_TYPE_BASE(SkPointLight, SkLightingImageFilte r);
173 REGISTER_TYPE_BASE(SkSpecularLightingImageFilter, SkLightingImageFilte r);
174 REGISTER_TYPE_BASE(SkSpotLight, SkLightingImageFilte r);
175 REGISTER_TYPE_BASE(SkClearXfermode, SkProcXfermode);
176 REGISTER_TYPE_BASE(SkDstInXfermode, SkProcXfermode);
177 REGISTER_TYPE_BASE(SkDstOutXfermode, SkProcXfermode);
178 REGISTER_TYPE_BASE(SkProcCoeffXfermode, SkProcXfermode);
179 REGISTER_TYPE_BASE(SkSrcXfermode, SkProcXfermode);
180 REGISTER_TYPE_BASE(SkTable_ColorFilter, SkTableColorFilter);
181
182 init = true;
183 }
184 return typeFunctions[(type >= 0) && (type < SkFlattenable::kTypeCount) ?
185 type : SkFlattenable::kNone_Type];
186 }
187
188 } // end namespace
189
190 namespace SkFlattenableUtils {
191
192 // Returns the factory function required to create the given type
193 SkFlattenable::Factory TypeToFactory(SkFlattenable::Type type) {
194 return GetFunctions(type).fFactory;
195 }
196
197 // Checks if typeA is a typeB
198 bool TypeIsA(SkFlattenable::Type typeA, SkFlattenable::Type typeB) {
199 SkFlattenable::TypeCheck typeCheck = GetFunctions(typeA).fTypeCheck;
200 return typeCheck ? (*typeCheck)(typeB) : false;
201 }
202
203 } // end SkFlattenableUtils namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698