aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkColorFilter.h8
-rw-r--r--src/core/SkColorFilter.cpp12
-rw-r--r--src/core/SkColorSpaceXformer.cpp17
-rw-r--r--src/core/SkModeColorFilter.cpp17
-rw-r--r--src/core/SkModeColorFilter.h2
5 files changed, 31 insertions, 25 deletions
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
index 3fb27fab7a..f843df7064 100644
--- a/include/core/SkColorFilter.h
+++ b/include/core/SkColorFilter.h
@@ -18,6 +18,7 @@ class GrFragmentProcessor;
class SkArenaAlloc;
class SkBitmap;
class SkColorSpace;
+class SkColorSpaceXformer;
class SkRasterPipeline;
/**
@@ -163,6 +164,13 @@ protected:
virtual bool onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
bool shaderIsOpaque) const;
+ sk_sp<SkColorFilter> makeColorSpace(SkColorSpaceXformer* xformer) const {
+ return this->onMakeColorSpace(xformer);
+ }
+ virtual sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const {
+ return sk_ref_sp(const_cast<SkColorFilter*>(this));
+ }
+
private:
/*
* Returns 1 if this is a single filter (not a composition of other filters), otherwise it
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;