From 431e1d6dec7c37bc2f829c422998ccf538eb0324 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Sun, 28 Sep 2025 22:29:05 +0000 Subject: [PATCH] va git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@34 b9cfdab3-6d41-4d17-bbe4-086880011989 --- example.c | 8 ++------ include/Milsko/Core.h | 5 ++++- src/core.c | 31 ++++++++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/example.c b/example.c index 1227a7a..03f34cb 100644 --- a/example.c +++ b/example.c @@ -7,14 +7,10 @@ void handler(MilskoWidget handle){ } int main(){ - MilskoWidget window = MilskoCreateWidget(MilskoWindowClass, "main", NULL, 0, 0, 400, 400); - MilskoWidget button = MilskoCreateWidget(MilskoButtonClass, "button", window, 50, 50, 300, 300); - - MilskoApply(window, + MilskoWidget window = MilskoVaCreateWidget(MilskoWindowClass, "main", NULL, 0, 0, 400, 400, MilskoNtitle, "hello world", NULL); - - MilskoApply(button, + MilskoWidget button = MilskoVaCreateWidget(MilskoButtonClass, "button", window, 50, 50, 300, 300, MilskoNactivateHandler, handler, NULL); diff --git a/include/Milsko/Core.h b/include/Milsko/Core.h index 5409830..479ff5c 100644 --- a/include/Milsko/Core.h +++ b/include/Milsko/Core.h @@ -9,6 +9,8 @@ if(x->class != NULL && x->class->y != NULL) x->class->y(x) MILSKODECL MilskoWidget MilskoCreateWidget(MilskoClass class, const char* name, MilskoWidget parent, int x, int y, unsigned int width, unsigned int height); +MILSKODECL MilskoWidget MilskoVaCreateWidget(MilskoClass class, const char* name, MilskoWidget parent, int x, int y, unsigned int width, unsigned int height, ...); +MILSKODECL MilskoWidget MilskoVaListCreateWidget(MilskoClass class, const char* name, MilskoWidget parent, int x, int y, unsigned int width, unsigned int height, va_list va); MILSKODECL void MilskoDestroyWidget(MilskoWidget handle); MILSKODECL void MilskoLoop(MilskoWidget handle); @@ -23,6 +25,7 @@ MILSKODECL const char* MilskoGetText(MilskoWidget handle, const char* key); MILSKODECL MilskoHandler MilskoGetHandler(MilskoWidget handle, const char* key); MILSKODECL void MilskoDispatchHandler(MilskoWidget handle, const char* key); MILSKODECL void MilskoSetDefault(MilskoWidget handle); -MILSKODECL void MilskoApply(MilskoWidget handle, ...); +MILSKODECL void MilskoVaApply(MilskoWidget handle, ...); +MILSKODECL void MilskoVaListApply(MilskoWidget handle, va_list va); #endif diff --git a/src/core.c b/src/core.c index f7e221d..baabd51 100644 --- a/src/core.c +++ b/src/core.c @@ -51,6 +51,26 @@ MilskoWidget MilskoCreateWidget(MilskoClass class, const char* name, MilskoWidge return h; } +MilskoWidget MilskoVaCreateWidget(MilskoClass class, const char* name, MilskoWidget parent, int x, int y, unsigned int width, unsigned int height, ...) { + MilskoWidget h; + va_list va; + + va_start(va, height); + h = MilskoVaListCreateWidget(class, name, parent, x, y, width, height, va); + va_end(va); + + return h; +} + +MilskoWidget MilskoVaListCreateWidget(MilskoClass class, const char* name, MilskoWidget parent, int x, int y, unsigned int width, unsigned int height, va_list va) { + MilskoWidget h; + + h = MilskoCreateWidget(class, name, parent, x, y, width, height); + MilskoVaListApply(h, va); + + return h; +} + void MilskoDestroyWidget(MilskoWidget handle) { int i; @@ -171,11 +191,17 @@ MilskoHandler MilskoGetHandler(MilskoWidget handle, const char* key) { return shget(handle->handler, key); } -void MilskoApply(MilskoWidget handle, ...) { +void MilskoVaApply(MilskoWidget handle, ...) { va_list va; - char* key; va_start(va, handle); + MilskoVaListApply(handle, va); + va_end(va); +} + +void MilskoVaListApply(MilskoWidget handle, va_list va) { + char* key; + while((key = va_arg(va, char*)) != NULL) { if(key[0] == 'I') { int n = va_arg(va, int); @@ -188,7 +214,6 @@ void MilskoApply(MilskoWidget handle, ...) { MilskoSetHandler(handle, key, h); } } - va_end(va); } void MilskoSetDefault(MilskoWidget handle) {