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 "sk_types.h" 15 16 SK_C_PLUS_PLUS_BEGIN_GUARD 17 18 void sk_shader_ref(sk_shader_t*); 19 void sk_shader_unref(sk_shader_t*); 20 21 typedef 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 */ 45 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 */ 74 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 */ 99 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 */ 130 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 141 SK_C_PLUS_PLUS_END_GUARD 142 143 #endif 144