1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4#![allow(unused)]
5#![allow(rustdoc::invalid_codeblock_attributes)]
6#![allow(rustdoc::invalid_rust_codeblocks)]
7#![allow(rustdoc::broken_intra_doc_links)]
8pub const __bool_true_false_are_defined: u32 = 1;
11pub const true_: u32 = 1;
12pub const false_: u32 = 0;
13pub const _STDINT_H: u32 = 1;
14pub const _FEATURES_H: u32 = 1;
15pub const _DEFAULT_SOURCE: u32 = 1;
16pub const __GLIBC_USE_ISOC2Y: u32 = 0;
17pub const __GLIBC_USE_ISOC23: u32 = 0;
18pub const __USE_ISOC11: u32 = 1;
19pub const __USE_ISOC99: u32 = 1;
20pub const __USE_ISOC95: u32 = 1;
21pub const __USE_POSIX_IMPLICITLY: u32 = 1;
22pub const _POSIX_SOURCE: u32 = 1;
23pub const _POSIX_C_SOURCE: u32 = 200809;
24pub const __USE_POSIX: u32 = 1;
25pub const __USE_POSIX2: u32 = 1;
26pub const __USE_POSIX199309: u32 = 1;
27pub const __USE_POSIX199506: u32 = 1;
28pub const __USE_XOPEN2K: u32 = 1;
29pub const __USE_XOPEN2K8: u32 = 1;
30pub const _ATFILE_SOURCE: u32 = 1;
31pub const __WORDSIZE: u32 = 64;
32pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
33pub const __SYSCALL_WORDSIZE: u32 = 64;
34pub const __TIMESIZE: u32 = 64;
35pub const __USE_TIME_BITS64: u32 = 1;
36pub const __USE_MISC: u32 = 1;
37pub const __USE_ATFILE: u32 = 1;
38pub const __USE_FORTIFY_LEVEL: u32 = 0;
39pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0;
40pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0;
41pub const __GLIBC_USE_C23_STRTOL: u32 = 0;
42pub const _STDC_PREDEF_H: u32 = 1;
43pub const __STDC_IEC_559__: u32 = 1;
44pub const __STDC_IEC_60559_BFP__: u32 = 201404;
45pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
46pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404;
47pub const __STDC_ISO_10646__: u32 = 201706;
48pub const __GNU_LIBRARY__: u32 = 6;
49pub const __GLIBC__: u32 = 2;
50pub const __GLIBC_MINOR__: u32 = 41;
51pub const _SYS_CDEFS_H: u32 = 1;
52pub const __glibc_c99_flexarr_available: u32 = 1;
53pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0;
54pub const __HAVE_GENERIC_SELECTION: u32 = 1;
55pub const __GLIBC_USE_LIB_EXT2: u32 = 0;
56pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0;
57pub const __GLIBC_USE_IEC_60559_BFP_EXT_C23: u32 = 0;
58pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0;
59pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0;
60pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C23: u32 = 0;
61pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0;
62pub const _BITS_TYPES_H: u32 = 1;
63pub const _BITS_TYPESIZES_H: u32 = 1;
64pub const __OFF_T_MATCHES_OFF64_T: u32 = 1;
65pub const __INO_T_MATCHES_INO64_T: u32 = 1;
66pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1;
67pub const __STATFS_MATCHES_STATFS64: u32 = 1;
68pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1;
69pub const __FD_SETSIZE: u32 = 1024;
70pub const _BITS_TIME64_H: u32 = 1;
71pub const _BITS_WCHAR_H: u32 = 1;
72pub const _BITS_STDINT_INTN_H: u32 = 1;
73pub const _BITS_STDINT_UINTN_H: u32 = 1;
74pub const _BITS_STDINT_LEAST_H: u32 = 1;
75pub const INT8_MIN: i32 = -128;
76pub const INT16_MIN: i32 = -32768;
77pub const INT32_MIN: i32 = -2147483648;
78pub const INT8_MAX: u32 = 127;
79pub const INT16_MAX: u32 = 32767;
80pub const INT32_MAX: u32 = 2147483647;
81pub const UINT8_MAX: u32 = 255;
82pub const UINT16_MAX: u32 = 65535;
83pub const UINT32_MAX: u32 = 4294967295;
84pub const INT_LEAST8_MIN: i32 = -128;
85pub const INT_LEAST16_MIN: i32 = -32768;
86pub const INT_LEAST32_MIN: i32 = -2147483648;
87pub const INT_LEAST8_MAX: u32 = 127;
88pub const INT_LEAST16_MAX: u32 = 32767;
89pub const INT_LEAST32_MAX: u32 = 2147483647;
90pub const UINT_LEAST8_MAX: u32 = 255;
91pub const UINT_LEAST16_MAX: u32 = 65535;
92pub const UINT_LEAST32_MAX: u32 = 4294967295;
93pub const INT_FAST8_MIN: i32 = -128;
94pub const INT_FAST16_MIN: i64 = -9223372036854775808;
95pub const INT_FAST32_MIN: i64 = -9223372036854775808;
96pub const INT_FAST8_MAX: u32 = 127;
97pub const INT_FAST16_MAX: u64 = 9223372036854775807;
98pub const INT_FAST32_MAX: u64 = 9223372036854775807;
99pub const UINT_FAST8_MAX: u32 = 255;
100pub const UINT_FAST16_MAX: i32 = -1;
101pub const UINT_FAST32_MAX: i32 = -1;
102pub const INTPTR_MIN: i64 = -9223372036854775808;
103pub const INTPTR_MAX: u64 = 9223372036854775807;
104pub const UINTPTR_MAX: i32 = -1;
105pub const PTRDIFF_MIN: i64 = -9223372036854775808;
106pub const PTRDIFF_MAX: u64 = 9223372036854775807;
107pub const SIG_ATOMIC_MIN: i32 = -2147483648;
108pub const SIG_ATOMIC_MAX: u32 = 2147483647;
109pub const SIZE_MAX: i32 = -1;
110pub const WINT_MIN: u32 = 0;
111pub const WINT_MAX: u32 = 4294967295;
112pub const IMPELLER_VERSION_VARIANT: u32 = 1;
113pub const IMPELLER_VERSION_MAJOR: u32 = 1;
114pub const IMPELLER_VERSION_MINOR: u32 = 3;
115pub const IMPELLER_VERSION_PATCH: u32 = 0;
116pub type wchar_t = ::std::os::raw::c_int;
117#[repr(C)]
118#[repr(align(16))]
119#[derive(Debug, Default, Copy, Clone)]
120pub struct max_align_t {
121 pub __clang_max_align_nonce1: ::std::os::raw::c_longlong,
122 pub __bindgen_padding_0: u64,
123 pub __clang_max_align_nonce2: u128,
124}
125#[allow(clippy::unnecessary_operation, clippy::identity_op)]
126const _: () = {
127 ["Size of max_align_t"][::std::mem::size_of::<max_align_t>() - 32usize];
128 ["Alignment of max_align_t"][::std::mem::align_of::<max_align_t>() - 16usize];
129 ["Offset of field: max_align_t::__clang_max_align_nonce1"]
130 [::std::mem::offset_of!(max_align_t, __clang_max_align_nonce1) - 0usize];
131 ["Offset of field: max_align_t::__clang_max_align_nonce2"]
132 [::std::mem::offset_of!(max_align_t, __clang_max_align_nonce2) - 16usize];
133};
134pub type __u_char = ::std::os::raw::c_uchar;
135pub type __u_short = ::std::os::raw::c_ushort;
136pub type __u_int = ::std::os::raw::c_uint;
137pub type __u_long = ::std::os::raw::c_ulong;
138pub type __int8_t = ::std::os::raw::c_schar;
139pub type __uint8_t = ::std::os::raw::c_uchar;
140pub type __int16_t = ::std::os::raw::c_short;
141pub type __uint16_t = ::std::os::raw::c_ushort;
142pub type __int32_t = ::std::os::raw::c_int;
143pub type __uint32_t = ::std::os::raw::c_uint;
144pub type __int64_t = ::std::os::raw::c_long;
145pub type __uint64_t = ::std::os::raw::c_ulong;
146pub type __int_least8_t = __int8_t;
147pub type __uint_least8_t = __uint8_t;
148pub type __int_least16_t = __int16_t;
149pub type __uint_least16_t = __uint16_t;
150pub type __int_least32_t = __int32_t;
151pub type __uint_least32_t = __uint32_t;
152pub type __int_least64_t = __int64_t;
153pub type __uint_least64_t = __uint64_t;
154pub type __quad_t = ::std::os::raw::c_long;
155pub type __u_quad_t = ::std::os::raw::c_ulong;
156pub type __intmax_t = ::std::os::raw::c_long;
157pub type __uintmax_t = ::std::os::raw::c_ulong;
158pub type __dev_t = ::std::os::raw::c_ulong;
159pub type __uid_t = ::std::os::raw::c_uint;
160pub type __gid_t = ::std::os::raw::c_uint;
161pub type __ino_t = ::std::os::raw::c_ulong;
162pub type __ino64_t = ::std::os::raw::c_ulong;
163pub type __mode_t = ::std::os::raw::c_uint;
164pub type __nlink_t = ::std::os::raw::c_ulong;
165pub type __off_t = ::std::os::raw::c_long;
166pub type __off64_t = ::std::os::raw::c_long;
167pub type __pid_t = ::std::os::raw::c_int;
168#[repr(C)]
169#[derive(Debug, Default, Copy, Clone)]
170pub struct __fsid_t {
171 pub __val: [::std::os::raw::c_int; 2usize],
172}
173#[allow(clippy::unnecessary_operation, clippy::identity_op)]
174const _: () = {
175 ["Size of __fsid_t"][::std::mem::size_of::<__fsid_t>() - 8usize];
176 ["Alignment of __fsid_t"][::std::mem::align_of::<__fsid_t>() - 4usize];
177 ["Offset of field: __fsid_t::__val"][::std::mem::offset_of!(__fsid_t, __val) - 0usize];
178};
179pub type __clock_t = ::std::os::raw::c_long;
180pub type __rlim_t = ::std::os::raw::c_ulong;
181pub type __rlim64_t = ::std::os::raw::c_ulong;
182pub type __id_t = ::std::os::raw::c_uint;
183pub type __time_t = ::std::os::raw::c_long;
184pub type __useconds_t = ::std::os::raw::c_uint;
185pub type __suseconds_t = ::std::os::raw::c_long;
186pub type __suseconds64_t = ::std::os::raw::c_long;
187pub type __daddr_t = ::std::os::raw::c_int;
188pub type __key_t = ::std::os::raw::c_int;
189pub type __clockid_t = ::std::os::raw::c_int;
190pub type __timer_t = *mut ::std::os::raw::c_void;
191pub type __blksize_t = ::std::os::raw::c_long;
192pub type __blkcnt_t = ::std::os::raw::c_long;
193pub type __blkcnt64_t = ::std::os::raw::c_long;
194pub type __fsblkcnt_t = ::std::os::raw::c_ulong;
195pub type __fsblkcnt64_t = ::std::os::raw::c_ulong;
196pub type __fsfilcnt_t = ::std::os::raw::c_ulong;
197pub type __fsfilcnt64_t = ::std::os::raw::c_ulong;
198pub type __fsword_t = ::std::os::raw::c_long;
199pub type __ssize_t = ::std::os::raw::c_long;
200pub type __syscall_slong_t = ::std::os::raw::c_long;
201pub type __syscall_ulong_t = ::std::os::raw::c_ulong;
202pub type __loff_t = __off64_t;
203pub type __caddr_t = *mut ::std::os::raw::c_char;
204pub type __intptr_t = ::std::os::raw::c_long;
205pub type __socklen_t = ::std::os::raw::c_uint;
206pub type __sig_atomic_t = ::std::os::raw::c_int;
207pub type int_least8_t = __int_least8_t;
208pub type int_least16_t = __int_least16_t;
209pub type int_least32_t = __int_least32_t;
210pub type int_least64_t = __int_least64_t;
211pub type uint_least8_t = __uint_least8_t;
212pub type uint_least16_t = __uint_least16_t;
213pub type uint_least32_t = __uint_least32_t;
214pub type uint_least64_t = __uint_least64_t;
215pub type int_fast8_t = ::std::os::raw::c_schar;
216pub type int_fast16_t = ::std::os::raw::c_long;
217pub type int_fast32_t = ::std::os::raw::c_long;
218pub type int_fast64_t = ::std::os::raw::c_long;
219pub type uint_fast8_t = ::std::os::raw::c_uchar;
220pub type uint_fast16_t = ::std::os::raw::c_ulong;
221pub type uint_fast32_t = ::std::os::raw::c_ulong;
222pub type uint_fast64_t = ::std::os::raw::c_ulong;
223pub type intmax_t = __intmax_t;
224pub type uintmax_t = __uintmax_t;
225#[repr(C)]
226#[derive(Debug, Copy, Clone)]
227pub struct ImpellerContext_ {
228 _unused: [u8; 0],
229}
230#[doc = " An Impeller graphics context. Contexts are platform and client-rendering-API\n specific.\n\n Contexts are thread-safe objects that are expensive to create. Most\n applications will only ever create a single context during their lifetimes.\n Once setup, Impeller is ready to render frames as performantly as possible.\n\n During setup, context create the underlying graphics pipelines, allocators,\n worker threads, etc...\n\n The general guidance is to create as few contexts as possible (typically\n just one) and share them as much as possible.\n"]
231pub type ImpellerContext = *mut ImpellerContext_;
232#[repr(C)]
233#[derive(Debug, Copy, Clone)]
234pub struct ImpellerDisplayList_ {
235 _unused: [u8; 0],
236}
237#[doc = " Display lists represent encoded rendering intent. These objects are\n immutable, reusable, thread-safe, and context-agnostic.\n\n While it is perfectly fine to create new display lists per frame, there may\n be opportunities for optimization when display lists are reused multiple\n times.\n"]
238pub type ImpellerDisplayList = *mut ImpellerDisplayList_;
239#[repr(C)]
240#[derive(Debug, Copy, Clone)]
241pub struct ImpellerDisplayListBuilder_ {
242 _unused: [u8; 0],
243}
244#[doc = " Display list builders allow for the incremental creation of display lists.\n\n Display list builders are context-agnostic.\n"]
245pub type ImpellerDisplayListBuilder = *mut ImpellerDisplayListBuilder_;
246#[repr(C)]
247#[derive(Debug, Copy, Clone)]
248pub struct ImpellerPaint_ {
249 _unused: [u8; 0],
250}
251#[doc = " Paints control the behavior of draw calls encoded in a display list.\n\n Like display lists, paints are context-agnostic.\n"]
252pub type ImpellerPaint = *mut ImpellerPaint_;
253#[repr(C)]
254#[derive(Debug, Copy, Clone)]
255pub struct ImpellerColorFilter_ {
256 _unused: [u8; 0],
257}
258#[doc = " Color filters are functions that take two colors and mix them to produce a\n single color. This color is then merged with the destination during\n blending.\n"]
259pub type ImpellerColorFilter = *mut ImpellerColorFilter_;
260#[repr(C)]
261#[derive(Debug, Copy, Clone)]
262pub struct ImpellerColorSource_ {
263 _unused: [u8; 0],
264}
265#[doc = " Color sources are functions that generate colors for each texture element\n covered by a draw call. The colors for each element can be generated using a\n mathematical function (to produce gradients for example) or sampled from a\n texture.\n"]
266pub type ImpellerColorSource = *mut ImpellerColorSource_;
267#[repr(C)]
268#[derive(Debug, Copy, Clone)]
269pub struct ImpellerImageFilter_ {
270 _unused: [u8; 0],
271}
272#[doc = " Image filters are functions that are applied regions of a texture to produce\n a single color. Contrast this with color filters that operate independently\n on a per-pixel basis. The generated color is then merged with the\n destination during blending.\n"]
273pub type ImpellerImageFilter = *mut ImpellerImageFilter_;
274#[repr(C)]
275#[derive(Debug, Copy, Clone)]
276pub struct ImpellerMaskFilter_ {
277 _unused: [u8; 0],
278}
279#[doc = " Mask filters are functions that are applied over a shape after it has been\n drawn but before it has been blended into the final image.\n"]
280pub type ImpellerMaskFilter = *mut ImpellerMaskFilter_;
281#[repr(C)]
282#[derive(Debug, Copy, Clone)]
283pub struct ImpellerTypographyContext_ {
284 _unused: [u8; 0],
285}
286#[doc = " Typography contexts allow for the layout and rendering of text.\n\n These are typically expensive to create and applications will only ever need\n to create a single one of these during their lifetimes.\n\n Unlike graphics context, typograhy contexts are not thread-safe. These must\n be created, used, and collected on a single thread.\n"]
287pub type ImpellerTypographyContext = *mut ImpellerTypographyContext_;
288#[repr(C)]
289#[derive(Debug, Copy, Clone)]
290pub struct ImpellerParagraph_ {
291 _unused: [u8; 0],
292}
293#[doc = " An immutable, fully laid out paragraph.\n"]
294pub type ImpellerParagraph = *mut ImpellerParagraph_;
295#[repr(C)]
296#[derive(Debug, Copy, Clone)]
297pub struct ImpellerParagraphBuilder_ {
298 _unused: [u8; 0],
299}
300#[doc = " Paragraph builders allow for the creation of fully laid out paragraphs\n (which themselves are immutable).\n\n To build a paragraph, users push/pop paragraph styles onto a stack then add\n UTF-8 encoded text. The properties on the top of paragraph style stack when\n the text is added are used to layout and shape that subset of the paragraph.\n\n @see `ImpellerParagraphStyle`\n"]
301pub type ImpellerParagraphBuilder = *mut ImpellerParagraphBuilder_;
302#[repr(C)]
303#[derive(Debug, Copy, Clone)]
304pub struct ImpellerParagraphStyle_ {
305 _unused: [u8; 0],
306}
307#[doc = " Specified when building a paragraph, paragraph styles are managed in a stack\n with specify text properties to apply to text that is added to the paragraph\n builder.\n"]
308pub type ImpellerParagraphStyle = *mut ImpellerParagraphStyle_;
309#[repr(C)]
310#[derive(Debug, Copy, Clone)]
311pub struct ImpellerPath_ {
312 _unused: [u8; 0],
313}
314#[doc = " Represents a two-dimensional path that is immutable and graphics context\n agnostic.\n\n Paths in Impeller consist of linear, cubic Bézier curve, and quadratic\n Bézier curve segments. All other shapes are approximations using these\n building blocks.\n\n Paths are created using path builder that allow for the configuration of the\n path segments, how they are filled, and/or stroked.\n"]
315pub type ImpellerPath = *mut ImpellerPath_;
316#[repr(C)]
317#[derive(Debug, Copy, Clone)]
318pub struct ImpellerPathBuilder_ {
319 _unused: [u8; 0],
320}
321#[doc = " Path builders allow for the incremental building up of paths.\n"]
322pub type ImpellerPathBuilder = *mut ImpellerPathBuilder_;
323#[repr(C)]
324#[derive(Debug, Copy, Clone)]
325pub struct ImpellerSurface_ {
326 _unused: [u8; 0],
327}
328#[doc = " A surface represents a render target for Impeller to direct the rendering\n intent specified the form of display lists to.\n\n Render targets are how Impeller API users perform Window System Integration\n (WSI). Users wrap swapchain images as surfaces and draw display lists onto\n these surfaces to present content.\n\n Creating surfaces is typically platform and client-rendering-API specific.\n"]
329pub type ImpellerSurface = *mut ImpellerSurface_;
330#[repr(C)]
331#[derive(Debug, Copy, Clone)]
332pub struct ImpellerTexture_ {
333 _unused: [u8; 0],
334}
335#[doc = " A reference to a texture whose data is resident on the GPU. These can be\n referenced in draw calls and paints.\n\n Creating textures is extremely expensive. Creating a single one can\n typically comfortably blow the frame budget of an application. Textures\n should be created on background threads.\n\n @warning While textures themselves are thread safe, some context types\n (like OpenGL) may need extra configuration to be able to operate\n from multiple threads.\n"]
336pub type ImpellerTexture = *mut ImpellerTexture_;
337#[repr(C)]
338#[derive(Debug, Copy, Clone)]
339pub struct ImpellerVulkanSwapchain_ {
340 _unused: [u8; 0],
341}
342#[doc = " The primary form of WSI when using a Vulkan context, these swapchains use\n the `VK_KHR_surface` Vulkan extension.\n\n Creating a swapchain is extremely expensive. One must be created at\n application startup and re-used throughout the application lifecycle.\n\n Swapchains are resilient to the underlying surfaces being resized. The\n swapchain images will be re-created as necessary on-demand.\n"]
343pub type ImpellerVulkanSwapchain = *mut ImpellerVulkanSwapchain_;
344#[doc = " A callback invoked by Impeller that passes a user supplied baton back to the\n user. Impeller does not interpret the baton in any way. The way the baton is\n specified and the thread on which the callback is invoked depends on how the\n user supplies the callback to Impeller.\n"]
345pub type ImpellerCallback =
346 ::std::option::Option<unsafe extern "C" fn(user_data: *mut ::std::os::raw::c_void)>;
347#[doc = " A callback used by Impeller to allow the user to resolve function pointers.\n A user supplied baton that is uninterpreted by Impeller is passed back to\n the user in the callback. How the baton is specified to Impeller and the\n thread on which the callback is invoked depends on how the callback is\n specified to Impeller.\n"]
348pub type ImpellerProcAddressCallback = ::std::option::Option<
349 unsafe extern "C" fn(
350 proc_name: *const ::std::os::raw::c_char,
351 user_data: *mut ::std::os::raw::c_void,
352 ) -> *mut ::std::os::raw::c_void,
353>;
354#[doc = " A callback used by Impeller to allow the user to resolve Vulkan function\n pointers. A user supplied baton that is uninterpreted by Impeller is passed\n back to the user in the callback.\n"]
355pub type ImpellerVulkanProcAddressCallback = ::std::option::Option<
356 unsafe extern "C" fn(
357 vulkan_instance: *mut ::std::os::raw::c_void,
358 vulkan_proc_name: *const ::std::os::raw::c_char,
359 user_data: *mut ::std::os::raw::c_void,
360 ) -> *mut ::std::os::raw::c_void,
361>;
362#[repr(u32)]
363#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
364pub enum FillType {
365 NonZero = 0,
366 Odd = 1,
367}
368#[repr(u32)]
369#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
370pub enum ClipOperation {
371 Difference = 0,
372 Intersect = 1,
373}
374#[repr(u32)]
375#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
376pub enum BlendMode {
377 Clear = 0,
378 Source = 1,
379 Destination = 2,
380 SourceOver = 3,
381 DestinationOver = 4,
382 SourceIn = 5,
383 DestinationIn = 6,
384 SourceOut = 7,
385 DestinationOut = 8,
386 SourceATop = 9,
387 DestinationATop = 10,
388 Xor = 11,
389 Plus = 12,
390 Modulate = 13,
391 Screen = 14,
392 Overlay = 15,
393 Darken = 16,
394 Lighten = 17,
395 ColorDodge = 18,
396 ColorBurn = 19,
397 HardLight = 20,
398 SoftLight = 21,
399 Difference = 22,
400 Exclusion = 23,
401 Multiply = 24,
402 Hue = 25,
403 Saturation = 26,
404 Color = 27,
405 Luminosity = 28,
406}
407#[repr(u32)]
408#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
409pub enum DrawStyle {
410 Fill = 0,
411 Stroke = 1,
412 StrokeAndFill = 2,
413}
414#[repr(u32)]
415#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
416pub enum StrokeCap {
417 Butt = 0,
418 Round = 1,
419 Square = 2,
420}
421#[repr(u32)]
422#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
423pub enum StrokeJoin {
424 Miter = 0,
425 Round = 1,
426 Bevel = 2,
427}
428#[repr(u32)]
429#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
430pub enum PixelFormat {
431 RGBA8888 = 0,
432}
433#[repr(u32)]
434#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
435pub enum TextureSampling {
436 NearestNeighbor = 0,
437 Linear = 1,
438}
439#[repr(u32)]
440#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
441pub enum TileMode {
442 Clamp = 0,
443 Repeat = 1,
444 Mirror = 2,
445 Decal = 3,
446}
447#[repr(u32)]
448#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
449pub enum BlurStyle {
450 Normal = 0,
451 Solid = 1,
452 Outer = 2,
453 Inner = 3,
454}
455#[repr(u32)]
456#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
457pub enum ColorSpace {
458 SRGB = 0,
459 ExtendedSRGB = 1,
460 DisplayP3 = 2,
461}
462#[repr(u32)]
463#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
464pub enum FontWeight {
465 Thin = 0,
466 ExtraLight = 1,
467 Light = 2,
468 Regular = 3,
469 Medium = 4,
470 SemiBold = 5,
471 Bold = 6,
472 ExtraBold = 7,
473 Black = 8,
474}
475#[repr(u32)]
476#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
477pub enum FontStyle {
478 Normal = 0,
479 Italic = 1,
480}
481#[repr(u32)]
482#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
483pub enum TextAlignment {
484 Left = 0,
485 Right = 1,
486 Center = 2,
487 Justify = 3,
488 Start = 4,
489 End = 5,
490}
491#[repr(u32)]
492#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
493pub enum TextDirection {
494 RTL = 0,
495 LTR = 1,
496}
497#[repr(C)]
498#[derive(Debug, Default, Copy, Clone)]
499pub struct ImpellerRect {
500 pub x: f32,
501 pub y: f32,
502 pub width: f32,
503 pub height: f32,
504}
505#[allow(clippy::unnecessary_operation, clippy::identity_op)]
506const _: () = {
507 ["Size of ImpellerRect"][::std::mem::size_of::<ImpellerRect>() - 16usize];
508 ["Alignment of ImpellerRect"][::std::mem::align_of::<ImpellerRect>() - 4usize];
509 ["Offset of field: ImpellerRect::x"][::std::mem::offset_of!(ImpellerRect, x) - 0usize];
510 ["Offset of field: ImpellerRect::y"][::std::mem::offset_of!(ImpellerRect, y) - 4usize];
511 ["Offset of field: ImpellerRect::width"][::std::mem::offset_of!(ImpellerRect, width) - 8usize];
512 ["Offset of field: ImpellerRect::height"]
513 [::std::mem::offset_of!(ImpellerRect, height) - 12usize];
514};
515#[repr(C)]
516#[derive(Debug, Default, Copy, Clone)]
517pub struct ImpellerPoint {
518 pub x: f32,
519 pub y: f32,
520}
521#[allow(clippy::unnecessary_operation, clippy::identity_op)]
522const _: () = {
523 ["Size of ImpellerPoint"][::std::mem::size_of::<ImpellerPoint>() - 8usize];
524 ["Alignment of ImpellerPoint"][::std::mem::align_of::<ImpellerPoint>() - 4usize];
525 ["Offset of field: ImpellerPoint::x"][::std::mem::offset_of!(ImpellerPoint, x) - 0usize];
526 ["Offset of field: ImpellerPoint::y"][::std::mem::offset_of!(ImpellerPoint, y) - 4usize];
527};
528#[repr(C)]
529#[derive(Debug, Default, Copy, Clone)]
530pub struct ImpellerSize {
531 pub width: f32,
532 pub height: f32,
533}
534#[allow(clippy::unnecessary_operation, clippy::identity_op)]
535const _: () = {
536 ["Size of ImpellerSize"][::std::mem::size_of::<ImpellerSize>() - 8usize];
537 ["Alignment of ImpellerSize"][::std::mem::align_of::<ImpellerSize>() - 4usize];
538 ["Offset of field: ImpellerSize::width"][::std::mem::offset_of!(ImpellerSize, width) - 0usize];
539 ["Offset of field: ImpellerSize::height"]
540 [::std::mem::offset_of!(ImpellerSize, height) - 4usize];
541};
542#[repr(C)]
543#[derive(Debug, Default, Copy, Clone)]
544pub struct ImpellerISize {
545 pub width: i64,
546 pub height: i64,
547}
548#[allow(clippy::unnecessary_operation, clippy::identity_op)]
549const _: () = {
550 ["Size of ImpellerISize"][::std::mem::size_of::<ImpellerISize>() - 16usize];
551 ["Alignment of ImpellerISize"][::std::mem::align_of::<ImpellerISize>() - 8usize];
552 ["Offset of field: ImpellerISize::width"]
553 [::std::mem::offset_of!(ImpellerISize, width) - 0usize];
554 ["Offset of field: ImpellerISize::height"]
555 [::std::mem::offset_of!(ImpellerISize, height) - 8usize];
556};
557#[doc = " A 4x4 transformation matrix using column-major storage.\n\n ```ignore | m[0] m[4] m[8] m[12] |\n | m[1] m[5] m[9] m[13] |\n | m[2] m[6] m[10] m[14] |\n | m[3] m[7] m[11] m[15] |\n ```\n"]
558#[repr(C)]
559#[derive(Debug, Default, Copy, Clone)]
560pub struct ImpellerMatrix {
561 pub m: [f32; 16usize],
562}
563#[allow(clippy::unnecessary_operation, clippy::identity_op)]
564const _: () = {
565 ["Size of ImpellerMatrix"][::std::mem::size_of::<ImpellerMatrix>() - 64usize];
566 ["Alignment of ImpellerMatrix"][::std::mem::align_of::<ImpellerMatrix>() - 4usize];
567 ["Offset of field: ImpellerMatrix::m"][::std::mem::offset_of!(ImpellerMatrix, m) - 0usize];
568};
569#[doc = " A 4x5 matrix using row-major storage used for transforming color values.\n\n To transform color values, a 5x5 matrix is constructed with the 5th row\n being identity. Then the following transformation is performed:\n\n ```ignore | R' | | m[0] m[1] m[2] m[3] m[4] | | R |\n | G' | | m[5] m[6] m[7] m[8] m[9] | | G |\n | B' | = | m[10] m[11] m[12] m[13] m[14] | * | B |\n | A' | | m[15] m[16] m[17] m[18] m[19] | | A |\n | 1 | | 0 0 0 0 1 | | 1 |\n ```\n\n The translation column (m[4], m[9], m[14], m[19]) must be specified in\n non-normalized 8-bit unsigned integer space (0 to 255). Values outside this\n range will produce undefined results.\n\n The identity transformation is thus:\n\n ```ignore 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0,\n ```\n\n Some examples:\n\n To invert all colors:\n\n ```ignore -1, 0, 0, 0, 255,\n 0, -1, 0, 0, 255,\n 0, 0, -1, 0, 255,\n 0, 0, 0, 1, 0,\n ```\n\n To apply a sepia filter:\n\n ```ignore 0.393, 0.769, 0.189, 0, 0,\n 0.349, 0.686, 0.168, 0, 0,\n 0.272, 0.534, 0.131, 0, 0,\n 0, 0, 0, 1, 0,\n ```\n\n To apply a grayscale conversion filter:\n\n ```ignore 0.2126, 0.7152, 0.0722, 0, 0,\n 0.2126, 0.7152, 0.0722, 0, 0,\n 0.2126, 0.7152, 0.0722, 0, 0,\n 0, 0, 0, 1, 0,\n ```\n\n @see ImpellerColorFilter\n"]
570#[repr(C)]
571#[derive(Debug, Default, Copy, Clone)]
572pub struct ImpellerColorMatrix {
573 pub m: [f32; 20usize],
574}
575#[allow(clippy::unnecessary_operation, clippy::identity_op)]
576const _: () = {
577 ["Size of ImpellerColorMatrix"][::std::mem::size_of::<ImpellerColorMatrix>() - 80usize];
578 ["Alignment of ImpellerColorMatrix"][::std::mem::align_of::<ImpellerColorMatrix>() - 4usize];
579 ["Offset of field: ImpellerColorMatrix::m"]
580 [::std::mem::offset_of!(ImpellerColorMatrix, m) - 0usize];
581};
582#[repr(C)]
583#[derive(Debug, Default, Copy, Clone)]
584pub struct ImpellerRoundingRadii {
585 pub top_left: ImpellerPoint,
586 pub bottom_left: ImpellerPoint,
587 pub top_right: ImpellerPoint,
588 pub bottom_right: ImpellerPoint,
589}
590#[allow(clippy::unnecessary_operation, clippy::identity_op)]
591const _: () = {
592 ["Size of ImpellerRoundingRadii"][::std::mem::size_of::<ImpellerRoundingRadii>() - 32usize];
593 ["Alignment of ImpellerRoundingRadii"]
594 [::std::mem::align_of::<ImpellerRoundingRadii>() - 4usize];
595 ["Offset of field: ImpellerRoundingRadii::top_left"]
596 [::std::mem::offset_of!(ImpellerRoundingRadii, top_left) - 0usize];
597 ["Offset of field: ImpellerRoundingRadii::bottom_left"]
598 [::std::mem::offset_of!(ImpellerRoundingRadii, bottom_left) - 8usize];
599 ["Offset of field: ImpellerRoundingRadii::top_right"]
600 [::std::mem::offset_of!(ImpellerRoundingRadii, top_right) - 16usize];
601 ["Offset of field: ImpellerRoundingRadii::bottom_right"]
602 [::std::mem::offset_of!(ImpellerRoundingRadii, bottom_right) - 24usize];
603};
604#[repr(C)]
605#[derive(Debug, Copy, Clone)]
606pub struct ImpellerColor {
607 pub red: f32,
608 pub green: f32,
609 pub blue: f32,
610 pub alpha: f32,
611 pub color_space: ColorSpace,
612}
613#[allow(clippy::unnecessary_operation, clippy::identity_op)]
614const _: () = {
615 ["Size of ImpellerColor"][::std::mem::size_of::<ImpellerColor>() - 20usize];
616 ["Alignment of ImpellerColor"][::std::mem::align_of::<ImpellerColor>() - 4usize];
617 ["Offset of field: ImpellerColor::red"][::std::mem::offset_of!(ImpellerColor, red) - 0usize];
618 ["Offset of field: ImpellerColor::green"]
619 [::std::mem::offset_of!(ImpellerColor, green) - 4usize];
620 ["Offset of field: ImpellerColor::blue"][::std::mem::offset_of!(ImpellerColor, blue) - 8usize];
621 ["Offset of field: ImpellerColor::alpha"]
622 [::std::mem::offset_of!(ImpellerColor, alpha) - 12usize];
623 ["Offset of field: ImpellerColor::color_space"]
624 [::std::mem::offset_of!(ImpellerColor, color_space) - 16usize];
625};
626impl Default for ImpellerColor {
627 fn default() -> Self {
628 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
629 unsafe {
630 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
631 s.assume_init()
632 }
633 }
634}
635#[repr(C)]
636#[derive(Debug, Copy, Clone)]
637pub struct ImpellerTextureDescriptor {
638 pub pixel_format: PixelFormat,
639 pub size: ImpellerISize,
640 pub mip_count: u32,
641}
642#[allow(clippy::unnecessary_operation, clippy::identity_op)]
643const _: () = {
644 ["Size of ImpellerTextureDescriptor"]
645 [::std::mem::size_of::<ImpellerTextureDescriptor>() - 32usize];
646 ["Alignment of ImpellerTextureDescriptor"]
647 [::std::mem::align_of::<ImpellerTextureDescriptor>() - 8usize];
648 ["Offset of field: ImpellerTextureDescriptor::pixel_format"]
649 [::std::mem::offset_of!(ImpellerTextureDescriptor, pixel_format) - 0usize];
650 ["Offset of field: ImpellerTextureDescriptor::size"]
651 [::std::mem::offset_of!(ImpellerTextureDescriptor, size) - 8usize];
652 ["Offset of field: ImpellerTextureDescriptor::mip_count"]
653 [::std::mem::offset_of!(ImpellerTextureDescriptor, mip_count) - 24usize];
654};
655impl Default for ImpellerTextureDescriptor {
656 fn default() -> Self {
657 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
658 unsafe {
659 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
660 s.assume_init()
661 }
662 }
663}
664#[repr(C)]
665#[derive(Debug, Copy, Clone)]
666pub struct ImpellerMapping {
667 pub data: *const u8,
668 pub length: u64,
669 pub on_release: ImpellerCallback,
670}
671#[allow(clippy::unnecessary_operation, clippy::identity_op)]
672const _: () = {
673 ["Size of ImpellerMapping"][::std::mem::size_of::<ImpellerMapping>() - 24usize];
674 ["Alignment of ImpellerMapping"][::std::mem::align_of::<ImpellerMapping>() - 8usize];
675 ["Offset of field: ImpellerMapping::data"]
676 [::std::mem::offset_of!(ImpellerMapping, data) - 0usize];
677 ["Offset of field: ImpellerMapping::length"]
678 [::std::mem::offset_of!(ImpellerMapping, length) - 8usize];
679 ["Offset of field: ImpellerMapping::on_release"]
680 [::std::mem::offset_of!(ImpellerMapping, on_release) - 16usize];
681};
682impl Default for ImpellerMapping {
683 fn default() -> Self {
684 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
685 unsafe {
686 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
687 s.assume_init()
688 }
689 }
690}
691#[repr(C)]
692#[derive(Debug, Copy, Clone)]
693pub struct ImpellerContextVulkanSettings {
694 pub user_data: *mut ::std::os::raw::c_void,
695 pub proc_address_callback: ImpellerVulkanProcAddressCallback,
696 pub enable_vulkan_validation: bool,
697}
698#[allow(clippy::unnecessary_operation, clippy::identity_op)]
699const _: () = {
700 ["Size of ImpellerContextVulkanSettings"]
701 [::std::mem::size_of::<ImpellerContextVulkanSettings>() - 24usize];
702 ["Alignment of ImpellerContextVulkanSettings"]
703 [::std::mem::align_of::<ImpellerContextVulkanSettings>() - 8usize];
704 ["Offset of field: ImpellerContextVulkanSettings::user_data"]
705 [::std::mem::offset_of!(ImpellerContextVulkanSettings, user_data) - 0usize];
706 ["Offset of field: ImpellerContextVulkanSettings::proc_address_callback"]
707 [::std::mem::offset_of!(ImpellerContextVulkanSettings, proc_address_callback) - 8usize];
708 ["Offset of field: ImpellerContextVulkanSettings::enable_vulkan_validation"]
709 [::std::mem::offset_of!(ImpellerContextVulkanSettings, enable_vulkan_validation) - 16usize];
710};
711impl Default for ImpellerContextVulkanSettings {
712 fn default() -> Self {
713 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
714 unsafe {
715 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
716 s.assume_init()
717 }
718 }
719}
720#[repr(C)]
721#[derive(Debug, Copy, Clone)]
722pub struct ImpellerContextVulkanInfo {
723 pub vk_instance: *mut ::std::os::raw::c_void,
724 pub vk_physical_device: *mut ::std::os::raw::c_void,
725 pub vk_logical_device: *mut ::std::os::raw::c_void,
726 pub graphics_queue_family_index: u32,
727 pub graphics_queue_index: u32,
728}
729#[allow(clippy::unnecessary_operation, clippy::identity_op)]
730const _: () = {
731 ["Size of ImpellerContextVulkanInfo"]
732 [::std::mem::size_of::<ImpellerContextVulkanInfo>() - 32usize];
733 ["Alignment of ImpellerContextVulkanInfo"]
734 [::std::mem::align_of::<ImpellerContextVulkanInfo>() - 8usize];
735 ["Offset of field: ImpellerContextVulkanInfo::vk_instance"]
736 [::std::mem::offset_of!(ImpellerContextVulkanInfo, vk_instance) - 0usize];
737 ["Offset of field: ImpellerContextVulkanInfo::vk_physical_device"]
738 [::std::mem::offset_of!(ImpellerContextVulkanInfo, vk_physical_device) - 8usize];
739 ["Offset of field: ImpellerContextVulkanInfo::vk_logical_device"]
740 [::std::mem::offset_of!(ImpellerContextVulkanInfo, vk_logical_device) - 16usize];
741 ["Offset of field: ImpellerContextVulkanInfo::graphics_queue_family_index"]
742 [::std::mem::offset_of!(ImpellerContextVulkanInfo, graphics_queue_family_index) - 24usize];
743 ["Offset of field: ImpellerContextVulkanInfo::graphics_queue_index"]
744 [::std::mem::offset_of!(ImpellerContextVulkanInfo, graphics_queue_index) - 28usize];
745};
746impl Default for ImpellerContextVulkanInfo {
747 fn default() -> Self {
748 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
749 unsafe {
750 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
751 s.assume_init()
752 }
753 }
754}
755unsafe extern "C" {
756 #[doc = " @brief Get the version of Impeller standalone API. This is the API that\n will be accepted for validity checks when provided to the\n context creation methods.\n\n The current version of the API is denoted by the\n `IMPELLER_VERSION` macro. This version must be passed to APIs\n that create top-level objects like graphics contexts.\n Construction of the context may fail if the API version expected\n by the caller is not supported by the library.\n\n Since there are no API stability guarantees today, passing a\n version that is different to the one returned by\n `ImpellerGetVersion` will always fail.\n\n @see `ImpellerContextCreateOpenGLESNew`\n\n @return The version of the standalone API.\n"]
757 pub fn ImpellerGetVersion() -> u32;
758 #[doc = " @brief Create an OpenGL(ES) Impeller context.\n\n @warning Unlike other context types, the OpenGL ES context can only be\n created, used, and collected on the calling thread. This\n restriction may be lifted in the future once reactor workers are\n exposed in the API. No other context types have threading\n restrictions. Till reactor workers can be used, using the\n context on a background thread will cause a stall of OpenGL\n operations.\n\n @param[in] version The version of the Impeller\n standalone API. See `ImpellerGetVersion`. If the\n specified here is not compatible with the version\n of the library, context creation will fail and NULL\n context returned from this call.\n @param[in] gl_proc_address_callback\n The gl proc address callback. For instance,\n `eglGetProcAddress`.\n @param[in] gl_proc_address_callback_user_data\n The gl proc address callback user data baton. This\n pointer is not interpreted by Impeller and will be\n returned as user data in the proc address callback.\n user data.\n\n @return The context or NULL if one cannot be created.\n"]
759 pub fn ImpellerContextCreateOpenGLESNew(
760 version: u32,
761 gl_proc_address_callback: ImpellerProcAddressCallback,
762 gl_proc_address_callback_user_data: *mut ::std::os::raw::c_void,
763 ) -> ImpellerContext;
764 #[doc = " @brief Create a Metal context using the system default Metal device.\n\n @param[in] version The version specified in the IMPELLER_VERSION macro.\n\n @return The Metal context or NULL if one cannot be created.\n"]
765 pub fn ImpellerContextCreateMetalNew(version: u32) -> ImpellerContext;
766 #[doc = " @brief Create a Vulkan context using the provided Vulkan Settings.\n\n @param[in] version The version specified in the IMPELLER_VERSION macro.\n @param[in] settings The Vulkan settings.\n\n @return The Vulkan context or NULL if one cannot be created.\n"]
767 pub fn ImpellerContextCreateVulkanNew(
768 version: u32,
769 settings: *const ImpellerContextVulkanSettings,
770 ) -> ImpellerContext;
771 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] context The context.\n"]
772 pub fn ImpellerContextRetain(context: ImpellerContext);
773 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] context The context.\n"]
774 pub fn ImpellerContextRelease(context: ImpellerContext);
775 #[doc = " @brief Get internal Vulkan handles managed by the given Vulkan context.\n Ownership of the handles is still maintained by Impeller. This\n accessor is just available so embedders can create resources\n using the same device and instance as Impeller for interop.\n\n @warning If the context is not a Vulkan context, False is returned with\n the [out] argument unaffected.\n\n @param[in] context The context\n @param[out] out_vulkan_info The out vulkan information\n\n @return If the Vulkan info could be fetched from the context.\n"]
776 pub fn ImpellerContextGetVulkanInfo(
777 context: ImpellerContext,
778 out_vulkan_info: *mut ImpellerContextVulkanInfo,
779 ) -> bool;
780 #[doc = " @brief Create a new Vulkan swapchain using a VkSurfaceKHR instance.\n Ownership of the surface is transferred over to Impeller. The\n Vulkan instance the surface is created from must the same as the\n context provided.\n\n @param[in] context The context. Must be a Vulkan context whose\n instance is the same used to create the\n surface passed into the next argument.\n @param vulkan_surface_khr The vulkan surface.\n\n @return The vulkan swapchain.\n"]
781 pub fn ImpellerVulkanSwapchainCreateNew(
782 context: ImpellerContext,
783 vulkan_surface_khr: *mut ::std::os::raw::c_void,
784 ) -> ImpellerVulkanSwapchain;
785 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] swapchain The swapchain.\n"]
786 pub fn ImpellerVulkanSwapchainRetain(swapchain: ImpellerVulkanSwapchain);
787 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] swapchain The swapchain.\n"]
788 pub fn ImpellerVulkanSwapchainRelease(swapchain: ImpellerVulkanSwapchain);
789 #[doc = " @brief A potentially blocking operation, acquires the next surface to\n render to. Since this may block, surface acquisition must be\n delayed for as long as possible to avoid an idle wait on the\n CPU.\n\n @param[in] swapchain The swapchain.\n\n @return The surface if one could be obtained, NULL otherwise.\n"]
790 pub fn ImpellerVulkanSwapchainAcquireNextSurfaceNew(
791 swapchain: ImpellerVulkanSwapchain,
792 ) -> ImpellerSurface;
793 #[doc = " @brief Create a new surface by wrapping an existing framebuffer object.\n The framebuffer must be complete as determined by\n `glCheckFramebufferStatus`. The framebuffer is still owned by\n the caller and it must be collected once the surface is\n collected.\n\n @param[in] context The context.\n @param[in] fbo The framebuffer object handle.\n @param[in] format The format of the framebuffer.\n @param[in] size The size of the framebuffer is texels.\n\n @return The surface if once can be created, NULL otherwise.\n"]
794 pub fn ImpellerSurfaceCreateWrappedFBONew(
795 context: ImpellerContext,
796 fbo: u64,
797 format: PixelFormat,
798 size: *const ImpellerISize,
799 ) -> ImpellerSurface;
800 #[doc = " @brief Create a surface by wrapping a Metal drawable. This is useful\n during WSI when the drawable is the backing store of the Metal\n layer being drawn to.\n\n The Metal layer must be using the same device managed by the\n underlying context.\n\n @param[in] context The context. The Metal device managed by this\n context must be the same used to create the\n drawable that is being wrapped.\n @param metal_drawable The drawable to wrap as a surface.\n\n @return The surface if one could be wrapped, NULL otherwise.\n"]
801 pub fn ImpellerSurfaceCreateWrappedMetalDrawableNew(
802 context: ImpellerContext,
803 metal_drawable: *mut ::std::os::raw::c_void,
804 ) -> ImpellerSurface;
805 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] surface The surface.\n"]
806 pub fn ImpellerSurfaceRetain(surface: ImpellerSurface);
807 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] surface The surface.\n"]
808 pub fn ImpellerSurfaceRelease(surface: ImpellerSurface);
809 #[doc = " @brief Draw a display list onto the surface. The same display list can\n be drawn multiple times to different surfaces.\n\n @warning In the OpenGL backend, Impeller will not make an effort to\n preserve the OpenGL state that is current in the context.\n Embedders that perform additional OpenGL operations in the\n context should expect the reset state after control transitions\n back to them. Key state to watch out for would be the viewports,\n stencil rects, test toggles, resource (texture, framebuffer,\n buffer) bindings, etc...\n\n @param[in] surface The surface to draw the display list to.\n @param[in] display_list The display list to draw onto the surface.\n\n @return If the display list could be drawn onto the surface.\n"]
810 pub fn ImpellerSurfaceDrawDisplayList(
811 surface: ImpellerSurface,
812 display_list: ImpellerDisplayList,
813 ) -> bool;
814 #[doc = " @brief Present the surface to the underlying window system.\n\n @param[in] surface The surface to present.\n\n @return True if the surface could be presented.\n"]
815 pub fn ImpellerSurfacePresent(surface: ImpellerSurface) -> bool;
816 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] path The path.\n"]
817 pub fn ImpellerPathRetain(path: ImpellerPath);
818 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] path The path.\n"]
819 pub fn ImpellerPathRelease(path: ImpellerPath);
820 #[doc = " @brief Create a new path builder. Paths themselves are immutable.\n A builder builds these immutable paths.\n\n @return The path builder.\n"]
821 pub fn ImpellerPathBuilderNew() -> ImpellerPathBuilder;
822 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] builder The builder.\n"]
823 pub fn ImpellerPathBuilderRetain(builder: ImpellerPathBuilder);
824 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] builder The builder.\n"]
825 pub fn ImpellerPathBuilderRelease(builder: ImpellerPathBuilder);
826 #[doc = " @brief Move the cursor to the specified location.\n\n @param[in] builder The builder.\n @param[in] location The location.\n"]
827 pub fn ImpellerPathBuilderMoveTo(builder: ImpellerPathBuilder, location: *const ImpellerPoint);
828 #[doc = " @brief Add a line segment from the current cursor location to the given\n location. The cursor location is updated to be at the endpoint.\n\n @param[in] builder The builder.\n @param[in] location The location.\n"]
829 pub fn ImpellerPathBuilderLineTo(builder: ImpellerPathBuilder, location: *const ImpellerPoint);
830 #[doc = " @brief Add a quadratic curve from whose start point is the cursor to\n the specified end point using the a single control point.\n\n The new location of the cursor after this call is the end point.\n\n @param[in] builder The builder.\n @param[in] control_point The control point.\n @param[in] end_point The end point.\n"]
831 pub fn ImpellerPathBuilderQuadraticCurveTo(
832 builder: ImpellerPathBuilder,
833 control_point: *const ImpellerPoint,
834 end_point: *const ImpellerPoint,
835 );
836 #[doc = " @brief Add a cubic curve whose start point is current cursor location\n to the specified end point using the two specified control\n points.\n\n The new location of the cursor after this call is the end point\n supplied.\n\n @param[in] builder The builder\n @param[in] control_point_1 The control point 1\n @param[in] control_point_2 The control point 2\n @param[in] end_point The end point\n"]
837 pub fn ImpellerPathBuilderCubicCurveTo(
838 builder: ImpellerPathBuilder,
839 control_point_1: *const ImpellerPoint,
840 control_point_2: *const ImpellerPoint,
841 end_point: *const ImpellerPoint,
842 );
843 #[doc = " @brief Adds a rectangle to the path.\n\n @param[in] builder The builder.\n @param[in] rect The rectangle.\n"]
844 pub fn ImpellerPathBuilderAddRect(builder: ImpellerPathBuilder, rect: *const ImpellerRect);
845 #[doc = " @brief Add an arc to the path.\n\n @param[in] builder The builder.\n @param[in] oval_bounds The oval bounds.\n @param[in] start_angle_degrees The start angle in degrees.\n @param[in] end_angle_degrees The end angle in degrees.\n"]
846 pub fn ImpellerPathBuilderAddArc(
847 builder: ImpellerPathBuilder,
848 oval_bounds: *const ImpellerRect,
849 start_angle_degrees: f32,
850 end_angle_degrees: f32,
851 );
852 #[doc = " @brief Add an oval to the path.\n\n @param[in] builder The builder.\n @param[in] oval_bounds The oval bounds.\n"]
853 pub fn ImpellerPathBuilderAddOval(
854 builder: ImpellerPathBuilder,
855 oval_bounds: *const ImpellerRect,
856 );
857 #[doc = " @brief Add a rounded rect with potentially non-uniform radii to the\n path.\n\n @param[in] builder The builder.\n @param[in] rect The rectangle.\n @param[in] rounding_radii The rounding radii.\n"]
858 pub fn ImpellerPathBuilderAddRoundedRect(
859 builder: ImpellerPathBuilder,
860 rect: *const ImpellerRect,
861 rounding_radii: *const ImpellerRoundingRadii,
862 );
863 #[doc = " @brief Close the path.\n\n @param[in] builder The builder.\n"]
864 pub fn ImpellerPathBuilderClose(builder: ImpellerPathBuilder);
865 #[doc = " @brief Create a new path by copying the existing built-up path. The\n existing path can continue being added to.\n\n @param[in] builder The builder.\n @param[in] fill The fill.\n\n @return The impeller path.\n"]
866 pub fn ImpellerPathBuilderCopyPathNew(
867 builder: ImpellerPathBuilder,
868 fill: FillType,
869 ) -> ImpellerPath;
870 #[doc = " @brief Create a new path using the existing built-up path. The existing\n path builder now contains an empty path.\n\n @param[in] builder The builder.\n @param[in] fill The fill.\n\n @return The impeller path.\n"]
871 pub fn ImpellerPathBuilderTakePathNew(
872 builder: ImpellerPathBuilder,
873 fill: FillType,
874 ) -> ImpellerPath;
875 #[doc = " @brief Create a new paint with default values.\n\n @return The impeller paint.\n"]
876 pub fn ImpellerPaintNew() -> ImpellerPaint;
877 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] paint The paint.\n"]
878 pub fn ImpellerPaintRetain(paint: ImpellerPaint);
879 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] paint The paint.\n"]
880 pub fn ImpellerPaintRelease(paint: ImpellerPaint);
881 #[doc = " @brief Set the paint color.\n\n @param[in] paint The paint.\n @param[in] color The color.\n"]
882 pub fn ImpellerPaintSetColor(paint: ImpellerPaint, color: *const ImpellerColor);
883 #[doc = " @brief Set the paint blend mode. The blend mode controls how the new\n paints contents are mixed with the values already drawn using\n previous draw calls.\n\n @param[in] paint The paint.\n @param[in] mode The mode.\n"]
884 pub fn ImpellerPaintSetBlendMode(paint: ImpellerPaint, mode: BlendMode);
885 #[doc = " @brief Set the paint draw style. The style controls if the closed\n shapes are filled and/or stroked.\n\n @param[in] paint The paint.\n @param[in] style The style.\n"]
886 pub fn ImpellerPaintSetDrawStyle(paint: ImpellerPaint, style: DrawStyle);
887 #[doc = " @brief Sets how strokes rendered using this paint are capped.\n\n @param[in] paint The paint.\n @param[in] cap The stroke cap style.\n"]
888 pub fn ImpellerPaintSetStrokeCap(paint: ImpellerPaint, cap: StrokeCap);
889 #[doc = " @brief Sets how strokes rendered using this paint are joined.\n\n @param[in] paint The paint.\n @param[in] join The join.\n"]
890 pub fn ImpellerPaintSetStrokeJoin(paint: ImpellerPaint, join: StrokeJoin);
891 #[doc = " @brief Set the width of the strokes rendered using this paint.\n\n @param[in] paint The paint.\n @param[in] width The width.\n"]
892 pub fn ImpellerPaintSetStrokeWidth(paint: ImpellerPaint, width: f32);
893 #[doc = " @brief Set the miter limit of the strokes rendered using this paint.\n\n @param[in] paint The paint.\n @param[in] miter The miter limit.\n"]
894 pub fn ImpellerPaintSetStrokeMiter(paint: ImpellerPaint, miter: f32);
895 #[doc = " @brief Set the color filter of the paint.\n\n Color filters are functions that take two colors and mix them to\n produce a single color. This color is then usually merged with\n the destination during blending.\n\n @param[in] paint The paint.\n @param[in] color_filter The color filter.\n"]
896 pub fn ImpellerPaintSetColorFilter(paint: ImpellerPaint, color_filter: ImpellerColorFilter);
897 #[doc = " @brief Set the color source of the paint.\n\n Color sources are functions that generate colors for each\n texture element covered by a draw call.\n\n @param[in] paint The paint.\n @param[in] color_source The color source.\n"]
898 pub fn ImpellerPaintSetColorSource(paint: ImpellerPaint, color_source: ImpellerColorSource);
899 #[doc = " @brief Set the image filter of a paint.\n\n Image filters are functions that are applied to regions of a\n texture to produce a single color.\n\n @param[in] paint The paint.\n @param[in] image_filter The image filter.\n"]
900 pub fn ImpellerPaintSetImageFilter(paint: ImpellerPaint, image_filter: ImpellerImageFilter);
901 #[doc = " @brief Set the mask filter of a paint.\n\n @param[in] paint The paint.\n @param[in] mask_filter The mask filter.\n"]
902 pub fn ImpellerPaintSetMaskFilter(paint: ImpellerPaint, mask_filter: ImpellerMaskFilter);
903 #[doc = " @brief Create a texture with decompressed bytes.\n\n Impeller will do its best to perform the transfer of this data\n to GPU memory with a minimal number of copies. Towards this\n end, it may need to send this data to a different thread for\n preparation and transfer. To facilitate this transfer, it is\n recommended that the content mapping have a release callback\n attach to it. When there is a release callback, Impeller assumes\n that collection of the data can be deferred till texture upload\n is done and can happen on a background thread. When there is no\n release callback, Impeller may try to perform an eager copy of\n the data if it needs to perform data preparation and transfer on\n a background thread.\n\n Whether an extra data copy actually occurs will always depend on\n the rendering backend in use. But it is best practice to provide\n a release callback and be resilient to the data being released\n in a deferred manner on a background thread.\n\n @warning Do **not** supply compressed image data directly (PNG, JPEG,\n etc...). This function only works with tightly packed\n decompressed data.\n\n @param[in] context The context.\n @param[in] descriptor The texture descriptor.\n @param[in] contents The contents.\n @param[in] contents_on_release_user_data The baton passes to the contents\n release callback if one exists.\n\n @return The texture if one can be created using the provided data, NULL\n otherwise.\n"]
904 pub fn ImpellerTextureCreateWithContentsNew(
905 context: ImpellerContext,
906 descriptor: *const ImpellerTextureDescriptor,
907 contents: *const ImpellerMapping,
908 contents_on_release_user_data: *mut ::std::os::raw::c_void,
909 ) -> ImpellerTexture;
910 #[doc = " @brief Create a texture with an externally created OpenGL texture\n handle.\n\n Ownership of the handle is transferred over to Impeller after a\n successful call to this method. Impeller is responsible for\n calling glDeleteTextures on this handle. Do **not** collect this\n handle yourself as this will lead to a double-free.\n\n The handle must be created in the same context as the one used\n by Impeller. If a different context is used, that context must\n be in the same sharegroup as Impellers OpenGL context and all\n synchronization of texture contents must already be complete.\n\n If the context is not an OpenGL context, this call will always\n fail.\n\n @param[in] context The context\n @param[in] descriptor The descriptor\n @param[in] handle The handle\n\n @return The texture if one could be created by adopting the supplied\n texture handle, NULL otherwise.\n"]
911 pub fn ImpellerTextureCreateWithOpenGLTextureHandleNew(
912 context: ImpellerContext,
913 descriptor: *const ImpellerTextureDescriptor,
914 handle: u64,
915 ) -> ImpellerTexture;
916 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] texture The texture.\n"]
917 pub fn ImpellerTextureRetain(texture: ImpellerTexture);
918 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] texture The texture.\n"]
919 pub fn ImpellerTextureRelease(texture: ImpellerTexture);
920 #[doc = " @brief Get the OpenGL handle associated with this texture. If this is\n not an OpenGL texture, this method will always return 0.\n\n OpenGL handles are lazily created, this method will return\n GL_NONE is no OpenGL handle is available. To ensure that this\n call eagerly creates an OpenGL texture, call this on a thread\n where Impeller knows there is an OpenGL context available.\n\n @param[in] texture The texture.\n\n @return The OpenGL handle if one is available, GL_NONE otherwise.\n"]
921 pub fn ImpellerTextureGetOpenGLHandle(texture: ImpellerTexture) -> u64;
922 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] color_source The color source.\n"]
923 pub fn ImpellerColorSourceRetain(color_source: ImpellerColorSource);
924 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] color_source The color source.\n"]
925 pub fn ImpellerColorSourceRelease(color_source: ImpellerColorSource);
926 #[doc = " @brief Create a color source that forms a linear gradient.\n\n @param[in] start_point The start point.\n @param[in] end_point The end point.\n @param[in] stop_count The stop count.\n @param[in] colors The colors.\n @param[in] stops The stops.\n @param[in] tile_mode The tile mode.\n @param[in] transformation The transformation.\n\n @return The color source.\n"]
927 pub fn ImpellerColorSourceCreateLinearGradientNew(
928 start_point: *const ImpellerPoint,
929 end_point: *const ImpellerPoint,
930 stop_count: u32,
931 colors: *const ImpellerColor,
932 stops: *const f32,
933 tile_mode: TileMode,
934 transformation: *const ImpellerMatrix,
935 ) -> ImpellerColorSource;
936 #[doc = " @brief Create a color source that forms a radial gradient.\n\n @param[in] center The center.\n @param[in] radius The radius.\n @param[in] stop_count The stop count.\n @param[in] colors The colors.\n @param[in] stops The stops.\n @param[in] tile_mode The tile mode.\n @param[in] transformation The transformation.\n\n @return The color source.\n"]
937 pub fn ImpellerColorSourceCreateRadialGradientNew(
938 center: *const ImpellerPoint,
939 radius: f32,
940 stop_count: u32,
941 colors: *const ImpellerColor,
942 stops: *const f32,
943 tile_mode: TileMode,
944 transformation: *const ImpellerMatrix,
945 ) -> ImpellerColorSource;
946 #[doc = " @brief Create a color source that forms a conical gradient.\n\n @param[in] start_center The start center.\n @param[in] start_radius The start radius.\n @param[in] end_center The end center.\n @param[in] end_radius The end radius.\n @param[in] stop_count The stop count.\n @param[in] colors The colors.\n @param[in] stops The stops.\n @param[in] tile_mode The tile mode.\n @param[in] transformation The transformation.\n\n @return The color source.\n"]
947 pub fn ImpellerColorSourceCreateConicalGradientNew(
948 start_center: *const ImpellerPoint,
949 start_radius: f32,
950 end_center: *const ImpellerPoint,
951 end_radius: f32,
952 stop_count: u32,
953 colors: *const ImpellerColor,
954 stops: *const f32,
955 tile_mode: TileMode,
956 transformation: *const ImpellerMatrix,
957 ) -> ImpellerColorSource;
958 #[doc = " @brief Create a color source that forms a sweep gradient.\n\n @param[in] center The center.\n @param[in] start The start.\n @param[in] end The end.\n @param[in] stop_count The stop count.\n @param[in] colors The colors.\n @param[in] stops The stops.\n @param[in] tile_mode The tile mode.\n @param[in] transformation The transformation.\n\n @return The color source.\n"]
959 pub fn ImpellerColorSourceCreateSweepGradientNew(
960 center: *const ImpellerPoint,
961 start: f32,
962 end: f32,
963 stop_count: u32,
964 colors: *const ImpellerColor,
965 stops: *const f32,
966 tile_mode: TileMode,
967 transformation: *const ImpellerMatrix,
968 ) -> ImpellerColorSource;
969 #[doc = " @brief Create a color source that samples from an image.\n\n @param[in] image The image.\n @param[in] horizontal_tile_mode The horizontal tile mode.\n @param[in] vertical_tile_mode The vertical tile mode.\n @param[in] sampling The sampling.\n @param[in] transformation The transformation.\n\n @return The color source.\n"]
970 pub fn ImpellerColorSourceCreateImageNew(
971 image: ImpellerTexture,
972 horizontal_tile_mode: TileMode,
973 vertical_tile_mode: TileMode,
974 sampling: TextureSampling,
975 transformation: *const ImpellerMatrix,
976 ) -> ImpellerColorSource;
977 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] color_filter The color filter.\n"]
978 pub fn ImpellerColorFilterRetain(color_filter: ImpellerColorFilter);
979 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] color_filter The color filter.\n"]
980 pub fn ImpellerColorFilterRelease(color_filter: ImpellerColorFilter);
981 #[doc = " @brief Create a color filter that performs blending of pixel values\n independently.\n\n @param[in] color The color.\n @param[in] blend_mode The blend mode.\n\n @return The color filter.\n"]
982 pub fn ImpellerColorFilterCreateBlendNew(
983 color: *const ImpellerColor,
984 blend_mode: BlendMode,
985 ) -> ImpellerColorFilter;
986 #[doc = " @brief Create a color filter that transforms pixel color values\n independently.\n\n @param[in] color_matrix The color matrix.\n\n @return The color filter.\n"]
987 pub fn ImpellerColorFilterCreateColorMatrixNew(
988 color_matrix: *const ImpellerColorMatrix,
989 ) -> ImpellerColorFilter;
990 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] mask_filter The mask filter.\n"]
991 pub fn ImpellerMaskFilterRetain(mask_filter: ImpellerMaskFilter);
992 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] mask_filter The mask filter.\n"]
993 pub fn ImpellerMaskFilterRelease(mask_filter: ImpellerMaskFilter);
994 #[doc = " @brief Create a mask filter that blurs contents in the masked shape.\n\n @param[in] style The style.\n @param[in] sigma The sigma.\n\n @return The mask filter.\n"]
995 pub fn ImpellerMaskFilterCreateBlurNew(style: BlurStyle, sigma: f32) -> ImpellerMaskFilter;
996 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] image_filter The image filter.\n"]
997 pub fn ImpellerImageFilterRetain(image_filter: ImpellerImageFilter);
998 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] image_filter The image filter.\n"]
999 pub fn ImpellerImageFilterRelease(image_filter: ImpellerImageFilter);
1000 #[doc = " @brief Creates an image filter that applies a Gaussian blur.\n\n The Gaussian blur applied may be an approximation for\n performance.\n\n\n @param[in] x_sigma The x sigma.\n @param[in] y_sigma The y sigma.\n @param[in] tile_mode The tile mode.\n\n @return The image filter.\n"]
1001 pub fn ImpellerImageFilterCreateBlurNew(
1002 x_sigma: f32,
1003 y_sigma: f32,
1004 tile_mode: TileMode,
1005 ) -> ImpellerImageFilter;
1006 #[doc = " @brief Creates an image filter that enhances the per-channel pixel\n values to the maximum value in a circle around the pixel.\n\n @param[in] x_radius The x radius.\n @param[in] y_radius The y radius.\n\n @return The image filter.\n"]
1007 pub fn ImpellerImageFilterCreateDilateNew(x_radius: f32, y_radius: f32) -> ImpellerImageFilter;
1008 #[doc = " @brief Creates an image filter that dampens the per-channel pixel\n values to the minimum value in a circle around the pixel.\n\n @param[in] x_radius The x radius.\n @param[in] y_radius The y radius.\n\n @return The image filter.\n"]
1009 pub fn ImpellerImageFilterCreateErodeNew(x_radius: f32, y_radius: f32) -> ImpellerImageFilter;
1010 #[doc = " @brief Creates an image filter that applies a transformation matrix to\n the underlying image.\n\n @param[in] matrix The transformation matrix.\n @param[in] sampling The image sampling mode.\n\n @return The image filter.\n"]
1011 pub fn ImpellerImageFilterCreateMatrixNew(
1012 matrix: *const ImpellerMatrix,
1013 sampling: TextureSampling,
1014 ) -> ImpellerImageFilter;
1015 #[doc = " @brief Creates a composed filter that when applied is identical to\n subsequently applying the inner and then the outer filters.\n\n ```ignore destination = outer_filter(inner_filter(source))\n ```\n\n @param[in] outer The outer image filter.\n @param[in] inner The inner image filter.\n\n @return The combined image filter.\n"]
1016 pub fn ImpellerImageFilterCreateComposeNew(
1017 outer: ImpellerImageFilter,
1018 inner: ImpellerImageFilter,
1019 ) -> ImpellerImageFilter;
1020 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] display_list The display list.\n"]
1021 pub fn ImpellerDisplayListRetain(display_list: ImpellerDisplayList);
1022 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] display_list The display list.\n"]
1023 pub fn ImpellerDisplayListRelease(display_list: ImpellerDisplayList);
1024 #[doc = " @brief Create a new display list builder.\n\n An optional cull rectangle may be specified. Impeller is allowed\n to treat the contents outside this rectangle as being undefined.\n This may aid performance optimizations.\n\n @param[in] cull_rect The cull rectangle or NULL.\n\n @return The display list builder.\n"]
1025 pub fn ImpellerDisplayListBuilderNew(
1026 cull_rect: *const ImpellerRect,
1027 ) -> ImpellerDisplayListBuilder;
1028 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] builder The display list builder.\n"]
1029 pub fn ImpellerDisplayListBuilderRetain(builder: ImpellerDisplayListBuilder);
1030 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] builder The display list builder.\n"]
1031 pub fn ImpellerDisplayListBuilderRelease(builder: ImpellerDisplayListBuilder);
1032 #[doc = " @brief Create a new display list using the rendering intent already\n encoded in the builder. The builder is reset after this call.\n\n @param[in] builder The builder.\n\n @return The display list.\n"]
1033 pub fn ImpellerDisplayListBuilderCreateDisplayListNew(
1034 builder: ImpellerDisplayListBuilder,
1035 ) -> ImpellerDisplayList;
1036 #[doc = " @brief Stashes the current transformation and clip state onto a save\n stack.\n\n @param[in] builder The builder.\n"]
1037 pub fn ImpellerDisplayListBuilderSave(builder: ImpellerDisplayListBuilder);
1038 #[doc = " @brief Stashes the current transformation and clip state onto a save\n stack and creates and creates an offscreen layer onto which\n subsequent rendering intent will be directed to.\n\n On the balancing call to restore, the supplied paints filters\n and blend modes will be used to composite the offscreen contents\n back onto the display display list.\n\n @param[in] builder The builder.\n @param[in] bounds The bounds.\n @param[in] paint The paint.\n @param[in] backdrop The backdrop.\n"]
1039 pub fn ImpellerDisplayListBuilderSaveLayer(
1040 builder: ImpellerDisplayListBuilder,
1041 bounds: *const ImpellerRect,
1042 paint: ImpellerPaint,
1043 backdrop: ImpellerImageFilter,
1044 );
1045 #[doc = " @brief Pops the last entry pushed onto the save stack using a call to\n `ImpellerDisplayListBuilderSave` or\n `ImpellerDisplayListBuilderSaveLayer`.\n\n @param[in] builder The builder.\n"]
1046 pub fn ImpellerDisplayListBuilderRestore(builder: ImpellerDisplayListBuilder);
1047 #[doc = " @brief Apply a scale to the transformation matrix currently on top of\n the save stack.\n\n @param[in] builder The builder.\n @param[in] x_scale The x scale.\n @param[in] y_scale The y scale.\n"]
1048 pub fn ImpellerDisplayListBuilderScale(
1049 builder: ImpellerDisplayListBuilder,
1050 x_scale: f32,
1051 y_scale: f32,
1052 );
1053 #[doc = " @brief Apply a clockwise rotation to the transformation matrix\n currently on top of the save stack.\n\n @param[in] builder The builder.\n @param[in] angle_degrees The angle in degrees.\n"]
1054 pub fn ImpellerDisplayListBuilderRotate(
1055 builder: ImpellerDisplayListBuilder,
1056 angle_degrees: f32,
1057 );
1058 #[doc = " @brief Apply a translation to the transformation matrix currently on\n top of the save stack.\n\n @param[in] builder The builder.\n @param[in] x_translation The x translation.\n @param[in] y_translation The y translation.\n"]
1059 pub fn ImpellerDisplayListBuilderTranslate(
1060 builder: ImpellerDisplayListBuilder,
1061 x_translation: f32,
1062 y_translation: f32,
1063 );
1064 #[doc = " @brief Appends the the provided transformation to the transformation\n already on the save stack.\n\n @param[in] builder The builder.\n @param[in] transform The transform to append.\n"]
1065 pub fn ImpellerDisplayListBuilderTransform(
1066 builder: ImpellerDisplayListBuilder,
1067 transform: *const ImpellerMatrix,
1068 );
1069 #[doc = " @brief Clear the transformation on top of the save stack and replace it\n with a new value.\n\n @param[in] builder The builder.\n @param[in] transform The new transform.\n"]
1070 pub fn ImpellerDisplayListBuilderSetTransform(
1071 builder: ImpellerDisplayListBuilder,
1072 transform: *const ImpellerMatrix,
1073 );
1074 #[doc = " @brief Get the transformation currently built up on the top of the\n transformation stack.\n\n @param[in] builder The builder.\n @param[out] out_transform The transform.\n"]
1075 pub fn ImpellerDisplayListBuilderGetTransform(
1076 builder: ImpellerDisplayListBuilder,
1077 out_transform: *mut ImpellerMatrix,
1078 );
1079 #[doc = " @brief Reset the transformation on top of the transformation stack to\n identity.\n\n @param[in] builder The builder.\n"]
1080 pub fn ImpellerDisplayListBuilderResetTransform(builder: ImpellerDisplayListBuilder);
1081 #[doc = " @brief Get the current size of the save stack.\n\n @param[in] builder The builder.\n\n @return The save stack size.\n"]
1082 pub fn ImpellerDisplayListBuilderGetSaveCount(builder: ImpellerDisplayListBuilder) -> u32;
1083 #[doc = " @brief Effectively calls ImpellerDisplayListBuilderRestore till the\n size of the save stack becomes a specified count.\n\n @param[in] builder The builder.\n @param[in] count The count.\n"]
1084 pub fn ImpellerDisplayListBuilderRestoreToCount(
1085 builder: ImpellerDisplayListBuilder,
1086 count: u32,
1087 );
1088 #[doc = " @brief Reduces the clip region to the intersection of the current clip\n and the given rectangle taking into account the clip operation.\n\n @param[in] builder The builder.\n @param[in] rect The rectangle.\n @param[in] op The operation.\n"]
1089 pub fn ImpellerDisplayListBuilderClipRect(
1090 builder: ImpellerDisplayListBuilder,
1091 rect: *const ImpellerRect,
1092 op: ClipOperation,
1093 );
1094 #[doc = " @brief Reduces the clip region to the intersection of the current clip\n and the given oval taking into account the clip operation.\n\n @param[in] builder The builder.\n @param[in] oval_bounds The oval bounds.\n @param[in] op The operation.\n"]
1095 pub fn ImpellerDisplayListBuilderClipOval(
1096 builder: ImpellerDisplayListBuilder,
1097 oval_bounds: *const ImpellerRect,
1098 op: ClipOperation,
1099 );
1100 #[doc = " @brief Reduces the clip region to the intersection of the current clip\n and the given rounded rectangle taking into account the clip\n operation.\n\n @param[in] builder The builder.\n @param[in] rect The rectangle.\n @param[in] radii The radii.\n @param[in] op The operation.\n"]
1101 pub fn ImpellerDisplayListBuilderClipRoundedRect(
1102 builder: ImpellerDisplayListBuilder,
1103 rect: *const ImpellerRect,
1104 radii: *const ImpellerRoundingRadii,
1105 op: ClipOperation,
1106 );
1107 #[doc = " @brief Reduces the clip region to the intersection of the current clip\n and the given path taking into account the clip operation.\n\n @param[in] builder The builder.\n @param[in] path The path.\n @param[in] op The operation.\n"]
1108 pub fn ImpellerDisplayListBuilderClipPath(
1109 builder: ImpellerDisplayListBuilder,
1110 path: ImpellerPath,
1111 op: ClipOperation,
1112 );
1113 #[doc = " @brief Fills the current clip with the specified paint.\n\n @param[in] builder The builder.\n @param[in] paint The paint.\n"]
1114 pub fn ImpellerDisplayListBuilderDrawPaint(
1115 builder: ImpellerDisplayListBuilder,
1116 paint: ImpellerPaint,
1117 );
1118 #[doc = " @brief Draws a line segment.\n\n @param[in] builder The builder.\n @param[in] from The starting point of the line.\n @param[in] to The end point of the line.\n @param[in] paint The paint.\n"]
1119 pub fn ImpellerDisplayListBuilderDrawLine(
1120 builder: ImpellerDisplayListBuilder,
1121 from: *const ImpellerPoint,
1122 to: *const ImpellerPoint,
1123 paint: ImpellerPaint,
1124 );
1125 #[doc = " @brief Draws a dash line segment.\n\n @param[in] builder The builder.\n @param[in] from The starting point of the line.\n @param[in] to The end point of the line.\n @param[in] on_length On length.\n @param[in] off_length Off length.\n @param[in] paint The paint.\n"]
1126 pub fn ImpellerDisplayListBuilderDrawDashedLine(
1127 builder: ImpellerDisplayListBuilder,
1128 from: *const ImpellerPoint,
1129 to: *const ImpellerPoint,
1130 on_length: f32,
1131 off_length: f32,
1132 paint: ImpellerPaint,
1133 );
1134 #[doc = " @brief Draws a rectangle.\n\n @param[in] builder The builder.\n @param[in] rect The rectangle.\n @param[in] paint The paint.\n"]
1135 pub fn ImpellerDisplayListBuilderDrawRect(
1136 builder: ImpellerDisplayListBuilder,
1137 rect: *const ImpellerRect,
1138 paint: ImpellerPaint,
1139 );
1140 #[doc = " @brief Draws an oval.\n\n @param[in] builder The builder.\n @param[in] oval_bounds The oval bounds.\n @param[in] paint The paint.\n"]
1141 pub fn ImpellerDisplayListBuilderDrawOval(
1142 builder: ImpellerDisplayListBuilder,
1143 oval_bounds: *const ImpellerRect,
1144 paint: ImpellerPaint,
1145 );
1146 #[doc = " @brief Draws a rounded rect.\n\n @param[in] builder The builder.\n @param[in] rect The rectangle.\n @param[in] radii The radii.\n @param[in] paint The paint.\n"]
1147 pub fn ImpellerDisplayListBuilderDrawRoundedRect(
1148 builder: ImpellerDisplayListBuilder,
1149 rect: *const ImpellerRect,
1150 radii: *const ImpellerRoundingRadii,
1151 paint: ImpellerPaint,
1152 );
1153 #[doc = " @brief Draws a shape that is the different between the specified\n rectangles (each with configurable corner radii).\n\n @param[in] builder The builder.\n @param[in] outer_rect The outer rectangle.\n @param[in] outer_radii The outer radii.\n @param[in] inner_rect The inner rectangle.\n @param[in] inner_radii The inner radii.\n @param[in] paint The paint.\n"]
1154 pub fn ImpellerDisplayListBuilderDrawRoundedRectDifference(
1155 builder: ImpellerDisplayListBuilder,
1156 outer_rect: *const ImpellerRect,
1157 outer_radii: *const ImpellerRoundingRadii,
1158 inner_rect: *const ImpellerRect,
1159 inner_radii: *const ImpellerRoundingRadii,
1160 paint: ImpellerPaint,
1161 );
1162 #[doc = " @brief Draws the specified shape.\n\n @param[in] builder The builder.\n @param[in] path The path.\n @param[in] paint The paint.\n"]
1163 pub fn ImpellerDisplayListBuilderDrawPath(
1164 builder: ImpellerDisplayListBuilder,
1165 path: ImpellerPath,
1166 paint: ImpellerPaint,
1167 );
1168 #[doc = " @brief Flattens the contents of another display list into the one\n currently being built.\n\n @param[in] builder The builder.\n @param[in] display_list The display list.\n @param[in] opacity The opacity.\n"]
1169 pub fn ImpellerDisplayListBuilderDrawDisplayList(
1170 builder: ImpellerDisplayListBuilder,
1171 display_list: ImpellerDisplayList,
1172 opacity: f32,
1173 );
1174 #[doc = " @brief Draw a paragraph at the specified point.\n\n @param[in] builder The builder.\n @param[in] paragraph The paragraph.\n @param[in] point The point.\n"]
1175 pub fn ImpellerDisplayListBuilderDrawParagraph(
1176 builder: ImpellerDisplayListBuilder,
1177 paragraph: ImpellerParagraph,
1178 point: *const ImpellerPoint,
1179 );
1180 #[doc = " @brief Draw a texture at the specified point.\n\n @param[in] builder The builder.\n @param[in] texture The texture.\n @param[in] point The point.\n @param[in] sampling The sampling.\n @param[in] paint The paint.\n"]
1181 pub fn ImpellerDisplayListBuilderDrawTexture(
1182 builder: ImpellerDisplayListBuilder,
1183 texture: ImpellerTexture,
1184 point: *const ImpellerPoint,
1185 sampling: TextureSampling,
1186 paint: ImpellerPaint,
1187 );
1188 #[doc = " @brief Draw a portion of texture at the specified location.\n\n @param[in] builder The builder.\n @param[in] texture The texture.\n @param[in] src_rect The source rectangle.\n @param[in] dst_rect The destination rectangle.\n @param[in] sampling The sampling.\n @param[in] paint The paint.\n"]
1189 pub fn ImpellerDisplayListBuilderDrawTextureRect(
1190 builder: ImpellerDisplayListBuilder,
1191 texture: ImpellerTexture,
1192 src_rect: *const ImpellerRect,
1193 dst_rect: *const ImpellerRect,
1194 sampling: TextureSampling,
1195 paint: ImpellerPaint,
1196 );
1197 #[doc = " @brief Create a new typography contents.\n\n @return The typography context.\n"]
1198 pub fn ImpellerTypographyContextNew() -> ImpellerTypographyContext;
1199 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] context The typography context.\n"]
1200 pub fn ImpellerTypographyContextRetain(context: ImpellerTypographyContext);
1201 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] context The typography context.\n"]
1202 pub fn ImpellerTypographyContextRelease(context: ImpellerTypographyContext);
1203 #[doc = " @brief Register a custom font.\n\n The following font formats are supported:\n * OpenType font collections (.ttc extension)\n * TrueType fonts: (.ttf extension)\n * OpenType fonts: (.otf extension)\n\n @warning Web Open Font Formats (.woff and .woff2 extensions) are **not**\n supported.\n\n The font data is specified as a mapping. It is possible for the\n release callback of the mapping to not be called even past the\n destruction of the typography context. Care must be taken to not\n collect the mapping till the release callback is invoked by\n Impeller.\n\n The family alias name can be NULL. In such cases, the font\n family specified in paragraph styles must match the family that\n is specified in the font data.\n\n If the family name alias is not NULL, that family name must be\n used in the paragraph style to reference glyphs from this font\n instead of the one encoded in the font itself.\n\n Multiple fonts (with glyphs for different styles) can be\n specified with the same family.\n\n @see `ImpellerParagraphStyleSetFontFamily`\n\n @param[in] context The context.\n @param[in] contents The contents.\n @param[in] contents_on_release_user_data The user data baton to be passed\n to the contents release callback.\n @param[in] family_name_alias The family name alias or NULL if\n the one specified in the font\n data is to be used.\n\n @return If the font could be successfully registered.\n"]
1204 pub fn ImpellerTypographyContextRegisterFont(
1205 context: ImpellerTypographyContext,
1206 contents: *const ImpellerMapping,
1207 contents_on_release_user_data: *mut ::std::os::raw::c_void,
1208 family_name_alias: *const ::std::os::raw::c_char,
1209 ) -> bool;
1210 #[doc = " @brief Create a new paragraph style.\n\n @return The paragraph style.\n"]
1211 pub fn ImpellerParagraphStyleNew() -> ImpellerParagraphStyle;
1212 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] paragraph_style The paragraph style.\n"]
1213 pub fn ImpellerParagraphStyleRetain(paragraph_style: ImpellerParagraphStyle);
1214 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] paragraph_style The paragraph style.\n"]
1215 pub fn ImpellerParagraphStyleRelease(paragraph_style: ImpellerParagraphStyle);
1216 #[doc = " @brief Set the paint used to render the text glyph contents.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] paint The paint.\n"]
1217 pub fn ImpellerParagraphStyleSetForeground(
1218 paragraph_style: ImpellerParagraphStyle,
1219 paint: ImpellerPaint,
1220 );
1221 #[doc = " @brief Set the paint used to render the background of the text glyphs.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] paint The paint.\n"]
1222 pub fn ImpellerParagraphStyleSetBackground(
1223 paragraph_style: ImpellerParagraphStyle,
1224 paint: ImpellerPaint,
1225 );
1226 #[doc = " @brief Set the weight of the font to select when rendering glyphs.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] weight The weight.\n"]
1227 pub fn ImpellerParagraphStyleSetFontWeight(
1228 paragraph_style: ImpellerParagraphStyle,
1229 weight: FontWeight,
1230 );
1231 #[doc = " @brief Set whether the glyphs should be bolded or italicized.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] style The style.\n"]
1232 pub fn ImpellerParagraphStyleSetFontStyle(
1233 paragraph_style: ImpellerParagraphStyle,
1234 style: FontStyle,
1235 );
1236 #[doc = " @brief Set the font family.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] family_name The family name.\n"]
1237 pub fn ImpellerParagraphStyleSetFontFamily(
1238 paragraph_style: ImpellerParagraphStyle,
1239 family_name: *const ::std::os::raw::c_char,
1240 );
1241 #[doc = " @brief Set the font size.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] size The size.\n"]
1242 pub fn ImpellerParagraphStyleSetFontSize(paragraph_style: ImpellerParagraphStyle, size: f32);
1243 #[doc = " @brief The height of the text as a multiple of text size.\n\n When height is 0.0, the line height will be determined by the\n font's metrics directly, which may differ from the font size.\n Otherwise the line height of the text will be a multiple of font\n size, and be exactly fontSize * height logical pixels tall.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] height The height.\n"]
1244 pub fn ImpellerParagraphStyleSetHeight(paragraph_style: ImpellerParagraphStyle, height: f32);
1245 #[doc = " @brief Set the alignment of text within the paragraph.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] align The align.\n"]
1246 pub fn ImpellerParagraphStyleSetTextAlignment(
1247 paragraph_style: ImpellerParagraphStyle,
1248 align: TextAlignment,
1249 );
1250 #[doc = " @brief Set the directionality of the text within the paragraph.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] direction The direction.\n"]
1251 pub fn ImpellerParagraphStyleSetTextDirection(
1252 paragraph_style: ImpellerParagraphStyle,
1253 direction: TextDirection,
1254 );
1255 #[doc = " @brief Set the maximum line count within the paragraph.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] max_lines The maximum lines.\n"]
1256 pub fn ImpellerParagraphStyleSetMaxLines(
1257 paragraph_style: ImpellerParagraphStyle,
1258 max_lines: u32,
1259 );
1260 #[doc = " @brief Set the paragraph locale.\n\n @param[in] paragraph_style The paragraph style.\n @param[in] locale The locale.\n"]
1261 pub fn ImpellerParagraphStyleSetLocale(
1262 paragraph_style: ImpellerParagraphStyle,
1263 locale: *const ::std::os::raw::c_char,
1264 );
1265 #[doc = " @brief Create a new paragraph builder.\n\n @param[in] context The context.\n\n @return The paragraph builder.\n"]
1266 pub fn ImpellerParagraphBuilderNew(
1267 context: ImpellerTypographyContext,
1268 ) -> ImpellerParagraphBuilder;
1269 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] paragraph_builder The paragraph builder.\n"]
1270 pub fn ImpellerParagraphBuilderRetain(paragraph_builder: ImpellerParagraphBuilder);
1271 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] paragraph_builder The paragraph_builder.\n"]
1272 pub fn ImpellerParagraphBuilderRelease(paragraph_builder: ImpellerParagraphBuilder);
1273 #[doc = " @brief Push a new paragraph style onto the paragraph style stack\n managed by the paragraph builder.\n\n Not all paragraph styles can be combined. For instance, it does\n not make sense to mix text alignment for different text runs\n within a paragraph. In such cases, the preference of the the\n first paragraph style on the style stack will take hold.\n\n If text is pushed onto the paragraph builder without a style\n previously pushed onto the stack, a default paragraph text style\n will be used. This may not always be desirable because some\n style element cannot be overridden. It is recommended that a\n default paragraph style always be pushed onto the stack before\n the addition of any text.\n\n @param[in] paragraph_builder The paragraph builder.\n @param[in] style The style.\n"]
1274 pub fn ImpellerParagraphBuilderPushStyle(
1275 paragraph_builder: ImpellerParagraphBuilder,
1276 style: ImpellerParagraphStyle,
1277 );
1278 #[doc = " @brief Pop a previously pushed paragraph style from the paragraph style\n stack.\n\n @param[in] paragraph_builder The paragraph builder.\n"]
1279 pub fn ImpellerParagraphBuilderPopStyle(paragraph_builder: ImpellerParagraphBuilder);
1280 #[doc = " @brief Add UTF-8 encoded text to the paragraph. The text will be styled\n according to the paragraph style already on top of the paragraph\n style stack.\n\n @param[in] paragraph_builder The paragraph builder.\n @param[in] data The data.\n @param[in] length The length.\n"]
1281 pub fn ImpellerParagraphBuilderAddText(
1282 paragraph_builder: ImpellerParagraphBuilder,
1283 data: *const u8,
1284 length: u32,
1285 );
1286 #[doc = " @brief Layout and build a new paragraph using the specified width. The\n resulting paragraph is immutable. The paragraph builder must be\n discarded and a new one created to build more paragraphs.\n\n @param[in] paragraph_builder The paragraph builder.\n @param[in] width The paragraph width.\n\n @return The paragraph if one can be created, NULL otherwise.\n"]
1287 pub fn ImpellerParagraphBuilderBuildParagraphNew(
1288 paragraph_builder: ImpellerParagraphBuilder,
1289 width: f32,
1290 ) -> ImpellerParagraph;
1291 #[doc = " @brief Retain a strong reference to the object. The object can be NULL\n in which case this method is a no-op.\n\n @param[in] paragraph The paragraph.\n"]
1292 pub fn ImpellerParagraphRetain(paragraph: ImpellerParagraph);
1293 #[doc = " @brief Release a previously retained reference to the object. The\n object can be NULL in which case this method is a no-op.\n\n @param[in] paragraph The paragraph.\n"]
1294 pub fn ImpellerParagraphRelease(paragraph: ImpellerParagraph);
1295 #[doc = " @see `ImpellerParagraphGetMinIntrinsicWidth`\n\n @param[in] paragraph The paragraph.\n\n\n @return The width provided to the paragraph builder during the call to\n layout. This is the maximum width any line in the laid out\n paragraph can occupy. But, it is not necessarily the actual\n width of the paragraph after layout.\n"]
1296 pub fn ImpellerParagraphGetMaxWidth(paragraph: ImpellerParagraph) -> f32;
1297 #[doc = " @param[in] paragraph The paragraph.\n\n @return The height of the laid out paragraph. This is **not** a tight\n bounding box and some glyphs may not reach the minimum location\n they are allowed to reach.\n"]
1298 pub fn ImpellerParagraphGetHeight(paragraph: ImpellerParagraph) -> f32;
1299 #[doc = " @param[in] paragraph The paragraph.\n\n @return The length of the longest line in the paragraph. This is the\n horizontal distance between the left edge of the leftmost glyph\n and the right edge of the rightmost glyph, in the longest line\n in the paragraph.\n"]
1300 pub fn ImpellerParagraphGetLongestLineWidth(paragraph: ImpellerParagraph) -> f32;
1301 #[doc = " @see `ImpellerParagraphGetMaxWidth`\n\n @param[in] paragraph The paragraph.\n\n @return The actual width of the longest line in the paragraph after\n layout. This is expected to be less than or equal to\n `ImpellerParagraphGetMaxWidth`.\n"]
1302 pub fn ImpellerParagraphGetMinIntrinsicWidth(paragraph: ImpellerParagraph) -> f32;
1303 #[doc = " @param[in] paragraph The paragraph.\n\n @return The width of the paragraph without line breaking.\n"]
1304 pub fn ImpellerParagraphGetMaxIntrinsicWidth(paragraph: ImpellerParagraph) -> f32;
1305 #[doc = " @param[in] paragraph The paragraph.\n\n @return The distance from the top of the paragraph to the ideographic\n baseline of the first line when using ideographic fonts\n (Japanese, Korean, etc...).\n"]
1306 pub fn ImpellerParagraphGetIdeographicBaseline(paragraph: ImpellerParagraph) -> f32;
1307 #[doc = " @param[in] paragraph The paragraph.\n\n @return The distance from the top of the paragraph to the alphabetic\n baseline of the first line when using alphabetic fonts (A-Z,\n a-z, Greek, etc...).\n"]
1308 pub fn ImpellerParagraphGetAlphabeticBaseline(paragraph: ImpellerParagraph) -> f32;
1309 #[doc = " @param[in] paragraph The paragraph.\n\n @return The number of lines visible in the paragraph after line\n breaking.\n"]
1310 pub fn ImpellerParagraphGetLineCount(paragraph: ImpellerParagraph) -> u32;
1311}