| /* | 
 |  * 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; | 
 |     } | 
 | } |