libdraw

Minimal window and drawing library
git clone http://git.omkov.net/libdraw
Log | Tree | Refs | Download

libdraw/src/draw.h (92 lines, 2.7 KiB) -rw-r--r-- file download

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