#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "../rute_base.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "painter_path_ffi.h"
#include "point_f_ffi.h"
#include "polygon_f_ffi.h"
#include "rect_f_ffi.h"
struct RUPainterPathFuncs;
struct RUPainterPath;
typedef struct RUPainterPathFuncs {
void (*destroy)(struct RUBase* self);
void (*swap)(struct RUBase* self_c, struct RUBase* other);
void (*close_subpath)(struct RUBase* self_c);
void (*move_to)(struct RUBase* self_c, struct RUBase* p);
void (*move_to)(struct RUBase* self_c, float x, float y);
void (*line_to)(struct RUBase* self_c, struct RUBase* p);
void (*line_to)(struct RUBase* self_c, float x, float y);
void (*arc_move_to)(struct RUBase* self_c, struct RUBase* rect, float angle);
void (*arc_move_to)(struct RUBase* self_c, float x, float y, float w, float h, float angle);
void (*arc_to)(struct RUBase* self_c, struct RUBase* rect, float start_angle, float arc_length);
void (*arc_to)(struct RUBase* self_c, float x, float y, float w, float h, float start_angle, float arc_length);
void (*cubic_to)(struct RUBase* self_c, struct RUBase* ctrl_pt1, struct RUBase* ctrl_pt2, struct RUBase* end_pt);
void (*cubic_to)(struct RUBase* self_c, float ctrl_pt1x, float ctrl_pt1y, float ctrl_pt2x, float ctrl_pt2y, float end_ptx, float end_pty);
void (*quad_to)(struct RUBase* self_c, struct RUBase* ctrl_pt, struct RUBase* end_pt);
void (*quad_to)(struct RUBase* self_c, float ctrl_ptx, float ctrl_pty, float end_ptx, float end_pty);
struct RUPointF (*current_position)(struct RUBase* self_c);
void (*add_rect)(struct RUBase* self_c, struct RUBase* rect);
void (*add_rect)(struct RUBase* self_c, float x, float y, float w, float h);
void (*add_ellipse)(struct RUBase* self_c, struct RUBase* rect);
void (*add_ellipse)(struct RUBase* self_c, float x, float y, float w, float h);
void (*add_ellipse)(struct RUBase* self_c, struct RUBase* center, float rx, float ry);
void (*add_polygon)(struct RUBase* self_c, struct RUBase* polygon);
void (*add_text)(struct RUBase* self_c, struct RUBase* point, struct RUBase* f, const char* text);
void (*add_text)(struct RUBase* self_c, float x, float y, struct RUBase* f, const char* text);
void (*add_path)(struct RUBase* self_c, struct RUBase* path);
void (*add_region)(struct RUBase* self_c, struct RUBase* region);
void (*add_rounded_rect)(struct RUBase* self_c, struct RUBase* rect, float x_radius, float y_radius, int mode);
void (*add_rounded_rect)(struct RUBase* self_c, float x, float y, float w, float h, float x_radius, float y_radius, int mode);
void (*add_round_rect)(struct RUBase* self_c, struct RUBase* rect, int x_rnd, int y_rnd);
void (*add_round_rect)(struct RUBase* self_c, float x, float y, float w, float h, int x_rnd, int y_rnd);
void (*add_round_rect)(struct RUBase* self_c, struct RUBase* rect, int roundness);
void (*add_round_rect)(struct RUBase* self_c, float x, float y, float w, float h, int roundness);
void (*connect_path)(struct RUBase* self_c, struct RUBase* path);
bool (*contains)(struct RUBase* self_c, struct RUBase* pt);
bool (*contains)(struct RUBase* self_c, struct RUBase* rect);
bool (*intersects)(struct RUBase* self_c, struct RUBase* rect);
struct RURectF (*bounding_rect)(struct RUBase* self_c);
int (*fill_rule)(struct RUBase* self_c);
void (*set_fill_rule)(struct RUBase* self_c, int fill_rule);
bool (*is_empty)(struct RUBase* self_c);
struct RUPainterPath (*to_reversed)(struct RUBase* self_c);
struct RUArray (*to_subpath_polygons)(struct RUBase* self_c, struct RUBase* matrix);
struct RUArray (*to_fill_polygons)(struct RUBase* self_c, struct RUBase* matrix);
struct RUPolygonF (*to_fill_polygon)(struct RUBase* self_c, struct RUBase* matrix);
struct RUArray (*to_subpath_polygons)(struct RUBase* self_c, struct RUBase* matrix);
struct RUArray (*to_fill_polygons)(struct RUBase* self_c, struct RUBase* matrix);
struct RUPolygonF (*to_fill_polygon)(struct RUBase* self_c, struct RUBase* matrix);
int (*element_count)(struct RUBase* self_c);
int (*element_at)(struct RUBase* self_c, int i);
void (*set_element_position_at)(struct RUBase* self_c, int i, float x, float y);
float (*length)(struct RUBase* self_c);
float (*percent_at_length)(struct RUBase* self_c, float t);
struct RUPointF (*point_at_percent)(struct RUBase* self_c, float t);
float (*angle_at_percent)(struct RUBase* self_c, float t);
float (*slope_at_percent)(struct RUBase* self_c, float t);
bool (*intersects)(struct RUBase* self_c, struct RUBase* p);
bool (*contains)(struct RUBase* self_c, struct RUBase* p);
struct RUPainterPath (*united)(struct RUBase* self_c, struct RUBase* r);
struct RUPainterPath (*intersected)(struct RUBase* self_c, struct RUBase* r);
struct RUPainterPath (*simplified)(struct RUBase* self_c);
} RUPainterPathFuncs;
typedef struct RUPainterPathAllFuncs {
struct RUPainterPathFuncs* painter_path_funcs;
} RUPainterPathAllFuncs;
typedef struct RUPainterPath {
RUBase* qt_data;
RUBase* host_data;
struct RUPainterPathAllFuncs* all_funcs;
} RUPainterPath;
extern RUPainterPathFuncs s_painter_path_funcs;
extern RUPainterPathAllFuncs s_painter_path_all_funcs;
#ifdef __cplusplus
}
#endif