1/*
2 * Copyright 2014 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// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
9// DO NOT USE -- FOR INTERNAL TESTING ONLY
10
11#ifndef sk_shader_DEFINED
12#define sk_shader_DEFINED
13
14#include "include/c/sk_types.h"
15
16SK_C_PLUS_PLUS_BEGIN_GUARD
17
18SK_API void sk_shader_ref(sk_shader_t*);
19SK_API void sk_shader_unref(sk_shader_t*);
20
21typedef enum {
22 CLAMP_SK_SHADER_TILEMODE,
23 REPEAT_SK_SHADER_TILEMODE,
24 MIRROR_SK_SHADER_TILEMODE,
25} sk_shader_tilemode_t;
26
27/**
28 Returns a shader that generates a linear gradient between the two
29 specified points.
30
31 @param points The start and end points for the gradient.
32 @param colors The array[count] of colors, to be distributed between
33 the two points
34 @param colorPos May be NULL. array[count] of SkScalars, or NULL, of
35 the relative position of each corresponding color
36 in the colors array. If this is NULL, the the
37 colors are distributed evenly between the start
38 and end point. If this is not null, the values
39 must begin with 0, end with 1.0, and intermediate
40 values must be strictly increasing.
41 @param colorCount Must be >=2. The number of colors (and pos if not
42 NULL) entries.
43 @param mode The tiling mode
44*/
45SK_API sk_shader_t* sk_shader_new_linear_gradient(const sk_point_t points[2],
46 const sk_color_t colors[],
47 const float colorPos[],
48 int colorCount,
49 sk_shader_tilemode_t tileMode,
50 const sk_matrix_t* localMatrix);
51
52
53/**
54 Returns a shader that generates a radial gradient given the center
55 and radius.
56
57 @param center The center of the circle for this gradient
58 @param radius Must be positive. The radius of the circle for this
59 gradient
60 @param colors The array[count] of colors, to be distributed
61 between the center and edge of the circle
62 @param colorPos May be NULL. The array[count] of the relative
63 position of each corresponding color in the colors
64 array. If this is NULL, the the colors are
65 distributed evenly between the center and edge of
66 the circle. If this is not null, the values must
67 begin with 0, end with 1.0, and intermediate
68 values must be strictly increasing.
69 @param count Must be >= 2. The number of colors (and pos if not
70 NULL) entries
71 @param tileMode The tiling mode
72 @param localMatrix May be NULL
73*/
74SK_API sk_shader_t* sk_shader_new_radial_gradient(const sk_point_t* center,
75 float radius,
76 const sk_color_t colors[],
77 const float colorPos[],
78 int colorCount,
79 sk_shader_tilemode_t tileMode,
80 const sk_matrix_t* localMatrix);
81
82/**
83 Returns a shader that generates a sweep gradient given a center.
84
85 @param center The coordinates of the center of the sweep
86 @param colors The array[count] of colors, to be distributed around
87 the center.
88 @param colorPos May be NULL. The array[count] of the relative
89 position of each corresponding color in the colors
90 array. If this is NULL, the the colors are
91 distributed evenly between the center and edge of
92 the circle. If this is not null, the values must
93 begin with 0, end with 1.0, and intermediate
94 values must be strictly increasing.
95 @param colorCount Must be >= 2. The number of colors (and pos if
96 not NULL) entries
97 @param localMatrix May be NULL
98*/
99SK_API sk_shader_t* sk_shader_new_sweep_gradient(const sk_point_t* center,
100 const sk_color_t colors[],
101 const float colorPos[],
102 int colorCount,
103 const sk_matrix_t* localMatrix);
104
105/**
106 Returns a shader that generates a conical gradient given two circles, or
107 returns NULL if the inputs are invalid. The gradient interprets the
108 two circles according to the following HTML spec.
109 http://dev.w3.org/html5/2dcontext/#dom-context-2d-createradialgradient
110
111 Returns a shader that generates a sweep gradient given a center.
112
113 @param start, startRadius Defines the first circle.
114 @param end, endRadius Defines the first circle.
115 @param colors The array[count] of colors, to be distributed between
116 the two circles.
117 @param colorPos May be NULL. The array[count] of the relative
118 position of each corresponding color in the colors
119 array. If this is NULL, the the colors are
120 distributed evenly between the two circles. If
121 this is not null, the values must begin with 0,
122 end with 1.0, and intermediate values must be
123 strictly increasing.
124 @param colorCount Must be >= 2. The number of colors (and pos if
125 not NULL) entries
126 @param tileMode The tiling mode
127 @param localMatrix May be NULL
128
129*/
130SK_API sk_shader_t* sk_shader_new_two_point_conical_gradient(
131 const sk_point_t* start,
132 float startRadius,
133 const sk_point_t* end,
134 float endRadius,
135 const sk_color_t colors[],
136 const float colorPos[],
137 int colorCount,
138 sk_shader_tilemode_t tileMode,
139 const sk_matrix_t* localMatrix);
140
141SK_C_PLUS_PLUS_END_GUARD
142
143#endif
144