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