ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
0
|
// Copyright (C) 2024, Jakob Wakeling |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
1
|
// All rights reserved. |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
2
|
|
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
3
|
#ifndef LIBDRAW_DRAW_H_RNC24Y6G |
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
4
|
#define LIBDRAW_DRAW_H_RNC24Y6G |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
5
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
6
|
#include "keys.h" |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
7
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
8
|
#include <stdint.h> |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
9
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
10
|
typedef enum { |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
11
|
DRAW_MOD_SHIFT = 0x01, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
12
|
DRAW_MOD_CONTROL = 0x02, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
13
|
DRAW_MOD_ALT = 0x04, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
14
|
DRAW_MOD_SUPER = 0x08, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
15
|
DRAW_MOD_CAPS_LOCK = 0x10, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
16
|
DRAW_MOD_NUM_LOCK = 0x20, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
17
|
} draw_mod_k; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
18
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
19
|
typedef enum { |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
20
|
DRAW_MOUSE_NONE = 0, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
21
|
DRAW_MOUSE_LEFT = 1, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
22
|
DRAW_MOUSE_MIDDLE = 2, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
23
|
DRAW_MOUSE_RIGHT = 3, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
24
|
DRAW_MOUSE_SCROLL_UP = 4, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
25
|
DRAW_MOUSE_SCROLL_DOWN = 5, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
26
|
DRAW_MOUSE_SCROLL_LEFT = 6, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
27
|
DRAW_MOUSE_SCROLL_RIGHT = 7, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
28
|
DRAW_MOUSE_BACK = 8, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
29
|
DRAW_MOUSE_FORWARD = 9, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
30
|
} draw_mouse_k; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
31
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
32
|
typedef enum { |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
33
|
DRAW_EVENT_EXIT = -1, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
34
|
DRAW_EVENT_NONE = 0, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
35
|
DRAW_EVENT_KEY, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
36
|
DRAW_EVENT_MOUSE, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
37
|
DRAW_EVENT_PAINT, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
38
|
DRAW_EVENT_MOVE, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
39
|
DRAW_EVENT_RESIZE, |
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
40
|
DRAW_EVENT_HIDE, |
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
41
|
DRAW_EVENT_SHOW, |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
42
|
} draw_event_k; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
43
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
44
|
typedef enum { DRAW_PRESS, DRAW_RELEASE, DRAW_REPEAT } draw_direction; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
45
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
46
|
typedef struct { draw_key_k code; draw_mod_k modifiers; draw_direction direction; } draw_event_key; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
47
|
typedef struct { int32_t x, y; draw_mouse_k button; draw_mod_k modifiers; draw_direction direction; } draw_event_mouse; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
48
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
49
|
typedef struct { int32_t x, y, w, h; } draw_event_paint; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
50
|
typedef struct { int32_t w, h; } draw_event_resize; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
51
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
52
|
typedef struct { |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
53
|
draw_event_k kind; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
54
|
union { |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
55
|
draw_event_key key; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
56
|
draw_event_mouse mouse; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
57
|
draw_event_paint paint; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
58
|
draw_event_resize resize; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
59
|
}; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
60
|
} draw_event; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
61
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
62
|
typedef struct draw_window_s draw_window; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
63
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
64
|
typedef struct { int32_t x, y; } point; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
65
|
typedef struct { int32_t x, y, w, h; } rect; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
66
|
typedef struct { rect bounds; uint32_t *buf; } draw_buffer; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
67
|
|
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
68
|
extern bool draw_debug, draw_debug_verbose; |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
69
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
70
|
extern int draw_window_init(draw_window **window, int32_t w, int32_t h, const char *title, uint32_t flags); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
71
|
extern void draw_window_free(draw_window **window); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
72
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
73
|
extern draw_event draw_window_event(draw_window *window); |
0c1b980 |
Jakob Wakeling |
2024-03-16 11:36:25 |
74
|
extern void draw_window_set_title(draw_window *window, const char *title); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
75
|
extern void draw_window_repaint(draw_window *window); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
76
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
77
|
extern int draw_window_draw(draw_window *w, point dp, draw_buffer *buf, rect br); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
78
|
extern void draw_window_clear(draw_window *w, uint32_t colour); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
79
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
80
|
extern draw_buffer *draw_buffer_init(int32_t w, int32_t h); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
81
|
extern void draw_buffer_free(draw_buffer **buf); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
82
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
83
|
extern void draw_buffer_copy(draw_buffer *dst, draw_buffer *src, point dp, rect sr); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
84
|
|
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
85
|
extern void draw_buffer_clear(draw_buffer *buf, uint32_t colour); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
86
|
extern void draw_buffer_rect(draw_buffer *buf, point p, rect r, uint32_t colour); |
0c1b980 |
Jakob Wakeling |
2024-03-16 11:36:25 |
87
|
extern void draw_buffer_line(draw_buffer *buf, point p0, point p1, uint32_t colour); |
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
88
|
extern void draw_buffer_circle(draw_buffer *buf, point p, int32_t r, uint32_t colour, bool fill); |
ccd60e6 |
Jakob Wakeling |
2024-03-10 19:35:51 |
89
|
|
e9e9867 |
Jakob Wakeling |
2024-03-11 22:03:59 |
90
|
#endif // LIBDRAW_DRAW_H_RNC24Y6G |
|
|
|
91
|
|