Index: src/effects/SkColorFilters.cpp |
diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp |
index 41a201ef39559fc232e10319c3a9e65f20c39c8c..ce22c3c33a27848a0d1d6a71d33fb9146e96a9aa 100644 |
--- a/src/effects/SkColorFilters.cpp |
+++ b/src/effects/SkColorFilters.cpp |
@@ -13,11 +13,14 @@ |
#include "SkFlattenableBuffers.h" |
#include "SkUtils.h" |
#include "SkString.h" |
+#include "SkValidationUtils.h" |
#define ILLEGAL_XFERMODE_MODE ((SkXfermode::Mode)-1) |
// baseclass for filters that store a color and mode |
class SkModeColorFilter : public SkColorFilter { |
+ typedef SkColorFilter INHERITED; |
+ |
public: |
SkModeColorFilter(SkColor color) { |
fColor = color; |
@@ -98,6 +101,7 @@ protected: |
fColor = buffer.readColor(); |
fMode = (SkXfermode::Mode)buffer.readUInt(); |
this->updateCache(); |
+ buffer.validate(SkIsValidMode(fMode)); |
} |
private: |
@@ -113,11 +117,11 @@ private: |
fProc = SkXfermode::GetProc(fMode); |
fProc16 = SkXfermode::GetProc16(fMode, fColor); |
} |
- |
- typedef SkColorFilter INHERITED; |
}; |
class Src_SkModeColorFilter : public SkModeColorFilter { |
+ typedef SkModeColorFilter INHERITED; |
+ |
public: |
Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrc_Mode) {} |
@@ -145,12 +149,11 @@ public: |
protected: |
Src_SkModeColorFilter(SkFlattenableReadBuffer& buffer) |
: INHERITED(buffer) {} |
- |
-private: |
- typedef SkModeColorFilter INHERITED; |
}; |
class SrcOver_SkModeColorFilter : public SkModeColorFilter { |
+ typedef SkModeColorFilter INHERITED; |
+ |
public: |
SrcOver_SkModeColorFilter(SkColor color) |
: INHERITED(color, SkXfermode::kSrcOver_Mode) { |
@@ -187,8 +190,6 @@ protected: |
private: |
SkBlitRow::ColorProc fColor32Proc; |
- |
- typedef SkModeColorFilter INHERITED; |
}; |
/////////////////////////////////////////////////////////////////////////////// |
@@ -243,6 +244,8 @@ static inline unsigned pin(unsigned value, unsigned max) { |
} |
class SkLightingColorFilter : public SkColorFilter { |
+ typedef SkColorFilter INHERITED; |
+ |
public: |
SkLightingColorFilter(SkColor mul, SkColor add) : fMul(mul), fAdd(add) {} |
@@ -294,12 +297,11 @@ protected: |
} |
SkColor fMul, fAdd; |
- |
-private: |
- typedef SkColorFilter INHERITED; |
}; |
class SkLightingColorFilter_JustAdd : public SkLightingColorFilter { |
+ typedef SkLightingColorFilter INHERITED; |
+ |
public: |
SkLightingColorFilter_JustAdd(SkColor mul, SkColor add) |
: INHERITED(mul, add) {} |
@@ -336,12 +338,11 @@ public: |
protected: |
SkLightingColorFilter_JustAdd(SkFlattenableReadBuffer& buffer) |
: INHERITED(buffer) {} |
- |
-private: |
- typedef SkLightingColorFilter INHERITED; |
}; |
class SkLightingColorFilter_JustMul : public SkLightingColorFilter { |
+ typedef SkLightingColorFilter INHERITED; |
+ |
public: |
SkLightingColorFilter_JustMul(SkColor mul, SkColor add) |
: INHERITED(mul, add) {} |
@@ -377,12 +378,11 @@ public: |
protected: |
SkLightingColorFilter_JustMul(SkFlattenableReadBuffer& buffer) |
: INHERITED(buffer) {} |
- |
-private: |
- typedef SkLightingColorFilter INHERITED; |
}; |
class SkLightingColorFilter_SingleMul : public SkLightingColorFilter { |
+ typedef SkLightingColorFilter INHERITED; |
+ |
public: |
SkLightingColorFilter_SingleMul(SkColor mul, SkColor add) |
: INHERITED(mul, add) { |
@@ -421,12 +421,11 @@ public: |
protected: |
SkLightingColorFilter_SingleMul(SkFlattenableReadBuffer& buffer) |
: INHERITED(buffer) {} |
- |
-private: |
- typedef SkLightingColorFilter INHERITED; |
}; |
class SkLightingColorFilter_NoPin : public SkLightingColorFilter { |
+ typedef SkLightingColorFilter INHERITED; |
+ |
public: |
SkLightingColorFilter_NoPin(SkColor mul, SkColor add) |
: INHERITED(mul, add) {} |
@@ -469,9 +468,6 @@ public: |
protected: |
SkLightingColorFilter_NoPin(SkFlattenableReadBuffer& buffer) |
: INHERITED(buffer) {} |
- |
-private: |
- typedef SkLightingColorFilter INHERITED; |
}; |
/////////////////////////////////////////////////////////////////////////////// |
@@ -534,6 +530,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: |
+ return SkLightingColorFilter::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_JustAdd: |
+ return SkLightingColorFilter_JustAdd::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_JustMul: |
+ return SkLightingColorFilter_JustMul::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_NoPin: |
+ return SkLightingColorFilter_NoPin::CreateProc; |
+ case SkFlattenable::kSkLightingColorFilter_SingleMul: |
+ return SkLightingColorFilter_SingleMul::CreateProc; |
+ case SkFlattenable::kSkModeColorFilter: |
+ return SkModeColorFilter::CreateProc; |
+ case SkFlattenable::kSrc_SkModeColorFilter: |
+ return Src_SkModeColorFilter::CreateProc; |
+ case SkFlattenable::kSrcOver_SkModeColorFilter: |
+ return SrcOver_SkModeColorFilter::CreateProc; |
+ default: |
+ break; |
+ } |
+ return NULL; |
+} |
+ |
+SkFlattenable::TypeCheck SkColorFilter::GetTypeCheck(SkFlattenable::Type type) { |
+ switch(type) { |
+ case SkFlattenable::kSkLightingColorFilter: |
+ return SkLightingColorFilter::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_JustAdd: |
+ return SkLightingColorFilter_JustAdd::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_JustMul: |
+ return SkLightingColorFilter_JustMul::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_NoPin: |
+ return SkLightingColorFilter_NoPin::IsA; |
+ case SkFlattenable::kSkLightingColorFilter_SingleMul: |
+ return SkLightingColorFilter_SingleMul::IsA; |
+ case SkFlattenable::kSkModeColorFilter: |
+ return SkModeColorFilter::IsA; |
+ case SkFlattenable::kSrc_SkModeColorFilter: |
+ return Src_SkModeColorFilter::IsA; |
+ case SkFlattenable::kSrcOver_SkModeColorFilter: |
+ 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) |