aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkRecordOpts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkRecordOpts.cpp')
-rw-r--r--src/core/SkRecordOpts.cpp14
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