2 * Copyright 2014 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 // EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
9 // DO NOT USE -- FOR INTERNAL TESTING ONLY
11 #ifndef sk_types_DEFINED
12 #define sk_types_DEFINED
18 #define SK_C_PLUS_PLUS_BEGIN_GUARD extern "C" {
19 #define SK_C_PLUS_PLUS_END_GUARD }
22 #define SK_C_PLUS_PLUS_BEGIN_GUARD
23 #define SK_C_PLUS_PLUS_END_GUARD
30 ///////////////////////////////////////////////////////////////////////////////////////
32 SK_C_PLUS_PLUS_BEGIN_GUARD
34 typedef uint32_t sk_color_t;
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)
44 UNKNOWN_SK_COLORTYPE = 0,
47 ARGB_4444_SK_COLORTYPE,
48 RGBA_8888_SK_COLORTYPE,
49 BGRA_8888_SK_COLORTYPE,
52 RGBA_F16_SK_COLORTYPE,
59 UNPREMUL_SK_ALPHATYPE,
63 INTERSECT_SK_CLIPTYPE,
64 DIFFERENCE_SK_CLIPTYPE,
68 UNKNOWN_SK_PIXELGEOMETRY,
69 RGB_H_SK_PIXELGEOMETRY,
70 BGR_H_SK_PIXELGEOMETRY,
71 RGB_V_SK_PIXELGEOMETRY,
72 BGR_V_SK_PIXELGEOMETRY,
78 sk_colortype_t colorType;
79 sk_alphatype_t alphaType;
83 sk_pixelgeometry_t pixelGeometry;
110 A sk_canvas_t encapsulates all of the state about drawing into a
111 destination This includes a reference to the destination itself,
112 and a stack of matrix/clip values.
114 typedef struct sk_canvas_t sk_canvas_t;
116 A sk_data_ holds an immutable data buffer.
118 typedef struct sk_data_t sk_data_t;
120 A sk_image_t is an abstraction for drawing a rectagle of pixels.
121 The content of the image is always immutable, though the actual
122 storage may change, if for example that image can be re-created via
123 encoded data or other means.
125 typedef struct sk_image_t sk_image_t;
127 A sk_maskfilter_t is an object that perform transformations on an
128 alpha-channel mask before drawing it; it may be installed into a
129 sk_paint_t. Each time a primitive is drawn, it is first
130 scan-converted into a alpha mask, which os handed to the
131 maskfilter, which may create a new mask is to render into the
134 typedef struct sk_maskfilter_t sk_maskfilter_t;
136 A sk_paint_t holds the style and color information about how to
137 draw geometries, text and bitmaps.
139 typedef struct sk_paint_t sk_paint_t;
141 A sk_path_t encapsulates compound (multiple contour) geometric
142 paths consisting of straight line segments, quadratic curves, and
145 typedef struct sk_path_t sk_path_t;
147 A sk_picture_t holds recorded canvas drawing commands to be played
148 back at a later time.
150 typedef struct sk_picture_t sk_picture_t;
152 A sk_picture_recorder_t holds a sk_canvas_t that records commands
153 to create a sk_picture_t.
155 typedef struct sk_picture_recorder_t sk_picture_recorder_t;
157 A sk_shader_t specifies the source color(s) for what is being drawn. If a
158 paint has no shader, then the paint's color is used. If the paint
159 has a shader, then the shader's color(s) are use instead, but they
160 are modulated by the paint's alpha.
162 typedef struct sk_shader_t sk_shader_t;
164 A sk_surface_t holds the destination for drawing to a canvas. For
165 raster drawing, the destination is an array of pixels in memory.
166 For GPU drawing, the destination is a texture or a framebuffer.
168 typedef struct sk_surface_t sk_surface_t;
171 CLEAR_SK_XFERMODE_MODE,
172 SRC_SK_XFERMODE_MODE,
173 DST_SK_XFERMODE_MODE,
174 SRCOVER_SK_XFERMODE_MODE,
175 DSTOVER_SK_XFERMODE_MODE,
176 SRCIN_SK_XFERMODE_MODE,
177 DSTIN_SK_XFERMODE_MODE,
178 SRCOUT_SK_XFERMODE_MODE,
179 DSTOUT_SK_XFERMODE_MODE,
180 SRCATOP_SK_XFERMODE_MODE,
181 DSTATOP_SK_XFERMODE_MODE,
182 XOR_SK_XFERMODE_MODE,
183 PLUS_SK_XFERMODE_MODE,
184 MODULATE_SK_XFERMODE_MODE,
185 SCREEN_SK_XFERMODE_MODE,
186 OVERLAY_SK_XFERMODE_MODE,
187 DARKEN_SK_XFERMODE_MODE,
188 LIGHTEN_SK_XFERMODE_MODE,
189 COLORDODGE_SK_XFERMODE_MODE,
190 COLORBURN_SK_XFERMODE_MODE,
191 HARDLIGHT_SK_XFERMODE_MODE,
192 SOFTLIGHT_SK_XFERMODE_MODE,
193 DIFFERENCE_SK_XFERMODE_MODE,
194 EXCLUSION_SK_XFERMODE_MODE,
195 MULTIPLY_SK_XFERMODE_MODE,
196 HUE_SK_XFERMODE_MODE,
197 SATURATION_SK_XFERMODE_MODE,
198 COLOR_SK_XFERMODE_MODE,
199 LUMINOSITY_SK_XFERMODE_MODE,
200 } sk_xfermode_mode_t;
202 //////////////////////////////////////////////////////////////////////////////////////////
226 uint32_t fFlags; // Bit field to identify which values are unknown
227 float fTop; // The greatest distance above the baseline for any glyph (will be <= 0)
228 float fAscent; // The recommended distance above the baseline (will be <= 0)
229 float fDescent; // The recommended distance below the baseline (will be >= 0)
230 float fBottom; // The greatest distance below the baseline for any glyph (will be >= 0)
231 float fLeading; // The recommended distance to add between lines of text (will be >= 0)
232 float fAvgCharWidth; // the average character width (>= 0)
233 float fMaxCharWidth; // the max character width (>= 0)
234 float fXMin; // The minimum bounding box x value for all glyphs
235 float fXMax; // The maximum bounding box x value for all glyphs
236 float fXHeight; // The height of an 'x' in px, or 0 if no 'x' in face
237 float fCapHeight; // The cap height (> 0), or 0 if cannot be determined.
238 float fUnderlineThickness; // underline thickness, or 0 if cannot be determined
239 float fUnderlinePosition; // underline position, or 0 if cannot be determined
242 // Flags for fFlags member of sk_fontmetrics_t
243 #define FONTMETRICS_FLAGS_UNDERLINE_THICKNESS_IS_VALID (1U << 0)
244 #define FONTMETRICS_FLAGS_UNDERLINE_POSITION_IS_VALID (1U << 1)
247 A lightweight managed string.
249 typedef struct sk_string_t sk_string_t;
252 A sk_bitmap_t is an abstraction that specifies a raster bitmap.
254 typedef struct sk_bitmap_t sk_bitmap_t;
255 typedef struct sk_colorfilter_t sk_colorfilter_t;
256 typedef struct sk_imagefilter_t sk_imagefilter_t;
257 typedef struct sk_imagefilter_croprect_t sk_imagefilter_croprect_t;
259 A sk_typeface_t pecifies the typeface and intrinsic style of a font.
260 This is used in the paint, along with optionally algorithmic settings like
261 textSize, textSkewX, textScaleX, kFakeBoldText_Mask, to specify
262 how text appears when drawn (and measured).
264 Typeface objects are immutable, and so they can be shared between threads.
266 typedef struct sk_typeface_t sk_typeface_t;
267 typedef uint32_t sk_font_table_tag_t;
269 * Abstraction layer directly on top of an image codec.
271 typedef struct sk_codec_t sk_codec_t;
272 typedef struct sk_colorspace_t sk_colorspace_t;
276 typedef struct sk_stream_t sk_stream_t;
277 typedef struct sk_stream_filestream_t sk_stream_filestream_t;
278 typedef struct sk_stream_asset_t sk_stream_asset_t;
279 typedef struct sk_stream_memorystream_t sk_stream_memorystream_t;
280 typedef struct sk_stream_streamrewindable_t sk_stream_streamrewindable_t;
281 typedef struct sk_wstream_t sk_wstream_t;
282 typedef struct sk_wstream_filestream_t sk_wstream_filestream_t;
283 typedef struct sk_wstream_dynamicmemorystream_t sk_wstream_dynamicmemorystream_t;
285 High-level API for creating a document-based canvas.
287 typedef struct sk_document_t sk_document_t;
296 POINTS_SK_POINT_MODE,
298 POLYGON_SK_POINT_MODE
303 CENTER_SK_TEXT_ALIGN,
308 UTF8_SK_TEXT_ENCODING,
309 UTF16_SK_TEXT_ENCODING,
310 UTF32_SK_TEXT_ENCODING,
311 GLYPH_ID_SK_TEXT_ENCODING
312 } sk_text_encoding_t;
315 WINDING_SK_PATH_FILLTYPE,
316 EVENODD_SK_PATH_FILLTYPE,
317 INVERSE_WINDING_SK_PATH_FILLTYPE,
318 INVERSE_EVENODD_SK_PATH_FILLTYPE,
319 } sk_path_filltype_t;
322 NORMAL_TYPEFACE_STYLE = 0,
323 BOLD_TYPEFACE_STYLE = 0x01,
324 ITALIC_TYPEFACE_STYLE = 0x02,
325 BOLD_ITALIC_TYPEFACE_STYLE = 0x03
326 } sk_typeface_style_t;
329 UPRIGHT_SK_FONT_STYLE_SLANT = 0,
330 ITALIC_SK_FONT_STYLE_SLANT = 1,
331 OBLIQUE_SK_FONT_STYLE_SLANT = 2,
332 } sk_font_style_slant_t;
335 NONE_SK_FILTER_QUALITY,
336 LOW_SK_FILTER_QUALITY,
337 MEDIUM_SK_FILTER_QUALITY,
338 HIGH_SK_FILTER_QUALITY
339 } sk_filter_quality_t;
342 HAS_LEFT_SK_CROP_RECT_FLAG = 0x01,
343 HAS_TOP_SK_CROP_RECT_FLAG = 0x02,
344 HAS_WIDTH_SK_CROP_RECT_FLAG = 0x04,
345 HAS_HEIGHT_SK_CROP_RECT_FLAG = 0x08,
346 HAS_ALL_SK_CROP_RECT_FLAG = 0x0F,
347 } sk_crop_rect_flags_t;
350 DRAW_SHADOW_AND_FOREGROUND_SK_DROP_SHADOW_IMAGE_FILTER_SHADOW_MODE,
351 DRAW_SHADOW_ONLY_SK_DROP_SHADOW_IMAGE_FILTER_SHADOW_MODE,
352 } sk_drop_shadow_image_filter_shadow_mode_t;
355 UNKNOWN_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
356 R_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
357 G_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
358 B_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
359 A_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
360 } sk_displacement_map_effect_channel_selector_type_t;
363 UNKNOWN_SK_IMAGE_ENCODER_TYPE,
364 BMP_SK_IMAGE_ENCODER_TYPE,
365 GIF_SK_IMAGE_ENCODER_TYPE,
366 ICO_SK_IMAGE_ENCODER_TYPE,
367 JPEG_SK_IMAGE_ENCODER_TYPE,
368 PNG_SK_IMAGE_ENCODER_TYPE,
369 WBMP_SK_IMAGE_ENCODER_TYPE,
370 WEBP_SK_IMAGE_ENCODER_TYPE,
371 KTX_SK_IMAGE_ENCODER_TYPE,
372 } sk_image_encoder_t;
375 CLAMP_SK_MATRIX_CONVOLUTION_TILEMODE,
376 REPEAT_SK_MATRIX_CONVOLUTION_TILEMODE,
377 CLAMP_TO_BLACK_SK_MATRIX_CONVOLUTION_TILEMODE,
378 } sk_matrix_convolution_tilemode_t;
381 The logical operations that can be performed when combining two regions.
384 DIFFERENCE_SK_REGION_OP, //!< subtract the op region from the first region
385 INTERSECT_SK_REGION_OP, //!< intersect the two regions
386 UNION_SK_REGION_OP, //!< union (inclusive-or) the two regions
387 XOR_SK_REGION_OP, //!< exclusive-or the two regions
388 REVERSE_DIFFERENCE_SK_REGION_OP, //!< subtract the first region from the op region
389 REPLACE_SK_REGION_OP, //!< replace the dst region with the op region
393 * Enum describing format of encoded data.
396 UNKNOWN_SK_ENCODED_FORMAT,
397 BMP_SK_ENCODED_FORMAT,
398 GIF_SK_ENCODED_FORMAT,
399 ICO_SK_ENCODED_FORMAT,
400 JPEG_SK_ENCODED_FORMAT,
401 PNG_SK_ENCODED_FORMAT,
402 WBMP_SK_ENCODED_FORMAT,
403 WEBP_SK_ENCODED_FORMAT,
404 PKM_SK_ENCODED_FORMAT,
405 KTX_SK_ENCODED_FORMAT,
406 ASTC_SK_ENCODED_FORMAT,
407 DNG_SK_ENCODED_FORMAT
408 } sk_encoded_format_t;
411 TOP_LEFT_SK_CODEC_ORIGIN = 1, // Default
412 TOP_RIGHT_SK_CODEC_ORIGIN = 2, // Reflected across y-axis
413 BOTTOM_RIGHT_SK_CODEC_ORIGIN = 3, // Rotated 180
414 BOTTOM_LEFT_SK_CODEC_ORIGIN = 4, // Reflected across x-axis
415 LEFT_TOP_SK_CODEC_ORIGIN = 5, // Reflected across x-axis, Rotated 90 CCW
416 RIGHT_TOP_SK_CODEC_ORIGIN = 6, // Rotated 90 CW
417 RIGHT_BOTTOM_SK_CODEC_ORIGIN = 7, // Reflected across x-axis, Rotated 90 CW
418 LEFT_BOTTOM_SK_CODEC_ORIGIN = 8, // Rotated 90 CCW
422 SUCCESS_SK_CODEC_RESULT,
423 INCOMPLETE_INPUT_SK_CODEC_RESULT,
424 INVALID_CONVERSION_SK_CODEC_RESULT,
425 INVALID_SCALE_SK_CODEC_RESULT,
426 INVALID_PARAMETERS_SK_CODEC_RESULT,
427 INVALID_INPUT_SK_CODEC_RESULT,
428 COULD_NOT_REWIND_SK_CODEC_RESULT,
429 UNIMPLEMENTED_SK_CODEC_RESULT,
433 YES_SK_CODEC_ZERO_INITIALIZED,
434 NO_SK_CODEC_ZERO_INITIALIZED,
435 } sk_codec_zero_initialized_t;
438 sk_codec_zero_initialized_t fZeroInitialized;
441 } sk_codec_options_t;
443 // The verbs that can be foudn on a path
454 typedef struct sk_path_iterator_t sk_path_iterator_t;
455 typedef struct sk_path_rawiterator_t sk_path_rawiterator_t;
458 APPEND_SK_PATH_ADD_MODE,
459 EXTEND_SK_PATH_ADD_MODE,
460 } sk_path_add_mode_t;
463 TRANSLATE_SK_PATH_EFFECT_1D_STYLE,
464 ROTATE_SK_PATH_EFFECT_1D_STYLE,
465 MORPH_SK_PATH_EFFECT_1D_STYLE,
466 } sk_path_effect_1d_style_t;
468 typedef struct sk_path_effect_t sk_path_effect_t;
477 MITER_SK_STROKE_JOIN,
478 ROUND_SK_STROKE_JOIN,
483 CLAMP_SK_SHADER_TILEMODE,
484 REPEAT_SK_SHADER_TILEMODE,
485 MIRROR_SK_SHADER_TILEMODE,
486 } sk_shader_tilemode_t;
489 NORMAL_SK_BLUR_STYLE, //!< fuzzy inside and outside
490 SOLID_SK_BLUR_STYLE, //!< solid inside, fuzzy outside
491 OUTER_SK_BLUR_STYLE, //!< nothing inside, fuzzy outside
492 INNER_SK_BLUR_STYLE, //!< fuzzy inside, nothing outside
496 CW_SK_PATH_DIRECTION,
497 CCW_SK_PATH_DIRECTION,
498 } sk_path_direction_t;
501 SMALL_SK_PATH_ARC_SIZE,
502 LARGE_SK_PATH_ARC_SIZE,
503 } sk_path_arc_size_t;
505 typedef struct sk_colortable_t sk_colortable_t;
507 typedef struct sk_pixelref_factory_t sk_pixelref_factory_t;
509 SK_C_PLUS_PLUS_END_GUARD