3#ifndef NOVASVG_PRIVATE_H
4#define NOVASVG_PRIVATE_H
21#define novasvg_init_reference(ob) ((ob)->ref_count = 1)
22#define novasvg_increment_reference(ob) (void)(ob && InterlockedIncrement(&(ob)->ref_count))
23#define novasvg_destroy_reference(ob) (ob && InterlockedDecrement(&(ob)->ref_count) == 0)
24#define novasvg_get_reference_count(ob) ((ob) ? InterlockedCompareExchange((LONG*)&(ob)->ref_count, 0, 0) : 0)
26#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__)
36#define novasvg_init_reference(ob) atomic_init(&(ob)->ref_count, 1)
37#define novasvg_increment_reference(ob) (void)(ob && atomic_fetch_add(&(ob)->ref_count, 1))
38#define novasvg_destroy_reference(ob) (ob && atomic_fetch_sub(&(ob)->ref_count, 1) == 1)
39#define novasvg_get_reference_count(ob) ((ob) ? atomic_load(&(ob)->ref_count) : 0)
45#define novasvg_init_reference(ob) ((ob)->ref_count = 1)
46#define novasvg_increment_reference(ob) (void)(ob && ++(ob)->ref_count)
47#define novasvg_destroy_reference(ob) (ob && --(ob)->ref_count == 0)
48#define novasvg_get_reference_count(ob) ((ob) ? (ob)->ref_count : 0)
191void memfill32(
unsigned int* dest,
int length,
unsigned int value);
void span_buffer_init_rect(span_buffer_t *span_buffer, int x, int y, int width, int height)
void span_buffer_init(span_buffer_t *span_buffer)
texture_type_t
Defines the type of texture, either plain or tiled.
struct novasvg::render::state state_t
line_join_t
Defines the shape used at the corners of paths.
fill_rule_t
Defines fill rule types for filling paths.
NOVASVG_INLINE void blend(canvas_t *canvas, const span_buffer_t *span_buffer)
line_cap_t
Defines the shape used at the ends of open subpaths.
operator_t
Defines compositing operations.
void span_buffer_reset(span_buffer_t *span_buffer)
NOVASVG_INLINE void memfill32(unsigned int *dest, int length, unsigned int value)
void span_buffer_destroy(span_buffer_t *span_buffer)
void span_buffer_copy(span_buffer_t *span_buffer, const span_buffer_t *source)
void span_buffer_extents(span_buffer_t *span_buffer, rect_t *extents)
void span_buffer_intersect(span_buffer_t *span_buffer, const span_buffer_t *a, const span_buffer_t *b)
spread_method_t
Defines the spread method for gradients.
bool span_buffer_contains(const span_buffer_t *span_buffer, float x, float y)
@ NOVASVG_PAINT_TYPE_GRADIENT
@ NOVASVG_PAINT_TYPE_TEXTURE
@ NOVASVG_PAINT_TYPE_COLOR
void rasterize(span_buffer_t *span_buffer, const path_t *path, const matrix_t *matrix, const rect_t *clip_rect, const stroke_data_t *stroke_data, fill_rule_t winding)
@ NOVASVG_GRADIENT_TYPE_LINEAR
@ NOVASVG_GRADIENT_TYPE_RADIAL
Main namespace for the NovaSVG library.
font_face_cache_t * face_cache
Represents a color with red, green, blue, and alpha components.
Represents a gradient stop.
A structure representing a 2D transformation matrix.
struct novasvg::render::path::@11 elements
A structure representing a point in 2D space.
A structure representing a rectangle in 2D space.