1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#ifndef IMV_WINDOW_H
#define IMV_WINDOW_H
#include <stdbool.h>
struct imv_window;
enum imv_event_type {
IMV_EVENT_CLOSE,
IMV_EVENT_RESIZE,
IMV_EVENT_KEYBOARD,
IMV_EVENT_MOUSE_MOTION,
IMV_EVENT_MOUSE_BUTTON,
IMV_EVENT_MOUSE_SCROLL,
IMV_EVENT_CUSTOM
};
struct imv_event {
enum imv_event_type type;
union {
struct {
int width;
int height;
int buffer_width;
int buffer_height;
} resize;
struct {
int scancode;
bool pressed;
} keyboard;
struct {
double x, y, dx, dy;
} mouse_motion;
struct {
int button;
bool pressed;
} mouse_button;
struct {
double dx, dy;
} mouse_scroll;
void *custom;
} data;
};
struct imv_window *imv_window_create(int w, int h, const char *title);
void imv_window_free(struct imv_window *window);
void imv_window_clear(struct imv_window *window, unsigned char r,
unsigned char g, unsigned char b);
void imv_window_get_size(struct imv_window *window, int *w, int *h);
void imv_window_get_framebuffer_size(struct imv_window *window, int *w, int *h);
void imv_window_set_title(struct imv_window *window, const char *title);
bool imv_window_is_fullscreen(struct imv_window *window);
void imv_window_set_fullscreen(struct imv_window *window, bool fullscreen);
bool imv_window_get_mouse_button(struct imv_window *window, int button);
void imv_window_get_mouse_position(struct imv_window *window, double *x, double *y);
void imv_window_present(struct imv_window *window);
void imv_window_wait_for_event(struct imv_window *window, double timeout);
void imv_window_push_event(struct imv_window *window, struct imv_event *e);
typedef void (*imv_event_handler)(void *data, const struct imv_event *e);
void imv_window_pump_events(struct imv_window *window, imv_event_handler handler, void *data);
#endif
|