diff options
Diffstat (limited to 'src/core/SkRecordOpts.cpp')
-rw-r--r-- | src/core/SkRecordOpts.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/core/SkRecordOpts.cpp b/src/core/SkRecordOpts.cpp index a7feec1fb3..d46a6573b5 100644 --- a/src/core/SkRecordOpts.cpp +++ b/src/core/SkRecordOpts.cpp @@ -98,7 +98,7 @@ static bool fold_opacity_layer_color_to_paint(const SkPaint* layerPaint, // looper drawing unmodulated filter layer twice and then modulating the result produces // different image to drawing modulated filter layer twice. // TODO: most likely the looper and only some xfer modes are the hard constraints - if (!paint->isSrcOver() || paint->getLooper()) { + if (paint->getXfermode() || paint->getLooper()) { return false; } @@ -129,9 +129,9 @@ static bool fold_opacity_layer_color_to_paint(const SkPaint* layerPaint, } // The layer paint can not have any effects. - if (layerPaint->getPathEffect() || + if (layerPaint->getPathEffect() || layerPaint->getShader() || - !layerPaint->isSrcOver() || + layerPaint->getXfermode() || layerPaint->getMaskFilter() || layerPaint->getColorFilter() || layerPaint->getRasterizer() || @@ -174,12 +174,16 @@ void SkRecordNoopSaveRestores(SkRecord* record) { } static bool effectively_srcover(const SkPaint* paint) { - if (!paint || paint->isSrcOver()) { + if (!paint) { + return true; + } + SkXfermode* mode = paint->getXfermode(); + if (SkXfermode::IsMode(mode, SkXfermode::kSrcOver_Mode)) { return true; } // src-mode with opaque and no effects (which might change opaqueness) is ok too. return !paint->getShader() && !paint->getColorFilter() && !paint->getImageFilter() && - 0xFF == paint->getAlpha() && paint->getBlendMode() == SkBlendMode::kSrc; + 0xFF == paint->getAlpha() && SkXfermode::IsMode(mode, SkXfermode::kSrc_Mode); } // For some SaveLayer-[drawing command]-Restore patterns, merge the SaveLayer's alpha into the |