merge generic_func_idea from git

git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@433 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
IoIxD
2025-10-20 21:55:30 +00:00
parent 65f5942f9d
commit ebc674f403
29 changed files with 499 additions and 234 deletions

View File

@@ -172,25 +172,7 @@ static void mouse_up(MwWidget handle, void* ptr) {
MwForceRender(handle);
}
MwClassRec MwMenuClassRec = {
create, /* create */
destroy, /* destroy */
draw, /* draw */
NULL, /* click */
parent_resize, /* parent_resize */
NULL, /* prop_change */
NULL, /* mouse_move */
mouse_up, /* mouse_up */
mouse_down, /* mouse_down */
NULL, /* key */
NULL,
NULL,
NULL,
NULL,
NULL};
MwClass MwMenuClass = &MwMenuClassRec;
MwMenu MwMenuAdd(MwWidget handle, MwMenu menu, const char* name) {
static MwMenu mwMenuAddImpl(MwWidget handle, MwMenu menu, const char* name) {
MwMenu m = menu == NULL ? handle->internal : menu;
MwMenu new = malloc(sizeof(*new));
new->name = MwStringDupliacte(name);
@@ -204,3 +186,29 @@ MwMenu MwMenuAdd(MwWidget handle, MwMenu menu, const char* name) {
return new;
}
static void func_handler(MwWidget handle, const char* name, void* out, va_list va) {
if(strcmp(name, "mwMenuAdd") == 0) {
MwMenu menu = va_arg(va, MwMenu);
const char* name = va_arg(va, const char*);
*(MwMenu*)out = mwMenuAddImpl(handle, menu, name);
}
}
MwClassRec MwMenuClassRec = {
create, /* create */
destroy, /* destroy */
draw, /* draw */
NULL, /* click */
parent_resize, /* parent_resize */
NULL, /* prop_change */
NULL, /* mouse_move */
mouse_up, /* mouse_up */
mouse_down, /* mouse_down */
NULL, /* key */
func_handler, /* custom */
NULL,
NULL,
NULL,
NULL};
MwClass MwMenuClass = &MwMenuClassRec;