Files
pcsx2/3rdparty/plutosvg/plutovg/source/plutovg-private.h
2025-11-18 14:18:26 -07:00

146 lines
3.6 KiB
C

#ifndef PLUTOVG_PRIVATE_H
#define PLUTOVG_PRIVATE_H
#include "plutovg.h"
struct plutovg_surface {
int ref_count;
int width;
int height;
int stride;
unsigned char* data;
};
struct plutovg_path {
int ref_count;
int num_points;
int num_contours;
int num_curves;
plutovg_point_t start_point;
struct {
plutovg_path_element_t* data;
int size;
int capacity;
} elements;
};
typedef enum {
PLUTOVG_PAINT_TYPE_COLOR,
PLUTOVG_PAINT_TYPE_GRADIENT,
PLUTOVG_PAINT_TYPE_TEXTURE
} plutovg_paint_type_t;
struct plutovg_paint {
int ref_count;
plutovg_paint_type_t type;
};
typedef struct {
plutovg_paint_t base;
plutovg_color_t color;
} plutovg_solid_paint_t;
typedef enum {
PLUTOVG_GRADIENT_TYPE_LINEAR,
PLUTOVG_GRADIENT_TYPE_RADIAL
} plutovg_gradient_type_t;
typedef struct {
plutovg_paint_t base;
plutovg_gradient_type_t type;
plutovg_spread_method_t spread;
plutovg_matrix_t matrix;
plutovg_gradient_stop_t* stops;
int nstops;
float values[6];
} plutovg_gradient_paint_t;
typedef struct {
plutovg_paint_t base;
plutovg_texture_type_t type;
float opacity;
plutovg_matrix_t matrix;
plutovg_surface_t* surface;
} plutovg_texture_paint_t;
typedef struct {
int x;
int len;
int y;
unsigned char coverage;
} plutovg_span_t;
typedef struct {
struct {
plutovg_span_t* data;
int size;
int capacity;
} spans;
int x;
int y;
int w;
int h;
} plutovg_span_buffer_t;
typedef struct {
float offset;
struct {
float* data;
int size;
int capacity;
} array;
} plutovg_stroke_dash_t;
typedef struct {
float width;
plutovg_line_cap_t cap;
plutovg_line_join_t join;
float miter_limit;
} plutovg_stroke_style_t;
typedef struct {
plutovg_stroke_style_t style;
plutovg_stroke_dash_t dash;
} plutovg_stroke_data_t;
typedef struct plutovg_state {
plutovg_paint_t* paint;
plutovg_font_face_t* font_face;
plutovg_color_t color;
plutovg_matrix_t matrix;
plutovg_stroke_data_t stroke;
plutovg_span_buffer_t clip_spans;
plutovg_fill_rule_t winding;
plutovg_operator_t op;
float font_size;
float opacity;
bool clipping;
struct plutovg_state* next;
} plutovg_state_t;
struct plutovg_canvas {
int ref_count;
plutovg_surface_t* surface;
plutovg_path_t* path;
plutovg_state_t* state;
plutovg_state_t* freed_state;
plutovg_rect_t clip_rect;
plutovg_span_buffer_t clip_spans;
plutovg_span_buffer_t fill_spans;
};
void plutovg_span_buffer_init(plutovg_span_buffer_t* span_buffer);
void plutovg_span_buffer_init_rect(plutovg_span_buffer_t* span_buffer, int x, int y, int width, int height);
void plutovg_span_buffer_reset(plutovg_span_buffer_t* span_buffer);
void plutovg_span_buffer_destroy(plutovg_span_buffer_t* span_buffer);
void plutovg_span_buffer_copy(plutovg_span_buffer_t* span_buffer, const plutovg_span_buffer_t* source);
void plutovg_span_buffer_extents(plutovg_span_buffer_t* span_buffer, plutovg_rect_t* extents);
void plutovg_span_buffer_intersect(plutovg_span_buffer_t* span_buffer, const plutovg_span_buffer_t* a, const plutovg_span_buffer_t* b);
void plutovg_rasterize(plutovg_span_buffer_t* span_buffer, const plutovg_path_t* path, const plutovg_matrix_t* matrix, const plutovg_rect_t* clip_rect, const plutovg_stroke_data_t* stroke_data, plutovg_fill_rule_t winding);
void plutovg_blend(plutovg_canvas_t* canvas, const plutovg_span_buffer_t* span_buffer);
void plutovg_memfill32(unsigned int* dest, int length, unsigned int value);
#endif // PLUTOVG_PRIVATE_H