#include "../src/draw.h" int main() { draw_debug = true; draw_window *window; int32_t w = 800, h = 600; if (draw_window_init(&window, w, h, "Draw", 0) == -1) { return -1; } bool left = false, right = false; uint32_t colour = 0xffff0000; draw_buffer *buf = draw_buffer_init(w, h); draw_buffer_clear(buf, 0xff000000); for (draw_event e; (e = draw_window_event(window)).kind != DRAW_EVENT_EXIT;) switch (e.kind) { case DRAW_EVENT_KEY: { if (e.key.code == DRAW_KEY_1) { colour = 0xffff0000; } if (e.key.code == DRAW_KEY_2) { colour = 0xff00ff00; } if (e.key.code == DRAW_KEY_3) { colour = 0xff0000ff; } } break; case DRAW_EVENT_MOUSE: { if (e.mouse.button == DRAW_MOUSE_LEFT) { if (e.mouse.direction == DRAW_PRESS) { left = true; } if (e.mouse.direction == DRAW_RELEASE) { left = false; } } else if (e.mouse.button == DRAW_MOUSE_RIGHT) { if (e.mouse.direction == DRAW_PRESS) { right = true; } if (e.mouse.direction == DRAW_RELEASE) { right = false; } } if (left) { draw_buffer_circle(buf, (point){e.mouse.x, e.mouse.y}, 6, colour, true); } if (right) { draw_buffer_circle(buf, (point){e.mouse.x, e.mouse.y}, 6, 0xff000000, true); } if (left || right) { goto redraw; } } break; case DRAW_EVENT_PAINT: redraw: { draw_window_draw(window, (point){0, 0}, buf, buf->bounds); } break; case DRAW_EVENT_RESIZE: { w = e.resize.w; h = e.resize.h; draw_buffer *old = buf; buf = draw_buffer_init(w, h); draw_buffer_clear(buf, 0xff000000); draw_buffer_copy(buf, old, (point){0, 0}, old->bounds); draw_buffer_free(&old); } break; default: { /* ignore */ } break; } quit: draw_window_free(&window); return 0; }