gui stuff
[retroray] / src / rtk.h
1 #ifndef RTK_H_
2 #define RTK_H_
3
4 /* widget type */
5 enum { RTK_ANY, RTK_WIN, RTK_BUTTON, RTK_LABEL, RTK_CHECKBOX, RTK_SLIDER };
6 /* window layout */
7 enum { RTK_NONE, RTK_VBOX, RTK_HBOX };
8
9 typedef union rtk_widget rtk_widget;
10 typedef struct rtk_icon rtk_icon;
11 typedef struct rtk_iconsheet rtk_iconsheet;
12
13 typedef struct rtk_rect {
14         int x, y, width, height;
15 } rtk_rect;
16
17 typedef struct rtk_draw_ops {
18         void (*fill)(rtk_rect *rect, uint32_t color);
19         void (*blit)(int x, int y, rtk_icon *icon);
20         void (*drawtext)(int x, int y, const char *str);
21         void (*textrect)(const char *str, rtk_rect *rect);
22 } rtk_draw_ops;
23
24 typedef void (*rtk_callback)(rtk_widget*, void*);
25
26 /* global state */
27 void rtk_setup(rtk_draw_ops *drawop);
28
29 /* widget functions */
30
31 rtk_widget *rtk_create_widget(void);
32 void rtk_free_widget(rtk_widget *w);
33
34 int rtk_type(rtk_widget *w);
35
36 void rtk_move(rtk_widget *w, int x, int y);
37 void rtk_pos(rtk_widget *w, int *xptr, int *yptr);
38 void rtk_resize(rtk_widget *w, int xsz, int ysz);
39 void rtk_size(rtk_widget *w, int *xptr, int *yptr);
40
41 int rtk_set_text(rtk_widget *w, const char *str);
42 const char *rtk_get_text(rtk_widget *w);
43
44 void rtk_set_value(rtk_widget *w, int val);
45 int rtk_get_value(rtk_widget *w);
46
47 void rtk_set_callback(rtk_widget *w, rtk_callback cbfunc, void *cls);
48
49 /* window functions */
50 void rtk_win_layout(rtk_widget *w, int layout);
51 void rtk_win_clear(rtk_widget *w);
52 void rtk_win_add(rtk_widget *par, rtk_widget *child);
53 void rtk_win_rm(rtk_widget *par, rtk_widget *child);
54 int rtk_win_has(rtk_widget *par, rtk_widget *child);
55
56 /* button functions */
57 void rtk_bn_set_icon(rtk_widget *w, rtk_icon *icon);
58 rtk_icon *rtk_bn_get_icon(rtk_widget *w);
59
60 rtk_widget *rtk_create_window(rtk_widget *par, const char *title, int x, int y, int w, int h);
61 rtk_widget *rtk_create_button(rtk_widget *par, const char *str, rtk_callback cbfunc);
62 rtk_widget *rtk_create_iconbutton(rtk_widget *par, rtk_icon *icon, rtk_callback cbfunc);
63 rtk_widget *rtk_create_label(rtk_widget *par, const char *text);
64 rtk_widget *rtk_create_checkbox(rtk_widget *par, const char *text, int chk, rtk_callback cbfunc);
65
66 /* icon functions */
67 rtk_iconsheet *rtk_load_iconsheet(const char *fname);
68 void rtk_free_iconsheet(rtk_iconsheet *is);
69
70 rtk_icon *rtk_define_icon(rtk_iconsheet *is, const char *name, int x, int y, int w, int h);
71
72
73 void rtk_draw_widget(rtk_widget *w);
74
75
76 #endif  /* RTK_H_ */