1 /*
2  * Copyright 2013 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 #ifndef SkPaintPriv_DEFINED
9 #define SkPaintPriv_DEFINED
10 
11 #include "SkTypes.h"
12 
13 class SkBitmap;
14 class SkImage;
15 class SkPaint;
16 
17 enum SkPaintBitmapOpacity {
18     // No content replaces the paint's color
19     kNoBitmap_SkPaintBitmapOpacity = 0,
20     // The color replacement is known to be opaque
21     kOpaque_SkPaintBitmapOpacity = 1,
22     // We have no information about the color or it is transparent
23     kUnknown_SkPaintBitmapOpacity = 2
24 };
25 
26 /** Returns true if draw calls that use the paint will completely occlude
27     canvas contents that are covered by the draw.
28     @param paint The paint to be analyzed, NULL is equivalent to
29         the default paint.
30     @param contentType The type of the content that will be drawn,
31         kNoBitmap_SkPaintBitmapOpacity if there is no content in adition to the paint.
32     @return true if paint is opaque
33 */
34 bool isPaintOpaque(const SkPaint* paint, SkPaintBitmapOpacity contentType);
35 
36 /** Returns true if draw calls that use the paint will completely occlude
37     canvas contents that are covered by the draw.
38     @param paint The paint to be analyzed, NULL is equivalent to
39         the default paint.
40     @param bmpReplacesShader a bitmap to be used in place of the paint's
41         shader.
42     @return true if paint is opaque
43 */
44 bool isPaintOpaque(const SkPaint* paint, const SkBitmap* bmpReplacesShader = NULL);
45 bool isPaintOpaque(const SkPaint* paint, const SkImage* image);
46 
47 #endif
48