146 lines
3.6 KiB
C
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
|