#ifndef KOLIBRI_KMENU_H #define KOLIBRI_KMENU_H #define KMENUITEM_NORMAL 0 #define KMENUITEM_SUBMENU 1 #define KMENUITEM_SEPARATOR 2 #define KMENUITEM_MAINMENU 0x80000000 #define KMENUITEM_SEPARATOR_WIDTH 10//170 #define KMENUITEM_SEPARATOR_HEIGHT 2 #define KMENU_LBORDER_SIZE 2 #define KMENU_DBORDER_SIZE 1 typedef struct { int type; uint32_t color; union { uint32_t bgcolor; void *buffer; }; } t_font; typedef struct __attribute__ ((__packed__)) { uint16_t left, top, right, bottom; } t_rect; typedef struct kmenuitem_t{ int type; char *text; union { void *submenu; //kmenuitem_callback_t callback; size_t btnid; }; void (*paint)(struct kmenuitem_t *item, t_rect *rc) __attribute__((__stdcall__)); int is_focused; int is_enabled; int is_visible; size_t style; int font_width, font_height; t_font font; size_t left, top; size_t width, height, pref_width, pref_height; size_t margin_left, margin_right, margin_top, margin_bottom; size_t padding_left, padding_right, padding_top, padding_bottom; } kmenuitem_t; typedef struct ksubmenu_t{ kmenuitem_t **items; int count; void (*paint)(struct ksubmenu_t *menu) __attribute__((__stdcall__)); int is_opened; int focus_idx; size_t width, height; size_t left, top; int tid; int parent_wnd, parent_tid, submenu_tid, self_wnd; int level; size_t return_btnid; int set_new_padding, set_new_margin; t_rect items_padding; t_rect items_margin; struct ksubmenu_t *parent; } ksubmenu_t; typedef struct { kmenuitem_t **submenu; int count; size_t width, height; size_t left, top; int line_height; int focus_idx; int submenu_tid; } kmenu_t; extern int kolibri_kmenu_init(void); extern void (*kmainmenu_draw)(ksubmenu_t *) __attribute__((__stdcall__)); extern void (*kmainmenu_dispatch_cursorevent)(ksubmenu_t *) __attribute__((__stdcall__)); extern void (*kmenu_init)(void *) __attribute__((__stdcall__)); extern ksubmenu_t* (*ksubmenu_new)() __attribute__((__stdcall__)); extern void (*ksubmenu_add)(ksubmenu_t *, kmenuitem_t *) __attribute__((__stdcall__)); extern kmenuitem_t* (*kmenuitem_new)(uint32_t, const char *, uint32_t) __attribute__((__stdcall__)); extern kmenuitem_t* (*kmenuitem__submenu_new)(uint32_t, const char *, ksubmenu_t *) __attribute__((__stdcall__)); #endif /* KOLIBRI_KMENU_H */