/*
|
* Copyright 2015 Google Inc.
|
*
|
* Use of this source code is governed by a BSD-style license that can be
|
* found in the LICENSE file.
|
*/
|
|
#include "SkXfermodeInterpretation.h"
|
#include "SkPaint.h"
|
|
static bool just_solid_color(const SkPaint& p) {
|
return SK_AlphaOPAQUE == p.getAlpha() && !p.getColorFilter() && !p.getShader();
|
}
|
|
SkXfermodeInterpretation SkInterpretXfermode(const SkPaint& paint, bool dstIsOpaque) {
|
switch (paint.getBlendMode()) {
|
case SkBlendMode::kSrcOver:
|
return kSrcOver_SkXfermodeInterpretation;
|
case SkBlendMode::kSrc:
|
if (just_solid_color(paint)) {
|
return kSrcOver_SkXfermodeInterpretation;
|
}
|
return kNormal_SkXfermodeInterpretation;
|
case SkBlendMode::kDst:
|
return kSkipDrawing_SkXfermodeInterpretation;
|
case SkBlendMode::kDstOver:
|
if (dstIsOpaque) {
|
return kSkipDrawing_SkXfermodeInterpretation;
|
}
|
return kNormal_SkXfermodeInterpretation;
|
case SkBlendMode::kSrcIn:
|
if (dstIsOpaque && just_solid_color(paint)) {
|
return kSrcOver_SkXfermodeInterpretation;
|
}
|
return kNormal_SkXfermodeInterpretation;
|
case SkBlendMode::kDstIn:
|
if (just_solid_color(paint)) {
|
return kSkipDrawing_SkXfermodeInterpretation;
|
}
|
return kNormal_SkXfermodeInterpretation;
|
default:
|
return kNormal_SkXfermodeInterpretation;
|
}
|
}
|