#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "../rute_base.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "brush_ffi.h"
#include "color_ffi.h"
struct RUPenFuncs;
struct RUPen;
typedef struct RUPenFuncs {
void (*destroy)(struct RUBase* self);
void (*swap)(struct RUBase* self_c, struct RUBase* other);
uint32_t (*style)(struct RUBase* self_c);
void (*set_style)(struct RUBase* self_c, uint32_t arg0);
struct RUArray (*dash_pattern)(struct RUBase* self_c);
float (*dash_offset)(struct RUBase* self_c);
void (*set_dash_offset)(struct RUBase* self_c, float doffset);
float (*miter_limit)(struct RUBase* self_c);
void (*set_miter_limit)(struct RUBase* self_c, float limit);
float (*width_f)(struct RUBase* self_c);
void (*set_width_f)(struct RUBase* self_c, float width);
int (*width)(struct RUBase* self_c);
void (*set_width)(struct RUBase* self_c, int width);
struct RUColor (*color)(struct RUBase* self_c);
void (*set_color)(struct RUBase* self_c, struct RUBase* color);
struct RUBrush (*brush)(struct RUBase* self_c);
void (*set_brush)(struct RUBase* self_c, struct RUBase* brush);
bool (*is_solid)(struct RUBase* self_c);
uint32_t (*cap_style)(struct RUBase* self_c);
void (*set_cap_style)(struct RUBase* self_c, uint32_t pcs);
uint32_t (*join_style)(struct RUBase* self_c);
void (*set_join_style)(struct RUBase* self_c, uint32_t pcs);
bool (*is_cosmetic)(struct RUBase* self_c);
void (*set_cosmetic)(struct RUBase* self_c, bool cosmetic);
bool (*is_detached)(struct RUBase* self_c);
} RUPenFuncs;
typedef struct RUPenAllFuncs {
struct RUPenFuncs* pen_funcs;
} RUPenAllFuncs;
typedef struct RUPen {
RUBase* qt_data;
RUBase* host_data;
struct RUPenAllFuncs* all_funcs;
} RUPen;
extern RUPenFuncs s_pen_funcs;
extern RUPenAllFuncs s_pen_all_funcs;
#ifdef __cplusplus
}
#endif