aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/utils/SkShadowUtils.h
blob: c3809295fb77cf0454eb928d9a1fa2e01811b0f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#ifndef SkShadowUtils_DEFINED
#define SkShadowUtils_DEFINED

#include "SkColor.h"
#include "SkScalar.h"

class SkCanvas;
class SkPath;

class SkShadowUtils {
public:
    enum ShadowFlags {
        kNone_ShadowFlag = 0x00,
        /** The occluding object is not opaque. Knowing that the occluder is opaque allows
        * us to cull shadow geometry behind it and improve performance. */
        kTransparentOccluder_ShadowFlag = 0x01,
        /** Use a larger umbra for a darker shadow */
        kLargerUmbra_ShadowFlag = 0x02,
        /** Use a Gaussian for the edge function rather than smoothstep */
        kGaussianEdge_ShadowFlag = 0x04,
        /** mask for all shadow flags */
        kAll_ShadowFlag = 0x07
    };

    // Draw an offset spot shadow and outlining ambient shadow for the given path.
    static void DrawShadow(SkCanvas*, const SkPath& path, SkScalar occluderHeight,
                           const SkPoint3& lightPos, SkScalar lightRadius,
                           SkScalar ambientAlpha, SkScalar spotAlpha, SkColor color,
                           uint32_t flags = kNone_ShadowFlag);
};

#endif