Flutter Engine
 
Loading...
Searching...
No Matches
impeller.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_IMPELLER_TOOLKIT_INTEROP_IMPELLER_H_
6#define FLUTTER_IMPELLER_TOOLKIT_INTEROP_IMPELLER_H_
7
8// NOLINTBEGIN(google-objc-function-naming)
9
10#include <stdbool.h>
11#include <stddef.h>
12#include <stdint.h>
13
14///-----------------------------------------------------------------------------
15///-----------------------------------------------------------------------------
16/// ------- ___ _ _ _ ____ ___ --------
17/// ------- |_ _|_ __ ___ _ __ ___| | | ___ _ __ / \ | _ \_ _| --------
18/// ------- | || '_ ` _ \| '_ \ / _ \ | |/ _ \ '__| / _ \ | |_) | | --------
19/// ------- | || | | | | | |_) | __/ | | __/ | / ___ \| __/| | --------
20/// ------- |___|_| |_| |_| .__/ \___|_|_|\___|_| /_/ \_\_| |___| --------
21/// ------- |_| --------
22///-----------------------------------------------------------------------------
23///-----------------------------------------------------------------------------
24///
25/// This file describes a high-level, single-header, dependency-free, 2D
26/// graphics API.
27///
28/// The API fundamentals that include details about the object model, reference
29/// counting, and null-safety are described in the README.
30///
31#if defined(__cplusplus)
32#define IMPELLER_EXTERN_C extern "C"
33#define IMPELLER_EXTERN_C_BEGIN IMPELLER_EXTERN_C {
34#define IMPELLER_EXTERN_C_END }
35#else // defined(__cplusplus)
36#define IMPELLER_EXTERN_C
37#define IMPELLER_EXTERN_C_BEGIN
38#define IMPELLER_EXTERN_C_END
39#endif // defined(__cplusplus)
40
41#ifdef _WIN32
42#define IMPELLER_EXPORT_DECORATION __declspec(dllexport)
43#else
44#define IMPELLER_EXPORT_DECORATION __attribute__((visibility("default")))
45#endif
46
47#ifndef IMPELLER_NO_EXPORT
48#define IMPELLER_EXPORT IMPELLER_EXPORT_DECORATION
49#else // IMPELLER_NO_EXPORT
50#define IMPELLER_EXPORT
51#endif // IMPELLER_NO_EXPORT
52
53#ifdef __clang__
54#define IMPELLER_NULLABLE _Nullable
55#define IMPELLER_NONNULL _Nonnull
56#else // __clang__
57#define IMPELLER_NULLABLE
58#define IMPELLER_NONNULL
59#endif // __clang__
60
61#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202000L)
62#define IMPELLER_NODISCARD [[nodiscard]]
63#else // defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202000L)
64#define IMPELLER_NODISCARD
65#endif // defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202000L)
66
68
69//------------------------------------------------------------------------------
70/// @brief Pack a version in a uint32_t.
71///
72/// @param[in] variant The version variant.
73/// @param[in] major The major version.
74/// @param[in] minor The minor version.
75/// @param[in] patch The patch version.
76///
77/// @return The packed version number.
78///
79#define IMPELLER_MAKE_VERSION(variant, major, minor, patch) \
80 ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | \
81 (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch)))
82
83#define IMPELLER_VERSION_VARIANT 1
84#define IMPELLER_VERSION_MAJOR 1
85#define IMPELLER_VERSION_MINOR 4
86#define IMPELLER_VERSION_PATCH 0
87
88//------------------------------------------------------------------------------
89/// The current Impeller API version.
90///
91/// This version must be passed to APIs that create top-level objects like
92/// graphics contexts. Construction of the context may fail if the API version
93/// expected by the caller is not supported by the library.
94///
95/// The version currently supported by the library is returned by a call to
96/// `ImpellerGetVersion`
97///
98/// Since there are no API stability guarantees today, passing a version that is
99/// different to the one returned by `ImpellerGetVersion` will always fail.
100///
101/// @see `ImpellerGetVersion`
102///
103#define IMPELLER_VERSION \
104 IMPELLER_MAKE_VERSION(IMPELLER_VERSION_VARIANT, IMPELLER_VERSION_MAJOR, \
105 IMPELLER_VERSION_MINOR, IMPELLER_VERSION_PATCH)
106
107//------------------------------------------------------------------------------
108/// @param[in] version The packed version.
109///
110/// @return The version variant.
111///
112#define IMPELLER_VERSION_GET_VARIANT(version) ((uint32_t)(version) >> 29U)
113
114//------------------------------------------------------------------------------
115/// @param[in] version The packed version.
116///
117/// @return The major version.
118///
119#define IMPELLER_VERSION_GET_MAJOR(version) \
120 (((uint32_t)(version) >> 22U) & 0x7FU)
121
122//------------------------------------------------------------------------------
123/// @param[in] version The packed version.
124///
125/// @return The minor version.
126///
127#define IMPELLER_VERSION_GET_MINOR(version) \
128 (((uint32_t)(version) >> 12U) & 0x3FFU)
129
130//------------------------------------------------------------------------------
131/// @param[in] version The packed version.
132///
133/// @return The patch version.
134///
135#define IMPELLER_VERSION_GET_PATCH(version) ((uint32_t)(version) & 0xFFFU)
136
137//------------------------------------------------------------------------------
138// Handles
139//------------------------------------------------------------------------------
140
141#define IMPELLER_INTERNAL_HANDLE_NAME(handle) handle##_
142#define IMPELLER_DEFINE_HANDLE(handle) \
143 typedef struct IMPELLER_INTERNAL_HANDLE_NAME(handle) * handle;
144
145//------------------------------------------------------------------------------
146/// An Impeller graphics context. Contexts are platform and client-rendering-API
147/// specific.
148///
149/// Contexts are thread-safe objects that are expensive to create. Most
150/// applications will only ever create a single context during their lifetimes.
151/// Once setup, Impeller is ready to render frames as performantly as possible.
152///
153/// During setup, context create the underlying graphics pipelines, allocators,
154/// worker threads, etc...
155///
156/// The general guidance is to create as few contexts as possible (typically
157/// just one) and share them as much as possible.
158///
159IMPELLER_DEFINE_HANDLE(ImpellerContext);
160
161//------------------------------------------------------------------------------
162/// Display lists represent encoded rendering intent. These objects are
163/// immutable, reusable, thread-safe, and context-agnostic.
164///
165/// While it is perfectly fine to create new display lists per frame, there may
166/// be opportunities for optimization when display lists are reused multiple
167/// times.
168///
169IMPELLER_DEFINE_HANDLE(ImpellerDisplayList);
170
171//------------------------------------------------------------------------------
172/// Display list builders allow for the incremental creation of display lists.
173///
174/// Display list builders are context-agnostic.
175///
176IMPELLER_DEFINE_HANDLE(ImpellerDisplayListBuilder);
177
178//------------------------------------------------------------------------------
179/// Paints control the behavior of draw calls encoded in a display list.
180///
181/// Like display lists, paints are context-agnostic.
182///
184
185//------------------------------------------------------------------------------
186/// Color filters are functions that take two colors and mix them to produce a
187/// single color. This color is then merged with the destination during
188/// blending.
189///
190IMPELLER_DEFINE_HANDLE(ImpellerColorFilter);
191
192//------------------------------------------------------------------------------
193/// Color sources are functions that generate colors for each texture element
194/// covered by a draw call. The colors for each element can be generated using a
195/// mathematical function (to produce gradients for example) or sampled from a
196/// texture.
197///
198IMPELLER_DEFINE_HANDLE(ImpellerColorSource);
199
200//------------------------------------------------------------------------------
201/// Image filters are functions that are applied regions of a texture to produce
202/// a single color. Contrast this with color filters that operate independently
203/// on a per-pixel basis. The generated color is then merged with the
204/// destination during blending.
205///
206IMPELLER_DEFINE_HANDLE(ImpellerImageFilter);
207
208//------------------------------------------------------------------------------
209/// Mask filters are functions that are applied over a shape after it has been
210/// drawn but before it has been blended into the final image.
211///
212IMPELLER_DEFINE_HANDLE(ImpellerMaskFilter);
213
214//------------------------------------------------------------------------------
215/// Typography contexts allow for the layout and rendering of text.
216///
217/// These are typically expensive to create and applications will only ever need
218/// to create a single one of these during their lifetimes.
219///
220/// Unlike graphics context, typograhy contexts are not thread-safe. These must
221/// be created, used, and collected on a single thread.
222///
223IMPELLER_DEFINE_HANDLE(ImpellerTypographyContext);
224
225//------------------------------------------------------------------------------
226/// An immutable, fully laid out paragraph.
227///
228IMPELLER_DEFINE_HANDLE(ImpellerParagraph);
229
230//------------------------------------------------------------------------------
231/// Paragraph builders allow for the creation of fully laid out paragraphs
232/// (which themselves are immutable).
233///
234/// To build a paragraph, users push/pop paragraph styles onto a stack then add
235/// UTF-8 encoded text. The properties on the top of paragraph style stack when
236/// the text is added are used to layout and shape that subset of the paragraph.
237///
238/// @see `ImpellerParagraphStyle`
239///
240IMPELLER_DEFINE_HANDLE(ImpellerParagraphBuilder);
241
242//------------------------------------------------------------------------------
243/// Specified when building a paragraph, paragraph styles are managed in a stack
244/// with specify text properties to apply to text that is added to the paragraph
245/// builder.
246///
247IMPELLER_DEFINE_HANDLE(ImpellerParagraphStyle);
248
249//------------------------------------------------------------------------------
250/// Describes the metrics of lines in a fully laid out paragraph.
251///
252/// Regardless of how the string of text is specified to the paragraph builder,
253/// offsets into buffers that are returned by line metrics are always assumed to
254/// be into buffers of UTF-16 code units.
255///
256IMPELLER_DEFINE_HANDLE(ImpellerLineMetrics);
257
258//------------------------------------------------------------------------------
259/// Describes the metrics of glyphs in a paragraph line.
260///
261IMPELLER_DEFINE_HANDLE(ImpellerGlyphInfo);
262
263//------------------------------------------------------------------------------
264/// Represents a two-dimensional path that is immutable and graphics context
265/// agnostic.
266///
267/// Paths in Impeller consist of linear, cubic Bézier curve, and quadratic
268/// Bézier curve segments. All other shapes are approximations using these
269/// building blocks.
270///
271/// Paths are created using path builder that allow for the configuration of the
272/// path segments, how they are filled, and/or stroked.
273///
275
276//------------------------------------------------------------------------------
277/// Path builders allow for the incremental building up of paths.
278///
279IMPELLER_DEFINE_HANDLE(ImpellerPathBuilder);
280
281//------------------------------------------------------------------------------
282/// A surface represents a render target for Impeller to direct the rendering
283/// intent specified the form of display lists to.
284///
285/// Render targets are how Impeller API users perform Window System Integration
286/// (WSI). Users wrap swapchain images as surfaces and draw display lists onto
287/// these surfaces to present content.
288///
289/// Creating surfaces is typically platform and client-rendering-API specific.
290///
291IMPELLER_DEFINE_HANDLE(ImpellerSurface);
292
293//------------------------------------------------------------------------------
294/// A reference to a texture whose data is resident on the GPU. These can be
295/// referenced in draw calls and paints.
296///
297/// Creating textures is extremely expensive. Creating a single one can
298/// typically comfortably blow the frame budget of an application. Textures
299/// should be created on background threads.
300///
301/// @warning While textures themselves are thread safe, some context types
302/// (like OpenGL) may need extra configuration to be able to operate
303/// from multiple threads.
304///
305IMPELLER_DEFINE_HANDLE(ImpellerTexture);
306
307//------------------------------------------------------------------------------
308/// The primary form of WSI when using a Vulkan context, these swapchains use
309/// the `VK_KHR_surface` Vulkan extension.
310///
311/// Creating a swapchain is extremely expensive. One must be created at
312/// application startup and re-used throughout the application lifecycle.
313///
314/// Swapchains are resilient to the underlying surfaces being resized. The
315/// swapchain images will be re-created as necessary on-demand.
316///
317IMPELLER_DEFINE_HANDLE(ImpellerVulkanSwapchain);
318
319//------------------------------------------------------------------------------
320/// A fragment shader is a small program that is authored in GLSL and compiled
321/// using `impellerc` that runs on each pixel covered by a polygon and allows
322/// the user to configure how it is shaded.
323///
324/// @see https://docs.flutter.dev/ui/design/graphics/fragment-shaders
325///
326IMPELLER_DEFINE_HANDLE(ImpellerFragmentProgram);
327
328//------------------------------------------------------------------------------
329// Signatures
330//------------------------------------------------------------------------------
331
332//------------------------------------------------------------------------------
333/// A callback invoked by Impeller that passes a user supplied baton back to the
334/// user. Impeller does not interpret the baton in any way. The way the baton is
335/// specified and the thread on which the callback is invoked depends on how the
336/// user supplies the callback to Impeller.
337///
339
340//------------------------------------------------------------------------------
341/// A callback used by Impeller to allow the user to resolve function pointers.
342/// A user supplied baton that is uninterpreted by Impeller is passed back to
343/// the user in the callback. How the baton is specified to Impeller and the
344/// thread on which the callback is invoked depends on how the callback is
345/// specified to Impeller.
346///
348 const char* IMPELLER_NONNULL proc_name,
350
351//------------------------------------------------------------------------------
352/// A callback used by Impeller to allow the user to resolve Vulkan function
353/// pointers. A user supplied baton that is uninterpreted by Impeller is passed
354/// back to the user in the callback.
355///
357 void* IMPELLER_NULLABLE vulkan_instance,
358 const char* IMPELLER_NONNULL vulkan_proc_name,
360
361//------------------------------------------------------------------------------
362// Enumerations
363// -----------------------------------------------------------------------------
368
373
405
411
417
423
427
432
439
446
452
464
469
478
483
490
498
499//------------------------------------------------------------------------------
500// Non-opaque structs
501// -----------------------------------------------------------------------------
502typedef struct ImpellerRect {
503 float x;
504 float y;
505 float width;
506 float height;
508
509typedef struct ImpellerPoint {
510 float x;
511 float y;
513
514typedef struct ImpellerSize {
515 float width;
516 float height;
518
519typedef struct ImpellerISize {
520 int64_t width;
521 int64_t height;
523
524typedef struct ImpellerRange {
525 uint64_t start;
526 uint64_t end;
528
529//------------------------------------------------------------------------------
530/// A 4x4 transformation matrix using column-major storage.
531///
532/// ```
533/// | m[0] m[4] m[8] m[12] |
534/// | m[1] m[5] m[9] m[13] |
535/// | m[2] m[6] m[10] m[14] |
536/// | m[3] m[7] m[11] m[15] |
537/// ```
538///
539typedef struct ImpellerMatrix {
540 float m[16];
542
543//------------------------------------------------------------------------------
544/// A 4x5 matrix using row-major storage used for transforming color values.
545///
546/// To transform color values, a 5x5 matrix is constructed with the 5th row
547/// being identity. Then the following transformation is performed:
548///
549/// ```
550/// | R' | | m[0] m[1] m[2] m[3] m[4] | | R |
551/// | G' | | m[5] m[6] m[7] m[8] m[9] | | G |
552/// | B' | = | m[10] m[11] m[12] m[13] m[14] | * | B |
553/// | A' | | m[15] m[16] m[17] m[18] m[19] | | A |
554/// | 1 | | 0 0 0 0 1 | | 1 |
555/// ```
556///
557/// The translation column (m[4], m[9], m[14], m[19]) must be specified in
558/// non-normalized 8-bit unsigned integer space (0 to 255). Values outside this
559/// range will produce undefined results.
560///
561/// The identity transformation is thus:
562///
563/// ```
564/// 1, 0, 0, 0, 0,
565/// 0, 1, 0, 0, 0,
566/// 0, 0, 1, 0, 0,
567/// 0, 0, 0, 1, 0,
568/// ```
569///
570/// Some examples:
571///
572/// To invert all colors:
573///
574/// ```
575/// -1, 0, 0, 0, 255,
576/// 0, -1, 0, 0, 255,
577/// 0, 0, -1, 0, 255,
578/// 0, 0, 0, 1, 0,
579/// ```
580///
581/// To apply a sepia filter:
582///
583/// ```
584/// 0.393, 0.769, 0.189, 0, 0,
585/// 0.349, 0.686, 0.168, 0, 0,
586/// 0.272, 0.534, 0.131, 0, 0,
587/// 0, 0, 0, 1, 0,
588/// ```
589///
590/// To apply a grayscale conversion filter:
591///
592/// ```
593/// 0.2126, 0.7152, 0.0722, 0, 0,
594/// 0.2126, 0.7152, 0.0722, 0, 0,
595/// 0.2126, 0.7152, 0.0722, 0, 0,
596/// 0, 0, 0, 1, 0,
597/// ```
598///
599/// @see ImpellerColorFilter
600///
604
611
619
625
631
637
645
647 /// A mask of `ImpellerTextDecorationType`s to enable.
648 int types;
649 /// The decoration color.
651 /// The decoration style.
653 // The multiplier applied to the default thickness of the font to use for the
654 // decoration.
657
658//------------------------------------------------------------------------------
659// Version
660//------------------------------------------------------------------------------
661
662//------------------------------------------------------------------------------
663/// @brief Get the version of Impeller standalone API. This is the API that
664/// will be accepted for validity checks when provided to the
665/// context creation methods.
666///
667/// The current version of the API is denoted by the
668/// `IMPELLER_VERSION` macro. This version must be passed to APIs
669/// that create top-level objects like graphics contexts.
670/// Construction of the context may fail if the API version expected
671/// by the caller is not supported by the library.
672///
673/// Since there are no API stability guarantees today, passing a
674/// version that is different to the one returned by
675/// `ImpellerGetVersion` will always fail.
676///
677/// @see `ImpellerContextCreateOpenGLESNew`
678///
679/// @return The version of the standalone API.
680///
683
684//------------------------------------------------------------------------------
685// Context
686//------------------------------------------------------------------------------
687
688//------------------------------------------------------------------------------
689/// @brief Create an OpenGL(ES) Impeller context.
690///
691/// @warning Unlike other context types, the OpenGL ES context can only be
692/// created, used, and collected on the calling thread. This
693/// restriction may be lifted in the future once reactor workers are
694/// exposed in the API. No other context types have threading
695/// restrictions. Till reactor workers can be used, using the
696/// context on a background thread will cause a stall of OpenGL
697/// operations.
698///
699/// @param[in] version The version of the Impeller
700/// standalone API. See `ImpellerGetVersion`. If the
701/// specified here is not compatible with the version
702/// of the library, context creation will fail and NULL
703/// context returned from this call.
704/// @param[in] gl_proc_address_callback
705/// The gl proc address callback. For instance,
706/// `eglGetProcAddress`.
707/// @param[in] gl_proc_address_callback_user_data
708/// The gl proc address callback user data baton. This
709/// pointer is not interpreted by Impeller and will be
710/// returned as user data in the proc address callback.
711/// user data.
712///
713/// @return The context or NULL if one cannot be created.
714///
717 uint32_t version,
718 ImpellerProcAddressCallback IMPELLER_NONNULL gl_proc_address_callback,
719 void* IMPELLER_NULLABLE gl_proc_address_callback_user_data);
720
721//------------------------------------------------------------------------------
722/// @brief Create a Metal context using the system default Metal device.
723///
724/// @param[in] version The version specified in the IMPELLER_VERSION macro.
725///
726/// @return The Metal context or NULL if one cannot be created.
727///
730
731//------------------------------------------------------------------------------
732/// @brief Create a Vulkan context using the provided Vulkan Settings.
733///
734/// @param[in] version The version specified in the IMPELLER_VERSION macro.
735/// @param[in] settings The Vulkan settings.
736///
737/// @return The Vulkan context or NULL if one cannot be created.
738///
741 uint32_t version,
743
744//------------------------------------------------------------------------------
745/// @brief Retain a strong reference to the object. The object can be NULL
746/// in which case this method is a no-op.
747///
748/// @param[in] context The context.
749///
751void ImpellerContextRetain(ImpellerContext IMPELLER_NULLABLE context);
752
753//------------------------------------------------------------------------------
754/// @brief Release a previously retained reference to the object. The
755/// object can be NULL in which case this method is a no-op.
756///
757/// @param[in] context The context.
758///
760void ImpellerContextRelease(ImpellerContext IMPELLER_NULLABLE context);
761
762//------------------------------------------------------------------------------
763/// @brief Get internal Vulkan handles managed by the given Vulkan context.
764/// Ownership of the handles is still maintained by Impeller. This
765/// accessor is just available so embedders can create resources
766/// using the same device and instance as Impeller for interop.
767///
768/// @warning If the context is not a Vulkan context, False is returned with
769/// the [out] argument unaffected.
770///
771/// @param[in] context The context
772/// @param[out] out_vulkan_info The out vulkan information
773///
774/// @return If the Vulkan info could be fetched from the context.
775///
779 out_vulkan_info);
780
781//------------------------------------------------------------------------------
782// Vulkan Swapchain
783//------------------------------------------------------------------------------
784
785//------------------------------------------------------------------------------
786/// @brief Create a new Vulkan swapchain using a VkSurfaceKHR instance.
787/// Ownership of the surface is transferred over to Impeller. The
788/// Vulkan instance the surface is created from must the same as the
789/// context provided.
790///
791/// @param[in] context The context. Must be a Vulkan context whose
792/// instance is the same used to create the
793/// surface passed into the next argument.
794/// @param vulkan_surface_khr The vulkan surface.
795///
796/// @return The vulkan swapchain.
797///
800 void* IMPELLER_NONNULL vulkan_surface_khr);
801
802//------------------------------------------------------------------------------
803/// @brief Retain a strong reference to the object. The object can be NULL
804/// in which case this method is a no-op.
805///
806/// @param[in] swapchain The swapchain.
807///
810 ImpellerVulkanSwapchain IMPELLER_NULLABLE swapchain);
811
812//------------------------------------------------------------------------------
813/// @brief Release a previously retained reference to the object. The
814/// object can be NULL in which case this method is a no-op.
815///
816/// @param[in] swapchain The swapchain.
817///
820 ImpellerVulkanSwapchain IMPELLER_NULLABLE swapchain);
821
822//------------------------------------------------------------------------------
823/// @brief A potentially blocking operation, acquires the next surface to
824/// render to. Since this may block, surface acquisition must be
825/// delayed for as long as possible to avoid an idle wait on the
826/// CPU.
827///
828/// @param[in] swapchain The swapchain.
829///
830/// @return The surface if one could be obtained, NULL otherwise.
831///
834 ImpellerVulkanSwapchain IMPELLER_NONNULL swapchain);
835
836//------------------------------------------------------------------------------
837// Surface
838//------------------------------------------------------------------------------
839
840//------------------------------------------------------------------------------
841/// @brief Create a new surface by wrapping an existing framebuffer object.
842/// The framebuffer must be complete as determined by
843/// `glCheckFramebufferStatus`. The framebuffer is still owned by
844/// the caller and it must be collected once the surface is
845/// collected.
846///
847/// @param[in] context The context.
848/// @param[in] fbo The framebuffer object handle.
849/// @param[in] format The format of the framebuffer.
850/// @param[in] size The size of the framebuffer is texels.
851///
852/// @return The surface if once can be created, NULL otherwise.
853///
856 uint64_t fbo,
857 ImpellerPixelFormat format,
858 const ImpellerISize* IMPELLER_NONNULL size);
859
860//------------------------------------------------------------------------------
861/// @brief Create a surface by wrapping a Metal drawable. This is useful
862/// during WSI when the drawable is the backing store of the Metal
863/// layer being drawn to.
864///
865/// The Metal layer must be using the same device managed by the
866/// underlying context.
867///
868/// @param[in] context The context. The Metal device managed by this
869/// context must be the same used to create the
870/// drawable that is being wrapped.
871/// @param metal_drawable The drawable to wrap as a surface.
872///
873/// @return The surface if one could be wrapped, NULL otherwise.
874///
877 ImpellerContext IMPELLER_NONNULL context,
878 void* IMPELLER_NONNULL metal_drawable);
879
880//------------------------------------------------------------------------------
881/// @brief Retain a strong reference to the object. The object can be NULL
882/// in which case this method is a no-op.
883///
884/// @param[in] surface The surface.
885///
887void ImpellerSurfaceRetain(ImpellerSurface IMPELLER_NULLABLE surface);
888
889//------------------------------------------------------------------------------
890/// @brief Release a previously retained reference to the object. The
891/// object can be NULL in which case this method is a no-op.
892///
893/// @param[in] surface The surface.
894///
896void ImpellerSurfaceRelease(ImpellerSurface IMPELLER_NULLABLE surface);
897
898//------------------------------------------------------------------------------
899/// @brief Draw a display list onto the surface. The same display list can
900/// be drawn multiple times to different surfaces.
901///
902/// @warning In the OpenGL backend, Impeller will not make an effort to
903/// preserve the OpenGL state that is current in the context.
904/// Embedders that perform additional OpenGL operations in the
905/// context should expect the reset state after control transitions
906/// back to them. Key state to watch out for would be the viewports,
907/// stencil rects, test toggles, resource (texture, framebuffer,
908/// buffer) bindings, etc...
909///
910/// @param[in] surface The surface to draw the display list to.
911/// @param[in] display_list The display list to draw onto the surface.
912///
913/// @return If the display list could be drawn onto the surface.
914///
917 ImpellerDisplayList IMPELLER_NONNULL
918 display_list);
919
920//------------------------------------------------------------------------------
921/// @brief Present the surface to the underlying window system.
922///
923/// @param[in] surface The surface to present.
924///
925/// @return True if the surface could be presented.
926///
928bool ImpellerSurfacePresent(ImpellerSurface IMPELLER_NONNULL surface);
929
930//------------------------------------------------------------------------------
931// Path
932//------------------------------------------------------------------------------
933
934//------------------------------------------------------------------------------
935/// @brief Retain a strong reference to the object. The object can be NULL
936/// in which case this method is a no-op.
937///
938/// @param[in] path The path.
939///
941void ImpellerPathRetain(ImpellerPath IMPELLER_NULLABLE path);
942
943//------------------------------------------------------------------------------
944/// @brief Release a previously retained reference to the object. The
945/// object can be NULL in which case this method is a no-op.
946///
947/// @param[in] path The path.
948///
951
952//------------------------------------------------------------------------------
953/// @brief Get the bounds of the path.
954///
955/// The bounds are conservative. That is, they may be larger than
956/// the actual shape of the path and could include the control
957/// points and isolated calls to move the cursor.
958///
959/// @param[in] path The path
960/// @param[out] out_bounds The conservative bounds of the path.
961///
964 ImpellerRect* IMPELLER_NONNULL out_bounds);
965
966//------------------------------------------------------------------------------
967// Path Builder
968//------------------------------------------------------------------------------
969
970//------------------------------------------------------------------------------
971/// @brief Create a new path builder. Paths themselves are immutable.
972/// A builder builds these immutable paths.
973///
974/// @return The path builder.
975///
978
979//------------------------------------------------------------------------------
980/// @brief Retain a strong reference to the object. The object can be NULL
981/// in which case this method is a no-op.
982///
983/// @param[in] builder The builder.
984///
986void ImpellerPathBuilderRetain(ImpellerPathBuilder IMPELLER_NULLABLE builder);
987
988//------------------------------------------------------------------------------
989/// @brief Release a previously retained reference to the object. The
990/// object can be NULL in which case this method is a no-op.
991///
992/// @param[in] builder The builder.
993///
995void ImpellerPathBuilderRelease(ImpellerPathBuilder IMPELLER_NULLABLE builder);
996
997//------------------------------------------------------------------------------
998/// @brief Move the cursor to the specified location.
999///
1000/// @param[in] builder The builder.
1001/// @param[in] location The location.
1002///
1004void ImpellerPathBuilderMoveTo(ImpellerPathBuilder IMPELLER_NONNULL builder,
1005 const ImpellerPoint* IMPELLER_NONNULL location);
1006
1007//------------------------------------------------------------------------------
1008/// @brief Add a line segment from the current cursor location to the given
1009/// location. The cursor location is updated to be at the endpoint.
1010///
1011/// @param[in] builder The builder.
1012/// @param[in] location The location.
1013///
1015void ImpellerPathBuilderLineTo(ImpellerPathBuilder IMPELLER_NONNULL builder,
1016 const ImpellerPoint* IMPELLER_NONNULL location);
1017
1018//------------------------------------------------------------------------------
1019/// @brief Add a quadratic curve from whose start point is the cursor to
1020/// the specified end point using the a single control point.
1021///
1022/// The new location of the cursor after this call is the end point.
1023///
1024/// @param[in] builder The builder.
1025/// @param[in] control_point The control point.
1026/// @param[in] end_point The end point.
1027///
1030 ImpellerPathBuilder IMPELLER_NONNULL builder,
1031 const ImpellerPoint* IMPELLER_NONNULL control_point,
1032 const ImpellerPoint* IMPELLER_NONNULL end_point);
1033
1034//------------------------------------------------------------------------------
1035/// @brief Add a cubic curve whose start point is current cursor location
1036/// to the specified end point using the two specified control
1037/// points.
1038///
1039/// The new location of the cursor after this call is the end point
1040/// supplied.
1041///
1042/// @param[in] builder The builder
1043/// @param[in] control_point_1 The control point 1
1044/// @param[in] control_point_2 The control point 2
1045/// @param[in] end_point The end point
1046///
1049 ImpellerPathBuilder IMPELLER_NONNULL builder,
1050 const ImpellerPoint* IMPELLER_NONNULL control_point_1,
1051 const ImpellerPoint* IMPELLER_NONNULL control_point_2,
1052 const ImpellerPoint* IMPELLER_NONNULL end_point);
1053
1054//------------------------------------------------------------------------------
1055/// @brief Adds a rectangle to the path.
1056///
1057/// @param[in] builder The builder.
1058/// @param[in] rect The rectangle.
1059///
1061void ImpellerPathBuilderAddRect(ImpellerPathBuilder IMPELLER_NONNULL builder,
1062 const ImpellerRect* IMPELLER_NONNULL rect);
1063
1064//------------------------------------------------------------------------------
1065/// @brief Add an arc to the path.
1066///
1067/// @param[in] builder The builder.
1068/// @param[in] oval_bounds The oval bounds.
1069/// @param[in] start_angle_degrees The start angle in degrees.
1070/// @param[in] end_angle_degrees The end angle in degrees.
1071///
1073void ImpellerPathBuilderAddArc(ImpellerPathBuilder IMPELLER_NONNULL builder,
1074 const ImpellerRect* IMPELLER_NONNULL oval_bounds,
1075 float start_angle_degrees,
1076 float end_angle_degrees);
1077
1078//------------------------------------------------------------------------------
1079/// @brief Add an oval to the path.
1080///
1081/// @param[in] builder The builder.
1082/// @param[in] oval_bounds The oval bounds.
1083///
1085void ImpellerPathBuilderAddOval(ImpellerPathBuilder IMPELLER_NONNULL builder,
1087 oval_bounds);
1088
1089//------------------------------------------------------------------------------
1090/// @brief Add a rounded rect with potentially non-uniform radii to the
1091/// path.
1092///
1093/// @param[in] builder The builder.
1094/// @param[in] rect The rectangle.
1095/// @param[in] rounding_radii The rounding radii.
1096///
1099 ImpellerPathBuilder IMPELLER_NONNULL builder,
1100 const ImpellerRect* IMPELLER_NONNULL rect,
1101 const ImpellerRoundingRadii* IMPELLER_NONNULL rounding_radii);
1102
1103//------------------------------------------------------------------------------
1104/// @brief Close the path.
1105///
1106/// @param[in] builder The builder.
1107///
1109void ImpellerPathBuilderClose(ImpellerPathBuilder IMPELLER_NONNULL builder);
1110
1111//------------------------------------------------------------------------------
1112/// @brief Create a new path by copying the existing built-up path. The
1113/// existing path can continue being added to.
1114///
1115/// @param[in] builder The builder.
1116/// @param[in] fill The fill.
1117///
1118/// @return The impeller path.
1119///
1122 ImpellerFillType fill);
1123
1124//------------------------------------------------------------------------------
1125/// @brief Create a new path using the existing built-up path. The existing
1126/// path builder now contains an empty path.
1127///
1128/// @param[in] builder The builder.
1129/// @param[in] fill The fill.
1130///
1131/// @return The impeller path.
1132///
1135 ImpellerFillType fill);
1136
1137//------------------------------------------------------------------------------
1138// Paint
1139//------------------------------------------------------------------------------
1140
1141//------------------------------------------------------------------------------
1142/// @brief Create a new paint with default values.
1143///
1144/// @return The impeller paint.
1145///
1148
1149//------------------------------------------------------------------------------
1150/// @brief Retain a strong reference to the object. The object can be NULL
1151/// in which case this method is a no-op.
1152///
1153/// @param[in] paint The paint.
1154///
1156void ImpellerPaintRetain(ImpellerPaint IMPELLER_NULLABLE paint);
1157
1158//------------------------------------------------------------------------------
1159/// @brief Release a previously retained reference to the object. The
1160/// object can be NULL in which case this method is a no-op.
1161///
1162/// @param[in] paint The paint.
1163///
1165void ImpellerPaintRelease(ImpellerPaint IMPELLER_NULLABLE paint);
1166
1167//------------------------------------------------------------------------------
1168/// @brief Set the paint color.
1169///
1170/// @param[in] paint The paint.
1171/// @param[in] color The color.
1172///
1175 const ImpellerColor* IMPELLER_NONNULL color);
1176
1177//------------------------------------------------------------------------------
1178/// @brief Set the paint blend mode. The blend mode controls how the new
1179/// paints contents are mixed with the values already drawn using
1180/// previous draw calls.
1181///
1182/// @param[in] paint The paint.
1183/// @param[in] mode The mode.
1184///
1187 ImpellerBlendMode mode);
1188
1189//------------------------------------------------------------------------------
1190/// @brief Set the paint draw style. The style controls if the closed
1191/// shapes are filled and/or stroked.
1192///
1193/// @param[in] paint The paint.
1194/// @param[in] style The style.
1195///
1198 ImpellerDrawStyle style);
1199
1200//------------------------------------------------------------------------------
1201/// @brief Sets how strokes rendered using this paint are capped.
1202///
1203/// @param[in] paint The paint.
1204/// @param[in] cap The stroke cap style.
1205///
1208 ImpellerStrokeCap cap);
1209
1210//------------------------------------------------------------------------------
1211/// @brief Sets how strokes rendered using this paint are joined.
1212///
1213/// @param[in] paint The paint.
1214/// @param[in] join The join.
1215///
1218 ImpellerStrokeJoin join);
1219
1220//------------------------------------------------------------------------------
1221/// @brief Set the width of the strokes rendered using this paint.
1222///
1223/// @param[in] paint The paint.
1224/// @param[in] width The width.
1225///
1228 float width);
1229
1230//------------------------------------------------------------------------------
1231/// @brief Set the miter limit of the strokes rendered using this paint.
1232///
1233/// @param[in] paint The paint.
1234/// @param[in] miter The miter limit.
1235///
1238 float miter);
1239
1240//------------------------------------------------------------------------------
1241/// @brief Set the color filter of the paint.
1242///
1243/// Color filters are functions that take two colors and mix them to
1244/// produce a single color. This color is then usually merged with
1245/// the destination during blending.
1246///
1247/// @param[in] paint The paint.
1248/// @param[in] color_filter The color filter.
1249///
1252 ImpellerColorFilter IMPELLER_NONNULL
1253 color_filter);
1254
1255//------------------------------------------------------------------------------
1256/// @brief Set the color source of the paint.
1257///
1258/// Color sources are functions that generate colors for each
1259/// texture element covered by a draw call.
1260///
1261/// @param[in] paint The paint.
1262/// @param[in] color_source The color source.
1263///
1266 ImpellerColorSource IMPELLER_NONNULL
1267 color_source);
1268
1269//------------------------------------------------------------------------------
1270/// @brief Set the image filter of a paint.
1271///
1272/// Image filters are functions that are applied to regions of a
1273/// texture to produce a single color.
1274///
1275/// @param[in] paint The paint.
1276/// @param[in] image_filter The image filter.
1277///
1280 ImpellerImageFilter IMPELLER_NONNULL
1281 image_filter);
1282
1283//------------------------------------------------------------------------------
1284/// @brief Set the mask filter of a paint.
1285///
1286/// @param[in] paint The paint.
1287/// @param[in] mask_filter The mask filter.
1288///
1291 ImpellerMaskFilter IMPELLER_NONNULL
1292 mask_filter);
1293
1294//------------------------------------------------------------------------------
1295// Texture
1296//------------------------------------------------------------------------------
1297
1298//------------------------------------------------------------------------------
1299/// @brief Create a texture with decompressed bytes.
1300///
1301/// Impeller will do its best to perform the transfer of this data
1302/// to GPU memory with a minimal number of copies. Towards this
1303/// end, it may need to send this data to a different thread for
1304/// preparation and transfer. To facilitate this transfer, it is
1305/// recommended that the content mapping have a release callback
1306/// attach to it. When there is a release callback, Impeller assumes
1307/// that collection of the data can be deferred till texture upload
1308/// is done and can happen on a background thread. When there is no
1309/// release callback, Impeller may try to perform an eager copy of
1310/// the data if it needs to perform data preparation and transfer on
1311/// a background thread.
1312///
1313/// Whether an extra data copy actually occurs will always depend on
1314/// the rendering backend in use. But it is best practice to provide
1315/// a release callback and be resilient to the data being released
1316/// in a deferred manner on a background thread.
1317///
1318/// @warning Do **not** supply compressed image data directly (PNG, JPEG,
1319/// etc...). This function only works with tightly packed
1320/// decompressed data.
1321///
1322/// @param[in] context The context.
1323/// @param[in] descriptor The texture descriptor.
1324/// @param[in] contents The contents.
1325/// @param[in] contents_on_release_user_data The baton passes to the contents
1326/// release callback if one exists.
1327///
1328/// @return The texture if one can be created using the provided data, NULL
1329/// otherwise.
1330///
1333 ImpellerContext IMPELLER_NONNULL context,
1335 const ImpellerMapping* IMPELLER_NONNULL contents,
1336 void* IMPELLER_NULLABLE contents_on_release_user_data);
1337
1338//------------------------------------------------------------------------------
1339/// @brief Create a texture with an externally created OpenGL texture
1340/// handle.
1341///
1342/// Ownership of the handle is transferred over to Impeller after a
1343/// successful call to this method. Impeller is responsible for
1344/// calling glDeleteTextures on this handle. Do **not** collect this
1345/// handle yourself as this will lead to a double-free.
1346///
1347/// The handle must be created in the same context as the one used
1348/// by Impeller. If a different context is used, that context must
1349/// be in the same sharegroup as Impellers OpenGL context and all
1350/// synchronization of texture contents must already be complete.
1351///
1352/// If the context is not an OpenGL context, this call will always
1353/// fail.
1354///
1355/// @param[in] context The context
1356/// @param[in] descriptor The descriptor
1357/// @param[in] handle The handle
1358///
1359/// @return The texture if one could be created by adopting the supplied
1360/// texture handle, NULL otherwise.
1361///
1364 ImpellerContext IMPELLER_NONNULL context,
1366 uint64_t handle // transfer-in ownership
1367);
1368
1369//------------------------------------------------------------------------------
1370/// @brief Retain a strong reference to the object. The object can be NULL
1371/// in which case this method is a no-op.
1372///
1373/// @param[in] texture The texture.
1374///
1377
1378//------------------------------------------------------------------------------
1379/// @brief Release a previously retained reference to the object. The
1380/// object can be NULL in which case this method is a no-op.
1381///
1382/// @param[in] texture The texture.
1383///
1386
1387//------------------------------------------------------------------------------
1388/// @brief Get the OpenGL handle associated with this texture. If this is
1389/// not an OpenGL texture, this method will always return 0.
1390///
1391/// OpenGL handles are lazily created, this method will return
1392/// GL_NONE is no OpenGL handle is available. To ensure that this
1393/// call eagerly creates an OpenGL texture, call this on a thread
1394/// where Impeller knows there is an OpenGL context available.
1395///
1396/// @param[in] texture The texture.
1397///
1398/// @return The OpenGL handle if one is available, GL_NONE otherwise.
1399///
1402 ImpellerTexture IMPELLER_NONNULL texture);
1403
1404//------------------------------------------------------------------------------
1405// Fragment Program
1406//------------------------------------------------------------------------------
1407
1408//------------------------------------------------------------------------------
1409/// @brief Create a new fragment program using data obtained by compiling a
1410/// GLSL shader with `impellerc`.
1411///
1412/// @warning The data provided must be compiled by `impellerc`. Providing raw
1413/// GLSL strings will lead to a `nullptr` return. Impeller does not
1414/// compile shaders at runtime.
1415///
1416/// @param[in] data The data compiled by `impellerc`.
1417/// @param data_release_user_data A baton passed back to the caller on the
1418/// invocation of the mappings release
1419/// callback. This call can happen on any
1420/// thread.
1421///
1422/// @return The fragment program if one can be created, nullptr otherwise.
1423///
1425IMPELLER_NODISCARD ImpellerFragmentProgram IMPELLER_NULLABLE
1427 void* IMPELLER_NULLABLE data_release_user_data);
1428
1429//------------------------------------------------------------------------------
1430/// @brief Retain a strong reference to the object. The object can be NULL
1431/// in which case this method is a no-op.
1432///
1433/// @param[in] fragment_program The fragment program.
1434///
1437 ImpellerFragmentProgram IMPELLER_NULLABLE fragment_program);
1438
1439//------------------------------------------------------------------------------
1440/// @brief Release a previously retained reference to the object. The
1441/// object can be NULL in which case this method is a no-op.
1442///
1443/// @param[in] fragment_program The fragment program.
1444///
1447 ImpellerFragmentProgram IMPELLER_NULLABLE fragment_program);
1448
1449//------------------------------------------------------------------------------
1450// Color Sources
1451//------------------------------------------------------------------------------
1452
1453//------------------------------------------------------------------------------
1454/// @brief Retain a strong reference to the object. The object can be NULL
1455/// in which case this method is a no-op.
1456///
1457/// @param[in] color_source The color source.
1458///
1459
1462 ImpellerColorSource IMPELLER_NULLABLE color_source);
1463
1464//------------------------------------------------------------------------------
1465/// @brief Release a previously retained reference to the object. The
1466/// object can be NULL in which case this method is a no-op.
1467///
1468/// @param[in] color_source The color source.
1469///
1472 ImpellerColorSource IMPELLER_NULLABLE color_source);
1473
1474//------------------------------------------------------------------------------
1475/// @brief Create a color source that forms a linear gradient.
1476///
1477/// @param[in] start_point The start point.
1478/// @param[in] end_point The end point.
1479/// @param[in] stop_count The stop count.
1480/// @param[in] colors The colors.
1481/// @param[in] stops The stops.
1482/// @param[in] tile_mode The tile mode.
1483/// @param[in] transformation The transformation.
1484///
1485/// @return The color source.
1486///
1489 const ImpellerPoint* IMPELLER_NONNULL start_point,
1490 const ImpellerPoint* IMPELLER_NONNULL end_point,
1491 uint32_t stop_count,
1492 const ImpellerColor* IMPELLER_NONNULL colors,
1493 const float* IMPELLER_NONNULL stops,
1494 ImpellerTileMode tile_mode,
1495 const ImpellerMatrix* IMPELLER_NULLABLE transformation);
1496
1497//------------------------------------------------------------------------------
1498/// @brief Create a color source that forms a radial gradient.
1499///
1500/// @param[in] center The center.
1501/// @param[in] radius The radius.
1502/// @param[in] stop_count The stop count.
1503/// @param[in] colors The colors.
1504/// @param[in] stops The stops.
1505/// @param[in] tile_mode The tile mode.
1506/// @param[in] transformation The transformation.
1507///
1508/// @return The color source.
1509///
1512 const ImpellerPoint* IMPELLER_NONNULL center,
1513 float radius,
1514 uint32_t stop_count,
1515 const ImpellerColor* IMPELLER_NONNULL colors,
1516 const float* IMPELLER_NONNULL stops,
1517 ImpellerTileMode tile_mode,
1518 const ImpellerMatrix* IMPELLER_NULLABLE transformation);
1519
1520//------------------------------------------------------------------------------
1521/// @brief Create a color source that forms a conical gradient.
1522///
1523/// @param[in] start_center The start center.
1524/// @param[in] start_radius The start radius.
1525/// @param[in] end_center The end center.
1526/// @param[in] end_radius The end radius.
1527/// @param[in] stop_count The stop count.
1528/// @param[in] colors The colors.
1529/// @param[in] stops The stops.
1530/// @param[in] tile_mode The tile mode.
1531/// @param[in] transformation The transformation.
1532///
1533/// @return The color source.
1534///
1537 const ImpellerPoint* IMPELLER_NONNULL start_center,
1538 float start_radius,
1539 const ImpellerPoint* IMPELLER_NONNULL end_center,
1540 float end_radius,
1541 uint32_t stop_count,
1542 const ImpellerColor* IMPELLER_NONNULL colors,
1543 const float* IMPELLER_NONNULL stops,
1544 ImpellerTileMode tile_mode,
1545 const ImpellerMatrix* IMPELLER_NULLABLE transformation);
1546
1547//------------------------------------------------------------------------------
1548/// @brief Create a color source that forms a sweep gradient.
1549///
1550/// @param[in] center The center.
1551/// @param[in] start The start.
1552/// @param[in] end The end.
1553/// @param[in] stop_count The stop count.
1554/// @param[in] colors The colors.
1555/// @param[in] stops The stops.
1556/// @param[in] tile_mode The tile mode.
1557/// @param[in] transformation The transformation.
1558///
1559/// @return The color source.
1560///
1563 const ImpellerPoint* IMPELLER_NONNULL center,
1564 float start,
1565 float end,
1566 uint32_t stop_count,
1567 const ImpellerColor* IMPELLER_NONNULL colors,
1568 const float* IMPELLER_NONNULL stops,
1569 ImpellerTileMode tile_mode,
1570 const ImpellerMatrix* IMPELLER_NULLABLE transformation);
1571
1572//------------------------------------------------------------------------------
1573/// @brief Create a color source that samples from an image.
1574///
1575/// @param[in] image The image.
1576/// @param[in] horizontal_tile_mode The horizontal tile mode.
1577/// @param[in] vertical_tile_mode The vertical tile mode.
1578/// @param[in] sampling The sampling.
1579/// @param[in] transformation The transformation.
1580///
1581/// @return The color source.
1582///
1585 ImpellerTileMode horizontal_tile_mode,
1586 ImpellerTileMode vertical_tile_mode,
1587 ImpellerTextureSampling sampling,
1589 transformation);
1590
1591//------------------------------------------------------------------------------
1592/// @brief Create a color source whose pixels are shaded by a fragment
1593/// program.
1594///
1595/// @see https://docs.flutter.dev/ui/design/graphics/fragment-shaders
1596///
1597/// @param[in] context The context.
1598/// @param[in] fragment_program The fragment program.
1599/// @param samplers The samplers.
1600/// @param[in] samplers_count The samplers count.
1601/// @param[in] data The data (copied).
1602/// @param[in] data_bytes_length The data bytes length.
1603///
1604/// @return The color source.
1605///
1608 ImpellerContext IMPELLER_NONNULL context,
1609 ImpellerFragmentProgram IMPELLER_NONNULL fragment_program,
1610 IMPELLER_NONNULL ImpellerTexture* IMPELLER_NULLABLE samplers,
1611 size_t samplers_count,
1612 const uint8_t* IMPELLER_NULLABLE data,
1613 size_t data_bytes_length);
1614
1615//------------------------------------------------------------------------------
1616// Color Filters
1617//------------------------------------------------------------------------------
1618
1619//------------------------------------------------------------------------------
1620/// @brief Retain a strong reference to the object. The object can be NULL
1621/// in which case this method is a no-op.
1622///
1623/// @param[in] color_filter The color filter.
1624///
1627 ImpellerColorFilter IMPELLER_NULLABLE color_filter);
1628
1629//------------------------------------------------------------------------------
1630/// @brief Release a previously retained reference to the object. The
1631/// object can be NULL in which case this method is a no-op.
1632///
1633/// @param[in] color_filter The color filter.
1634///
1637 ImpellerColorFilter IMPELLER_NULLABLE color_filter);
1638
1639//------------------------------------------------------------------------------
1640/// @brief Create a color filter that performs blending of pixel values
1641/// independently.
1642///
1643/// @param[in] color The color.
1644/// @param[in] blend_mode The blend mode.
1645///
1646/// @return The color filter.
1647///
1650 ImpellerBlendMode blend_mode);
1651
1652//------------------------------------------------------------------------------
1653/// @brief Create a color filter that transforms pixel color values
1654/// independently.
1655///
1656/// @param[in] color_matrix The color matrix.
1657///
1658/// @return The color filter.
1659///
1662 const ImpellerColorMatrix* IMPELLER_NONNULL color_matrix);
1663
1664//------------------------------------------------------------------------------
1665// Mask Filters
1666//------------------------------------------------------------------------------
1667
1668//------------------------------------------------------------------------------
1669/// @brief Retain a strong reference to the object. The object can be NULL
1670/// in which case this method is a no-op.
1671///
1672/// @param[in] mask_filter The mask filter.
1673///
1675void ImpellerMaskFilterRetain(ImpellerMaskFilter IMPELLER_NULLABLE mask_filter);
1676
1677//------------------------------------------------------------------------------
1678/// @brief Release a previously retained reference to the object. The
1679/// object can be NULL in which case this method is a no-op.
1680///
1681/// @param[in] mask_filter The mask filter.
1682///
1685 ImpellerMaskFilter IMPELLER_NULLABLE mask_filter);
1686
1687//------------------------------------------------------------------------------
1688/// @brief Create a mask filter that blurs contents in the masked shape.
1689///
1690/// @param[in] style The style.
1691/// @param[in] sigma The sigma.
1692///
1693/// @return The mask filter.
1694///
1697
1698//------------------------------------------------------------------------------
1699// Image Filters
1700//------------------------------------------------------------------------------
1701
1702//------------------------------------------------------------------------------
1703/// @brief Retain a strong reference to the object. The object can be NULL
1704/// in which case this method is a no-op.
1705///
1706/// @param[in] image_filter The image filter.
1707///
1710 ImpellerImageFilter IMPELLER_NULLABLE image_filter);
1711
1712//------------------------------------------------------------------------------
1713/// @brief Release a previously retained reference to the object. The
1714/// object can be NULL in which case this method is a no-op.
1715///
1716/// @param[in] image_filter The image filter.
1717///
1720 ImpellerImageFilter IMPELLER_NULLABLE image_filter);
1721
1722//------------------------------------------------------------------------------
1723/// @brief Creates an image filter that applies a Gaussian blur.
1724///
1725/// The Gaussian blur applied may be an approximation for
1726/// performance.
1727///
1728///
1729/// @param[in] x_sigma The x sigma.
1730/// @param[in] y_sigma The y sigma.
1731/// @param[in] tile_mode The tile mode.
1732///
1733/// @return The image filter.
1734///
1737 float y_sigma,
1738 ImpellerTileMode tile_mode);
1739
1740//------------------------------------------------------------------------------
1741/// @brief Creates an image filter that enhances the per-channel pixel
1742/// values to the maximum value in a circle around the pixel.
1743///
1744/// @param[in] x_radius The x radius.
1745/// @param[in] y_radius The y radius.
1746///
1747/// @return The image filter.
1748///
1749
1751ImpellerImageFilterCreateDilateNew(float x_radius, float y_radius);
1752
1753//------------------------------------------------------------------------------
1754/// @brief Creates an image filter that dampens the per-channel pixel
1755/// values to the minimum value in a circle around the pixel.
1756///
1757/// @param[in] x_radius The x radius.
1758/// @param[in] y_radius The y radius.
1759///
1760/// @return The image filter.
1761///
1763ImpellerImageFilterCreateErodeNew(float x_radius, float y_radius);
1764
1765//------------------------------------------------------------------------------
1766/// @brief Creates an image filter that applies a transformation matrix to
1767/// the underlying image.
1768///
1769/// @param[in] matrix The transformation matrix.
1770/// @param[in] sampling The image sampling mode.
1771///
1772/// @return The image filter.
1773///
1776 matrix,
1777 ImpellerTextureSampling sampling);
1778
1779//------------------------------------------------------------------------------
1780/// @brief Create an image filter where each pixel is shaded by a fragment
1781/// program.
1782///
1783/// @see https://docs.flutter.dev/ui/design/graphics/fragment-shaders
1784///
1785/// @param[in] context The context.
1786/// @param[in] fragment_program The fragment program.
1787/// @param samplers The samplers.
1788/// @param[in] samplers_count The samplers count.
1789/// @param[in] data The data (copied).
1790/// @param[in] data_bytes_length The data bytes length.
1791///
1792/// @return The image filter.
1793///
1796 ImpellerContext IMPELLER_NONNULL context,
1797 ImpellerFragmentProgram IMPELLER_NONNULL fragment_program,
1798 IMPELLER_NONNULL ImpellerTexture* IMPELLER_NULLABLE samplers,
1799 size_t samplers_count,
1800 const uint8_t* IMPELLER_NULLABLE data,
1801 size_t data_bytes_length);
1802
1803//------------------------------------------------------------------------------
1804/// @brief Creates a composed filter that when applied is identical to
1805/// subsequently applying the inner and then the outer filters.
1806///
1807/// ```
1808/// destination = outer_filter(inner_filter(source))
1809/// ```
1810///
1811/// @param[in] outer The outer image filter.
1812/// @param[in] inner The inner image filter.
1813///
1814/// @return The combined image filter.
1815///
1818 ImpellerImageFilter IMPELLER_NONNULL inner);
1819
1820//------------------------------------------------------------------------------
1821// Display List
1822//------------------------------------------------------------------------------
1823
1824//------------------------------------------------------------------------------
1825/// @brief Retain a strong reference to the object. The object can be NULL
1826/// in which case this method is a no-op.
1827///
1828/// @param[in] display_list The display list.
1829///
1832 ImpellerDisplayList IMPELLER_NULLABLE display_list);
1833
1834//------------------------------------------------------------------------------
1835/// @brief Release a previously retained reference to the object. The
1836/// object can be NULL in which case this method is a no-op.
1837///
1838/// @param[in] display_list The display list.
1839///
1842 ImpellerDisplayList IMPELLER_NULLABLE display_list);
1843
1844//------------------------------------------------------------------------------
1845// Display List Builder
1846//------------------------------------------------------------------------------
1847
1848//------------------------------------------------------------------------------
1849/// @brief Create a new display list builder.
1850///
1851/// An optional cull rectangle may be specified. Impeller is allowed
1852/// to treat the contents outside this rectangle as being undefined.
1853/// This may aid performance optimizations.
1854///
1855/// @param[in] cull_rect The cull rectangle or NULL.
1856///
1857/// @return The display list builder.
1858///
1859IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerDisplayListBuilder IMPELLER_NULLABLE
1861
1862//------------------------------------------------------------------------------
1863/// @brief Retain a strong reference to the object. The object can be NULL
1864/// in which case this method is a no-op.
1865///
1866/// @param[in] builder The display list builder.
1867///
1870 ImpellerDisplayListBuilder IMPELLER_NULLABLE builder);
1871
1872//------------------------------------------------------------------------------
1873/// @brief Release a previously retained reference to the object. The
1874/// object can be NULL in which case this method is a no-op.
1875///
1876/// @param[in] builder The display list builder.
1877///
1880 ImpellerDisplayListBuilder IMPELLER_NULLABLE builder);
1881
1882//------------------------------------------------------------------------------
1883/// @brief Create a new display list using the rendering intent already
1884/// encoded in the builder. The builder is reset after this call.
1885///
1886/// @param[in] builder The builder.
1887///
1888/// @return The display list.
1889///
1892 ImpellerDisplayListBuilder IMPELLER_NONNULL builder);
1893
1894//------------------------------------------------------------------------------
1895// Display List Builder: Managing the transformation stack.
1896//------------------------------------------------------------------------------
1897
1898//------------------------------------------------------------------------------
1899/// @brief Stashes the current transformation and clip state onto a save
1900/// stack.
1901///
1902/// @param[in] builder The builder.
1903///
1906 ImpellerDisplayListBuilder IMPELLER_NONNULL builder);
1907
1908//------------------------------------------------------------------------------
1909/// @brief Stashes the current transformation and clip state onto a save
1910/// stack and creates and creates an offscreen layer onto which
1911/// subsequent rendering intent will be directed to.
1912///
1913/// On the balancing call to restore, the supplied paints filters
1914/// and blend modes will be used to composite the offscreen contents
1915/// back onto the display display list.
1916///
1917/// @param[in] builder The builder.
1918/// @param[in] bounds The bounds.
1919/// @param[in] paint The paint.
1920/// @param[in] backdrop The backdrop.
1921///
1924 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
1925 const ImpellerRect* IMPELLER_NONNULL bounds,
1926 ImpellerPaint IMPELLER_NULLABLE paint,
1927 ImpellerImageFilter IMPELLER_NULLABLE backdrop);
1928
1929//------------------------------------------------------------------------------
1930/// @brief Pops the last entry pushed onto the save stack using a call to
1931/// `ImpellerDisplayListBuilderSave` or
1932/// `ImpellerDisplayListBuilderSaveLayer`.
1933///
1934/// @param[in] builder The builder.
1935///
1938 ImpellerDisplayListBuilder IMPELLER_NONNULL builder);
1939
1940//------------------------------------------------------------------------------
1941/// @brief Apply a scale to the transformation matrix currently on top of
1942/// the save stack.
1943///
1944/// @param[in] builder The builder.
1945/// @param[in] x_scale The x scale.
1946/// @param[in] y_scale The y scale.
1947///
1950 builder,
1951 float x_scale,
1952 float y_scale);
1953
1954//------------------------------------------------------------------------------
1955/// @brief Apply a clockwise rotation to the transformation matrix
1956/// currently on top of the save stack.
1957///
1958/// @param[in] builder The builder.
1959/// @param[in] angle_degrees The angle in degrees.
1960///
1961
1964 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
1965 float angle_degrees);
1966
1967//------------------------------------------------------------------------------
1968/// @brief Apply a translation to the transformation matrix currently on
1969/// top of the save stack.
1970///
1971/// @param[in] builder The builder.
1972/// @param[in] x_translation The x translation.
1973/// @param[in] y_translation The y translation.
1974///
1977 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
1978 float x_translation,
1979 float y_translation);
1980
1981//------------------------------------------------------------------------------
1982/// @brief Appends the the provided transformation to the transformation
1983/// already on the save stack.
1984///
1985/// @param[in] builder The builder.
1986/// @param[in] transform The transform to append.
1987///
1990 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
1992
1993//------------------------------------------------------------------------------
1994/// @brief Clear the transformation on top of the save stack and replace it
1995/// with a new value.
1996///
1997/// @param[in] builder The builder.
1998/// @param[in] transform The new transform.
1999///
2002 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2004
2005//------------------------------------------------------------------------------
2006/// @brief Get the transformation currently built up on the top of the
2007/// transformation stack.
2008///
2009/// @param[in] builder The builder.
2010/// @param[out] out_transform The transform.
2011///
2014 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2015 ImpellerMatrix* IMPELLER_NONNULL out_transform);
2016
2017//------------------------------------------------------------------------------
2018/// @brief Reset the transformation on top of the transformation stack to
2019/// identity.
2020///
2021/// @param[in] builder The builder.
2022///
2025 ImpellerDisplayListBuilder IMPELLER_NONNULL builder);
2026
2027//------------------------------------------------------------------------------
2028/// @brief Get the current size of the save stack.
2029///
2030/// @param[in] builder The builder.
2031///
2032/// @return The save stack size.
2033///
2036 ImpellerDisplayListBuilder IMPELLER_NONNULL builder);
2037
2038//------------------------------------------------------------------------------
2039/// @brief Effectively calls ImpellerDisplayListBuilderRestore till the
2040/// size of the save stack becomes a specified count.
2041///
2042/// @param[in] builder The builder.
2043/// @param[in] count The count.
2044///
2047 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2048 uint32_t count);
2049
2050//------------------------------------------------------------------------------
2051// Display List Builder: Clipping
2052//------------------------------------------------------------------------------
2053
2054//------------------------------------------------------------------------------
2055/// @brief Reduces the clip region to the intersection of the current clip
2056/// and the given rectangle taking into account the clip operation.
2057///
2058/// @param[in] builder The builder.
2059/// @param[in] rect The rectangle.
2060/// @param[in] op The operation.
2061///
2064 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2065 const ImpellerRect* IMPELLER_NONNULL rect,
2067
2068//------------------------------------------------------------------------------
2069/// @brief Reduces the clip region to the intersection of the current clip
2070/// and the given oval taking into account the clip operation.
2071///
2072/// @param[in] builder The builder.
2073/// @param[in] oval_bounds The oval bounds.
2074/// @param[in] op The operation.
2075///
2078 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2079 const ImpellerRect* IMPELLER_NONNULL oval_bounds,
2081
2082//------------------------------------------------------------------------------
2083/// @brief Reduces the clip region to the intersection of the current clip
2084/// and the given rounded rectangle taking into account the clip
2085/// operation.
2086///
2087/// @param[in] builder The builder.
2088/// @param[in] rect The rectangle.
2089/// @param[in] radii The radii.
2090/// @param[in] op The operation.
2091///
2094 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2095 const ImpellerRect* IMPELLER_NONNULL rect,
2098
2099//------------------------------------------------------------------------------
2100/// @brief Reduces the clip region to the intersection of the current clip
2101/// and the given path taking into account the clip operation.
2102///
2103/// @param[in] builder The builder.
2104/// @param[in] path The path.
2105/// @param[in] op The operation.
2106///
2109 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2110 ImpellerPath IMPELLER_NONNULL path,
2112
2113//------------------------------------------------------------------------------
2114// Display List Builder: Drawing Shapes
2115//------------------------------------------------------------------------------
2116
2117//------------------------------------------------------------------------------
2118/// @brief Fills the current clip with the specified paint.
2119///
2120/// @param[in] builder The builder.
2121/// @param[in] paint The paint.
2122///
2125 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2126 ImpellerPaint IMPELLER_NONNULL paint);
2127
2128//------------------------------------------------------------------------------
2129/// @brief Draws a line segment.
2130///
2131/// @param[in] builder The builder.
2132/// @param[in] from The starting point of the line.
2133/// @param[in] to The end point of the line.
2134/// @param[in] paint The paint.
2135///
2138 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2139 const ImpellerPoint* IMPELLER_NONNULL from,
2141 ImpellerPaint IMPELLER_NONNULL paint);
2142
2143//------------------------------------------------------------------------------
2144/// @brief Draws a dash line segment.
2145///
2146/// @param[in] builder The builder.
2147/// @param[in] from The starting point of the line.
2148/// @param[in] to The end point of the line.
2149/// @param[in] on_length On length.
2150/// @param[in] off_length Off length.
2151/// @param[in] paint The paint.
2152///
2155 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2156 const ImpellerPoint* IMPELLER_NONNULL from,
2158 float on_length,
2159 float off_length,
2160 ImpellerPaint IMPELLER_NONNULL paint);
2161
2162//------------------------------------------------------------------------------
2163/// @brief Draws a rectangle.
2164///
2165/// @param[in] builder The builder.
2166/// @param[in] rect The rectangle.
2167/// @param[in] paint The paint.
2168///
2171 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2172 const ImpellerRect* IMPELLER_NONNULL rect,
2173 ImpellerPaint IMPELLER_NONNULL paint);
2174
2175//------------------------------------------------------------------------------
2176/// @brief Draws an oval.
2177///
2178/// @param[in] builder The builder.
2179/// @param[in] oval_bounds The oval bounds.
2180/// @param[in] paint The paint.
2181///
2184 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2185 const ImpellerRect* IMPELLER_NONNULL oval_bounds,
2186 ImpellerPaint IMPELLER_NONNULL paint);
2187
2188//------------------------------------------------------------------------------
2189/// @brief Draws a rounded rect.
2190///
2191/// @param[in] builder The builder.
2192/// @param[in] rect The rectangle.
2193/// @param[in] radii The radii.
2194/// @param[in] paint The paint.
2195///
2198 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2199 const ImpellerRect* IMPELLER_NONNULL rect,
2201 ImpellerPaint IMPELLER_NONNULL paint);
2202
2203//------------------------------------------------------------------------------
2204/// @brief Draws a shape that is the different between the specified
2205/// rectangles (each with configurable corner radii).
2206///
2207/// @param[in] builder The builder.
2208/// @param[in] outer_rect The outer rectangle.
2209/// @param[in] outer_radii The outer radii.
2210/// @param[in] inner_rect The inner rectangle.
2211/// @param[in] inner_radii The inner radii.
2212/// @param[in] paint The paint.
2213///
2216 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2217 const ImpellerRect* IMPELLER_NONNULL outer_rect,
2218 const ImpellerRoundingRadii* IMPELLER_NONNULL outer_radii,
2219 const ImpellerRect* IMPELLER_NONNULL inner_rect,
2220 const ImpellerRoundingRadii* IMPELLER_NONNULL inner_radii,
2221 ImpellerPaint IMPELLER_NONNULL paint);
2222
2223//------------------------------------------------------------------------------
2224/// @brief Draws the specified shape.
2225///
2226/// @param[in] builder The builder.
2227/// @param[in] path The path.
2228/// @param[in] paint The paint.
2229///
2232 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2233 ImpellerPath IMPELLER_NONNULL path,
2234 ImpellerPaint IMPELLER_NONNULL paint);
2235
2236//------------------------------------------------------------------------------
2237/// @brief Flattens the contents of another display list into the one
2238/// currently being built.
2239///
2240/// @param[in] builder The builder.
2241/// @param[in] display_list The display list.
2242/// @param[in] opacity The opacity.
2243///
2246 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2247 ImpellerDisplayList IMPELLER_NONNULL display_list,
2248 float opacity);
2249
2250//------------------------------------------------------------------------------
2251/// @brief Draw a paragraph at the specified point.
2252///
2253/// @param[in] builder The builder.
2254/// @param[in] paragraph The paragraph.
2255/// @param[in] point The point.
2256///
2259 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2260 ImpellerParagraph IMPELLER_NONNULL paragraph,
2261 const ImpellerPoint* IMPELLER_NONNULL point);
2262
2263//------------------------------------------------------------------------------
2264/// @brief Draw a shadow for a Path given a material elevation. If the
2265/// occluding object is not opaque, additional hints (via the
2266/// `occluder_is_transparent` argument) must be provided to render
2267/// the shadow correctly.
2268///
2269/// @param[in] builder The builder.
2270/// @param[in] path The shadow path.
2271/// @param[in] color The shadow color.
2272/// @param[in] elevation The material elevation.
2273/// @param[in] occluder_is_transparent
2274/// If the object casting the shadow is transparent.
2275/// @param[in] device_pixel_ratio
2276/// The device pixel ratio.
2277///
2280 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2281 ImpellerPath IMPELLER_NONNULL path,
2282 const ImpellerColor* IMPELLER_NONNULL color,
2283 float elevation,
2284 bool occluder_is_transparent,
2285 float device_pixel_ratio);
2286
2287//------------------------------------------------------------------------------
2288// Display List Builder: Drawing Textures
2289//------------------------------------------------------------------------------
2290
2291//------------------------------------------------------------------------------
2292/// @brief Draw a texture at the specified point.
2293///
2294/// @param[in] builder The builder.
2295/// @param[in] texture The texture.
2296/// @param[in] point The point.
2297/// @param[in] sampling The sampling.
2298/// @param[in] paint The paint.
2299///
2302 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2303 ImpellerTexture IMPELLER_NONNULL texture,
2304 const ImpellerPoint* IMPELLER_NONNULL point,
2305 ImpellerTextureSampling sampling,
2306 ImpellerPaint IMPELLER_NULLABLE paint);
2307
2308//------------------------------------------------------------------------------
2309/// @brief Draw a portion of texture at the specified location.
2310///
2311/// @param[in] builder The builder.
2312/// @param[in] texture The texture.
2313/// @param[in] src_rect The source rectangle.
2314/// @param[in] dst_rect The destination rectangle.
2315/// @param[in] sampling The sampling.
2316/// @param[in] paint The paint.
2317///
2320 ImpellerDisplayListBuilder IMPELLER_NONNULL builder,
2321 ImpellerTexture IMPELLER_NONNULL texture,
2322 const ImpellerRect* IMPELLER_NONNULL src_rect,
2323 const ImpellerRect* IMPELLER_NONNULL dst_rect,
2324 ImpellerTextureSampling sampling,
2325 ImpellerPaint IMPELLER_NULLABLE paint);
2326
2327//------------------------------------------------------------------------------
2328// Typography Context
2329//------------------------------------------------------------------------------
2330
2331//------------------------------------------------------------------------------
2332/// @brief Create a new typography contents.
2333///
2334/// @return The typography context.
2335///
2338
2339//------------------------------------------------------------------------------
2340/// @brief Retain a strong reference to the object. The object can be NULL
2341/// in which case this method is a no-op.
2342///
2343/// @param[in] context The typography context.
2344///
2347 ImpellerTypographyContext IMPELLER_NULLABLE context);
2348
2349//------------------------------------------------------------------------------
2350/// @brief Release a previously retained reference to the object. The
2351/// object can be NULL in which case this method is a no-op.
2352///
2353/// @param[in] context The typography context.
2354///
2357 ImpellerTypographyContext IMPELLER_NULLABLE context);
2358
2359//------------------------------------------------------------------------------
2360/// @brief Register a custom font.
2361///
2362/// The following font formats are supported:
2363/// * OpenType font collections (.ttc extension)
2364/// * TrueType fonts: (.ttf extension)
2365/// * OpenType fonts: (.otf extension)
2366///
2367/// @warning Web Open Font Formats (.woff and .woff2 extensions) are **not**
2368/// supported.
2369///
2370/// The font data is specified as a mapping. It is possible for the
2371/// release callback of the mapping to not be called even past the
2372/// destruction of the typography context. Care must be taken to not
2373/// collect the mapping till the release callback is invoked by
2374/// Impeller.
2375///
2376/// The family alias name can be NULL. In such cases, the font
2377/// family specified in paragraph styles must match the family that
2378/// is specified in the font data.
2379///
2380/// If the family name alias is not NULL, that family name must be
2381/// used in the paragraph style to reference glyphs from this font
2382/// instead of the one encoded in the font itself.
2383///
2384/// Multiple fonts (with glyphs for different styles) can be
2385/// specified with the same family.
2386///
2387/// @see `ImpellerParagraphStyleSetFontFamily`
2388///
2389/// @param[in] context The context.
2390/// @param[in] contents The contents.
2391/// @param[in] contents_on_release_user_data The user data baton to be passed
2392/// to the contents release callback.
2393/// @param[in] family_name_alias The family name alias or NULL if
2394/// the one specified in the font
2395/// data is to be used.
2396///
2397/// @return If the font could be successfully registered.
2398///
2401 ImpellerTypographyContext IMPELLER_NONNULL context,
2402 const ImpellerMapping* IMPELLER_NONNULL contents,
2403 void* IMPELLER_NULLABLE contents_on_release_user_data,
2404 const char* IMPELLER_NULLABLE family_name_alias);
2405
2406//------------------------------------------------------------------------------
2407// Paragraph Style
2408//------------------------------------------------------------------------------
2409
2410//------------------------------------------------------------------------------
2411/// @brief Create a new paragraph style.
2412///
2413/// @return The paragraph style.
2414///
2417
2418//------------------------------------------------------------------------------
2419/// @brief Retain a strong reference to the object. The object can be NULL
2420/// in which case this method is a no-op.
2421///
2422/// @param[in] paragraph_style The paragraph style.
2423///
2426 ImpellerParagraphStyle IMPELLER_NULLABLE paragraph_style);
2427
2428//------------------------------------------------------------------------------
2429/// @brief Release a previously retained reference to the object. The
2430/// object can be NULL in which case this method is a no-op.
2431///
2432/// @param[in] paragraph_style The paragraph style.
2433///
2436 ImpellerParagraphStyle IMPELLER_NULLABLE paragraph_style);
2437
2438//------------------------------------------------------------------------------
2439/// @brief Set the paint used to render the text glyph contents.
2440///
2441/// @param[in] paragraph_style The paragraph style.
2442/// @param[in] paint The paint.
2443///
2446 paragraph_style,
2447 ImpellerPaint IMPELLER_NONNULL paint);
2448
2449//------------------------------------------------------------------------------
2450/// @brief Set the paint used to render the background of the text glyphs.
2451///
2452/// @param[in] paragraph_style The paragraph style.
2453/// @param[in] paint The paint.
2454///
2457 paragraph_style,
2458 ImpellerPaint IMPELLER_NONNULL paint);
2459
2460//------------------------------------------------------------------------------
2461/// @brief Set the weight of the font to select when rendering glyphs.
2462///
2463/// @param[in] paragraph_style The paragraph style.
2464/// @param[in] weight The weight.
2465///
2468 paragraph_style,
2469 ImpellerFontWeight weight);
2470
2471//------------------------------------------------------------------------------
2472/// @brief Set whether the glyphs should be bolded or italicized.
2473///
2474/// @param[in] paragraph_style The paragraph style.
2475/// @param[in] style The style.
2476///
2479 paragraph_style,
2480 ImpellerFontStyle style);
2481
2482//------------------------------------------------------------------------------
2483/// @brief Set the font family.
2484///
2485/// @param[in] paragraph_style The paragraph style.
2486/// @param[in] family_name The family name.
2487///
2490 ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style,
2491 const char* IMPELLER_NONNULL family_name);
2492
2493//------------------------------------------------------------------------------
2494/// @brief Set the font size.
2495///
2496/// @param[in] paragraph_style The paragraph style.
2497/// @param[in] size The size.
2498///
2501 paragraph_style,
2502 float size);
2503
2504//------------------------------------------------------------------------------
2505/// @brief The height of the text as a multiple of text size.
2506///
2507/// When height is 0.0, the line height will be determined by the
2508/// font's metrics directly, which may differ from the font size.
2509/// Otherwise the line height of the text will be a multiple of font
2510/// size, and be exactly fontSize * height logical pixels tall.
2511///
2512/// @param[in] paragraph_style The paragraph style.
2513/// @param[in] height The height.
2514///
2517 paragraph_style,
2518 float height);
2519
2520//------------------------------------------------------------------------------
2521/// @brief Set the alignment of text within the paragraph.
2522///
2523/// @param[in] paragraph_style The paragraph style.
2524/// @param[in] align The align.
2525///
2528 ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style,
2529 ImpellerTextAlignment align);
2530
2531//------------------------------------------------------------------------------
2532/// @brief Set the directionality of the text within the paragraph.
2533///
2534/// @param[in] paragraph_style The paragraph style.
2535/// @param[in] direction The direction.
2536///
2539 ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style,
2540 ImpellerTextDirection direction);
2541
2542//------------------------------------------------------------------------------
2543/// @brief Set one of more text decorations on the paragraph. Decorations
2544/// can be underlines, overlines, strikethroughs, etc.. The style of
2545/// decorations can be set as well (dashed, dotted, wavy, etc..)
2546///
2547/// @param[in] ImpellerParagraphStyle The paragraph style.
2548/// @param[in] decoration The text decoration.
2549///
2552 ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style,
2553 const ImpellerTextDecoration* IMPELLER_NONNULL decoration);
2554
2555//------------------------------------------------------------------------------
2556/// @brief Set the maximum line count within the paragraph.
2557///
2558/// @param[in] paragraph_style The paragraph style.
2559/// @param[in] max_lines The maximum lines.
2560///
2563 paragraph_style,
2564 uint32_t max_lines);
2565
2566//------------------------------------------------------------------------------
2567/// @brief Set the paragraph locale.
2568///
2569/// @param[in] paragraph_style The paragraph style.
2570/// @param[in] locale The locale.
2571///
2574 paragraph_style,
2575 const char* IMPELLER_NONNULL locale);
2576
2577//------------------------------------------------------------------------------
2578/// @brief Set the UTF-8 string to use as the ellipsis. Pass `nullptr` to
2579/// clear the setting to default.
2580///
2581/// @param[in] paragraph_style The paragraph style.
2582/// @param[in] data The ellipsis string UTF-8 data, or null.
2583///
2586 paragraph_style,
2587 const char* IMPELLER_NULLABLE ellipsis);
2588
2589//------------------------------------------------------------------------------
2590// Paragraph Builder
2591//------------------------------------------------------------------------------
2592
2593//------------------------------------------------------------------------------
2594/// @brief Create a new paragraph builder.
2595///
2596/// @param[in] context The context.
2597///
2598/// @return The paragraph builder.
2599///
2601ImpellerParagraphBuilderNew(ImpellerTypographyContext IMPELLER_NONNULL context);
2602
2603//------------------------------------------------------------------------------
2604/// @brief Retain a strong reference to the object. The object can be NULL
2605/// in which case this method is a no-op.
2606///
2607/// @param[in] paragraph_builder The paragraph builder.
2608///
2611 ImpellerParagraphBuilder IMPELLER_NULLABLE paragraph_builder);
2612
2613//------------------------------------------------------------------------------
2614/// @brief Release a previously retained reference to the object. The
2615/// object can be NULL in which case this method is a no-op.
2616///
2617/// @param[in] paragraph_builder The paragraph_builder.
2618///
2621 ImpellerParagraphBuilder IMPELLER_NULLABLE paragraph_builder);
2622
2623//------------------------------------------------------------------------------
2624/// @brief Push a new paragraph style onto the paragraph style stack
2625/// managed by the paragraph builder.
2626///
2627/// Not all paragraph styles can be combined. For instance, it does
2628/// not make sense to mix text alignment for different text runs
2629/// within a paragraph. In such cases, the preference of the the
2630/// first paragraph style on the style stack will take hold.
2631///
2632/// If text is pushed onto the paragraph builder without a style
2633/// previously pushed onto the stack, a default paragraph text style
2634/// will be used. This may not always be desirable because some
2635/// style element cannot be overridden. It is recommended that a
2636/// default paragraph style always be pushed onto the stack before
2637/// the addition of any text.
2638///
2639/// @param[in] paragraph_builder The paragraph builder.
2640/// @param[in] style The style.
2641///
2644 ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder,
2645 ImpellerParagraphStyle IMPELLER_NONNULL style);
2646
2647//------------------------------------------------------------------------------
2648/// @brief Pop a previously pushed paragraph style from the paragraph style
2649/// stack.
2650///
2651/// @param[in] paragraph_builder The paragraph builder.
2652///
2655 ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder);
2656
2657//------------------------------------------------------------------------------
2658/// @brief Add UTF-8 encoded text to the paragraph. The text will be styled
2659/// according to the paragraph style already on top of the paragraph
2660/// style stack.
2661///
2662/// @param[in] paragraph_builder The paragraph builder.
2663/// @param[in] data The data.
2664/// @param[in] length The length.
2665///
2668 paragraph_builder,
2669 const uint8_t* IMPELLER_NULLABLE data,
2670 uint32_t length);
2671
2672//------------------------------------------------------------------------------
2673/// @brief Layout and build a new paragraph using the specified width. The
2674/// resulting paragraph is immutable. The paragraph builder must be
2675/// discarded and a new one created to build more paragraphs.
2676///
2677/// @param[in] paragraph_builder The paragraph builder.
2678/// @param[in] width The paragraph width.
2679///
2680/// @return The paragraph if one can be created, NULL otherwise.
2681///
2684 ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder,
2685 float width);
2686
2687//------------------------------------------------------------------------------
2688// Paragraph
2689//------------------------------------------------------------------------------
2690
2691//------------------------------------------------------------------------------
2692/// @brief Retain a strong reference to the object. The object can be NULL
2693/// in which case this method is a no-op.
2694///
2695/// @param[in] paragraph The paragraph.
2696///
2698void ImpellerParagraphRetain(ImpellerParagraph IMPELLER_NULLABLE paragraph);
2699
2700//------------------------------------------------------------------------------
2701/// @brief Release a previously retained reference to the object. The
2702/// object can be NULL in which case this method is a no-op.
2703///
2704/// @param[in] paragraph The paragraph.
2705///
2707void ImpellerParagraphRelease(ImpellerParagraph IMPELLER_NULLABLE paragraph);
2708
2709//------------------------------------------------------------------------------
2710/// @see `ImpellerParagraphGetMinIntrinsicWidth`
2711///
2712/// @param[in] paragraph The paragraph.
2713///
2714///
2715/// @return The width provided to the paragraph builder during the call to
2716/// layout. This is the maximum width any line in the laid out
2717/// paragraph can occupy. But, it is not necessarily the actual
2718/// width of the paragraph after layout.
2719///
2722 ImpellerParagraph IMPELLER_NONNULL paragraph);
2723
2724//------------------------------------------------------------------------------
2725/// @param[in] paragraph The paragraph.
2726///
2727/// @return The height of the laid out paragraph. This is **not** a tight
2728/// bounding box and some glyphs may not reach the minimum location
2729/// they are allowed to reach.
2730///
2732float ImpellerParagraphGetHeight(ImpellerParagraph IMPELLER_NONNULL paragraph);
2733
2734//------------------------------------------------------------------------------
2735/// @param[in] paragraph The paragraph.
2736///
2737/// @return The length of the longest line in the paragraph. This is the
2738/// horizontal distance between the left edge of the leftmost glyph
2739/// and the right edge of the rightmost glyph, in the longest line
2740/// in the paragraph.
2741///
2744 ImpellerParagraph IMPELLER_NONNULL paragraph);
2745
2746//------------------------------------------------------------------------------
2747/// @see `ImpellerParagraphGetMaxWidth`
2748///
2749/// @param[in] paragraph The paragraph.
2750///
2751/// @return The actual width of the longest line in the paragraph after
2752/// layout. This is expected to be less than or equal to
2753/// `ImpellerParagraphGetMaxWidth`.
2754///
2757 ImpellerParagraph IMPELLER_NONNULL paragraph);
2758
2759//------------------------------------------------------------------------------
2760/// @param[in] paragraph The paragraph.
2761///
2762/// @return The width of the paragraph without line breaking.
2763///
2766 ImpellerParagraph IMPELLER_NONNULL paragraph);
2767
2768//------------------------------------------------------------------------------
2769/// @param[in] paragraph The paragraph.
2770///
2771/// @return The distance from the top of the paragraph to the ideographic
2772/// baseline of the first line when using ideographic fonts
2773/// (Japanese, Korean, etc...).
2774///
2777 ImpellerParagraph IMPELLER_NONNULL paragraph);
2778
2779//------------------------------------------------------------------------------
2780/// @param[in] paragraph The paragraph.
2781///
2782/// @return The distance from the top of the paragraph to the alphabetic
2783/// baseline of the first line when using alphabetic fonts (A-Z,
2784/// a-z, Greek, etc...).
2785///
2788 ImpellerParagraph IMPELLER_NONNULL paragraph);
2789
2790//------------------------------------------------------------------------------
2791/// @param[in] paragraph The paragraph.
2792///
2793/// @return The number of lines visible in the paragraph after line
2794/// breaking.
2795///
2798 ImpellerParagraph IMPELLER_NONNULL paragraph);
2799
2800//------------------------------------------------------------------------------
2801/// @brief Get the range into the UTF-16 code unit buffer that represents
2802/// the word at the specified caret location in the same buffer.
2803///
2804/// Word boundaries are defined more precisely in [Unicode Standard
2805/// Annex #29](http://www.unicode.org/reports/tr29/#Word_Boundaries)
2806///
2807/// @param[in] paragraph The paragraph
2808/// @param[in] code_unit_index The code unit index
2809/// @param[out] code_unit_index The range.
2810///
2813 ImpellerParagraph IMPELLER_NONNULL paragraph,
2814 size_t code_unit_index,
2815 ImpellerRange* IMPELLER_NONNULL out_range);
2816
2817//------------------------------------------------------------------------------
2818/// @brief Get the line metrics of this laid out paragraph. Calculating the
2819/// line metrics is expensive. The first time line metrics are
2820/// requested, they will be cached along with the paragraph (which
2821/// is immutable).
2822///
2823/// @param[in] paragraph The paragraph.
2824///
2825/// @return The line metrics.
2826///
2828ImpellerLineMetrics IMPELLER_NULLABLE
2830
2831//------------------------------------------------------------------------------
2832/// @brief Create a new instance of glyph info that can be queried for
2833/// information about the glyph at the given UTF-16 code unit index.
2834/// The instance must be freed using `ImpellerGlyphInfoRelease`.
2835///
2836/// @param[in] paragraph The paragraph.
2837/// @param[in] code_unit_index The UTF-16 code unit index.
2838///
2839/// @return The glyph information.
2840///
2842IMPELLER_NODISCARD ImpellerGlyphInfo IMPELLER_NULLABLE
2844 ImpellerParagraph IMPELLER_NONNULL paragraph,
2845 size_t code_unit_index);
2846
2847//------------------------------------------------------------------------------
2848/// @brief Create a new instance of glyph info that can be queried for
2849/// information about the glyph closest to the specified coordinates
2850/// relative to the origin of the paragraph. The instance must be
2851/// freed using `ImpellerGlyphInfoRelease`.
2852///
2853/// @param[in] paragraph The paragraph.
2854/// @param[in] x The x coordinate relative to paragraph origin.
2855/// @param[in] y The x coordinate relative to paragraph origin.
2856///
2857/// @return The glyph information.
2858///
2860IMPELLER_NODISCARD ImpellerGlyphInfo IMPELLER_NULLABLE
2862 ImpellerParagraph IMPELLER_NONNULL paragraph,
2863 double x,
2864 double y);
2865
2866//------------------------------------------------------------------------------
2867// Line Metrics
2868//------------------------------------------------------------------------------
2869
2870//------------------------------------------------------------------------------
2871/// @brief Retain a strong reference to the object. The object can be NULL
2872/// in which case this method is a no-op.
2873///
2874/// @param[in] line_metrics The line metrics.
2875///
2878 ImpellerLineMetrics IMPELLER_NULLABLE line_metrics);
2879
2880//------------------------------------------------------------------------------
2881/// @brief Release a previously retained reference to the object. The
2882/// object can be NULL in which case this method is a no-op.
2883///
2884/// @param[in] line_metrics The line metrics.
2885///
2888 ImpellerLineMetrics IMPELLER_NULLABLE line_metrics);
2889
2890//------------------------------------------------------------------------------
2891/// @brief The rise from the baseline as calculated from the font and style
2892/// for this line ignoring the height from the text style.
2893///
2894/// @param[in] metrics The metrics.
2895/// @param[in] line The line index (zero based).
2896///
2897/// @return The unscaled ascent.
2898///
2901 metrics,
2902 size_t line);
2903
2904//------------------------------------------------------------------------------
2905/// @brief The rise from the baseline as calculated from the font and style
2906/// for this line.
2907///
2908/// @param[in] metrics The metrics.
2909/// @param[in] line The line index (zero based).
2910///
2911/// @return The ascent.
2912///
2915 metrics,
2916 size_t line);
2917
2918//------------------------------------------------------------------------------
2919/// @brief The drop from the baseline as calculated from the font and style
2920/// for this line.
2921///
2922/// @param[in] metrics The metrics.
2923/// @param[in] line The line index (zero based).
2924///
2925/// @return The descent.
2926///
2929 metrics,
2930 size_t line);
2931
2932//------------------------------------------------------------------------------
2933/// @brief The y coordinate of the baseline for this line from the top of
2934/// the paragraph.
2935///
2936/// @param[in] metrics The metrics.
2937/// @param[in] line The line index (zero based).
2938///
2939/// @return The baseline.
2940///
2943 metrics,
2944 size_t line);
2945
2946//------------------------------------------------------------------------------
2947/// @brief Used to determine if this line ends with an explicit line break
2948/// (e.g. '\n') or is the end of the paragraph.
2949///
2950/// @param[in] metrics The metrics.
2951/// @param[in] line The line index (zero based).
2952///
2953/// @return True if the line is a hard break.
2954///
2957 metrics,
2958 size_t line);
2959
2960//------------------------------------------------------------------------------
2961/// @brief Width of the line from the left edge of the leftmost glyph to
2962/// the right edge of the rightmost glyph.
2963///
2964/// @param[in] metrics The metrics.
2965/// @param[in] line The line index (zero based).
2966///
2967/// @return The width.
2968///
2970double ImpellerLineMetricsGetWidth(ImpellerLineMetrics IMPELLER_NONNULL metrics,
2971 size_t line);
2972
2973//------------------------------------------------------------------------------
2974/// @brief Total height of the line from the top edge to the bottom edge.
2975///
2976/// @param[in] metrics The metrics.
2977/// @param[in] line The line index (zero based).
2978///
2979/// @return The height.
2980///
2983 metrics,
2984 size_t line);
2985
2986//------------------------------------------------------------------------------
2987/// @brief The x coordinate of left edge of the line.
2988///
2989/// @param[in] metrics The metrics.
2990/// @param[in] line The line index (zero based).
2991///
2992/// @return The left edge coordinate.
2993///
2995double ImpellerLineMetricsGetLeft(ImpellerLineMetrics IMPELLER_NONNULL metrics,
2996 size_t line);
2997
2998//------------------------------------------------------------------------------
2999/// @brief Fetch the start index in the buffer of UTF-16 code units used to
3000/// represent the paragraph line.
3001///
3002/// @param[in] metrics The metrics.
3003/// @param[in] line The line index (zero based).
3004///
3005/// @return The UTF-16 code units start index.
3006///
3009 ImpellerLineMetrics IMPELLER_NONNULL metrics,
3010 size_t line);
3011
3012//------------------------------------------------------------------------------
3013/// @brief Fetch the end index in the buffer of UTF-16 code units used to
3014/// represent the paragraph line.
3015///
3016/// @param[in] metrics The metrics.
3017/// @param[in] line The line index (zero based).
3018///
3019/// @return The UTF-16 code units end index.
3020///
3023 ImpellerLineMetrics IMPELLER_NONNULL metrics,
3024 size_t line);
3025
3026//------------------------------------------------------------------------------
3027/// @brief Fetch the end index (excluding whitespace) in the buffer of
3028/// UTF-16 code units used to represent the paragraph line.
3029///
3030/// @param[in] metrics The metrics.
3031/// @param[in] line The line index (zero based).
3032///
3033/// @return The UTF-16 code units end index excluding whitespace.
3034///
3037 ImpellerLineMetrics IMPELLER_NONNULL metrics,
3038 size_t line);
3039
3040//------------------------------------------------------------------------------
3041/// @brief Fetch the end index (including newlines) in the buffer of UTF-16
3042/// code units used to represent the paragraph line.
3043///
3044/// @param[in] metrics The metrics.
3045/// @param[in] line The line index (zero based).
3046///
3047/// @return The UTF-16 code units end index including newlines.
3048///
3051 ImpellerLineMetrics IMPELLER_NONNULL metrics,
3052 size_t line);
3053
3054//------------------------------------------------------------------------------
3055// Glyph Info
3056//------------------------------------------------------------------------------
3057
3058//------------------------------------------------------------------------------
3059/// @brief Retain a strong reference to the object. The object can be NULL
3060/// in which case this method is a no-op.
3061///
3062/// @param[in] glyph_info The glyph information.
3063///
3065void ImpellerGlyphInfoRetain(ImpellerGlyphInfo IMPELLER_NULLABLE glyph_info);
3066
3067//------------------------------------------------------------------------------
3068/// @brief Release a previously retained reference to the object. The
3069/// object can be NULL in which case this method is a no-op.
3070///
3071/// @param[in] glyph_info The glyph information.
3072///
3074void ImpellerGlyphInfoRelease(ImpellerGlyphInfo IMPELLER_NULLABLE glyph_info);
3075
3076//------------------------------------------------------------------------------
3077/// @brief Fetch the start index in the buffer of UTF-16 code units used to
3078/// represent the grapheme cluster for a glyph.
3079///
3080/// @param[in] glyph_info The glyph information.
3081///
3082/// @return The UTF-16 code units start index.
3083///
3086 ImpellerGlyphInfo IMPELLER_NONNULL glyph_info);
3087
3088//------------------------------------------------------------------------------
3089/// @brief Fetch the end index in the buffer of UTF-16 code units used to
3090/// represent the grapheme cluster for a glyph.
3091///
3092/// @param[in] glyph_info The glyph information.
3093///
3094/// @return The UTF-16 code units end index.
3095///
3098 ImpellerGlyphInfo IMPELLER_NONNULL glyph_info);
3099
3100//------------------------------------------------------------------------------
3101/// @brief Fetch the bounds of the grapheme cluster for the glyph in the
3102/// coordinate space of the paragraph.
3103///
3104/// @param[in] glyph_info The glyph information.
3105/// @param[out] out_bounds The grapheme cluster bounds.
3106///
3109 ImpellerGlyphInfo IMPELLER_NONNULL glyph_info,
3110 ImpellerRect* IMPELLER_NONNULL out_bounds);
3111
3112//------------------------------------------------------------------------------
3113/// @param[in] glyph_info The glyph information.
3114///
3115/// @return True if the glyph represents an ellipsis. False otherwise.
3116///
3118bool ImpellerGlyphInfoIsEllipsis(ImpellerGlyphInfo IMPELLER_NONNULL glyph_info);
3119
3120//------------------------------------------------------------------------------
3121/// @param[in] glyph_info The glyph information.
3122///
3123/// @return The direction of the run that contains the glyph.
3124///
3127 ImpellerGlyphInfo IMPELLER_NONNULL glyph_info);
3128
3130
3131// NOLINTEND(google-objc-function-naming)
3132
3133#endif // FLUTTER_IMPELLER_TOOLKIT_INTEROP_IMPELLER_H_
int32_t x
FlutterVulkanImage * image
IMPELLER_EXPORT void ImpellerColorSourceRelease(ImpellerColorSource IMPELLER_NULLABLE color_source)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerDisplayListBuilderTranslate(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, float x_translation, float y_translation)
Apply a translation to the transformation matrix currently on top of the save stack.
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawParagraph(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerParagraph IMPELLER_NONNULL paragraph, const ImpellerPoint *IMPELLER_NONNULL point)
Draw a paragraph at the specified point.
IMPELLER_EXPORT void ImpellerDisplayListBuilderClipRect(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL rect, ImpellerClipOperation op)
Reduces the clip region to the intersection of the current clip and the given rectangle taking into a...
IMPELLER_EXPORT void ImpellerDisplayListBuilderScale(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, float x_scale, float y_scale)
Apply a scale to the transformation matrix currently on top of the save stack.
IMPELLER_EXPORT void ImpellerDisplayListBuilderSaveLayer(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL bounds, ImpellerPaint IMPELLER_NULLABLE paint, ImpellerImageFilter IMPELLER_NULLABLE backdrop)
Stashes the current transformation and clip state onto a save stack and creates and creates an offscr...
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawRoundedRectDifference(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL outer_rect, const ImpellerRoundingRadii *IMPELLER_NONNULL outer_radii, const ImpellerRect *IMPELLER_NONNULL inner_rect, const ImpellerRoundingRadii *IMPELLER_NONNULL inner_radii, ImpellerPaint IMPELLER_NONNULL paint)
Draws a shape that is the different between the specified rectangles (each with configurable corner r...
IMPELLER_EXPORT void ImpellerPaintSetDrawStyle(ImpellerPaint IMPELLER_NONNULL paint, ImpellerDrawStyle style)
Set the paint draw style. The style controls if the closed shapes are filled and/or stroked.
IMPELLER_EXPORT float ImpellerParagraphGetHeight(ImpellerParagraph IMPELLER_NONNULL paragraph)
IMPELLER_EXPORT void ImpellerParagraphGetWordBoundary(ImpellerParagraph IMPELLER_NONNULL paragraph, size_t code_unit_index, ImpellerRange *IMPELLER_NONNULL out_range)
Get the range into the UTF-16 code unit buffer that represents the word at the specified caret locati...
ImpellerFillType
Definition impeller.h:364
@ kImpellerFillTypeOdd
Definition impeller.h:366
@ kImpellerFillTypeNonZero
Definition impeller.h:365
IMPELLER_EXPORT float ImpellerParagraphGetLongestLineWidth(ImpellerParagraph IMPELLER_NONNULL paragraph)
ImpellerTextDirection
Definition impeller.h:479
@ kImpellerTextDirectionLTR
Definition impeller.h:481
@ kImpellerTextDirectionRTL
Definition impeller.h:480
IMPELLER_EXPORT bool ImpellerTypographyContextRegisterFont(ImpellerTypographyContext IMPELLER_NONNULL context, const ImpellerMapping *IMPELLER_NONNULL contents, void *IMPELLER_NULLABLE contents_on_release_user_data, const char *IMPELLER_NULLABLE family_name_alias)
Register a custom font.
IMPELLER_EXPORT void ImpellerGlyphInfoGetGraphemeClusterBounds(ImpellerGlyphInfo IMPELLER_NONNULL glyph_info, ImpellerRect *IMPELLER_NONNULL out_bounds)
Fetch the bounds of the grapheme cluster for the glyph in the coordinate space of the paragraph.
ImpellerTextureSampling
Definition impeller.h:428
@ kImpellerTextureSamplingNearestNeighbor
Definition impeller.h:429
@ kImpellerTextureSamplingLinear
Definition impeller.h:430
IMPELLER_EXPORT void ImpellerPathBuilderRelease(ImpellerPathBuilder IMPELLER_NULLABLE builder)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerDisplayListBuilderRetain(ImpellerDisplayListBuilder IMPELLER_NULLABLE builder)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerPathBuilderMoveTo(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerPoint *IMPELLER_NONNULL location)
Move the cursor to the specified location.
ImpellerTextDecorationType
Definition impeller.h:484
@ kImpellerTextDecorationTypeLineThrough
Definition impeller.h:488
@ kImpellerTextDecorationTypeNone
Definition impeller.h:485
@ kImpellerTextDecorationTypeUnderline
Definition impeller.h:486
@ kImpellerTextDecorationTypeOverline
Definition impeller.h:487
IMPELLER_EXPORT void ImpellerPaintRelease(ImpellerPaint IMPELLER_NULLABLE paint)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerPaintSetStrokeCap(ImpellerPaint IMPELLER_NONNULL paint, ImpellerStrokeCap cap)
Sets how strokes rendered using this paint are capped.
IMPELLER_EXPORT void ImpellerImageFilterRelease(ImpellerImageFilter IMPELLER_NULLABLE image_filter)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT bool ImpellerSurfacePresent(ImpellerSurface IMPELLER_NONNULL surface)
Present the surface to the underlying window system.
IMPELLER_EXPORT void ImpellerDisplayListBuilderResetTransform(ImpellerDisplayListBuilder IMPELLER_NONNULL builder)
Reset the transformation on top of the transformation stack to identity.
IMPELLER_EXPORT void ImpellerDisplayListBuilderClipPath(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerPath IMPELLER_NONNULL path, ImpellerClipOperation op)
Reduces the clip region to the intersection of the current clip and the given path taking into accoun...
IMPELLER_EXPORT size_t ImpellerGlyphInfoGetGraphemeClusterCodeUnitRangeEnd(ImpellerGlyphInfo IMPELLER_NONNULL glyph_info)
Fetch the end index in the buffer of UTF-16 code units used to represent the grapheme cluster for a g...
IMPELLER_EXPORT double ImpellerLineMetricsGetDescent(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
The drop from the baseline as calculated from the font and style for this line.
IMPELLER_EXPORT void ImpellerParagraphBuilderPopStyle(ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder)
Pop a previously pushed paragraph style from the paragraph style stack.
IMPELLER_EXPORT void ImpellerPaintSetImageFilter(ImpellerPaint IMPELLER_NONNULL paint, ImpellerImageFilter IMPELLER_NONNULL image_filter)
Set the image filter of a paint.
IMPELLER_EXPORT void ImpellerDisplayListBuilderRestore(ImpellerDisplayListBuilder IMPELLER_NONNULL builder)
Pops the last entry pushed onto the save stack using a call to ImpellerDisplayListBuilderSave or Impe...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerImageFilter IMPELLER_NULLABLE ImpellerImageFilterCreateComposeNew(ImpellerImageFilter IMPELLER_NONNULL outer, ImpellerImageFilter IMPELLER_NONNULL inner)
Creates a composed filter that when applied is identical to subsequently applying the inner and then ...
IMPELLER_EXPORT bool ImpellerLineMetricsIsHardbreak(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Used to determine if this line ends with an explicit line break (e.g. ' ') or is the end of the parag...
IMPELLER_EXPORT void ImpellerParagraphStyleRelease(ImpellerParagraphStyle IMPELLER_NULLABLE paragraph_style)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
#define IMPELLER_DEFINE_HANDLE(handle)
Definition impeller.h:142
IMPELLER_EXPORT void ImpellerPaintSetStrokeMiter(ImpellerPaint IMPELLER_NONNULL paint, float miter)
Set the miter limit of the strokes rendered using this paint.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorFilter IMPELLER_NULLABLE ImpellerColorFilterCreateBlendNew(const ImpellerColor *IMPELLER_NONNULL color, ImpellerBlendMode blend_mode)
Create a color filter that performs blending of pixel values independently.
IMPELLER_EXPORT void ImpellerSurfaceRelease(ImpellerSurface IMPELLER_NULLABLE surface)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerContext IMPELLER_NULLABLE ImpellerContextCreateMetalNew(uint32_t version)
Create a Metal context using the system default Metal device.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerImageFilter IMPELLER_NULLABLE ImpellerImageFilterCreateBlurNew(float x_sigma, float y_sigma, ImpellerTileMode tile_mode)
Creates an image filter that applies a Gaussian blur.
IMPELLER_EXPORT void ImpellerFragmentProgramRelease(ImpellerFragmentProgram IMPELLER_NULLABLE fragment_program)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerPathBuilder IMPELLER_NULLABLE ImpellerPathBuilderNew()
Create a new path builder. Paths themselves are immutable. A builder builds these immutable paths.
IMPELLER_EXPORT void ImpellerFragmentProgramRetain(ImpellerFragmentProgram IMPELLER_NULLABLE fragment_program)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerDisplayListBuilderSave(ImpellerDisplayListBuilder IMPELLER_NONNULL builder)
Stashes the current transformation and clip state onto a save stack.
IMPELLER_EXPORT void ImpellerTypographyContextRelease(ImpellerTypographyContext IMPELLER_NULLABLE context)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerTextureRelease(ImpellerTexture IMPELLER_NULLABLE texture)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerParagraphBuilderRetain(ImpellerParagraphBuilder IMPELLER_NULLABLE paragraph_builder)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerSurfaceRetain(ImpellerSurface IMPELLER_NULLABLE surface)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
#define IMPELLER_NULLABLE
Definition impeller.h:57
IMPELLER_EXPORT void ImpellerDisplayListBuilderTransform(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerMatrix *IMPELLER_NONNULL transform)
Appends the the provided transformation to the transformation already on the save stack.
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawRect(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL rect, ImpellerPaint IMPELLER_NONNULL paint)
Draws a rectangle.
ImpellerTextDecorationStyle
Definition impeller.h:491
@ kImpellerTextDecorationStyleSolid
Definition impeller.h:492
@ kImpellerTextDecorationStyleWavy
Definition impeller.h:496
@ kImpellerTextDecorationStyleDouble
Definition impeller.h:493
@ kImpellerTextDecorationStyleDotted
Definition impeller.h:494
@ kImpellerTextDecorationStyleDashed
Definition impeller.h:495
IMPELLER_EXPORT bool ImpellerGlyphInfoIsEllipsis(ImpellerGlyphInfo IMPELLER_NONNULL glyph_info)
IMPELLER_EXPORT uint32_t ImpellerDisplayListBuilderGetSaveCount(ImpellerDisplayListBuilder IMPELLER_NONNULL builder)
Get the current size of the save stack.
IMPELLER_EXPORT void ImpellerMaskFilterRetain(ImpellerMaskFilter IMPELLER_NULLABLE mask_filter)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerParagraphStyleSetFontStyle(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, ImpellerFontStyle style)
Set whether the glyphs should be bolded or italicized.
IMPELLER_EXPORT void ImpellerParagraphBuilderAddText(ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder, const uint8_t *IMPELLER_NULLABLE data, uint32_t length)
Add UTF-8 encoded text to the paragraph. The text will be styled according to the paragraph style alr...
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawTexture(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerTexture IMPELLER_NONNULL texture, const ImpellerPoint *IMPELLER_NONNULL point, ImpellerTextureSampling sampling, ImpellerPaint IMPELLER_NULLABLE paint)
Draw a texture at the specified point.
IMPELLER_EXPORT void ImpellerPathGetBounds(ImpellerPath IMPELLER_NONNULL path, ImpellerRect *IMPELLER_NONNULL out_bounds)
Get the bounds of the path.
#define IMPELLER_EXTERN_C_END
Definition impeller.h:38
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerPaint IMPELLER_NULLABLE ImpellerPaintNew()
Create a new paint with default values.
IMPELLER_EXPORT size_t ImpellerLineMetricsGetCodeUnitStartIndex(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Fetch the start index in the buffer of UTF-16 code units used to represent the paragraph line.
IMPELLER_EXPORT void ImpellerDisplayListBuilderClipRoundedRect(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL rect, const ImpellerRoundingRadii *IMPELLER_NONNULL radii, ImpellerClipOperation op)
Reduces the clip region to the intersection of the current clip and the given rounded rectangle takin...
IMPELLER_EXPORT uint64_t ImpellerTextureGetOpenGLHandle(ImpellerTexture IMPELLER_NONNULL texture)
Get the OpenGL handle associated with this texture. If this is not an OpenGL texture,...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorFilter IMPELLER_NULLABLE ImpellerColorFilterCreateColorMatrixNew(const ImpellerColorMatrix *IMPELLER_NONNULL color_matrix)
Create a color filter that transforms pixel color values independently.
IMPELLER_EXPORT void ImpellerParagraphRetain(ImpellerParagraph IMPELLER_NULLABLE paragraph)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerDisplayList IMPELLER_NULLABLE ImpellerDisplayListBuilderCreateDisplayListNew(ImpellerDisplayListBuilder IMPELLER_NONNULL builder)
Create a new display list using the rendering intent already encoded in the builder....
IMPELLER_EXPORT double ImpellerLineMetricsGetLeft(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
The x coordinate of left edge of the line.
IMPELLER_EXPORT uint32_t ImpellerParagraphGetLineCount(ImpellerParagraph IMPELLER_NONNULL paragraph)
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerImageFilter IMPELLER_NULLABLE ImpellerImageFilterCreateDilateNew(float x_radius, float y_radius)
Creates an image filter that enhances the per-channel pixel values to the maximum value in a circle a...
IMPELLER_EXPORT void ImpellerDisplayListBuilderRelease(ImpellerDisplayListBuilder IMPELLER_NULLABLE builder)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorSource IMPELLER_NULLABLE ImpellerColorSourceCreateRadialGradientNew(const ImpellerPoint *IMPELLER_NONNULL center, float radius, uint32_t stop_count, const ImpellerColor *IMPELLER_NONNULL colors, const float *IMPELLER_NONNULL stops, ImpellerTileMode tile_mode, const ImpellerMatrix *IMPELLER_NULLABLE transformation)
Create a color source that forms a radial gradient.
IMPELLER_EXPORT void ImpellerImageFilterRetain(ImpellerImageFilter IMPELLER_NULLABLE image_filter)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerPath IMPELLER_NULLABLE ImpellerPathBuilderTakePathNew(ImpellerPathBuilder IMPELLER_NONNULL builder, ImpellerFillType fill)
Create a new path using the existing built-up path. The existing path builder now contains an empty p...
IMPELLER_EXPORT void ImpellerLineMetricsRetain(ImpellerLineMetrics IMPELLER_NULLABLE line_metrics)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
ImpellerStrokeJoin
Definition impeller.h:418
@ kImpellerStrokeJoinRound
Definition impeller.h:420
@ kImpellerStrokeJoinBevel
Definition impeller.h:421
@ kImpellerStrokeJoinMiter
Definition impeller.h:419
IMPELLER_EXPORT void ImpellerLineMetricsRelease(ImpellerLineMetrics IMPELLER_NULLABLE line_metrics)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerSurface IMPELLER_NULLABLE ImpellerVulkanSwapchainAcquireNextSurfaceNew(ImpellerVulkanSwapchain IMPELLER_NONNULL swapchain)
A potentially blocking operation, acquires the next surface to render to. Since this may block,...
IMPELLER_EXPORT void ImpellerPaintSetColor(ImpellerPaint IMPELLER_NONNULL paint, const ImpellerColor *IMPELLER_NONNULL color)
Set the paint color.
IMPELLER_EXPORT void ImpellerPathBuilderAddRect(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL rect)
Adds a rectangle to the path.
IMPELLER_EXPORT void ImpellerDisplayListBuilderRotate(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, float angle_degrees)
Apply a clockwise rotation to the transformation matrix currently on top of the save stack.
IMPELLER_EXPORT bool ImpellerContextGetVulkanInfo(ImpellerContext IMPELLER_NONNULL context, ImpellerContextVulkanInfo *IMPELLER_NONNULL out_vulkan_info)
Get internal Vulkan handles managed by the given Vulkan context. Ownership of the handles is still ma...
void(* ImpellerCallback)(void *IMPELLER_NULLABLE user_data)
Definition impeller.h:338
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawOval(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL oval_bounds, ImpellerPaint IMPELLER_NONNULL paint)
Draws an oval.
IMPELLER_EXPORT float ImpellerParagraphGetMinIntrinsicWidth(ImpellerParagraph IMPELLER_NONNULL paragraph)
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawLine(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerPoint *IMPELLER_NONNULL from, const ImpellerPoint *IMPELLER_NONNULL to, ImpellerPaint IMPELLER_NONNULL paint)
Draws a line segment.
IMPELLER_EXPORT void ImpellerDisplayListRelease(ImpellerDisplayList IMPELLER_NULLABLE display_list)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerParagraphStyleSetBackground(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, ImpellerPaint IMPELLER_NONNULL paint)
Set the paint used to render the background of the text glyphs.
void *IMPELLER_NULLABLE(* ImpellerVulkanProcAddressCallback)(void *IMPELLER_NULLABLE vulkan_instance, const char *IMPELLER_NONNULL vulkan_proc_name, void *IMPELLER_NULLABLE user_data)
Definition impeller.h:356
IMPELLER_EXPORT float ImpellerParagraphGetMaxWidth(ImpellerParagraph IMPELLER_NONNULL paragraph)
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerParagraph IMPELLER_NULLABLE ImpellerParagraphBuilderBuildParagraphNew(ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder, float width)
Layout and build a new paragraph using the specified width. The resulting paragraph is immutable....
IMPELLER_EXPORT uint32_t ImpellerGetVersion()
Get the version of Impeller standalone API. This is the API that will be accepted for validity checks...
IMPELLER_EXPORT void ImpellerParagraphBuilderPushStyle(ImpellerParagraphBuilder IMPELLER_NONNULL paragraph_builder, ImpellerParagraphStyle IMPELLER_NONNULL style)
Push a new paragraph style onto the paragraph style stack managed by the paragraph builder.
IMPELLER_EXPORT void ImpellerMaskFilterRelease(ImpellerMaskFilter IMPELLER_NULLABLE mask_filter)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerGlyphInfo IMPELLER_NULLABLE ImpellerParagraphCreateGlyphInfoAtParagraphCoordinatesNew(ImpellerParagraph IMPELLER_NONNULL paragraph, double x, double y)
Create a new instance of glyph info that can be queried for information about the glyph closest to th...
IMPELLER_EXPORT void ImpellerColorFilterRetain(ImpellerColorFilter IMPELLER_NULLABLE color_filter)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorSource IMPELLER_NULLABLE ImpellerColorSourceCreateImageNew(ImpellerTexture IMPELLER_NONNULL image, ImpellerTileMode horizontal_tile_mode, ImpellerTileMode vertical_tile_mode, ImpellerTextureSampling sampling, const ImpellerMatrix *IMPELLER_NULLABLE transformation)
Create a color source that samples from an image.
ImpellerBlendMode
Definition impeller.h:374
@ kImpellerBlendModeSaturation
Definition impeller.h:401
@ kImpellerBlendModeSoftLight
Definition impeller.h:396
@ kImpellerBlendModeHardLight
Definition impeller.h:395
@ kImpellerBlendModeLuminosity
Definition impeller.h:403
@ kImpellerBlendModeLighten
Definition impeller.h:392
@ kImpellerBlendModeModulate
Definition impeller.h:388
@ kImpellerBlendModeSourceIn
Definition impeller.h:380
@ kImpellerBlendModeDifference
Definition impeller.h:397
@ kImpellerBlendModeClear
Definition impeller.h:375
@ kImpellerBlendModeColor
Definition impeller.h:402
@ kImpellerBlendModeMultiply
Definition impeller.h:399
@ kImpellerBlendModeSourceATop
Definition impeller.h:384
@ kImpellerBlendModeDestinationOut
Definition impeller.h:383
@ kImpellerBlendModeScreen
Definition impeller.h:389
@ kImpellerBlendModeExclusion
Definition impeller.h:398
@ kImpellerBlendModeColorBurn
Definition impeller.h:394
@ kImpellerBlendModeDarken
Definition impeller.h:391
@ kImpellerBlendModePlus
Definition impeller.h:387
@ kImpellerBlendModeOverlay
Definition impeller.h:390
@ kImpellerBlendModeDestinationIn
Definition impeller.h:381
@ kImpellerBlendModeDestinationATop
Definition impeller.h:385
@ kImpellerBlendModeDestination
Definition impeller.h:377
@ kImpellerBlendModeSourceOver
Definition impeller.h:378
@ kImpellerBlendModeXor
Definition impeller.h:386
@ kImpellerBlendModeColorDodge
Definition impeller.h:393
@ kImpellerBlendModeDestinationOver
Definition impeller.h:379
@ kImpellerBlendModeSource
Definition impeller.h:376
@ kImpellerBlendModeSourceOut
Definition impeller.h:382
@ kImpellerBlendModeHue
Definition impeller.h:400
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerImageFilter IMPELLER_NULLABLE ImpellerImageFilterCreateMatrixNew(const ImpellerMatrix *IMPELLER_NONNULL matrix, ImpellerTextureSampling sampling)
Creates an image filter that applies a transformation matrix to the underlying image.
ImpellerFontWeight
Definition impeller.h:453
@ kImpellerFontWeight400
Definition impeller.h:457
@ kImpellerFontWeight500
Definition impeller.h:458
@ kImpellerFontWeight700
Definition impeller.h:460
@ kImpellerFontWeight200
Definition impeller.h:455
@ kImpellerFontWeight300
Definition impeller.h:456
@ kImpellerFontWeight900
Definition impeller.h:462
@ kImpellerFontWeight800
Definition impeller.h:461
@ kImpellerFontWeight600
Definition impeller.h:459
@ kImpellerFontWeight100
Definition impeller.h:454
IMPELLER_EXPORT void ImpellerParagraphStyleSetFontSize(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, float size)
Set the font size.
IMPELLER_EXPORT void ImpellerParagraphStyleSetLocale(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, const char *IMPELLER_NONNULL locale)
Set the paragraph locale.
IMPELLER_EXPORT void ImpellerGlyphInfoRelease(ImpellerGlyphInfo IMPELLER_NULLABLE glyph_info)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT bool ImpellerSurfaceDrawDisplayList(ImpellerSurface IMPELLER_NONNULL surface, ImpellerDisplayList IMPELLER_NONNULL display_list)
Draw a display list onto the surface. The same display list can be drawn multiple times to different ...
IMPELLER_EXPORT void ImpellerDisplayListRetain(ImpellerDisplayList IMPELLER_NULLABLE display_list)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerImageFilter IMPELLER_NULLABLE ImpellerImageFilterCreateFragmentProgramNew(ImpellerContext IMPELLER_NONNULL context, ImpellerFragmentProgram IMPELLER_NONNULL fragment_program, IMPELLER_NONNULL ImpellerTexture *IMPELLER_NULLABLE samplers, size_t samplers_count, const uint8_t *IMPELLER_NULLABLE data, size_t data_bytes_length)
Create an image filter where each pixel is shaded by a fragment program.
IMPELLER_EXPORT void ImpellerParagraphStyleSetMaxLines(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, uint32_t max_lines)
Set the maximum line count within the paragraph.
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawPaint(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerPaint IMPELLER_NONNULL paint)
Fills the current clip with the specified paint.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerSurface IMPELLER_NULLABLE ImpellerSurfaceCreateWrappedMetalDrawableNew(ImpellerContext IMPELLER_NONNULL context, void *IMPELLER_NONNULL metal_drawable)
Create a surface by wrapping a Metal drawable. This is useful during WSI when the drawable is the bac...
IMPELLER_EXPORT double ImpellerLineMetricsGetWidth(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Width of the line from the left edge of the leftmost glyph to the right edge of the rightmost glyph.
IMPELLER_EXPORT ImpellerTextDirection ImpellerGlyphInfoGetTextDirection(ImpellerGlyphInfo IMPELLER_NONNULL glyph_info)
IMPELLER_EXPORT void ImpellerPaintSetColorFilter(ImpellerPaint IMPELLER_NONNULL paint, ImpellerColorFilter IMPELLER_NONNULL color_filter)
Set the color filter of the paint.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorSource IMPELLER_NULLABLE ImpellerColorSourceCreateConicalGradientNew(const ImpellerPoint *IMPELLER_NONNULL start_center, float start_radius, const ImpellerPoint *IMPELLER_NONNULL end_center, float end_radius, uint32_t stop_count, const ImpellerColor *IMPELLER_NONNULL colors, const float *IMPELLER_NONNULL stops, ImpellerTileMode tile_mode, const ImpellerMatrix *IMPELLER_NULLABLE transformation)
Create a color source that forms a conical gradient.
IMPELLER_EXPORT void ImpellerPaintSetColorSource(ImpellerPaint IMPELLER_NONNULL paint, ImpellerColorSource IMPELLER_NONNULL color_source)
Set the color source of the paint.
IMPELLER_EXPORT void ImpellerPathBuilderCubicCurveTo(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerPoint *IMPELLER_NONNULL control_point_1, const ImpellerPoint *IMPELLER_NONNULL control_point_2, const ImpellerPoint *IMPELLER_NONNULL end_point)
Add a cubic curve whose start point is current cursor location to the specified end point using the t...
IMPELLER_EXPORT void ImpellerPathBuilderClose(ImpellerPathBuilder IMPELLER_NONNULL builder)
Close the path.
#define IMPELLER_EXTERN_C_BEGIN
Definition impeller.h:37
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerVulkanSwapchain IMPELLER_NULLABLE ImpellerVulkanSwapchainCreateNew(ImpellerContext IMPELLER_NONNULL context, void *IMPELLER_NONNULL vulkan_surface_khr)
Create a new Vulkan swapchain using a VkSurfaceKHR instance. Ownership of the surface is transferred ...
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawShadow(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerPath IMPELLER_NONNULL path, const ImpellerColor *IMPELLER_NONNULL color, float elevation, bool occluder_is_transparent, float device_pixel_ratio)
Draw a shadow for a Path given a material elevation. If the occluding object is not opaque,...
IMPELLER_EXPORT void ImpellerDisplayListBuilderGetTransform(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerMatrix *IMPELLER_NONNULL out_transform)
Get the transformation currently built up on the top of the transformation stack.
IMPELLER_EXPORT void ImpellerDisplayListBuilderClipOval(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL oval_bounds, ImpellerClipOperation op)
Reduces the clip region to the intersection of the current clip and the given oval taking into accoun...
IMPELLER_EXPORT float ImpellerParagraphGetIdeographicBaseline(ImpellerParagraph IMPELLER_NONNULL paragraph)
IMPELLER_EXPORT double ImpellerLineMetricsGetBaseline(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
The y coordinate of the baseline for this line from the top of the paragraph.
IMPELLER_EXPORT void ImpellerPathRelease(ImpellerPath IMPELLER_NULLABLE path)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerDisplayListBuilderSetTransform(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerMatrix *IMPELLER_NONNULL transform)
Clear the transformation on top of the save stack and replace it with a new value.
IMPELLER_EXPORT void ImpellerPaintSetMaskFilter(ImpellerPaint IMPELLER_NONNULL paint, ImpellerMaskFilter IMPELLER_NONNULL mask_filter)
Set the mask filter of a paint.
IMPELLER_EXPORT size_t ImpellerLineMetricsGetCodeUnitEndIndex(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Fetch the end index in the buffer of UTF-16 code units used to represent the paragraph line.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerContext IMPELLER_NULLABLE ImpellerContextCreateOpenGLESNew(uint32_t version, ImpellerProcAddressCallback IMPELLER_NONNULL gl_proc_address_callback, void *IMPELLER_NULLABLE gl_proc_address_callback_user_data)
Create an OpenGL(ES) Impeller context.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorSource IMPELLER_NULLABLE ImpellerColorSourceCreateFragmentProgramNew(ImpellerContext IMPELLER_NONNULL context, ImpellerFragmentProgram IMPELLER_NONNULL fragment_program, IMPELLER_NONNULL ImpellerTexture *IMPELLER_NULLABLE samplers, size_t samplers_count, const uint8_t *IMPELLER_NULLABLE data, size_t data_bytes_length)
Create a color source whose pixels are shaded by a fragment program.
IMPELLER_EXPORT void ImpellerGlyphInfoRetain(ImpellerGlyphInfo IMPELLER_NULLABLE glyph_info)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerPathBuilderLineTo(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerPoint *IMPELLER_NONNULL location)
Add a line segment from the current cursor location to the given location. The cursor location is upd...
IMPELLER_EXPORT void ImpellerContextRetain(ImpellerContext IMPELLER_NULLABLE context)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerPathBuilderAddRoundedRect(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL rect, const ImpellerRoundingRadii *IMPELLER_NONNULL rounding_radii)
Add a rounded rect with potentially non-uniform radii to the path.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerPath IMPELLER_NULLABLE ImpellerPathBuilderCopyPathNew(ImpellerPathBuilder IMPELLER_NONNULL builder, ImpellerFillType fill)
Create a new path by copying the existing built-up path. The existing path can continue being added t...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerTexture IMPELLER_NULLABLE ImpellerTextureCreateWithContentsNew(ImpellerContext IMPELLER_NONNULL context, const ImpellerTextureDescriptor *IMPELLER_NONNULL descriptor, const ImpellerMapping *IMPELLER_NONNULL contents, void *IMPELLER_NULLABLE contents_on_release_user_data)
Create a texture with decompressed bytes.
IMPELLER_EXPORT void ImpellerContextRelease(ImpellerContext IMPELLER_NULLABLE context)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawDashedLine(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerPoint *IMPELLER_NONNULL from, const ImpellerPoint *IMPELLER_NONNULL to, float on_length, float off_length, ImpellerPaint IMPELLER_NONNULL paint)
Draws a dash line segment.
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawDisplayList(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerDisplayList IMPELLER_NONNULL display_list, float opacity)
Flattens the contents of another display list into the one currently being built.
IMPELLER_EXPORT void ImpellerParagraphStyleSetTextDecoration(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, const ImpellerTextDecoration *IMPELLER_NONNULL decoration)
Set one of more text decorations on the paragraph. Decorations can be underlines, overlines,...
IMPELLER_EXPORT void ImpellerPaintSetStrokeJoin(ImpellerPaint IMPELLER_NONNULL paint, ImpellerStrokeJoin join)
Sets how strokes rendered using this paint are joined.
IMPELLER_EXPORT void ImpellerParagraphStyleSetTextDirection(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, ImpellerTextDirection direction)
Set the directionality of the text within the paragraph.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerFragmentProgram IMPELLER_NULLABLE ImpellerFragmentProgramNew(const ImpellerMapping *IMPELLER_NONNULL data, void *IMPELLER_NULLABLE data_release_user_data)
Create a new fragment program using data obtained by compiling a GLSL shader with impellerc.
IMPELLER_EXPORT void ImpellerPaintSetBlendMode(ImpellerPaint IMPELLER_NONNULL paint, ImpellerBlendMode mode)
Set the paint blend mode. The blend mode controls how the new paints contents are mixed with the valu...
IMPELLER_EXPORT size_t ImpellerLineMetricsGetCodeUnitEndIndexExcludingWhitespace(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Fetch the end index (excluding whitespace) in the buffer of UTF-16 code units used to represent the p...
IMPELLER_EXPORT void ImpellerParagraphBuilderRelease(ImpellerParagraphBuilder IMPELLER_NULLABLE paragraph_builder)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawTextureRect(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerTexture IMPELLER_NONNULL texture, const ImpellerRect *IMPELLER_NONNULL src_rect, const ImpellerRect *IMPELLER_NONNULL dst_rect, ImpellerTextureSampling sampling, ImpellerPaint IMPELLER_NULLABLE paint)
Draw a portion of texture at the specified location.
IMPELLER_EXPORT void ImpellerTextureRetain(ImpellerTexture IMPELLER_NULLABLE texture)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerSurface IMPELLER_NULLABLE ImpellerSurfaceCreateWrappedFBONew(ImpellerContext IMPELLER_NONNULL context, uint64_t fbo, ImpellerPixelFormat format, const ImpellerISize *IMPELLER_NONNULL size)
Create a new surface by wrapping an existing framebuffer object. The framebuffer must be complete as ...
IMPELLER_EXPORT void ImpellerPathBuilderAddArc(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL oval_bounds, float start_angle_degrees, float end_angle_degrees)
Add an arc to the path.
IMPELLER_EXPORT double ImpellerLineMetricsGetUnscaledAscent(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
The rise from the baseline as calculated from the font and style for this line ignoring the height fr...
IMPELLER_EXPORT float ImpellerParagraphGetMaxIntrinsicWidth(ImpellerParagraph IMPELLER_NONNULL paragraph)
ImpellerStrokeCap
Definition impeller.h:412
@ kImpellerStrokeCapButt
Definition impeller.h:413
@ kImpellerStrokeCapRound
Definition impeller.h:414
@ kImpellerStrokeCapSquare
Definition impeller.h:415
IMPELLER_EXPORT void ImpellerVulkanSwapchainRelease(ImpellerVulkanSwapchain IMPELLER_NULLABLE swapchain)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
IMPELLER_EXPORT double ImpellerLineMetricsGetHeight(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Total height of the line from the top edge to the bottom edge.
ImpellerDrawStyle
Definition impeller.h:406
@ kImpellerDrawStyleStroke
Definition impeller.h:408
@ kImpellerDrawStyleFill
Definition impeller.h:407
@ kImpellerDrawStyleStrokeAndFill
Definition impeller.h:409
ImpellerColorSpace
Definition impeller.h:447
@ kImpellerColorSpaceExtendedSRGB
Definition impeller.h:449
@ kImpellerColorSpaceSRGB
Definition impeller.h:448
@ kImpellerColorSpaceDisplayP3
Definition impeller.h:450
IMPELLER_EXPORT size_t ImpellerLineMetricsGetCodeUnitEndIndexIncludingNewline(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
Fetch the end index (including newlines) in the buffer of UTF-16 code units used to represent the par...
ImpellerTileMode
Definition impeller.h:433
@ kImpellerTileModeMirror
Definition impeller.h:436
@ kImpellerTileModeClamp
Definition impeller.h:434
@ kImpellerTileModeRepeat
Definition impeller.h:435
@ kImpellerTileModeDecal
Definition impeller.h:437
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorSource IMPELLER_NULLABLE ImpellerColorSourceCreateSweepGradientNew(const ImpellerPoint *IMPELLER_NONNULL center, float start, float end, uint32_t stop_count, const ImpellerColor *IMPELLER_NONNULL colors, const float *IMPELLER_NONNULL stops, ImpellerTileMode tile_mode, const ImpellerMatrix *IMPELLER_NULLABLE transformation)
Create a color source that forms a sweep gradient.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerParagraphStyle IMPELLER_NULLABLE ImpellerParagraphStyleNew()
Create a new paragraph style.
IMPELLER_EXPORT void ImpellerParagraphStyleSetForeground(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, ImpellerPaint IMPELLER_NONNULL paint)
Set the paint used to render the text glyph contents.
IMPELLER_EXPORT void ImpellerParagraphRelease(ImpellerParagraph IMPELLER_NULLABLE paragraph)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
ImpellerTextAlignment
Definition impeller.h:470
@ kImpellerTextAlignmentJustify
Definition impeller.h:474
@ kImpellerTextAlignmentLeft
Definition impeller.h:471
@ kImpellerTextAlignmentCenter
Definition impeller.h:473
@ kImpellerTextAlignmentRight
Definition impeller.h:472
@ kImpellerTextAlignmentStart
Definition impeller.h:475
@ kImpellerTextAlignmentEnd
Definition impeller.h:476
IMPELLER_EXPORT void ImpellerColorSourceRetain(ImpellerColorSource IMPELLER_NULLABLE color_source)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerParagraphStyleSetHeight(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, float height)
The height of the text as a multiple of text size.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerTexture IMPELLER_NULLABLE ImpellerTextureCreateWithOpenGLTextureHandleNew(ImpellerContext IMPELLER_NONNULL context, const ImpellerTextureDescriptor *IMPELLER_NONNULL descriptor, uint64_t handle)
Create a texture with an externally created OpenGL texture handle.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerTypographyContext IMPELLER_NULLABLE ImpellerTypographyContextNew()
Create a new typography contents.
ImpellerFontStyle
Definition impeller.h:465
@ kImpellerFontStyleItalic
Definition impeller.h:467
@ kImpellerFontStyleNormal
Definition impeller.h:466
IMPELLER_EXPORT void ImpellerPathBuilderQuadraticCurveTo(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerPoint *IMPELLER_NONNULL control_point, const ImpellerPoint *IMPELLER_NONNULL end_point)
Add a quadratic curve from whose start point is the cursor to the specified end point using the a sin...
IMPELLER_EXPORT void ImpellerPathRetain(ImpellerPath IMPELLER_NULLABLE path)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
ImpellerClipOperation
Definition impeller.h:369
@ kImpellerClipOperationIntersect
Definition impeller.h:371
@ kImpellerClipOperationDifference
Definition impeller.h:370
#define IMPELLER_NONNULL
Definition impeller.h:58
void *IMPELLER_NULLABLE(* ImpellerProcAddressCallback)(const char *IMPELLER_NONNULL proc_name, void *IMPELLER_NULLABLE user_data)
Definition impeller.h:347
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerMaskFilter IMPELLER_NULLABLE ImpellerMaskFilterCreateBlurNew(ImpellerBlurStyle style, float sigma)
Create a mask filter that blurs contents in the masked shape.
IMPELLER_EXPORT size_t ImpellerGlyphInfoGetGraphemeClusterCodeUnitRangeBegin(ImpellerGlyphInfo IMPELLER_NONNULL glyph_info)
Fetch the start index in the buffer of UTF-16 code units used to represent the grapheme cluster for a...
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerDisplayListBuilder IMPELLER_NULLABLE ImpellerDisplayListBuilderNew(const ImpellerRect *IMPELLER_NULLABLE cull_rect)
Create a new display list builder.
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawPath(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, ImpellerPath IMPELLER_NONNULL path, ImpellerPaint IMPELLER_NONNULL paint)
Draws the specified shape.
#define IMPELLER_EXPORT
Definition impeller.h:48
IMPELLER_EXPORT void ImpellerVulkanSwapchainRetain(ImpellerVulkanSwapchain IMPELLER_NULLABLE swapchain)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT double ImpellerLineMetricsGetAscent(ImpellerLineMetrics IMPELLER_NONNULL metrics, size_t line)
The rise from the baseline as calculated from the font and style for this line.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerImageFilter IMPELLER_NULLABLE ImpellerImageFilterCreateErodeNew(float x_radius, float y_radius)
Creates an image filter that dampens the per-channel pixel values to the minimum value in a circle ar...
IMPELLER_EXPORT void ImpellerDisplayListBuilderDrawRoundedRect(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL rect, const ImpellerRoundingRadii *IMPELLER_NONNULL radii, ImpellerPaint IMPELLER_NONNULL paint)
Draws a rounded rect.
IMPELLER_EXPORT void ImpellerParagraphStyleSetEllipsis(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, const char *IMPELLER_NULLABLE ellipsis)
Set the UTF-8 string to use as the ellipsis. Pass nullptr to clear the setting to default.
IMPELLER_EXPORT void ImpellerPathBuilderAddOval(ImpellerPathBuilder IMPELLER_NONNULL builder, const ImpellerRect *IMPELLER_NONNULL oval_bounds)
Add an oval to the path.
#define IMPELLER_NODISCARD
Definition impeller.h:64
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerGlyphInfo IMPELLER_NULLABLE ImpellerParagraphCreateGlyphInfoAtCodeUnitIndexNew(ImpellerParagraph IMPELLER_NONNULL paragraph, size_t code_unit_index)
Create a new instance of glyph info that can be queried for information about the glyph at the given ...
IMPELLER_EXPORT ImpellerLineMetrics IMPELLER_NULLABLE ImpellerParagraphGetLineMetrics(ImpellerParagraph IMPELLER_NONNULL paragraph)
Get the line metrics of this laid out paragraph. Calculating the line metrics is expensive....
IMPELLER_EXPORT void ImpellerParagraphStyleSetTextAlignment(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, ImpellerTextAlignment align)
Set the alignment of text within the paragraph.
IMPELLER_EXPORT void ImpellerParagraphStyleSetFontFamily(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, const char *IMPELLER_NONNULL family_name)
Set the font family.
IMPELLER_EXPORT void ImpellerParagraphStyleRetain(ImpellerParagraphStyle IMPELLER_NULLABLE paragraph_style)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerParagraphStyleSetFontWeight(ImpellerParagraphStyle IMPELLER_NONNULL paragraph_style, ImpellerFontWeight weight)
Set the weight of the font to select when rendering glyphs.
IMPELLER_EXPORT void ImpellerColorFilterRelease(ImpellerColorFilter IMPELLER_NULLABLE color_filter)
Release a previously retained reference to the object. The object can be NULL in which case this meth...
ImpellerBlurStyle
Definition impeller.h:440
@ kImpellerBlurStyleNormal
Definition impeller.h:441
@ kImpellerBlurStyleOuter
Definition impeller.h:443
@ kImpellerBlurStyleInner
Definition impeller.h:444
@ kImpellerBlurStyleSolid
Definition impeller.h:442
ImpellerPixelFormat
Definition impeller.h:424
@ kImpellerPixelFormatRGBA8888
Definition impeller.h:425
IMPELLER_EXPORT void ImpellerPaintSetStrokeWidth(ImpellerPaint IMPELLER_NONNULL paint, float width)
Set the width of the strokes rendered using this paint.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerColorSource IMPELLER_NULLABLE ImpellerColorSourceCreateLinearGradientNew(const ImpellerPoint *IMPELLER_NONNULL start_point, const ImpellerPoint *IMPELLER_NONNULL end_point, uint32_t stop_count, const ImpellerColor *IMPELLER_NONNULL colors, const float *IMPELLER_NONNULL stops, ImpellerTileMode tile_mode, const ImpellerMatrix *IMPELLER_NULLABLE transformation)
Create a color source that forms a linear gradient.
IMPELLER_EXPORT void ImpellerTypographyContextRetain(ImpellerTypographyContext IMPELLER_NULLABLE context)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerParagraphBuilder IMPELLER_NULLABLE ImpellerParagraphBuilderNew(ImpellerTypographyContext IMPELLER_NONNULL context)
Create a new paragraph builder.
IMPELLER_EXPORT float ImpellerParagraphGetAlphabeticBaseline(ImpellerParagraph IMPELLER_NONNULL paragraph)
IMPELLER_EXPORT IMPELLER_NODISCARD ImpellerContext IMPELLER_NULLABLE ImpellerContextCreateVulkanNew(uint32_t version, const ImpellerContextVulkanSettings *IMPELLER_NONNULL settings)
Create a Vulkan context using the provided Vulkan Settings.
IMPELLER_EXPORT void ImpellerDisplayListBuilderRestoreToCount(ImpellerDisplayListBuilder IMPELLER_NONNULL builder, uint32_t count)
Effectively calls ImpellerDisplayListBuilderRestore till the size of the save stack becomes a specifi...
IMPELLER_EXPORT void ImpellerPaintRetain(ImpellerPaint IMPELLER_NULLABLE paint)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
IMPELLER_EXPORT void ImpellerPathBuilderRetain(ImpellerPathBuilder IMPELLER_NULLABLE builder)
Retain a strong reference to the object. The object can be NULL in which case this method is a no-op.
size_t length
FlTexture * texture
double y
int32_t height
int32_t width
ImpellerColorSpace color_space
Definition impeller.h:617
uint32_t graphics_queue_family_index
Definition impeller.h:642
void *IMPELLER_NULLABLE vk_instance
Definition impeller.h:639
void *IMPELLER_NULLABLE vk_logical_device
Definition impeller.h:641
void *IMPELLER_NULLABLE vk_physical_device
Definition impeller.h:640
ImpellerVulkanProcAddressCallback IMPELLER_NONNULL proc_address_callback
Definition impeller.h:634
void *IMPELLER_NULLABLE user_data
Definition impeller.h:633
int64_t height
Definition impeller.h:521
int64_t width
Definition impeller.h:520
ImpellerCallback IMPELLER_NULLABLE on_release
Definition impeller.h:629
uint64_t length
Definition impeller.h:628
const uint8_t *IMPELLER_NONNULL data
Definition impeller.h:627
float m[16]
Definition impeller.h:540
uint64_t end
Definition impeller.h:526
uint64_t start
Definition impeller.h:525
float width
Definition impeller.h:505
float height
Definition impeller.h:506
ImpellerPoint top_left
Definition impeller.h:606
ImpellerPoint top_right
Definition impeller.h:608
ImpellerPoint bottom_left
Definition impeller.h:607
ImpellerPoint bottom_right
Definition impeller.h:609
float height
Definition impeller.h:516
float width
Definition impeller.h:515
ImpellerColor color
The decoration color.
Definition impeller.h:650
ImpellerTextDecorationStyle style
The decoration style.
Definition impeller.h:652
int types
A mask of ImpellerTextDecorationTypes to enable.
Definition impeller.h:648
ImpellerPixelFormat pixel_format
Definition impeller.h:621
const size_t end
std::shared_ptr< const fml::Mapping > data