2 * Copyright 2014 Google Inc.
3 * Copyright 2015 Xamarin Inc.
4 * Copyright 2017 Microsoft Corporation. All rights reserved.
6 * Use of this source code is governed by a BSD-style license that can be
7 * found in the LICENSE file.
10 #ifndef sk_types_DEFINED
11 #define sk_types_DEFINED
17 #define SK_C_PLUS_PLUS_BEGIN_GUARD extern "C" {
18 #define SK_C_PLUS_PLUS_END_GUARD }
21 #define SK_C_PLUS_PLUS_BEGIN_GUARD
22 #define SK_C_PLUS_PLUS_END_GUARD
25 #if !defined(SK_C_API)
26 #if defined(SKIA_C_DLL)
28 #if SKIA_IMPLEMENTATION
29 #define SK_C_API __declspec(dllexport)
31 #define SK_C_API __declspec(dllimport)
34 #define SK_C_API __attribute__((visibility("default")))
41 ///////////////////////////////////////////////////////////////////////////////////////
43 SK_C_PLUS_PLUS_BEGIN_GUARD
45 typedef uint32_t sk_color_t;
46 typedef uint32_t sk_pmcolor_t;
48 /* This macro assumes all arguments are >=0 and <=255. */
49 #define sk_color_set_argb(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
50 #define sk_color_get_a(c) (((c) >> 24) & 0xFF)
51 #define sk_color_get_r(c) (((c) >> 16) & 0xFF)
52 #define sk_color_get_g(c) (((c) >> 8) & 0xFF)
53 #define sk_color_get_b(c) (((c) >> 0) & 0xFF)
56 UNKNOWN_SK_COLORTYPE = 0,
59 ARGB_4444_SK_COLORTYPE,
60 RGBA_8888_SK_COLORTYPE,
61 BGRA_8888_SK_COLORTYPE,
64 RGBA_F16_SK_COLORTYPE,
71 UNPREMUL_SK_ALPHATYPE,
75 UNKNOWN_SK_PIXELGEOMETRY,
76 RGB_H_SK_PIXELGEOMETRY,
77 BGR_H_SK_PIXELGEOMETRY,
78 RGB_V_SK_PIXELGEOMETRY,
79 BGR_V_SK_PIXELGEOMETRY,
83 USE_DEVICE_INDEPENDENT_FONTS_SK_SURFACE_PROPS_FLAGS = 1 << 0,
84 } sk_surfaceprops_flags_t;
87 sk_pixelgeometry_t pixelGeometry;
88 sk_surfaceprops_flags_t flags;
96 typedef sk_point_t sk_vector_t;
113 The sk_matrix_t struct holds a 3x3 perspective matrix for
114 transforming coordinates:
117 X = (M[0] * x + M[1] * y + M[2]) / (M[6] * x + M[7] * y + M[8]);
118 Y = (M[3] * x + M[4] * y + M[5]) / (M[6] * x + M[7] * y + M[8]);
120 Therefore, the identity matrix is
122 sk_matrix_t identity = {{1, 0, 0,
126 A matrix that scales by sx and sy is:
128 sk_matrix_t scale = {{sx, 0, 0,
132 A matrix that translates by tx and ty is:
134 sk_matrix_t translate = {{1, 0, tx,
138 A matrix that rotates around the origin by A radians:
140 sk_matrix_t rotate = {{cos(A), -sin(A), 0,
144 Two matrixes can be concatinated by:
146 void concat_matrices(sk_matrix_t* dst,
147 const sk_matrix_t* matrixU,
148 const sk_matrix_t* matrixV) {
149 const float* u = matrixU->mat;
150 const float* v = matrixV->mat;
151 sk_matrix_t result = {{
152 u[0] * v[0] + u[1] * v[3] + u[2] * v[6],
153 u[0] * v[1] + u[1] * v[4] + u[2] * v[7],
154 u[0] * v[2] + u[1] * v[5] + u[2] * v[8],
155 u[3] * v[0] + u[4] * v[3] + u[5] * v[6],
156 u[3] * v[1] + u[4] * v[4] + u[5] * v[7],
157 u[3] * v[2] + u[4] * v[5] + u[5] * v[8],
158 u[6] * v[0] + u[7] * v[3] + u[8] * v[6],
159 u[6] * v[1] + u[7] * v[4] + u[8] * v[7],
160 u[6] * v[2] + u[7] * v[5] + u[8] * v[8]
169 typedef struct sk_matrix44_t sk_matrix44_t;
172 IDENTITY_SK_MATRIX44_TYPE_MASK = 0,
173 TRANSLATE_SK_MATRIX44_TYPE_MASK = 0x01,
174 SCALE_SK_MATRIX44_TYPE_MASK = 0x02,
175 AFFINE_SK_MATRIX44_TYPE_MASK = 0x04,
176 PERSPECTIVE_SK_MATRIX44_TYPE_MASK = 0x08
177 } sk_matrix44_type_mask_t;
180 A sk_canvas_t encapsulates all of the state about drawing into a
181 destination This includes a reference to the destination itself,
182 and a stack of matrix/clip values.
184 typedef struct sk_canvas_t sk_canvas_t;
185 typedef struct sk_nodraw_canvas_t sk_nodraw_canvas_t;
186 typedef struct sk_nway_canvas_t sk_nway_canvas_t;
188 A sk_data_ holds an immutable data buffer.
190 typedef struct sk_data_t sk_data_t;
192 A sk_image_t is an abstraction for drawing a rectagle of pixels.
193 The content of the image is always immutable, though the actual
194 storage may change, if for example that image can be re-created via
195 encoded data or other means.
197 typedef struct sk_image_t sk_image_t;
199 A sk_maskfilter_t is an object that perform transformations on an
200 alpha-channel mask before drawing it; it may be installed into a
201 sk_paint_t. Each time a primitive is drawn, it is first
202 scan-converted into a alpha mask, which os handed to the
203 maskfilter, which may create a new mask is to render into the
206 typedef struct sk_maskfilter_t sk_maskfilter_t;
208 A sk_paint_t holds the style and color information about how to
209 draw geometries, text and bitmaps.
211 typedef struct sk_paint_t sk_paint_t;
213 A sk_path_t encapsulates compound (multiple contour) geometric
214 paths consisting of straight line segments, quadratic curves, and
217 typedef struct sk_path_t sk_path_t;
219 A sk_picture_t holds recorded canvas drawing commands to be played
220 back at a later time.
222 typedef struct sk_picture_t sk_picture_t;
224 A sk_picture_recorder_t holds a sk_canvas_t that records commands
225 to create a sk_picture_t.
227 typedef struct sk_picture_recorder_t sk_picture_recorder_t;
229 A sk_shader_t specifies the source color(s) for what is being drawn. If a
230 paint has no shader, then the paint's color is used. If the paint
231 has a shader, then the shader's color(s) are use instead, but they
232 are modulated by the paint's alpha.
234 typedef struct sk_shader_t sk_shader_t;
236 A sk_surface_t holds the destination for drawing to a canvas. For
237 raster drawing, the destination is an array of pixels in memory.
238 For GPU drawing, the destination is a texture or a framebuffer.
240 typedef struct sk_surface_t sk_surface_t;
242 The sk_region encapsulates the geometric region used to specify
243 clipping areas for drawing.
245 typedef struct sk_region_t sk_region_t;
251 SRCOVER_SK_BLENDMODE,
252 DSTOVER_SK_BLENDMODE,
257 SRCATOP_SK_BLENDMODE,
258 DSTATOP_SK_BLENDMODE,
261 MODULATE_SK_BLENDMODE,
263 OVERLAY_SK_BLENDMODE,
265 LIGHTEN_SK_BLENDMODE,
266 COLORDODGE_SK_BLENDMODE,
267 COLORBURN_SK_BLENDMODE,
268 HARDLIGHT_SK_BLENDMODE,
269 SOFTLIGHT_SK_BLENDMODE,
270 DIFFERENCE_SK_BLENDMODE,
271 EXCLUSION_SK_BLENDMODE,
272 MULTIPLY_SK_BLENDMODE,
274 SATURATION_SK_BLENDMODE,
276 LUMINOSITY_SK_BLENDMODE,
279 //////////////////////////////////////////////////////////////////////////////////////////
303 uint32_t fFlags; // Bit field to identify which values are unknown
304 float fTop; // The greatest distance above the baseline for any glyph (will be <= 0)
305 float fAscent; // The recommended distance above the baseline (will be <= 0)
306 float fDescent; // The recommended distance below the baseline (will be >= 0)
307 float fBottom; // The greatest distance below the baseline for any glyph (will be >= 0)
308 float fLeading; // The recommended distance to add between lines of text (will be >= 0)
309 float fAvgCharWidth; // the average character width (>= 0)
310 float fMaxCharWidth; // the max character width (>= 0)
311 float fXMin; // The minimum bounding box x value for all glyphs
312 float fXMax; // The maximum bounding box x value for all glyphs
313 float fXHeight; // The height of an 'x' in px, or 0 if no 'x' in face
314 float fCapHeight; // The cap height (> 0), or 0 if cannot be determined.
315 float fUnderlineThickness; // underline thickness, or 0 if cannot be determined
316 float fUnderlinePosition; // underline position, or 0 if cannot be determined
319 // Flags for fFlags member of sk_fontmetrics_t
320 #define FONTMETRICS_FLAGS_UNDERLINE_THICKNESS_IS_VALID (1U << 0)
321 #define FONTMETRICS_FLAGS_UNDERLINE_POSITION_IS_VALID (1U << 1)
324 A lightweight managed string.
326 typedef struct sk_string_t sk_string_t;
329 A sk_bitmap_t is an abstraction that specifies a raster bitmap.
331 typedef struct sk_bitmap_t sk_bitmap_t;
332 typedef struct sk_pixmap_t sk_pixmap_t;
333 typedef struct sk_pixelserializer_t sk_pixelserializer_t;
334 typedef struct sk_colorfilter_t sk_colorfilter_t;
335 typedef struct sk_imagefilter_t sk_imagefilter_t;
336 typedef struct sk_imagefilter_croprect_t sk_imagefilter_croprect_t;
339 A sk_typeface_t pecifies the typeface and intrinsic style of a font.
340 This is used in the paint, along with optionally algorithmic settings like
341 textSize, textSkewX, textScaleX, kFakeBoldText_Mask, to specify
342 how text appears when drawn (and measured).
344 Typeface objects are immutable, and so they can be shared between threads.
346 typedef struct sk_typeface_t sk_typeface_t;
347 typedef uint32_t sk_font_table_tag_t;
348 typedef struct sk_fontmgr_t sk_fontmgr_t;
350 * Abstraction layer directly on top of an image codec.
352 typedef struct sk_codec_t sk_codec_t;
353 typedef struct sk_colorspace_t sk_colorspace_t;
357 typedef struct sk_stream_t sk_stream_t;
358 typedef struct sk_stream_filestream_t sk_stream_filestream_t;
359 typedef struct sk_stream_asset_t sk_stream_asset_t;
360 typedef struct sk_stream_memorystream_t sk_stream_memorystream_t;
361 typedef struct sk_stream_streamrewindable_t sk_stream_streamrewindable_t;
362 typedef struct sk_wstream_t sk_wstream_t;
363 typedef struct sk_wstream_filestream_t sk_wstream_filestream_t;
364 typedef struct sk_wstream_dynamicmemorystream_t sk_wstream_dynamicmemorystream_t;
366 High-level API for creating a document-based canvas.
368 typedef struct sk_document_t sk_document_t;
377 POINTS_SK_POINT_MODE,
379 POLYGON_SK_POINT_MODE
384 CENTER_SK_TEXT_ALIGN,
389 UTF8_SK_TEXT_ENCODING,
390 UTF16_SK_TEXT_ENCODING,
391 UTF32_SK_TEXT_ENCODING,
392 GLYPH_ID_SK_TEXT_ENCODING
393 } sk_text_encoding_t;
396 WINDING_SK_PATH_FILLTYPE,
397 EVENODD_SK_PATH_FILLTYPE,
398 INVERSE_WINDING_SK_PATH_FILLTYPE,
399 INVERSE_EVENODD_SK_PATH_FILLTYPE,
400 } sk_path_filltype_t;
403 NORMAL_TYPEFACE_STYLE = 0,
404 BOLD_TYPEFACE_STYLE = 0x01,
405 ITALIC_TYPEFACE_STYLE = 0x02,
406 BOLD_ITALIC_TYPEFACE_STYLE = 0x03
407 } sk_typeface_style_t;
410 UPRIGHT_SK_FONT_STYLE_SLANT = 0,
411 ITALIC_SK_FONT_STYLE_SLANT = 1,
412 OBLIQUE_SK_FONT_STYLE_SLANT = 2,
413 } sk_font_style_slant_t;
416 NONE_SK_FILTER_QUALITY,
417 LOW_SK_FILTER_QUALITY,
418 MEDIUM_SK_FILTER_QUALITY,
419 HIGH_SK_FILTER_QUALITY
420 } sk_filter_quality_t;
423 HAS_LEFT_SK_CROP_RECT_FLAG = 0x01,
424 HAS_TOP_SK_CROP_RECT_FLAG = 0x02,
425 HAS_WIDTH_SK_CROP_RECT_FLAG = 0x04,
426 HAS_HEIGHT_SK_CROP_RECT_FLAG = 0x08,
427 HAS_ALL_SK_CROP_RECT_FLAG = 0x0F,
428 } sk_crop_rect_flags_t;
431 DRAW_SHADOW_AND_FOREGROUND_SK_DROP_SHADOW_IMAGE_FILTER_SHADOW_MODE,
432 DRAW_SHADOW_ONLY_SK_DROP_SHADOW_IMAGE_FILTER_SHADOW_MODE,
433 } sk_drop_shadow_image_filter_shadow_mode_t;
436 UNKNOWN_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
437 R_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
438 G_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
439 B_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
440 A_SK_DISPLACEMENT_MAP_EFFECT_CHANNEL_SELECTOR_TYPE,
441 } sk_displacement_map_effect_channel_selector_type_t;
444 CLAMP_SK_MATRIX_CONVOLUTION_TILEMODE,
445 REPEAT_SK_MATRIX_CONVOLUTION_TILEMODE,
446 CLAMP_TO_BLACK_SK_MATRIX_CONVOLUTION_TILEMODE,
447 } sk_matrix_convolution_tilemode_t;
450 The logical operations that can be performed when combining two regions.
453 DIFFERENCE_SK_REGION_OP, //!< subtract the op region from the first region
454 INTERSECT_SK_REGION_OP, //!< intersect the two regions
455 UNION_SK_REGION_OP, //!< union (inclusive-or) the two regions
456 XOR_SK_REGION_OP, //!< exclusive-or the two regions
457 REVERSE_DIFFERENCE_SK_REGION_OP, //!< subtract the first region from the op region
458 REPLACE_SK_REGION_OP, //!< replace the dst region with the op region
462 DIFFERENCE_SK_CLIPOP,
467 * Enum describing format of encoded data.
470 BMP_SK_ENCODED_FORMAT,
471 GIF_SK_ENCODED_FORMAT,
472 ICO_SK_ENCODED_FORMAT,
473 JPEG_SK_ENCODED_FORMAT,
474 PNG_SK_ENCODED_FORMAT,
475 WBMP_SK_ENCODED_FORMAT,
476 WEBP_SK_ENCODED_FORMAT,
477 PKM_SK_ENCODED_FORMAT,
478 KTX_SK_ENCODED_FORMAT,
479 ASTC_SK_ENCODED_FORMAT,
480 DNG_SK_ENCODED_FORMAT
481 } sk_encoded_image_format_t;
484 TOP_LEFT_SK_CODEC_ORIGIN = 1, // Default
485 TOP_RIGHT_SK_CODEC_ORIGIN = 2, // Reflected across y-axis
486 BOTTOM_RIGHT_SK_CODEC_ORIGIN = 3, // Rotated 180
487 BOTTOM_LEFT_SK_CODEC_ORIGIN = 4, // Reflected across x-axis
488 LEFT_TOP_SK_CODEC_ORIGIN = 5, // Reflected across x-axis, Rotated 90 CCW
489 RIGHT_TOP_SK_CODEC_ORIGIN = 6, // Rotated 90 CW
490 RIGHT_BOTTOM_SK_CODEC_ORIGIN = 7, // Reflected across x-axis, Rotated 90 CW
491 LEFT_BOTTOM_SK_CODEC_ORIGIN = 8, // Rotated 90 CCW
495 SUCCESS_SK_CODEC_RESULT,
496 INCOMPLETE_INPUT_SK_CODEC_RESULT,
497 INVALID_CONVERSION_SK_CODEC_RESULT,
498 INVALID_SCALE_SK_CODEC_RESULT,
499 INVALID_PARAMETERS_SK_CODEC_RESULT,
500 INVALID_INPUT_SK_CODEC_RESULT,
501 COULD_NOT_REWIND_SK_CODEC_RESULT,
502 UNIMPLEMENTED_SK_CODEC_RESULT,
506 YES_SK_CODEC_ZERO_INITIALIZED,
507 NO_SK_CODEC_ZERO_INITIALIZED,
508 } sk_codec_zero_initialized_t;
511 RESPECT_SK_TRANSFER_FUNCTION_BEHAVIOR,
512 IGNORE_SK_TRANSFER_FUNCTION_BEHAVIOR,
513 } sk_transfer_function_behavior_t;
516 sk_codec_zero_initialized_t fZeroInitialized;
520 sk_transfer_function_behavior_t fPremulBehavior;
521 } sk_codec_options_t;
524 TOP_DOWN_SK_CODEC_SCANLINE_ORDER,
525 BOTTOM_UP_SK_CODEC_SCANLINE_ORDER,
526 } sk_codec_scanline_order_t;
528 // The verbs that can be foudn on a path
539 typedef struct sk_path_iterator_t sk_path_iterator_t;
540 typedef struct sk_path_rawiterator_t sk_path_rawiterator_t;
543 APPEND_SK_PATH_ADD_MODE,
544 EXTEND_SK_PATH_ADD_MODE,
545 } sk_path_add_mode_t;
548 LINE_SK_PATH_SEGMENT_MASK = 1 << 0,
549 QUAD_SK_PATH_SEGMENT_MASK = 1 << 1,
550 CONIC_SK_PATH_SEGMENT_MASK = 1 << 2,
551 CUBIC_SK_PATH_SEGMENT_MASK = 1 << 3,
552 } sk_path_segment_mask_t;
555 TRANSLATE_SK_PATH_EFFECT_1D_STYLE,
556 ROTATE_SK_PATH_EFFECT_1D_STYLE,
557 MORPH_SK_PATH_EFFECT_1D_STYLE,
558 } sk_path_effect_1d_style_t;
560 typedef struct sk_path_effect_t sk_path_effect_t;
569 MITER_SK_STROKE_JOIN,
570 ROUND_SK_STROKE_JOIN,
575 CLAMP_SK_SHADER_TILEMODE,
576 REPEAT_SK_SHADER_TILEMODE,
577 MIRROR_SK_SHADER_TILEMODE,
578 } sk_shader_tilemode_t;
581 NORMAL_SK_BLUR_STYLE, //!< fuzzy inside and outside
582 SOLID_SK_BLUR_STYLE, //!< solid inside, fuzzy outside
583 OUTER_SK_BLUR_STYLE, //!< nothing inside, fuzzy outside
584 INNER_SK_BLUR_STYLE, //!< fuzzy inside, nothing outside
588 NONE_SK_BLUR_MASK_FILTER_BLUR_FLAGS = 0x00,
589 IGNORE_TRANSFORM_SK_BLUR_MASK_FILTER_BLUR_FLAGS = 0x01,
590 HIGHT_QUALITY_SK_BLUR_MASK_FILTER_BLUR_FLAGS = 0x02,
591 ALL_SK_BLUR_MASK_FILTER_BLUR_FLAGS = 0x03,
592 } sk_blurmaskfilter_blurflags_t;
595 CW_SK_PATH_DIRECTION,
596 CCW_SK_PATH_DIRECTION,
597 } sk_path_direction_t;
600 SMALL_SK_PATH_ARC_SIZE,
601 LARGE_SK_PATH_ARC_SIZE,
602 } sk_path_arc_size_t;
606 STROKE_SK_PAINT_STYLE,
607 STROKE_AND_FILL_SK_PAINT_STYLE,
611 NO_HINTING_SK_PAINT_HINTING,
612 SLIGHT_HINTING_SK_PAINT_HINTING,
613 NORMAL_HINTING_SK_PAINT_HINTING,
614 FULL_HINTING_SK_PAINT_HINTING,
615 } sk_paint_hinting_t;
617 typedef struct sk_colortable_t sk_colortable_t;
619 typedef struct sk_pixelref_factory_t sk_pixelref_factory_t;
622 BOX_SK_BITMAP_SCALER_RESIZE_METHOD,
623 TRIANGLE_SK_BITMAP_SCALER_RESIZE_METHOD,
624 LANCZOS3_SK_BITMAP_SCALER_RESIZE_METHOD,
625 HAMMING_SK_BITMAP_SCALER_RESIZE_METHOD,
626 MITCHELL_SK_BITMAP_SCALER_RESIZE_METHOD,
627 } sk_bitmapscaler_resizemethod_t;
630 TOP_LEFT_GR_SURFACE_ORIGIN = 1,
631 BOTTOM_LEFT_GR_SURFACE_ORIGIN,
632 } gr_surfaceorigin_t;
635 UNKNOWN_GR_PIXEL_CONFIG,
636 ALPHA_8_GR_PIXEL_CONFIG,
637 GRAY_8_GR_PIXEL_CONFIG,
638 RGB_565_GR_PIXEL_CONFIG,
639 RGBA_4444_GR_PIXEL_CONFIG,
640 RGBA_8888_GR_PIXEL_CONFIG,
641 BGRA_8888_GR_PIXEL_CONFIG,
642 SRGBA_8888_GR_PIXEL_CONFIG,
643 SBGRA_8888_GR_PIXEL_CONFIG,
644 RGBA_8888_SINT_GR_PIXEL_CONFIG,
645 RGBA_FLOAT_GR_PIXEL_CONFIG,
646 RG_FLOAT_GR_PIXEL_CONFIG,
647 ALPHA_HALF_GR_PIXEL_CONFIG,
648 RGBA_HALF_GR_PIXEL_CONFIG,
652 BW_SK_MASK_FORMAT, //!< 1bit per pixel mask (e.g. monochrome)
653 A8_SK_MASK_FORMAT, //!< 8bits per pixel mask (e.g. antialiasing)
654 THREE_D_SK_MASK_FORMAT, //!< 3 8bit per pixl planes: alpha, mul, add
655 ARGB32_SK_MASK_FORMAT, //!< SkPMColor
656 LCD16_SK_MASK_FORMAT, //!< 565 alpha for r/g/b
663 sk_mask_format_t fFormat;
667 NONE_GR_CONTEXT_FLUSHBITS = 0,
668 DISCARD_GR_CONTEXT_FLUSHBITS = 0x2,
669 } gr_context_flushbits_t;
671 typedef intptr_t gr_backendobject_t;
676 gr_pixelconfig_t fConfig;
677 gr_surfaceorigin_t fOrigin;
680 gr_backendobject_t fRenderTargetHandle;
681 } gr_backend_rendertarget_desc_t;
684 NONE_GR_BACKEND_TEXTURE_FLAGS = 0,
685 RENDER_TARGET_GR_BACKEND_TEXTURE_FLAGS = 1,
686 } gr_backendtexture_flags_t;
689 gr_backendtexture_flags_t fFlags;
690 gr_surfaceorigin_t fOrigin;
693 gr_pixelconfig_t fConfig;
695 gr_backendobject_t fTextureHandle;
696 } gr_backend_texture_desc_t;
698 typedef struct gr_context_t gr_context_t;
701 NONE_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 0,
702 DASHLINE_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 0,
703 STENCIL_AND_COVER_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 1,
704 MSAA_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 2,
705 AA_HAIRLINE_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 3,
706 AA_CONVEX_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 4,
707 AA_LINEARIZING_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 5,
708 SMALL_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 6,
709 TESSELLATING_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 7,
710 DEFAULT_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = 1 << 8,
712 ALL_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS = DEFAULT_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS | (DEFAULT_GR_CONTEXT_OPTIONS_GPU_PATH_RENDERERS - 1)
713 } gr_contextoptions_gpupathrenderers_t;
716 bool fSuppressPrints;
717 int fMaxTextureSizeOverride;
718 int fMaxTileSizeOverride;
719 bool fSuppressDualSourceBlending;
720 int fBufferMapThreshold;
721 bool fUseDrawInsteadOfPartialRenderTargetWrite;
723 bool fUseShaderSwizzling;
724 bool fDoManualMipmapping;
725 bool fEnableInstancedRendering;
726 bool fAllowPathMaskCaching;
727 bool fRequireDecodeDisableForSRGB;
728 bool fDisableGpuYUVConversion;
729 bool fSuppressPathRendering;
731 gr_contextoptions_gpupathrenderers_t fGpuPathRenderers;
732 float fGlyphCacheTextureMaximumBytes;
733 bool fAvoidStencilBuffers;
734 } gr_context_options_t;
741 typedef intptr_t gr_backendcontext_t;
743 typedef struct gr_glinterface_t gr_glinterface_t;
745 typedef void (*gr_gl_func_ptr)(void);
746 typedef gr_gl_func_ptr (*gr_gl_get_proc)(void* ctx, const char* name);
749 DIFFERENCE_SK_PATHOP,
753 REVERSE_DIFFERENCE_SK_PATHOP,
756 typedef struct sk_opbuilder_t sk_opbuilder_t;
759 UNKNOWN_SK_PATH_CONVEXITY,
760 CONVEX_SK_PATH_CONVEXITY,
761 CONCAVE_SK_PATH_CONVEXITY,
762 } sk_path_convexity_t;
765 DEFAULT_SK_LATTICE_FLAGS,
766 TRANSPARENT_SK_LATTICE_FLAGS = 1 << 0,
767 } sk_lattice_flags_t;
772 const sk_lattice_flags_t* fFlags;
775 const sk_irect_t* fBounds;
778 typedef struct sk_pathmeasure_t sk_pathmeasure_t;
781 GET_POSITION_SK_PATHMEASURE_MATRIXFLAGS = 0x01,
782 GET_TANGENT_SK_PATHMEASURE_MATRIXFLAGS = 0x02,
783 GET_POS_AND_TAN_SK_PATHMEASURE_MATRIXFLAGS = GET_POSITION_SK_PATHMEASURE_MATRIXFLAGS | GET_TANGENT_SK_PATHMEASURE_MATRIXFLAGS,
784 } sk_pathmeasure_matrixflags_t;
786 typedef void (*sk_bitmap_release_proc)(void* addr, void* context);
788 typedef void (*sk_data_release_proc)(const void* ptr, void* context);
790 typedef void (*sk_image_raster_release_proc)(const void* addr, void* context);
791 typedef void (*sk_image_texture_release_proc)(void* context);
794 ALLOW_SK_IMAGE_CACHING_HINT,
795 DISALLOW_SK_IMAGE_CACHING_HINT,
796 } sk_image_caching_hint_t;
799 ZERO_PIXELS_SK_BITMAP_ALLOC_FLAGS = 1 << 0,
800 } sk_bitmap_allocflags_t;
803 int16_t fTimeZoneMinutes;
811 } sk_time_datetime_t;
815 sk_string_t* fAuthor;
816 sk_string_t* fSubject;
817 sk_string_t* fKeywords;
818 sk_string_t* fCreator;
819 sk_string_t* fProducer;
820 sk_time_datetime_t* fCreation;
821 sk_time_datetime_t* fModified;
822 } sk_document_pdf_metadata_t;
825 OPAQUE_SK_ENCODEDINFO_ALPHA,
826 UNPREMUL_SK_ENCODEDINFO_ALPHA,
827 BINARY_SK_ENCODEDINFO_ALPHA,
828 } sk_encodedinfo_alpha_t;
831 GRAY_SK_ENCODEDINFO_COLOR,
832 GRAY_ALPHA_SK_ENCODEDINFO_COLOR,
833 PALETTE_SK_ENCODEDINFO_COLOR,
834 RGB_SK_ENCODEDINFO_COLOR,
835 RGBA_SK_ENCODEDINFO_COLOR,
836 BGR_SK_ENCODEDINFO_COLOR,
837 BGRX_SK_ENCODEDINFO_COLOR,
838 BGRA_SK_ENCODEDINFO_COLOR,
839 YUV_SK_ENCODEDINFO_COLOR,
840 YUVA_SK_ENCODEDINFO_COLOR,
841 INVERTED_CMYK_SK_ENCODEDINFO_COLOR,
842 YCCK_SK_ENCODEDINFO_COLOR,
843 } sk_encodedinfo_color_t;
846 SRGB_SK_COLORSPACE_NAMED,
847 ADOBE_RGB_SK_COLORSPACE_NAMED,
848 SRGB_LINEAR_SK_COLORSPACE_NAMED,
849 } sk_colorspace_named_t;
852 sk_colorspace_t* colorspace;
855 sk_colortype_t colorType;
856 sk_alphatype_t alphaType;
860 sk_encodedinfo_color_t fColor;
861 sk_encodedinfo_alpha_t fAlpha;
862 uint8_t fBitsPerComponent;
869 sk_alphatype_t fAlphaType;
870 } sk_codec_frameinfo_t;
872 typedef struct sk_xmlstreamwriter_t sk_xmlstreamwriter_t;
873 typedef struct sk_xmlwriter_t sk_xmlwriter_t;
875 typedef struct sk_svgcanvas_t sk_svgcanvas_t;
877 typedef struct sk_3dview_t sk_3dview_t;
880 TRIANGLES_SK_VERTICES_VERTEX_MODE,
881 TRIANGLE_STRIP_SK_VERTICES_VERTEX_MODE,
882 TRIANGLE_FAN_SK_VERTICES_VERTEX_MODE,
883 } sk_vertices_vertex_mode_t;
885 typedef struct sk_vertices_t sk_vertices_t;
888 LINEAR_SK_COLORSPACE_RENDER_TARGET_GAMMA,
889 SRGB_SK_COLORSPACE_RENDER_TARGET_GAMMA,
890 } sk_colorspace_render_target_gamma_t;
893 SRGB_SK_COLORSPACE_GAMUT,
894 ADOBE_RGB_SK_COLORSPACE_GAMUT,
895 DCIP3_D65_SK_COLORSPACE_GAMUT,
896 REC2020_SK_COLORSPACE_GAMUT,
897 } sk_colorspace_gamut_t;
907 } sk_colorspace_transfer_fn_t;
914 } sk_colorspaceprimaries_t;
917 NO_INVERT_SK_HIGH_CONTRAST_CONFIG_INVERT_STYLE,
918 INVERT_BRIGHTNESS_SK_HIGH_CONTRAST_CONFIG_INVERT_STYLE,
919 INVERT_LIGHTNESS_SK_HIGH_CONTRAST_CONFIG_INVERT_STYLE,
920 } sk_highcontrastconfig_invertstyle_t;
924 sk_highcontrastconfig_invertstyle_t fInvertStyle;
926 } sk_highcontrastconfig_t;
929 ZERO_SK_PNGENCODER_FILTER_FLAGS = 0x00,
930 NONE_SK_PNGENCODER_FILTER_FLAGS = 0x08,
931 SUB_SK_PNGENCODER_FILTER_FLAGS = 0x10,
932 UP_SK_PNGENCODER_FILTER_FLAGS = 0x20,
933 AVG_SK_PNGENCODER_FILTER_FLAGS = 0x40,
934 PAETH_SK_PNGENCODER_FILTER_FLAGS = 0x80,
935 ALL_SK_PNGENCODER_FILTER_FLAGS = NONE_SK_PNGENCODER_FILTER_FLAGS |
936 SUB_SK_PNGENCODER_FILTER_FLAGS |
937 UP_SK_PNGENCODER_FILTER_FLAGS |
938 AVG_SK_PNGENCODER_FILTER_FLAGS |
939 PAETH_SK_PNGENCODER_FILTER_FLAGS,
940 } sk_pngencoder_filterflags_t;
943 sk_pngencoder_filterflags_t fFilterFlags;
945 sk_transfer_function_behavior_t fUnpremulBehavior;
946 } sk_pngencoder_options_t;
949 DOWNSAMPLE_420_SK_JPEGENCODER_DOWNSAMPLE,
950 DOWNSAMPLE_422_SK_JPEGENCODER_DOWNSAMPLE,
951 DOWNSAMPLE_444_SK_JPEGENCODER_DOWNSAMPLE,
952 } sk_jpegencoder_downsample_t;
955 IGNORE_SK_JPEGENCODER_ALPHA_OPTION,
956 BLEND_ON_BLACK_SK_JPEGENCODER_ALPHA_OPTION,
957 } sk_jpegencoder_alphaoption_t;
961 sk_jpegencoder_downsample_t fDownsample;
962 sk_jpegencoder_alphaoption_t fAlphaOption;
963 sk_transfer_function_behavior_t fBlendBehavior;
964 } sk_jpegencoder_options_t;
967 LOSSY_SK_WEBPENCODER_COMPTRESSION,
968 LOSSLESS_SK_WEBPENCODER_COMPTRESSION,
969 } sk_webpencoder_compression_t;
972 sk_webpencoder_compression_t fCompression;
974 sk_transfer_function_behavior_t fUnpremulBehavior;
975 } sk_webpencoder_options_t;
977 SK_C_PLUS_PLUS_END_GUARD