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_types_DEFINED 12 #define sk_types_DEFINED 13 14 #include <stdint.h> 15 #include <stddef.h> 16 17 #ifdef __cplusplus 18 #define SK_C_PLUS_PLUS_BEGIN_GUARD extern "C" { 19 #define SK_C_PLUS_PLUS_END_GUARD } 20 #else 21 #include <stdbool.h> 22 #define SK_C_PLUS_PLUS_BEGIN_GUARD 23 #define SK_C_PLUS_PLUS_END_GUARD 24 #endif 25 26 #ifndef SK_API 27 #define SK_API 28 #endif 29 30 /////////////////////////////////////////////////////////////////////////////////////// 31 32 SK_C_PLUS_PLUS_BEGIN_GUARD 33 34 typedef uint32_t sk_color_t; 35 36 /* This macro assumes all arguments are >=0 and <=255. */ 37 #define sk_color_set_argb(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)) 38 #define sk_color_get_a(c) (((c) >> 24) & 0xFF) 39 #define sk_color_get_r(c) (((c) >> 16) & 0xFF) 40 #define sk_color_get_g(c) (((c) >> 8) & 0xFF) 41 #define sk_color_get_b(c) (((c) >> 0) & 0xFF) 42 43 typedef enum { 44 UNKNOWN_SK_COLORTYPE, 45 RGBA_8888_SK_COLORTYPE, 46 BGRA_8888_SK_COLORTYPE, 47 ALPHA_8_SK_COLORTYPE, 48 } sk_colortype_t; 49 50 typedef enum { 51 OPAQUE_SK_ALPHATYPE, 52 PREMUL_SK_ALPHATYPE, 53 UNPREMUL_SK_ALPHATYPE, 54 } sk_alphatype_t; 55 56 typedef enum { 57 INTERSECT_SK_CLIPTYPE, 58 DIFFERENCE_SK_CLIPTYPE, 59 } sk_cliptype_t; 60 61 typedef enum { 62 UNKNOWN_SK_PIXELGEOMETRY, 63 RGB_H_SK_PIXELGEOMETRY, 64 BGR_H_SK_PIXELGEOMETRY, 65 RGB_V_SK_PIXELGEOMETRY, 66 BGR_V_SK_PIXELGEOMETRY, 67 } sk_pixelgeometry_t; 68 69 /** 70 Return the default sk_colortype_t; this is operating-system dependent. 71 */ 72 SK_API sk_colortype_t sk_colortype_get_default_8888(); 73 74 typedef struct { 75 int32_t width; 76 int32_t height; 77 sk_colortype_t colorType; 78 sk_alphatype_t alphaType; 79 } sk_imageinfo_t; 80 81 typedef struct { 82 sk_pixelgeometry_t pixelGeometry; 83 } sk_surfaceprops_t; 84 85 typedef struct { 86 float x; 87 float y; 88 } sk_point_t; 89 90 typedef struct { 91 int32_t left; 92 int32_t top; 93 int32_t right; 94 int32_t bottom; 95 } sk_irect_t; 96 97 typedef struct { 98 float left; 99 float top; 100 float right; 101 float bottom; 102 } sk_rect_t; 103 104 typedef struct { 105 float mat[9]; 106 } sk_matrix_t; 107 108 /** 109 A sk_canvas_t encapsulates all of the state about drawing into a 110 destination This includes a reference to the destination itself, 111 and a stack of matrix/clip values. 112 */ 113 typedef struct sk_canvas_t sk_canvas_t; 114 /** 115 A sk_data_ holds an immutable data buffer. 116 */ 117 typedef struct sk_data_t sk_data_t; 118 /** 119 A sk_image_t is an abstraction for drawing a rectagle of pixels. 120 The content of the image is always immutable, though the actual 121 storage may change, if for example that image can be re-created via 122 encoded data or other means. 123 */ 124 typedef struct sk_image_t sk_image_t; 125 /** 126 A sk_maskfilter_t is an object that perform transformations on an 127 alpha-channel mask before drawing it; it may be installed into a 128 sk_paint_t. Each time a primitive is drawn, it is first 129 scan-converted into a alpha mask, which os handed to the 130 maskfilter, which may create a new mask is to render into the 131 destination. 132 */ 133 typedef struct sk_maskfilter_t sk_maskfilter_t; 134 /** 135 A sk_paint_t holds the style and color information about how to 136 draw geometries, text and bitmaps. 137 */ 138 typedef struct sk_paint_t sk_paint_t; 139 /** 140 A sk_path_t encapsulates compound (multiple contour) geometric 141 paths consisting of straight line segments, quadratic curves, and 142 cubic curves. 143 */ 144 typedef struct sk_path_t sk_path_t; 145 /** 146 A sk_picture_t holds recorded canvas drawing commands to be played 147 back at a later time. 148 */ 149 typedef struct sk_picture_t sk_picture_t; 150 /** 151 A sk_picture_recorder_t holds a sk_canvas_t that records commands 152 to create a sk_picture_t. 153 */ 154 typedef struct sk_picture_recorder_t sk_picture_recorder_t; 155 /** 156 A sk_shader_t specifies the source color(s) for what is being drawn. If a 157 paint has no shader, then the paint's color is used. If the paint 158 has a shader, then the shader's color(s) are use instead, but they 159 are modulated by the paint's alpha. 160 */ 161 typedef struct sk_shader_t sk_shader_t; 162 /** 163 A sk_surface_t holds the destination for drawing to a canvas. For 164 raster drawing, the destination is an array of pixels in memory. 165 For GPU drawing, the destination is a texture or a framebuffer. 166 */ 167 typedef struct sk_surface_t sk_surface_t; 168 169 typedef enum { 170 CLEAR_SK_XFERMODE_MODE, 171 SRC_SK_XFERMODE_MODE, 172 DST_SK_XFERMODE_MODE, 173 SRCOVER_SK_XFERMODE_MODE, 174 DSTOVER_SK_XFERMODE_MODE, 175 SRCIN_SK_XFERMODE_MODE, 176 DSTIN_SK_XFERMODE_MODE, 177 SRCOUT_SK_XFERMODE_MODE, 178 DSTOUT_SK_XFERMODE_MODE, 179 SRCATOP_SK_XFERMODE_MODE, 180 DSTATOP_SK_XFERMODE_MODE, 181 XOR_SK_XFERMODE_MODE, 182 PLUS_SK_XFERMODE_MODE, 183 MODULATE_SK_XFERMODE_MODE, 184 SCREEN_SK_XFERMODE_MODE, 185 OVERLAY_SK_XFERMODE_MODE, 186 DARKEN_SK_XFERMODE_MODE, 187 LIGHTEN_SK_XFERMODE_MODE, 188 COLORDODGE_SK_XFERMODE_MODE, 189 COLORBURN_SK_XFERMODE_MODE, 190 HARDLIGHT_SK_XFERMODE_MODE, 191 SOFTLIGHT_SK_XFERMODE_MODE, 192 DIFFERENCE_SK_XFERMODE_MODE, 193 EXCLUSION_SK_XFERMODE_MODE, 194 MULTIPLY_SK_XFERMODE_MODE, 195 HUE_SK_XFERMODE_MODE, 196 SATURATION_SK_XFERMODE_MODE, 197 COLOR_SK_XFERMODE_MODE, 198 LUMINOSITY_SK_XFERMODE_MODE, 199 } sk_xfermode_mode_t; 200 201 ////////////////////////////////////////////////////////////////////////////////////////// 202 203 SK_C_PLUS_PLUS_END_GUARD 204 205 #endif 206