libdraw

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

libdraw/examples/draw.c (52 lines, 1.6 KiB) -rw-r--r-- file download

345d96c Jakob Wakeling 2024-03-10 19:36:28
0
#include "../src/draw.h"
345d96c Jakob Wakeling 2024-03-10 19:36:28
1
345d96c Jakob Wakeling 2024-03-10 19:36:28
2
int main() {
345d96c Jakob Wakeling 2024-03-10 19:36:28
3
	draw_debug = true;
345d96c Jakob Wakeling 2024-03-10 19:36:28
4
	draw_window *window; int32_t w = 800, h = 600;
0db5818 Jakob Wakeling 2024-03-10 23:32:36
5
	if (draw_window_init(&window, w, h, "Draw", 0) == -1) { return -1; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
6
e9e9867 Jakob Wakeling 2024-03-11 22:03:59
7
	bool left = false, right = false;
0db5818 Jakob Wakeling 2024-03-10 23:32:36
8
	uint32_t colour = 0xffff0000;
345d96c Jakob Wakeling 2024-03-10 19:36:28
9
345d96c Jakob Wakeling 2024-03-10 19:36:28
10
	draw_buffer *buf = draw_buffer_init(w, h);
0db5818 Jakob Wakeling 2024-03-10 23:32:36
11
	draw_buffer_clear(buf, 0xff000000);
345d96c Jakob Wakeling 2024-03-10 19:36:28
12
345d96c Jakob Wakeling 2024-03-10 19:36:28
13
	for (draw_event e; (e = draw_window_event(window)).kind != DRAW_EVENT_EXIT;) switch (e.kind) {
345d96c Jakob Wakeling 2024-03-10 19:36:28
14
	case DRAW_EVENT_KEY:    {
0db5818 Jakob Wakeling 2024-03-10 23:32:36
15
		if (e.key.code == DRAW_KEY_1) { colour = 0xffff0000; }
0db5818 Jakob Wakeling 2024-03-10 23:32:36
16
		if (e.key.code == DRAW_KEY_2) { colour = 0xff00ff00; }
0db5818 Jakob Wakeling 2024-03-10 23:32:36
17
		if (e.key.code == DRAW_KEY_3) { colour = 0xff0000ff; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
18
	} break;
345d96c Jakob Wakeling 2024-03-10 19:36:28
19
	case DRAW_EVENT_MOUSE:  {
345d96c Jakob Wakeling 2024-03-10 19:36:28
20
		if (e.mouse.button == DRAW_MOUSE_LEFT) {
345d96c Jakob Wakeling 2024-03-10 19:36:28
21
			if (e.mouse.direction == DRAW_PRESS) { left = true; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
22
			if (e.mouse.direction == DRAW_RELEASE) { left = false; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
23
		}
345d96c Jakob Wakeling 2024-03-10 19:36:28
24
		else if (e.mouse.button == DRAW_MOUSE_RIGHT) {
345d96c Jakob Wakeling 2024-03-10 19:36:28
25
			if (e.mouse.direction == DRAW_PRESS) { right = true; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
26
			if (e.mouse.direction == DRAW_RELEASE) { right = false; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
27
		}
345d96c Jakob Wakeling 2024-03-10 19:36:28
28
e9e9867 Jakob Wakeling 2024-03-11 22:03:59
29
		if (left) { draw_buffer_circle(buf, (point){e.mouse.x, e.mouse.y}, 6, colour, true); }
e9e9867 Jakob Wakeling 2024-03-11 22:03:59
30
		if (right) { draw_buffer_circle(buf, (point){e.mouse.x, e.mouse.y}, 6, 0xff000000, true); }
e9e9867 Jakob Wakeling 2024-03-11 22:03:59
31
		if (left || right) { goto redraw; }
345d96c Jakob Wakeling 2024-03-10 19:36:28
32
	} break;
0db5818 Jakob Wakeling 2024-03-10 23:32:36
33
	case DRAW_EVENT_PAINT: redraw: {
e9e9867 Jakob Wakeling 2024-03-11 22:03:59
34
		draw_window_draw(window, (point){0, 0}, buf, buf->bounds);
345d96c Jakob Wakeling 2024-03-10 19:36:28
35
	} break;
345d96c Jakob Wakeling 2024-03-10 19:36:28
36
	case DRAW_EVENT_RESIZE: {
345d96c Jakob Wakeling 2024-03-10 19:36:28
37
		w = e.resize.w; h = e.resize.h;
345d96c Jakob Wakeling 2024-03-10 19:36:28
38
345d96c Jakob Wakeling 2024-03-10 19:36:28
39
		draw_buffer *old = buf;
345d96c Jakob Wakeling 2024-03-10 19:36:28
40
		buf = draw_buffer_init(w, h);
0db5818 Jakob Wakeling 2024-03-10 23:32:36
41
		draw_buffer_clear(buf, 0xff000000);
345d96c Jakob Wakeling 2024-03-10 19:36:28
42
		draw_buffer_copy(buf, old, (point){0, 0}, old->bounds);
345d96c Jakob Wakeling 2024-03-10 19:36:28
43
		draw_buffer_free(&old);
345d96c Jakob Wakeling 2024-03-10 19:36:28
44
	} break;
345d96c Jakob Wakeling 2024-03-10 19:36:28
45
	default: { /* ignore */ } break;
345d96c Jakob Wakeling 2024-03-10 19:36:28
46
	}
345d96c Jakob Wakeling 2024-03-10 19:36:28
47
345d96c Jakob Wakeling 2024-03-10 19:36:28
48
quit:
345d96c Jakob Wakeling 2024-03-10 19:36:28
49
	draw_window_free(&window); return 0;
345d96c Jakob Wakeling 2024-03-10 19:36:28
50
}
51