diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkColorFilter.cpp | 12 | ||||
-rw-r--r-- | src/core/SkColorSpaceXformer.cpp | 17 | ||||
-rw-r--r-- | src/core/SkModeColorFilter.cpp | 17 | ||||
-rw-r--r-- | src/core/SkModeColorFilter.h | 2 |
4 files changed, 23 insertions, 25 deletions
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index 210ca6d346..b82808d585 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -5,16 +5,17 @@ * found in the LICENSE file. */ -#include "SkColorFilter.h" #include "SkArenaAlloc.h" +#include "SkColorFilter.h" +#include "SkColorSpaceXformer.h" +#include "SkNx.h" +#include "SkPM4f.h" #include "SkReadBuffer.h" #include "SkRefCnt.h" #include "SkString.h" #include "SkTDArray.h" #include "SkUnPreMultiply.h" #include "SkWriteBuffer.h" -#include "SkPM4f.h" -#include "SkNx.h" #if SK_SUPPORT_GPU #include "GrFragmentProcessor.h" @@ -161,6 +162,11 @@ private: return true; } + sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer* xformer) const override { + return SkColorFilter::MakeComposeFilter(xformer->apply(fOuter.get()), + xformer->apply(fInner.get())); + } + sk_sp<SkColorFilter> fOuter; sk_sp<SkColorFilter> fInner; const int fComposedFilterCount; diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp index ce6fff679e..a51e2e6b41 100644 --- a/src/core/SkColorSpaceXformer.cpp +++ b/src/core/SkColorSpaceXformer.cpp @@ -44,23 +44,8 @@ sk_sp<SkImage> SkColorSpaceXformer::apply(const SkBitmap& src) { return xformed; } -// Currently, SkModeColorFilter is the only color filter that holds a color. And -// SkComposeColorFilter is the only color filter that holds another color filter. If this -// changes, this function will need updating. sk_sp<SkColorFilter> SkColorSpaceXformer::apply(const SkColorFilter* colorFilter) { - SkColor color; - SkBlendMode mode; - if (colorFilter->asColorMode(&color, &mode)) { - return SkColorFilter::MakeModeFilter(this->apply(color), mode); - } - - SkColorFilter* outer; - SkColorFilter* inner; - if (colorFilter->asACompose(&outer, &inner)) { - return SkColorFilter::MakeComposeFilter(this->apply(outer), this->apply(inner)); - } - - return sk_ref_sp(const_cast<SkColorFilter*>(colorFilter)); + return colorFilter->makeColorSpace(this); } sk_sp<SkImageFilter> SkColorSpaceXformer::apply(const SkImageFilter* imageFilter) { diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp index d074482a6f..7978f939f5 100644 --- a/src/core/SkModeColorFilter.cpp +++ b/src/core/SkModeColorFilter.cpp @@ -5,21 +5,22 @@ * found in the LICENSE file. */ -#include "SkBlitRow.h" +#include "SkArenaAlloc.h" #include "SkBlendModePriv.h" +#include "SkBlitRow.h" #include "SkColorFilter.h" #include "SkColorPriv.h" -#include "SkArenaAlloc.h" +#include "SkColorSpaceXformer.h" #include "SkModeColorFilter.h" +#include "SkPM4f.h" #include "SkPM4fPriv.h" +#include "SkRandom.h" #include "SkRasterPipeline.h" #include "SkReadBuffer.h" -#include "SkWriteBuffer.h" -#include "SkUtils.h" -#include "SkRandom.h" #include "SkString.h" +#include "SkUtils.h" #include "SkValidationUtils.h" -#include "SkPM4f.h" +#include "SkWriteBuffer.h" ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -103,6 +104,10 @@ bool SkModeColorFilter::onAppendStages(SkRasterPipeline* p, return true; } +sk_sp<SkColorFilter> SkModeColorFilter::onMakeColorSpace(SkColorSpaceXformer* xformer) const { + return SkColorFilter::MakeModeFilter(xformer->apply(fColor), fMode); +} + /////////////////////////////////////////////////////////////////////////////// #if SK_SUPPORT_GPU #include "GrBlend.h" diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h index 4d0b172930..d51a623b87 100644 --- a/src/core/SkModeColorFilter.h +++ b/src/core/SkModeColorFilter.h @@ -47,6 +47,8 @@ protected: bool onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool shaderIsOpaque) const override; + sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const override; + private: SkColor fColor; SkBlendMode fMode; |