1
2/*
3 * Copyright 2017 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#ifndef SkShadowUtils_DEFINED
9#define SkShadowUtils_DEFINED
10
11#include "include/core/SkColor.h"
12#include "include/core/SkPoint3.h"
13#include "include/core/SkScalar.h"
14#include "include/private/SkShadowFlags.h"
15
16class SkCanvas;
17class SkPath;
18class SkResourceCache;
19
20class SK_API SkShadowUtils {
21public:
22 /**
23 * Draw an offset spot shadow and outlining ambient shadow for the given path using a disc
24 * light. The shadow may be cached, depending on the path type and canvas matrix. If the
25 * matrix is perspective or the path is volatile, it will not be cached.
26 *
27 * @param canvas The canvas on which to draw the shadows.
28 * @param path The occluder used to generate the shadows.
29 * @param zPlaneParams Values for the plane function which returns the Z offset of the
30 * occluder from the canvas based on local x and y values (the current matrix is not applied).
31 * @param lightPos The 3D position of the light relative to the canvas plane. This is
32 * independent of the canvas's current matrix.
33 * @param lightRadius The radius of the disc light.
34 * @param ambientColor The color of the ambient shadow.
35 * @param spotColor The color of the spot shadow.
36 * @param flags Options controlling opaque occluder optimizations and shadow appearance. See
37 * SkShadowFlags.
38 */
39 static void DrawShadow(SkCanvas* canvas, const SkPath& path, const SkPoint3& zPlaneParams,
40 const SkPoint3& lightPos, SkScalar lightRadius,
41 SkColor ambientColor, SkColor spotColor,
42 uint32_t flags = SkShadowFlags::kNone_ShadowFlag);
43
44 /**
45 * Helper routine to compute color values for one-pass tonal alpha.
46 *
47 * @param inAmbientColor Original ambient color
48 * @param inSpotColor Original spot color
49 * @param outAmbientColor Modified ambient color
50 * @param outSpotColor Modified spot color
51 */
52 static void ComputeTonalColors(SkColor inAmbientColor, SkColor inSpotColor,
53 SkColor* outAmbientColor, SkColor* outSpotColor);
54};
55
56#endif
57