#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
typedef enum BufroFlushResult {
BufroFlushResultTimeout,
BufroFlushResultOutdated,
BufroFlushResultLost,
BufroFlushResultOutOfMemory,
BufroFlushResultOk,
} BufroFlushResult;
typedef enum BufroLineCap {
BufroLineCapButt,
BufroLineCapSquare,
BufroLineCapRound,
} BufroLineCap;
typedef enum BufroLineJoin {
BufroLineJoinMiter,
BufroLineJoinMiterClip,
BufroLineJoinRound,
BufroLineJoinBevel,
} BufroLineJoin;
typedef struct BufroFont BufroFont;
typedef struct Painter Painter;
typedef struct Path Path;
typedef struct PathBuilder PathBuilder;
typedef struct BufroColor {
float r;
float g;
float b;
float a;
} BufroColor;
typedef struct BufroXlibWindow {
unsigned long window;
void *display;
} BufroXlibWindow;
typedef struct BufroStrokeOptions {
enum BufroLineCap start_cap;
enum BufroLineCap end_cap;
enum BufroLineJoin line_join;
float line_width;
float miter_limit;
} BufroStrokeOptions;
#ifdef __cplusplus
extern "C" {
#endif
struct BufroColor bfr_colorf(float r, float g, float b, float a);
struct BufroColor bfr_coloru8(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
void bfr_font_free(struct BufroFont *font);
uint8_t bfr_font_from_buffer(const char *data, size_t len, struct BufroFont **ptr);
void bfr_painter_circle(struct Painter *painter,
float x,
float y,
float radius,
struct BufroColor color);
void bfr_painter_clear(struct Painter *painter);
void bfr_painter_fill_path(struct Painter *painter,
const struct Path *path,
struct BufroColor color);
void bfr_painter_fill_text(struct Painter *painter,
const struct BufroFont *font,
const char *text,
float x,
float y,
float size,
struct BufroColor color,
size_t wrap_limit);
enum BufroFlushResult bfr_painter_flush(struct Painter *painter);
void bfr_painter_free(struct Painter *painter);
struct Painter *bfr_painter_from_xlib_window(struct BufroXlibWindow handle,
uint32_t width,
uint32_t height);
const char *bfr_painter_get_buffer_info_string(struct Painter *painter);
void bfr_painter_rectangle(struct Painter *painter,
float x,
float y,
float width,
float height,
struct BufroColor color);
void bfr_painter_regen(struct Painter *painter);
void bfr_painter_resize(struct Painter *painter, uint32_t width, uint32_t height);
void bfr_painter_restore(struct Painter *painter);
void bfr_painter_rotate(struct Painter *painter, float angle);
void bfr_painter_save(struct Painter *painter);
void bfr_painter_scale(struct Painter *painter, float x, float y);
void bfr_painter_stroke_path(struct Painter *painter,
const struct Path *path,
struct BufroColor color,
struct BufroStrokeOptions options);
void bfr_painter_stroke_text(struct Painter *painter,
const struct BufroFont *font,
const char *text,
float x,
float y,
float size,
struct BufroColor color,
struct BufroStrokeOptions options,
size_t wrap_limit);
void bfr_painter_translate(struct Painter *painter, float x, float y);
void bfr_pathbuilder_build(struct PathBuilder *pathbuilder, struct Path **path);
void bfr_pathbuilder_close(struct PathBuilder *pathbuilder);
void bfr_pathbuilder_curve_to(struct PathBuilder *pathbuilder,
float x1,
float y1,
float x2,
float y2,
float x3,
float y3);
void bfr_pathbuilder_free(struct PathBuilder *pathbuilder);
void bfr_pathbuilder_line_to(struct PathBuilder *pathbuilder, float x, float y);
void bfr_pathbuilder_move_to(struct PathBuilder *pathbuilder, float x, float y);
struct PathBuilder *bfr_pathbuilder_new(void);
void bfr_pathbuilder_quad_to(struct PathBuilder *pathbuilder,
float x1,
float y1,
float x2,
float y2);
void bfr_pathbuilder_restore(struct PathBuilder *pathbuilder);
void bfr_pathbuilder_rotate(struct PathBuilder *pathbuilder, float angle);
void bfr_pathbuilder_save(struct PathBuilder *pathbuilder);
void bfr_pathbuilder_scale(struct PathBuilder *pathbuilder, float x, float y);
void bfr_pathbuilder_translate(struct PathBuilder *pathbuilder, float x, float y);
#ifdef __cplusplus
} #endif