diff options
Diffstat (limited to 'src/effects/SkColorFilterImageFilter.cpp')
-rwxr-xr-x | src/effects/SkColorFilterImageFilter.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp index fdf6de7b76..908f814b94 100755 --- a/src/effects/SkColorFilterImageFilter.cpp +++ b/src/effects/SkColorFilterImageFilter.cpp @@ -21,10 +21,12 @@ SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, return NULL; } - SkColorFilter* inputColorFilter; - if (input && input->asColorFilter(&inputColorFilter)) { - SkAutoUnref autoUnref(inputColorFilter); - SkAutoTUnref<SkColorFilter> newCF(cf->newComposed(inputColorFilter)); + SkColorFilter* inputCF; + if (input && input->asColorFilter(&inputCF)) { + // This is an optimization, as it collapses the hierarchy by just combining the two + // colorfilters into a single one, which the new imagefilter will wrap. + SkAutoUnref autoUnref(inputCF); + SkAutoTUnref<SkColorFilter> newCF(SkColorFilter::CreateComposeFilter(cf, inputCF)); if (newCF) { return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0)); } @@ -86,10 +88,13 @@ bool SkColorFilterImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& sourc } bool SkColorFilterImageFilter::asColorFilter(SkColorFilter** filter) const { - if (!cropRectIsSet()) { + if (!this->cropRectIsSet()) { + SkASSERT(1 == this->countInputs()); + // Since our factory has already performed the collapse optimization, we can assert that + // if we have an input, it is *not* also a colorfilter. + SkASSERT(!this->getInput(0) || !this->getInput(0)->asColorFilter(NULL)); if (filter) { - *filter = fColorFilter; - fColorFilter->ref(); + *filter = SkRef(fColorFilter); } return true; } |