| Index: src/core/SkPaint.cpp
|
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
|
| index ebdc866d653b5b787862ae3d5ebd86524cb09b4e..4ccfce235acc228c1690545bbba9f56bbf186334 100644
|
| --- a/src/core/SkPaint.cpp
|
| +++ b/src/core/SkPaint.cpp
|
| @@ -2377,6 +2377,18 @@ bool SkTextToPathIter::next(const SkPath** path, SkScalar* xpos) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +// return true if the filter exists, and may affect alpha
|
| +static bool affects_alpha(const SkColorFilter* cf) {
|
| + return cf && !(cf->getFlags() & SkColorFilter::kAlphaUnchanged_Flag);
|
| +}
|
| +
|
| +// return true if the filter exists, and may affect alpha
|
| +static bool affects_alpha(const SkImageFilter* imf) {
|
| + // TODO: check if we should allow imagefilters to broadcast that they don't affect alpha
|
| + // ala colorfilters
|
| + return imf != NULL;
|
| +}
|
| +
|
| bool SkPaint::nothingToDraw() const {
|
| if (fLooper) {
|
| return false;
|
| @@ -2389,7 +2401,10 @@ bool SkPaint::nothingToDraw() const {
|
| case SkXfermode::kDstOut_Mode:
|
| case SkXfermode::kDstOver_Mode:
|
| case SkXfermode::kPlus_Mode:
|
| - return 0 == this->getAlpha();
|
| + if (0 == this->getAlpha()) {
|
| + return !affects_alpha(fColorFilter) && !affects_alpha(fImageFilter);
|
| + }
|
| + break;
|
| case SkXfermode::kDst_Mode:
|
| return true;
|
| default:
|
|
|