aboutsummaryrefslogtreecommitdiff
path: root/src/window.h
blob: c185b6fa7f5a02ed0d295a1fc09a1d52fb42c418 (plain)
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