SkImageFilter::onMakeColorSpace() - more overrides
Fills out most of the simple implementations.
Improves 22 gms in gbr-8888.
Bug: skia:
Change-Id: I881ade140993568263de75be51aed240d2de8cc6
Reviewed-on: https://skia-review.googlesource.com/13126
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp
index d256ddf..38e717d 100644
--- a/src/core/SkColorSpaceXformer.cpp
+++ b/src/core/SkColorSpaceXformer.cpp
@@ -44,6 +44,17 @@
return xformed;
}
+// As far as I know, SkModeColorFilter is the only color filter that holds a color.
+sk_sp<SkColorFilter> SkColorSpaceXformer::apply(const SkColorFilter* colorFilter) {
+ SkColor color;
+ SkBlendMode mode;
+ if (colorFilter->asColorMode(&color, &mode)) {
+ return SkColorFilter::MakeModeFilter(this->apply(color), mode);
+ }
+
+ return sk_ref_sp(const_cast<SkColorFilter*>(colorFilter));
+}
+
void SkColorSpaceXformer::apply(SkColor* xformed, const SkColor* srgb, int n) {
SkAssertResult(fFromSRGB->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, xformed,
SkColorSpaceXform::kBGRA_8888_ColorFormat, srgb,
@@ -160,12 +171,10 @@
}
}
- // As far as I know, SkModeColorFilter is the only color filter that holds a color.
if (auto cf = src.getColorFilter()) {
- SkColor color;
- SkBlendMode mode;
- if (cf->asColorMode(&color, &mode)) {
- get_dst()->setColorFilter(SkColorFilter::MakeModeFilter(this->apply(color), mode));
+ auto replacement = this->apply(cf);
+ if (replacement.get() != cf) {
+ get_dst()->setColorFilter(std::move(replacement));
}
}