// Copyright (C) 2024, Jakob Wakeling // All rights reserved. #ifndef LIBDRAW_DRAW_H_RNC24Y6G #define LIBDRAW_DRAW_H_RNC24Y6G #include "keys.h" #include typedef enum { DRAW_MOD_SHIFT = 0x01, DRAW_MOD_CONTROL = 0x02, DRAW_MOD_ALT = 0x04, DRAW_MOD_SUPER = 0x08, DRAW_MOD_CAPS_LOCK = 0x10, DRAW_MOD_NUM_LOCK = 0x20, } draw_mod_k; typedef enum { DRAW_MOUSE_NONE = 0, DRAW_MOUSE_LEFT = 1, DRAW_MOUSE_MIDDLE = 2, DRAW_MOUSE_RIGHT = 3, DRAW_MOUSE_SCROLL_UP = 4, DRAW_MOUSE_SCROLL_DOWN = 5, DRAW_MOUSE_SCROLL_LEFT = 6, DRAW_MOUSE_SCROLL_RIGHT = 7, DRAW_MOUSE_BACK = 8, DRAW_MOUSE_FORWARD = 9, } draw_mouse_k; typedef enum { DRAW_EVENT_EXIT = -1, DRAW_EVENT_NONE = 0, DRAW_EVENT_KEY, DRAW_EVENT_MOUSE, DRAW_EVENT_PAINT, DRAW_EVENT_MOVE, DRAW_EVENT_RESIZE, DRAW_EVENT_HIDE, DRAW_EVENT_SHOW, } draw_event_k; typedef enum { DRAW_PRESS, DRAW_RELEASE, DRAW_REPEAT } draw_direction; typedef struct { draw_key_k code; draw_mod_k modifiers; draw_direction direction; } draw_event_key; typedef struct { int32_t x, y; draw_mouse_k button; draw_mod_k modifiers; draw_direction direction; } draw_event_mouse; typedef struct { int32_t x, y, w, h; } draw_event_paint; typedef struct { int32_t w, h; } draw_event_resize; typedef struct { draw_event_k kind; union { draw_event_key key; draw_event_mouse mouse; draw_event_paint paint; draw_event_resize resize; }; } draw_event; typedef struct draw_window_s draw_window; typedef struct { int32_t x, y; } point; typedef struct { int32_t x, y, w, h; } rect; typedef struct { rect bounds; uint32_t *buf; } draw_buffer; extern bool draw_debug, draw_debug_verbose; extern int draw_window_init(draw_window **window, int32_t w, int32_t h, const char *title, uint32_t flags); extern void draw_window_free(draw_window **window); extern draw_event draw_window_event(draw_window *window); extern void draw_window_set_title(draw_window *window, const char *title); extern void draw_window_repaint(draw_window *window); extern int draw_window_draw(draw_window *w, point dp, draw_buffer *buf, rect br); extern void draw_window_clear(draw_window *w, uint32_t colour); extern draw_buffer *draw_buffer_init(int32_t w, int32_t h); extern void draw_buffer_free(draw_buffer **buf); extern void draw_buffer_copy(draw_buffer *dst, draw_buffer *src, point dp, rect sr); extern void draw_buffer_clear(draw_buffer *buf, uint32_t colour); extern void draw_buffer_rect(draw_buffer *buf, point p, rect r, uint32_t colour); extern void draw_buffer_line(draw_buffer *buf, point p0, point p1, uint32_t colour); extern void draw_buffer_circle(draw_buffer *buf, point p, int32_t r, uint32_t colour, bool fill); #endif // LIBDRAW_DRAW_H_RNC24Y6G