1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "include/core/SkPaint.h"
9#include "src/core/SkXfermodeInterpretation.h"
10
11static bool just_solid_color(const SkPaint& p) {
12 return SK_AlphaOPAQUE == p.getAlpha() && !p.getColorFilter() && !p.getShader();
13}
14
15SkXfermodeInterpretation SkInterpretXfermode(const SkPaint& paint, bool dstIsOpaque) {
16 switch (paint.getBlendMode()) {
17 case SkBlendMode::kSrcOver:
18 return kSrcOver_SkXfermodeInterpretation;
19 case SkBlendMode::kSrc:
20 if (just_solid_color(paint)) {
21 return kSrcOver_SkXfermodeInterpretation;
22 }
23 return kNormal_SkXfermodeInterpretation;
24 case SkBlendMode::kDst:
25 return kSkipDrawing_SkXfermodeInterpretation;
26 case SkBlendMode::kDstOver:
27 if (dstIsOpaque) {
28 return kSkipDrawing_SkXfermodeInterpretation;
29 }
30 return kNormal_SkXfermodeInterpretation;
31 case SkBlendMode::kSrcIn:
32 if (dstIsOpaque && just_solid_color(paint)) {
33 return kSrcOver_SkXfermodeInterpretation;
34 }
35 return kNormal_SkXfermodeInterpretation;
36 case SkBlendMode::kDstIn:
37 if (just_solid_color(paint)) {
38 return kSkipDrawing_SkXfermodeInterpretation;
39 }
40 return kNormal_SkXfermodeInterpretation;
41 default:
42 return kNormal_SkXfermodeInterpretation;
43 }
44}
45