23#ifndef NOVASVG_RENDER_H
24#define NOVASVG_RENDER_H
45#if defined(NOVASVG_BUILD_STATIC) || !defined(NOVASVG_BUILD_SHARED)
48#elif (defined(_WIN32) || defined(__CYGWIN__))
49#define NOVASVG_EXPORT __declspec(dllexport)
50#define NOVASVG_IMPORT __declspec(dllimport)
51#elif defined(__GNUC__) && (__GNUC__ >= 4)
52#define NOVASVG_EXPORT __attribute__((__visibility__("default")))
60#define NOVASVG_API NOVASVG_EXPORT
62#define NOVASVG_API NOVASVG_IMPORT
65#define NOVASVG_RENDER_VERSION_MAJOR 1
66#define NOVASVG_RENDER_VERSION_MINOR 3
67#define NOVASVG_RENDER_VERSION_MICRO 2
69#define NOVASVG_RENDER_VERSION_ENCODE(major, minor, micro) (((major) * 10000) + ((minor) * 100) + ((micro) * 1))
70#define NOVASVG_RENDER_VERSION NOVASVG_RENDER_VERSION_ENCODE(NOVASVG_RENDER_VERSION_MAJOR, NOVASVG_RENDER_VERSION_MINOR, NOVASVG_RENDER_VERSION_MICRO)
72#define NOVASVG_RENDER_VERSION_XSTRINGIZE(major, minor, micro) #major"."#minor"."#micro
73#define NOVASVG_RENDER_VERSION_STRINGIZE(major, minor, micro) NOVASVG_RENDER_VERSION_XSTRINGIZE(major, minor, micro)
74#define NOVASVG_RENDER_VERSION_STRING NOVASVG_RENDER_VERSION_STRINGIZE(NOVASVG_RENDER_VERSION_MAJOR, NOVASVG_RENDER_VERSION_MINOR, NOVASVG_RENDER_VERSION_MICRO)
102#define NOVASVG_PI 3.14159265358979323846f
103#define NOVASVG_TWO_PI 6.28318530717958647693f
104#define NOVASVG_HALF_PI 1.57079632679489661923f
105#define NOVASVG_SQRT2 1.41421356237309504880f
106#define NOVASVG_KAPPA 0.55228474983079339840f
108#define NOVASVG_DEG2RAD(x) ((x) * (NOVASVG_PI / 180.0f))
109#define NOVASVG_RAD2DEG(x) ((x) * (180.0f / NOVASVG_PI))
119#define NOVASVG_MAKE_POINT(x, y) (point_t{x, y})
120#define NOVASVG_EMPTY_POINT NOVASVG_MAKE_POINT(0, 0)
132#define NOVASVG_MAKE_RECT(x, y, w, h) (rect_t{x, y, w, h})
133#define NOVASVG_EMPTY_RECT NOVASVG_MAKE_RECT(0, 0, 0, 0)
147#define NOVASVG_MAKE_MATRIX(a, b, c, d, e, f) (matrix_t{a, b, c, d, e, f})
148#define NOVASVG_MAKE_SCALE(x, y) NOVASVG_MAKE_MATRIX(x, 0, 0, y, 0, 0)
149#define NOVASVG_MAKE_TRANSLATE(x, y) NOVASVG_MAKE_MATRIX(1, 0, 0, 1, x, y)
150#define NOVASVG_IDENTITY_MATRIX NOVASVG_MAKE_MATRIX(1, 0, 0, 1, 0, 0)
1026#define NOVASVG_MAKE_COLOR(r, g, b, a) (color_t{r, g, b, a})
1028#define NOVASVG_BLACK_COLOR NOVASVG_MAKE_COLOR(0, 0, 0, 1)
1029#define NOVASVG_WHITE_COLOR NOVASVG_MAKE_COLOR(1, 1, 1, 1)
1030#define NOVASVG_RED_COLOR NOVASVG_MAKE_COLOR(1, 0, 0, 1)
1031#define NOVASVG_GREEN_COLOR NOVASVG_MAKE_COLOR(0, 1, 0, 1)
1032#define NOVASVG_BLUE_COLOR NOVASVG_MAKE_COLOR(0, 0, 1, 1)
1033#define NOVASVG_YELLOW_COLOR NOVASVG_MAKE_COLOR(1, 1, 0, 1)
1034#define NOVASVG_CYAN_COLOR NOVASVG_MAKE_COLOR(0, 1, 1, 1)
1035#define NOVASVG_MAGENTA_COLOR NOVASVG_MAKE_COLOR(1, 0, 1, 1)
NOVASVG_INLINE float canvas_get_dash_offset(const canvas_t *canvas)
Retrieves the current dash offset.
NOVASVG_INLINE void canvas_stroke_rect(canvas_t *canvas, float x, float y, float w, float h)
Strokes a rectangle with the current stroke settings.
NOVASVG_INLINE void canvas_clip(canvas_t *canvas)
A drawing operator that intersects the current clipping region with the current path according to the...
NOVASVG_INLINE int canvas_get_reference_count(const canvas_t *canvas)
Retrieves the reference count of the canvas.
NOVASVG_INLINE font_face_t * canvas_get_font_face(const canvas_t *canvas)
Retrieves the current font face used for text rendering on the canvas.
NOVASVG_INLINE void matrix_map_point(const matrix_t *matrix, const point_t *src, point_t *dst)
Transforms the src point using matrix and stores the result in dst.
NOVASVG_INLINE void canvas_arc(canvas_t *canvas, float cx, float cy, float r, float a0, float a1, bool ccw)
Adds an arc to the current path.
NOVASVG_INLINE void paint_destroy(paint_t *paint)
Decrements the reference count and destroys the paint if the count reaches zero.
NOVASVG_INLINE void canvas_move_to(canvas_t *canvas, float x, float y)
Moves the current point to a new position.
NOVASVG_INLINE void matrix_map(const matrix_t *matrix, float x, float y, float *xx, float *yy)
Transforms the point (x, y) using matrix and stores the result in (xx, yy).
NOVASVG_INLINE void color_init_rgb(color_t *color, float r, float g, float b)
Initializes a color using RGB components in the 0-1 range.
NOVASVG_INLINE path_t * path_create(void)
Creates a new path object.
NOVASVG_INLINE void font_face_cache_add(font_face_cache_t *cache, const char *family, bool bold, bool italic, font_face_t *face)
Add a font face to the cache with the specified family and style.
NOVASVG_INLINE void color_init_rgba32(color_t *color, unsigned int value)
Initializes a color from a 32-bit unsigned RGBA value.
NOVASVG_INLINE bool canvas_clip_contains(canvas_t *canvas, float x, float y)
Tests whether a point lies within the current clipping region.
path_command
Enumeration defining path commands.
@ NOVASVG_PATH_COMMAND_CUBIC_TO
Draws a cubic Bézier curve to a new point.
@ NOVASVG_PATH_COMMAND_CLOSE
Closes the current path by drawing a line to the starting point.
@ NOVASVG_PATH_COMMAND_LINE_TO
Draws a straight line to a new point.
@ NOVASVG_PATH_COMMAND_MOVE_TO
Moves the current point to a new position.
NOVASVG_INLINE void font_face_cache_destroy(font_face_cache_t *cache)
Decrement the reference count of a font‐face cache and destroy it when it reaches zero.
NOVASVG_INLINE void canvas_map_point(const canvas_t *canvas, const point_t *src, point_t *dst)
Transforms the src point using the current transformation matrix and stores the result in dst.
NOVASVG_INLINE float font_face_text_extents(font_face_t *face, float size, const void *text, int length, text_encoding_t encoding, rect_t *extents)
Computes the bounding box of a text string and its advance width.
NOVASVG_INLINE void canvas_set_rgba(canvas_t *canvas, float r, float g, float b, float a)
Sets the current paint to a solid color.
texture_type_t
Defines the type of texture, either plain or tiled.
@ NOVASVG_TEXTURE_TYPE_TILED
Tiled texture.
@ NOVASVG_TEXTURE_TYPE_PLAIN
Plain texture.
NOVASVG_INLINE void canvas_clip_extents(canvas_t *canvas, rect_t *extents)
Gets the bounding box of the current clipping region.
surface_t * surface_create_for_data(unsigned char *data, int width, int height, int stride)
Creates an image surface using existing pixel data.
NOVASVG_INLINE void canvas_fill_rect(canvas_t *canvas, float x, float y, float w, float h)
Fills a rectangle according to the current fill rule.
NOVASVG_INLINE void canvas_add_path(canvas_t *canvas, const path_t *path)
Adds a path to the current path.
void(* write_func_t)(void *closure, void *data, int size)
A function pointer type for a write callback.
NOVASVG_INLINE fill_rule_t canvas_get_fill_rule(const canvas_t *canvas)
Retrieves the current fill rule.
NOVASVG_INLINE float canvas_get_line_width(const canvas_t *canvas)
Retrieves the current line width.
struct novasvg::render::matrix matrix_t
A structure representing a 2D transformation matrix.
NOVASVG_INLINE int font_face_cache_load_dir(font_face_cache_t *cache, const char *dirname)
Load all font faces from files in a directory recursively and add them to the cache.
NOVASVG_INLINE void canvas_quad_to(canvas_t *canvas, float x1, float y1, float x2, float y2)
Adds a quadratic Bézier curve to the current path.
NOVASVG_INLINE void path_iterator_init(path_iterator_t *it, const path_t *path)
Initializes a path iterator for a given path.
NOVASVG_INLINE void canvas_font_metrics(const canvas_t *canvas, float *ascent, float *descent, float *line_gap, rect_t *extents)
Retrieves font metrics for the current font.
NOVASVG_INLINE paint_t * canvas_get_paint(const canvas_t *canvas, color_t *color)
Retrieves the current paint.
NOVASVG_INLINE void canvas_set_matrix(canvas_t *canvas, const matrix_t *matrix)
Resets the current transformation matrix to the specified matrix.
NOVASVG_INLINE void font_face_destroy(font_face_t *face)
Decrements the reference count and potentially destroys the font face.
NOVASVG_INLINE void canvas_destroy(canvas_t *canvas)
Decreases the reference count and destroys the canvas when it reaches zero.
NOVASVG_INLINE void path_move_to(path_t *path, float x, float y)
Moves the current point to a new position.
NOVASVG_INLINE void canvas_set_line_join(canvas_t *canvas, line_join_t line_join)
Sets the line join style.
enum novasvg::render::path_command path_command_t
Enumeration defining path commands.
NOVASVG_INLINE void matrix_map_points(const matrix_t *matrix, const point_t *src, point_t *dst, int count)
Transforms an array of src points using matrix and stores the results in dst.
NOVASVG_INLINE void matrix_init_rotate(matrix_t *matrix, float angle)
Initializes a 2D transformation matrix for rotation.
NOVASVG_INLINE void path_arc_to(path_t *path, float rx, float ry, float angle, bool large_arc_flag, bool sweep_flag, float x, float y)
Adds an elliptical arc to the path.
NOVASVG_INLINE float font_face_traverse_glyph_path(font_face_t *face, float size, float x, float y, codepoint_t codepoint, path_traverse_func_t traverse_func, void *closure)
Traverses the path of a glyph and calls a callback for each path element.
NOVASVG_INLINE void path_cubic_to(path_t *path, float x1, float y1, float x2, float y2, float x3, float y3)
Adds a cubic Bézier curve to the path.
NOVASVG_INLINE float canvas_get_font_size(const canvas_t *canvas)
Retrieves the current font size used for text rendering on the canvas.
NOVASVG_INLINE void canvas_scale(canvas_t *canvas, float sx, float sy)
Scales the current transformation matrix by factors sx and sy.
int surface_get_width(const surface_t *surface)
Gets the width of the surface.
NOVASVG_INLINE void canvas_stroke_extents(canvas_t *canvas, rect_t *extents)
Computes the bounding box of the area that would be affected by a stroke operation.
NOVASVG_INLINE float path_extents(const path_t *path, rect_t *extents, bool tight)
Computes the bounding box and total length of the path.
unsigned int codepoint_t
Represents a Unicode code point.
void convert_rgba_to_argb(unsigned char *dst, const unsigned char *src, int width, int height, int stride)
Converts pixel data from RGBA to premultiplied ARGB format.
NOVASVG_INLINE int font_face_cache_reference_count(const font_face_cache_t *cache)
Retrieve the current reference count of a font‐face cache.
NOVASVG_INLINE void canvas_stroke(canvas_t *canvas)
A drawing operator that strokes the current path according to the current stroke settings.
NOVASVG_INLINE void canvas_circle(canvas_t *canvas, float cx, float cy, float r)
Adds a circle to the current path.
NOVASVG_INLINE float canvas_text_extents(canvas_t *canvas, const void *text, int length, text_encoding_t encoding, rect_t *extents)
Retrieves the extents of a text.
NOVASVG_INLINE void canvas_stroke_path(canvas_t *canvas, const path_t *path)
Strokes a path with the current stroke settings.
NOVASVG_INLINE int font_face_get_reference_count(const font_face_t *face)
Retrieves the current reference count of a font face.
NOVASVG_INLINE float canvas_clip_text(canvas_t *canvas, const void *text, int length, text_encoding_t encoding, float x, float y)
Intersects the current clipping region with text at the specified origin.
NOVASVG_INLINE void path_add_path(path_t *path, const path_t *source, const matrix_t *matrix)
Adds a sub-path to the path.
NOVASVG_INLINE void color_init_hsla(color_t *color, float h, float s, float l, float a)
Initializes a color with the specified HSLA color values.
NOVASVG_INLINE bool canvas_stroke_contains(canvas_t *canvas, float x, float y)
Tests whether a point lies within the current stroke region.
NOVASVG_INLINE float canvas_add_text(canvas_t *canvas, const void *text, int length, text_encoding_t encoding, float x, float y)
Adds text to the current path at the specified origin.
NOVASVG_INLINE void color_init_rgba(color_t *color, float r, float g, float b, float a)
Initializes a color using RGBA components in the 0-1 range.
NOVASVG_INLINE void canvas_new_path(canvas_t *canvas)
Starts a new path on the canvas.
NOVASVG_INLINE bool canvas_fill_contains(canvas_t *canvas, float x, float y)
Tests whether a point lies within the current fill region.
int surface_get_height(const surface_t *surface)
Gets the height of the surface.
NOVASVG_INLINE void canvas_shear(canvas_t *canvas, float shx, float shy)
Shears the current transformation matrix by factors shx and shy.
NOVASVG_INLINE unsigned int color_to_argb32(const color_t *color)
Converts a color to a 32-bit unsigned ARGB value.
NOVASVG_INLINE void color_init_rgba8(color_t *color, int r, int g, int b, int a)
Initializes a color using RGBA components in the 0-255 range.
struct novasvg::render::path_iterator path_iterator_t
Iterator for traversing path elements in a path.
NOVASVG_INLINE font_face_cache_t * font_face_cache_reference(font_face_cache_t *cache)
Increments the reference count of a font‐face cache.
NOVASVG_INLINE float canvas_get_opacity(const canvas_t *canvas)
Retrieves the current global opacity.
NOVASVG_INLINE path_t * canvas_get_path(const canvas_t *canvas)
Gets the current path from the canvas.
NOVASVG_INLINE void canvas_set_font_size(canvas_t *canvas, float size)
Sets the font size for text rendering on the canvas.
NOVASVG_INLINE void canvas_save(canvas_t *canvas)
Saves the current state of the canvas.
NOVASVG_INLINE canvas_t * canvas_reference(canvas_t *canvas)
Increases the reference count of the canvas.
NOVASVG_INLINE float canvas_stroke_text(canvas_t *canvas, const void *text, int length, text_encoding_t encoding, float x, float y)
Strokes a text at the specified origin.
NOVASVG_INLINE void path_get_current_point(const path_t *path, float *x, float *y)
Retrieves the current point of the path.
NOVASVG_INLINE paint_t * paint_reference(paint_t *paint)
Increments the reference count of a paint object.
NOVASVG_INLINE font_face_t * font_face_load_from_data(const void *data, unsigned int length, int ttcindex, destroy_func_t destroy_func, void *closure)
Loads a font face from memory.
void(* path_traverse_func_t)(void *closure, path_command_t command, const point_t *points, int npoints)
Callback function type for traversing a path.
struct novasvg::render::text_iterator text_iterator_t
Iterator for traversing code points in text data.
NOVASVG_INLINE void canvas_fill(canvas_t *canvas)
A drawing operator that fills the current path according to the current fill rule.
NOVASVG_INLINE font_face_t * font_face_load_from_file(const char *filename, int ttcindex)
Loads a font face from a file.
NOVASVG_INLINE void path_destroy(path_t *path)
Decreases the reference count of a path object.
NOVASVG_INLINE void path_close(path_t *path)
Closes the current sub-path.
NOVASVG_INLINE void canvas_line_to(canvas_t *canvas, float x, float y)
Adds a straight line segment to the current path.
NOVASVG_INLINE void canvas_set_dash_offset(canvas_t *canvas, float offset)
Sets the dash offset.
NOVASVG_INLINE void font_face_get_glyph_metrics(font_face_t *face, float size, codepoint_t codepoint, float *advance_width, float *left_side_bearing, rect_t *extents)
Retrieves metrics for a specified glyph at a given size.
NOVASVG_INLINE float canvas_get_miter_limit(const canvas_t *canvas)
Retrieves the current miter limit.
NOVASVG_INLINE bool path_iterator_has_next(const path_iterator_t *it)
Checks if there are more elements to iterate over.
int surface_get_stride(const surface_t *surface)
Gets the stride of the surface.
surface_t * surface_create(int width, int height)
Creates a new image surface with the specified dimensions.
NOVASVG_INLINE void canvas_arc_to(canvas_t *canvas, float rx, float ry, float angle, bool large_arc_flag, bool sweep_flag, float x, float y)
Adds an elliptical arc to the current path.
NOVASVG_INLINE void path_reserve(path_t *path, int count)
Reserves space for path elements.
NOVASVG_INLINE bool path_parse(path_t *path, const char *data, int length)
Parses SVG path data into a path_t object.
NOVASVG_INLINE void canvas_set_fill_rule(canvas_t *canvas, fill_rule_t winding)
Sets the fill rule.
surface_t * surface_load_from_image_data(const void *data, int length)
Loads an image surface from raw image data.
void surface_destroy(surface_t *surface)
Decrements the reference count and destroys the surface if the count reaches zero.
NOVASVG_INLINE font_face_t * font_face_cache_get(font_face_cache_t *cache, const char *family, bool bold, bool italic)
Retrieve a font face from the cache by family and style.
NOVASVG_INLINE void canvas_set_opacity(canvas_t *canvas, float opacity)
Sets the global opacity.
NOVASVG_INLINE void matrix_init_identity(matrix_t *matrix)
Initializes a 2D transformation matrix to the identity matrix.
NOVASVG_INLINE bool matrix_parse(matrix_t *matrix, const char *data, int length)
Parses an SVG transform string into a matrix.
NOVASVG_INLINE bool canvas_select_font_face(canvas_t *canvas, const char *family, bool bold, bool italic)
Selects and sets the current font face on the canvas.
NOVASVG_INLINE surface_t * canvas_get_surface(const canvas_t *canvas)
Gets the surface associated with the canvas.
NOVASVG_INLINE void canvas_ellipse(canvas_t *canvas, float cx, float cy, float rx, float ry)
Adds an ellipse to the current path.
NOVASVG_INLINE void canvas_set_radial_gradient(canvas_t *canvas, float cx, float cy, float cr, float fx, float fy, float fr, spread_method_t spread, const gradient_stop_t *stops, int nstops, const matrix_t *matrix)
Sets the current paint to a radial gradient.
void(* destroy_func_t)(void *closure)
A function pointer type for a cleanup callback.
line_join_t
Defines the shape used at the corners of paths.
@ NOVASVG_LINE_JOIN_BEVEL
Beveled join with a flattened corner.
@ NOVASVG_LINE_JOIN_MITER
Miter join with sharp corners.
@ NOVASVG_LINE_JOIN_ROUND
Rounded join.
NOVASVG_INLINE paint_t * paint_create_rgba(float r, float g, float b, float a)
Creates a solid RGBA paint.
surface_t * surface_load_from_image_file(const char *filename)
Loads an image surface from a file.
NOVASVG_INLINE void matrix_shear(matrix_t *matrix, float shx, float shy)
Shears the matrix by factors shx and shy.
NOVASVG_INLINE path_t * path_reference(path_t *path)
Increases the reference count of a path object.
NOVASVG_INLINE unsigned int color_to_rgba32(const color_t *color)
Converts a color to a 32-bit unsigned RGBA value.
fill_rule_t
Defines fill rule types for filling paths.
@ NOVASVG_FILL_RULE_NON_ZERO
Non-zero winding fill rule.
@ NOVASVG_FILL_RULE_EVEN_ODD
Even-odd fill rule.
NOVASVG_INLINE void canvas_map_rect(const canvas_t *canvas, const rect_t *src, rect_t *dst)
Transforms the src rectangle using the current transformation matrix and stores the result in dst.
NOVASVG_INLINE canvas_t * canvas_create(surface_t *surface)
Creates a drawing context on a surface.
NOVASVG_INLINE paint_t * paint_create_color(const color_t *color)
Creates a solid color paint.
NOVASVG_INLINE void matrix_init_scale(matrix_t *matrix, float sx, float sy)
Initializes a 2D transformation matrix for scaling.
NOVASVG_INLINE void canvas_set_rgb(canvas_t *canvas, float r, float g, float b)
Sets the current paint to a solid color.
NOVASVG_INLINE line_join_t canvas_get_line_join(const canvas_t *canvas)
Retrieves the current line join style.
NOVASVG_INLINE bool matrix_invert(const matrix_t *matrix, matrix_t *inverse)
Calculates the inverse of matrix and stores it in inverse.
NOVASVG_INLINE void path_traverse(const path_t *path, path_traverse_func_t traverse_func, void *closure)
Traverses the path and calls the callback for each element.
NOVASVG_INLINE void canvas_get_current_point(const canvas_t *canvas, float *x, float *y)
Retrieves the current point of the canvas.
NOVASVG_INLINE void path_add_ellipse(path_t *path, float cx, float cy, float rx, float ry)
Adds an ellipse to the path.
NOVASVG_INLINE void canvas_set_paint(canvas_t *canvas, paint_t *paint)
Sets the current paint.
NOVASVG_INLINE void canvas_paint(canvas_t *canvas)
A drawing operator that paints the current clipping region using the current paint.
NOVASVG_INLINE void path_add_arc(path_t *path, float cx, float cy, float r, float a0, float a1, bool ccw)
Adds an arc to the path.
NOVASVG_INLINE void canvas_fill_path(canvas_t *canvas, const path_t *path)
Fills a path according to the current fill rule.
NOVASVG_INLINE line_cap_t canvas_get_line_cap(const canvas_t *canvas)
Retrieves the current line cap style.
NOVASVG_INLINE path_t * path_clone_flatten(const path_t *path)
Creates a copy of the path with Bézier curves flattened to line segments.
NOVASVG_INLINE float path_length(const path_t *path)
Calculates the total length of the path.
NOVASVG_INLINE void path_quad_to(path_t *path, float x1, float y1, float x2, float y2)
Adds a quadratic Bézier curve to the path.
NOVASVG_INLINE void canvas_add_font_face(canvas_t *canvas, const char *family, bool bold, bool italic, font_face_t *face)
Add a font face to the canvas using the specified family and style.
NOVASVG_INLINE void canvas_translate(canvas_t *canvas, float tx, float ty)
Translates the current transformation matrix by offsets tx and ty.
NOVASVG_INLINE void canvas_set_font_face(canvas_t *canvas, font_face_t *face)
Sets the font face for text rendering on the canvas.
enum novasvg::render::text_encoding text_encoding_t
Text encodings used for converting text data to code points.
NOVASVG_INLINE void canvas_get_matrix(const canvas_t *canvas, matrix_t *matrix)
Stores the current transformation matrix in matrix.
NOVASVG_INLINE void canvas_reset_matrix(canvas_t *canvas)
Resets the current transformation matrix to the identity matrix.
NOVASVG_INLINE font_face_cache_t * canvas_get_font_face_cache(const canvas_t *canvas)
Returns the font-face cache associated with the canvas.
line_cap_t
Defines the shape used at the ends of open subpaths.
@ NOVASVG_LINE_CAP_SQUARE
Square ends at the end of the stroke.
@ NOVASVG_LINE_CAP_ROUND
Rounded ends at the end of the stroke.
@ NOVASVG_LINE_CAP_BUTT
Flat edge at the end of the stroke.
NOVASVG_INLINE void canvas_stroke_preserve(canvas_t *canvas)
A drawing operator that strokes the current path according to the current stroke settings.
NOVASVG_INLINE paint_t * paint_create_linear_gradient(float x1, float y1, float x2, float y2, spread_method_t spread, const gradient_stop_t *stops, int nstops, const matrix_t *matrix)
Creates a linear gradient paint.
NOVASVG_INLINE int render_version(void)
Gets the version of the novasvg rendering library.
NOVASVG_INLINE void canvas_transform(canvas_t *canvas, const matrix_t *matrix)
Multiplies the current transformation matrix with the specified matrix.
NOVASVG_INLINE void font_face_cache_reset(font_face_cache_t *cache)
Remove all entries from a font‐face cache.
int surface_get_reference_count(const surface_t *surface)
Gets the current reference count of a surface.
NOVASVG_INLINE paint_t * paint_create_rgb(float r, float g, float b)
Creates a solid RGB paint.
void convert_argb_to_rgba(unsigned char *dst, const unsigned char *src, int width, int height, int stride)
Converts pixel data from premultiplied ARGB to RGBA format.
NOVASVG_INLINE void path_reset(path_t *path)
Resets the path.
NOVASVG_INLINE void path_add_round_rect(path_t *path, float x, float y, float w, float h, float rx, float ry)
Adds a rounded rectangle to the path.
NOVASVG_INLINE operator_t canvas_get_operator(const canvas_t *canvas)
Retrieves the current compositing operator.
NOVASVG_INLINE void canvas_set_texture(canvas_t *canvas, surface_t *surface, texture_type_t type, float opacity, const matrix_t *matrix)
Sets the current paint to a texture.
operator_t
Defines compositing operations.
@ NOVASVG_OPERATOR_CLEAR
Clears the destination (resulting in a fully transparent image).
@ NOVASVG_OPERATOR_DST_IN
Destination within source.
@ NOVASVG_OPERATOR_SRC_IN
Source within destination (only the overlapping part of source is shown).
@ NOVASVG_OPERATOR_EXCLUSION
Like difference, with lower contrast.
@ NOVASVG_OPERATOR_DST_ATOP
Destination atop source (destination shown over source but only in the source's bounds).
@ NOVASVG_OPERATOR_SRC
Source replaces destination.
@ NOVASVG_OPERATOR_MULTIPLY
Backdrop * source: darkens, white is neutral.
@ NOVASVG_OPERATOR_LIGHTEN
The lighter of backdrop and source, per channel.
@ NOVASVG_OPERATOR_DST_OUT
Destination outside source.
@ NOVASVG_OPERATOR_DARKEN
The darker of backdrop and source, per channel.
@ NOVASVG_OPERATOR_DST
Destination is kept, source is ignored.
@ NOVASVG_OPERATOR_DST_OVER
Destination is composited over source.
@ NOVASVG_OPERATOR_SRC_OVER
Source is composited over destination.
@ NOVASVG_OPERATOR_DIFFERENCE
Absolute difference of backdrop and source, per channel.
@ NOVASVG_OPERATOR_SCREEN
Inverse of multiply: lightens, black is neutral.
@ NOVASVG_OPERATOR_SRC_OUT
Source outside destination (non-overlapping part of source is shown).
@ NOVASVG_OPERATOR_XOR
Source and destination are combined, but their overlapping regions are cleared.
@ NOVASVG_OPERATOR_SRC_ATOP
Source atop destination (source shown over destination but only in the destination's bounds).
NOVASVG_INLINE codepoint_t text_iterator_next(text_iterator_t *it)
Retrieves the next code point and advances the iterator.
text_encoding
Text encodings used for converting text data to code points.
@ NOVASVG_TEXT_ENCODING_UTF16
UTF-16 encoding.
@ NOVASVG_TEXT_ENCODING_UTF32
UTF-32 encoding.
@ NOVASVG_TEXT_ENCODING_UTF8
UTF-8 encoding.
@ NOVASVG_TEXT_ENCODING_LATIN1
Latin-1 encoding.
NOVASVG_INLINE bool canvas_add_font_file(canvas_t *canvas, const char *family, bool bold, bool italic, const char *filename, int ttcindex)
Load a font face from a file and add it to the canvas using the specified family and style.
NOVASVG_INLINE void canvas_set_miter_limit(canvas_t *canvas, float miter_limit)
Sets the miter limit.
struct novasvg::render::rect rect_t
A structure representing a rectangle in 2D space.
NOVASVG_INLINE paint_t * paint_create_texture(surface_t *surface, texture_type_t type, float opacity, const matrix_t *matrix)
Creates a texture paint from a surface.
NOVASVG_INLINE int color_parse(color_t *color, const char *data, int length)
Parses a color from a string using CSS color syntax.
NOVASVG_INLINE void canvas_set_operator(canvas_t *canvas, operator_t op)
Sets the compositing operator.
NOVASVG_INLINE void canvas_set_linear_gradient(canvas_t *canvas, float x1, float y1, float x2, float y2, spread_method_t spread, const gradient_stop_t *stops, int nstops, const matrix_t *matrix)
Sets the current paint to a linear gradient.
NOVASVG_INLINE int path_get_reference_count(const path_t *path)
Retrieves the reference count of a path object.
NOVASVG_INLINE void font_face_get_metrics(const font_face_t *face, float size, float *ascent, float *descent, float *line_gap, rect_t *extents)
Retrieves metrics for a font face at a specified size.
NOVASVG_INLINE void canvas_fill_preserve(canvas_t *canvas)
A drawing operator that fills the current path according to the current fill rule.
NOVASVG_INLINE float canvas_add_glyph(canvas_t *canvas, codepoint_t codepoint, float x, float y)
Adds a glyph to the current path at the specified origin.
NOVASVG_INLINE bool text_iterator_has_next(const text_iterator_t *it)
Checks if there are more code points to iterate.
NOVASVG_INLINE int font_face_cache_load_file(font_face_cache_t *cache, const char *filename)
Load all font faces from a file and add them to the cache.
NOVASVG_INLINE void color_init_argb32(color_t *color, unsigned int value)
Initializes a color from a 32-bit unsigned ARGB value.
NOVASVG_INLINE void canvas_fill_extents(canvas_t *canvas, rect_t *extents)
Computes the bounding box of the area that would be affected by a fill operation.
NOVASVG_INLINE void canvas_set_line_width(canvas_t *canvas, float line_width)
Sets the line width.
NOVASVG_INLINE void canvas_set_line_cap(canvas_t *canvas, line_cap_t line_cap)
Sets the line cap style.
NOVASVG_INLINE void matrix_scale(matrix_t *matrix, float sx, float sy)
Scales the matrix by factors sx and sy
NOVASVG_INLINE bool font_face_cache_add_file(font_face_cache_t *cache, const char *family, bool bold, bool italic, const char *filename, int ttcindex)
Load a font face from a file and add it to the cache with the specified family and style.
NOVASVG_INLINE void path_line_to(path_t *path, float x, float y)
Adds a straight line segment to the path.
NOVASVG_INLINE void matrix_init_shear(matrix_t *matrix, float shx, float shy)
Initializes a 2D transformation matrix for shearing.
NOVASVG_INLINE void canvas_set_color(canvas_t *canvas, const color_t *color)
Sets the current paint to a solid color.
NOVASVG_INLINE path_t * path_clone_dashed(const path_t *path, float offset, const float *dashes, int ndashes)
Creates a copy of the path with a dashed pattern applied.
union novasvg::render::path_element path_element_t
NOVASVG_INLINE float font_face_get_glyph_path(font_face_t *face, float size, float x, float y, codepoint_t codepoint, path_t *path)
Retrieves the path of a glyph and its advance width.
struct novasvg::render::point point_t
A structure representing a point in 2D space.
NOVASVG_INLINE int font_face_cache_load_sys(font_face_cache_t *cache)
Load all available system font faces and add them to the cache.
NOVASVG_INLINE void canvas_cubic_to(canvas_t *canvas, float x1, float y1, float x2, float y2, float x3, float y3)
Adds a cubic Bézier curve to the current path.
NOVASVG_INLINE void matrix_multiply(matrix_t *matrix, const matrix_t *left, const matrix_t *right)
Multiplies left and right matrices and stores the result in matrix.
NOVASVG_INLINE int canvas_get_dash_array(const canvas_t *canvas, const float **dashes)
Retrieves the current dash pattern.
NOVASVG_INLINE int paint_get_reference_count(const paint_t *paint)
Retrieves the reference count of a paint object.
NOVASVG_INLINE void canvas_close_path(canvas_t *canvas)
Closes the current path.
NOVASVG_INLINE paint_t * paint_create_radial_gradient(float cx, float cy, float cr, float fx, float fy, float fr, spread_method_t spread, const gradient_stop_t *stops, int nstops, const matrix_t *matrix)
Creates a radial gradient paint.
spread_method_t
Defines the spread method for gradients.
@ NOVASVG_SPREAD_METHOD_PAD
Pad the gradient's edges.
@ NOVASVG_SPREAD_METHOD_REFLECT
Reflect the gradient beyond its bounds.
@ NOVASVG_SPREAD_METHOD_REPEAT
Repeat the gradient pattern.
NOVASVG_INLINE void canvas_set_font_face_cache(canvas_t *canvas, font_face_cache_t *cache)
Assigns a font-face cache to the canvas for font management.
NOVASVG_INLINE void path_traverse_flatten(const path_t *path, path_traverse_func_t traverse_func, void *closure)
Traverses the path with Bézier curves flattened to line segments.
struct novasvg::render::color color_t
Represents a color with red, green, blue, and alpha components.
NOVASVG_INLINE void matrix_rotate(matrix_t *matrix, float angle)
Rotates the matrix by the specified angle (in radians).
NOVASVG_INLINE void color_init_rgb8(color_t *color, int r, int g, int b)
Initializes a color using RGB components in the 0-255 range.
NOVASVG_INLINE path_command_t path_iterator_next(path_iterator_t *it, point_t points[3])
Retrieves the current command and its associated points, then advances the iterator.
NOVASVG_INLINE void canvas_set_font(canvas_t *canvas, font_face_t *face, float size)
Sets the font face and size for text rendering on the canvas.
NOVASVG_INLINE void canvas_map(const canvas_t *canvas, float x, float y, float *xx, float *yy)
Transforms the point (x, y) using the current transformation matrix and stores the result in (xx,...
NOVASVG_INLINE void canvas_restore(canvas_t *canvas)
Restores the canvas to the most recently saved state.
NOVASVG_INLINE void text_iterator_init(text_iterator_t *it, const void *text, int length, text_encoding_t encoding)
Initializes a text iterator.
surface_t * surface_load_from_image_base64(const char *data, int length)
Loads an image surface from base64-encoded data.
NOVASVG_INLINE void path_add_circle(path_t *path, float cx, float cy, float r)
Adds a circle to the path.
NOVASVG_INLINE void matrix_init(matrix_t *matrix, float a, float b, float c, float d, float e, float f)
Initializes a 2D transformation matrix.
NOVASVG_INLINE void canvas_rotate(canvas_t *canvas, float angle)
Rotates the current transformation matrix by the specified angle (in radians).
NOVASVG_INLINE void canvas_rect(canvas_t *canvas, float x, float y, float w, float h)
Adds a rectangle to the current path.
NOVASVG_INLINE void canvas_clip_preserve(canvas_t *canvas)
A drawing operator that intersects the current clipping region with the current path according to the...
surface_t * surface_reference(surface_t *surface)
Increments the reference count for a surface.
NOVASVG_INLINE void canvas_set_dash_array(canvas_t *canvas, const float *dashes, int ndashes)
Sets the dash pattern.
NOVASVG_INLINE void matrix_init_translate(matrix_t *matrix, float tx, float ty)
Initializes a 2D transformation matrix for translation.
NOVASVG_INLINE const char * render_version_string(void)
Gets the version of the novasvg rendering library as a string.
NOVASVG_INLINE float canvas_fill_text(canvas_t *canvas, const void *text, int length, text_encoding_t encoding, float x, float y)
Fills a text at the specified origin.
NOVASVG_INLINE void matrix_translate(matrix_t *matrix, float tx, float ty)
Adds a translation with offsets tx and ty to the matrix.
NOVASVG_INLINE path_t * path_clone(const path_t *path)
Creates a copy of the path.
NOVASVG_INLINE void path_traverse_dashed(const path_t *path, float offset, const float *dashes, int ndashes, path_traverse_func_t traverse_func, void *closure)
Traverses the path with a dashed pattern and calls the callback for each segment.
NOVASVG_INLINE void matrix_map_rect(const matrix_t *matrix, const rect_t *src, rect_t *dst)
Transforms the src rectangle using matrix and stores the result in dst.
void surface_clear(surface_t *surface, const color_t *color)
Clears the entire surface with the specified color.
NOVASVG_INLINE font_face_t * font_face_reference(font_face_t *face)
Increments the reference count of a font face.
NOVASVG_INLINE void canvas_set_dash(canvas_t *canvas, float offset, const float *dashes, int ndashes)
Sets the dash pattern.
NOVASVG_INLINE font_face_cache_t * font_face_cache_create(void)
Create a new, empty font‐face cache.
NOVASVG_INLINE void canvas_glyph_metrics(canvas_t *canvas, codepoint_t codepoint, float *advance_width, float *left_side_bearing, rect_t *extents)
Retrieves metrics for a specific glyph.
NOVASVG_INLINE int path_get_elements(const path_t *path, const path_element_t **elements)
Retrieves the elements of a path.
NOVASVG_INLINE void canvas_clip_path(canvas_t *canvas, const path_t *path)
Intersects the current clipping region with a path according to the current fill rule.
NOVASVG_INLINE void path_add_rect(path_t *path, float x, float y, float w, float h)
Adds a rectangle to the path.
NOVASVG_INLINE void canvas_clip_rect(canvas_t *canvas, float x, float y, float w, float h)
Intersects the current clipping region with a rectangle according to the current fill rule.
unsigned char * surface_get_data(const surface_t *surface)
Gets the pixel data of the surface.
NOVASVG_INLINE void path_transform(path_t *path, const matrix_t *matrix)
Applies a transformation matrix to the path.
NOVASVG_INLINE void color_init_hsl(color_t *color, float h, float s, float l)
Initializes a color with the specified HSL color values.
NOVASVG_INLINE void canvas_round_rect(canvas_t *canvas, float x, float y, float w, float h, float rx, float ry)
Adds a rounded rectangle to the current path.
Main namespace for the NovaSVG library.
Represents a color with red, green, blue, and alpha components.
float b
Blue component (0 to 1).
float g
Green component (0 to 1).
float a
Alpha (opacity) component (0 to 1).
float r
Red component (0 to 1).
Represents a gradient stop.
color_t color
The color of the gradient stop.
float offset
The offset of the gradient stop, as a value between 0 and 1.
A structure representing a 2D transformation matrix.
float d
The vertical scaling factor.
float c
The horizontal shearing factor.
float f
The vertical translation offset.
float e
The horizontal translation offset.
float b
The vertical shearing factor.
float a
The horizontal scaling factor.
Iterator for traversing path elements in a path.
const path_element_t * elements
Pointer to the array of path elements.
int index
Current position in the array.
int size
Total number of elements in the array.
A structure representing a point in 2D space.
float y
The y-coordinate of the point.
float x
The x-coordinate of the point.
A structure representing a rectangle in 2D space.
float x
The x-coordinate of the top-left corner of the rectangle.
float w
The width of the rectangle.
float h
The height of the rectangle.
float y
The y-coordinate of the top-left corner of the rectangle.
Iterator for traversing code points in text data.
text_encoding_t encoding
Encoding format of the text data.
int length
Length of the text data.
const void * text
Pointer to the text data.
int index
Current position in the text data.
std::string text
UTF-8; ' ' marks a forced line break ( ,.
point_t point
A coordinate point in the path.
struct novasvg::render::path_element::@14 header
Header for path commands.
int length
Number of elements including the header.
path_command_t command
The path command.