aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorFilter.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-02-04 11:35:27 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-04 11:35:27 -0800
commitf7cdb06d62bd732599c7ee407dfd76d32d671755 (patch)
tree52cd10f9671d35d50713f6ca3156f52f5a4e687a /src/core/SkColorFilter.cpp
parenteb10ed40905173586fc7a926aa2fe405bab66573 (diff)
extend compose-colorfilter to 4f
Diffstat (limited to 'src/core/SkColorFilter.cpp')
-rw-r--r--src/core/SkColorFilter.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 4bfacfe544..72f5470b10 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -29,14 +29,24 @@ bool SkColorFilter::asComponentTable(SkBitmap*) const {
return false;
}
+void SkColorFilter::filterSpan4f(const SkPM4f[], int count, SkPM4f[]) const {
+ if (this->supports4f()) {
+ SkASSERT(false && "colorfilter supports4f but didn't override");
+ } else {
+ SkASSERT(false && "filterSpan4f called but not supported");
+ }
+}
+
SkColor SkColorFilter::filterColor(SkColor c) const {
SkPMColor dst, src = SkPreMultiplyColor(c);
this->filterSpan(&src, 1, &dst);
return SkUnPreMultiply::PMColorToColor(dst);
}
-void SkColorFilter::filterSpan4f(const SkPM4f[], int count, SkPM4f[]) const {
- SkASSERT(false && "filterSpan4f called but not implemented");
+SkColor4f SkColorFilter::filterColor4f(const SkColor4f& c) const {
+ SkPM4f dst, src = c.premul();
+ this->filterSpan4f(&src, 1, &dst);
+ return dst.unpremul();
}
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -54,7 +64,7 @@ void SkColorFilter::filterSpan4f(const SkPM4f[], int count, SkPM4f[]) const {
class SkComposeColorFilter : public SkColorFilter {
public:
uint32_t getFlags() const override {
- // Can only claim alphaunchanged and 16bit support if both our proxys do.
+ // Can only claim alphaunchanged and SkPM4f support if both our proxys do.
return fOuter->getFlags() & fInner->getFlags();
}
@@ -63,6 +73,13 @@ public:
fOuter->filterSpan(result, count, result);
}
+ void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override {
+ SkASSERT(fInner->supports4f());
+ SkASSERT(fOuter->supports4f());
+ fInner->filterSpan4f(shader, count, result);
+ fOuter->filterSpan4f(result, count, result);
+ }
+
#ifndef SK_IGNORE_TO_STRING
void toString(SkString* str) const override {
SkString outerS, innerS;