56ca8a685513b46c8585bca4b3e30a31d1d2b350
[windtk] / src / windtk.h
1 #ifndef WINDTK_H_
2 #define WINDTK_H_
3
4 enum {
5         WT_TYPE_WIDGET,
6         WT_TYPE_WINDOW,
7         WT_TYPE_LABEL,
8         WT_TYPE_BUTTON,
9         WT_TYPE_CHECKBOX,
10         WT_TYPE_TEXTFIELD
11 };
12
13 enum {
14         WT_KEY_UP = 0x100,
15         WT_KEY_DOWN,
16         WT_KEY_LEFT,
17         WT_KEY_RIGHT,
18         WT_KEY_HOME,
19         WT_KEY_END,
20         WT_KEY_PGUP,
21         WT_KEY_PGDN
22 };
23
24 enum {
25         WT_WS_DEFAULT,
26         WT_WS_NOFRM
27 };
28
29 enum {
30         WT_CB_FOCUS,
31         WT_CB_UNFOCUS,
32         WT_CB_MODIFY,
33         WT_CB_CLICK,
34         WT_CB_MBUTTON,
35         WT_CB_MMOTION,
36
37         WT_NUM_CALLBACKS
38 };
39
40 typedef struct wt_widget wt_widget;
41 typedef void (*wt_callback_func)(wt_widget*, void*);
42
43 struct wt_image {
44         int width, height;
45         int bpp;
46         int pitch;
47         void *pixels;
48         void *udata;
49 };
50
51 struct wt_rect {
52         int x, y, width, height;
53 };
54
55 struct wt_graphics {
56         int (*newcolor)(int r, int g, int b);
57         void (*color)(int c);
58
59         void (*fillrect)(struct wt_rect *rect);
60         void (*line)(int x0, int y0, int x1, int y1);
61
62         int (*newimage)(struct wt_image *img);
63         void (*blit)(int img, int x, int y, int w, int h);
64
65         void (*text)(int font, const char *s, int x, int y);
66         void (*textbox)(int font, const char *s, int x, int y, struct wt_rect *boxret);
67         int (*lineheight)(int font);
68         int (*baseline)(int font);
69 };
70
71 void wt_allocator(void *(*allocfunc)(size_t), void (*freefunc)(void*));
72
73 int wt_init(int w, int h, struct wt_graphics *gfx);
74 void wt_destroy(void);
75
76 void wt_viewport(int x, int y, int w, int h);
77 void wt_graphics(struct wt_graphics *gfx);
78
79 void wt_inp_key(int key, int press);
80 void wt_inp_mouse(int bn, int st, int x, int y);
81 void wt_inp_motion(int x, int y);
82
83 wt_widget *wt_alloc_widget(wt_widget *par);
84 void wt_free_widget(wt_widget *w);
85 void wt_free_tree(wt_widget *tree);
86
87 wt_widget *wt_window(wt_widget *par, const char *title, int style, int x, int y, int width, int height);
88 wt_widget *wt_label(wt_widget *par, const char *text, int x, int y);
89 wt_widget *wt_button(wt_widget *par, const char *text, int x, int y, int width, int height);
90 wt_widget *wt_button_cb(wt_widget *par, const char *text, int x, int y, int width,
91                 int height,     wt_callback_func cbclick, void *cls);
92 wt_widget *wt_checkbox(wt_widget *par, const char *text, int chk, int x, int y, int width, int height);
93 wt_widget *wt_checkbox_cb(wt_widget *par, const char *text, int chk, int x, int y,
94                 int width, int height, wt_callback_func cbtoggle, void *cls);
95 wt_widget *wt_textfield(wt_widget *par, const char *text, int x, int y, int width, int height);
96
97 int wt_type(wt_widget *w);
98
99 int wt_set_text(wt_widget *w, const char *text);
100 const char *wt_text(wt_widget *w);
101
102 int wt_add_child(wt_widget *w, wt_widget *c);
103 int wt_remove_child(wt_widget *w, wt_widget *c);
104 wt_widget *wt_parent(wt_widget *w);                     /* parent widget */
105 wt_widget *wt_widget_window(wt_widget *w);      /* first ancestor of type window */
106 int wt_child_count(wt_widget *w);                       /* number of children */
107 wt_widget *wt_child(wt_widget *w, int idx);     /* get child idx */
108
109 void wt_move(wt_widget *w, int x, int y);
110 void wt_resize(wt_widget *w, int x, int y);
111 int *wt_position(wt_widget *w, int *xret, int *yret);
112 int *wt_size(wt_widget *w, int *xret, int *yret);
113
114 void wt_layout(wt_widget *w, int layout);
115 void wt_padding(wt_widget *w, int pad);
116 /* calculates layout of child widgets and updates dimensions */
117 void wt_relayout(wt_widget *w);
118
119 int wt_hittest(wt_widget *w, int x, int y);
120 wt_widget *wt_widget_at(int x, int y);
121
122 void wt_focus(wt_widget *w);
123 void wt_unfocus(wt_widget *w);
124 int wt_isfocused(wt_widget *w);
125
126 void wt_hover(wt_widget *w);
127 void wt_unhover(wt_widget *w);
128 int wt_ishover(wt_widget *w);
129
130 void wt_enable(wt_widget *w);
131 void wt_disable(wt_widget *w);
132 int wt_isenabled(wt_widget *w);
133
134 void wt_callback(wt_widget *w, int type, wt_callback_func func, void *cls);
135
136 void wt_setrect(struct wt_rect *r, int x, int y, int w, int h);
137
138 #endif  /* WINDTK_H_ */