Index: src/effects/SkColorFilters.cpp |
diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp |
index 41a201ef39559fc232e10319c3a9e65f20c39c8c..da9db9a84f185b89925e555780ed71936d0a2f01 100644 |
--- a/src/effects/SkColorFilters.cpp |
+++ b/src/effects/SkColorFilters.cpp |
@@ -13,6 +13,7 @@ |
#include "SkFlattenableBuffers.h" |
#include "SkUtils.h" |
#include "SkString.h" |
+#include "SkValidationUtils.h" |
#define ILLEGAL_XFERMODE_MODE ((SkXfermode::Mode)-1) |
@@ -98,6 +99,7 @@ protected: |
fColor = buffer.readColor(); |
fMode = (SkXfermode::Mode)buffer.readUInt(); |
this->updateCache(); |
+ buffer.validate(SkIsValidMode(fMode)); |
} |
private: |
@@ -534,6 +536,54 @@ SkColorFilter* SkColorFilter::CreateLightingFilter(SkColor mul, SkColor add) { |
return SkNEW_ARGS(SkLightingColorFilter, (mul, add)); |
} |
+SkFlattenable::Factory SkColorFilter::GetFactory(SkFlattenable::Type type) { |
+ switch(type) { |
+ case SkFlattenable::kSkLightingColorFilter_Type: |
+ return SkLightingColorFilter::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_JustAdd_Type: |
+ return SkLightingColorFilter_JustAdd::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_JustMul_Type: |
+ return SkLightingColorFilter_JustMul::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_NoPin_Type: |
+ return SkLightingColorFilter_NoPin::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_SingleMul_Type: |
+ return SkLightingColorFilter_SingleMul::CreateProc; |
+ case SkFlattenable::kSkModeColorFilter_Type: |
+ return SkModeColorFilter::CreateProc; |
+ case SkFlattenable::kSrc_SkModeColorFilter_Type: |
+ return Src_SkModeColorFilter::CreateProc; |
+ case SkFlattenable::kSrcOver_SkModeColorFilter_Type: |
+ return SrcOver_SkModeColorFilter::CreateProc; |
+ default: |
+ break; |
+ } |
+ return NULL; |
+} |
+ |
+SkFlattenable::TypeCheck SkColorFilter::GetTypeCheck(SkFlattenable::Type type) { |
+ switch(type) { |
+ case SkFlattenable::kSkLightingColorFilter_Type: |
+ return SkLightingColorFilter::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_JustAdd_Type: |
+ return SkLightingColorFilter_JustAdd::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_JustMul_Type: |
+ return SkLightingColorFilter_JustMul::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_NoPin_Type: |
+ return SkLightingColorFilter_NoPin::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_SingleMul_Type: |
+ return SkLightingColorFilter_SingleMul::IsA; |
+ case SkFlattenable::kSkModeColorFilter_Type: |
+ return SkModeColorFilter::IsA; |
+ case SkFlattenable::kSrc_SkModeColorFilter_Type: |
+ return Src_SkModeColorFilter::IsA; |
+ case SkFlattenable::kSrcOver_SkModeColorFilter_Type: |
+ return SrcOver_SkModeColorFilter::IsA; |
+ default: |
+ break; |
+ } |
+ return NULL; |
+} |
+ |
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter) |
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) |
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter) |