OLD | NEW |
(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 |
OLD | NEW |