From 6c44baff6ceffbd53e0343316974a194a90b7efd Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Sun, 28 Sep 2025 09:27:28 +0000 Subject: [PATCH] things git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@18 b9cfdab3-6d41-4d17-bbe4-086880011989 --- include/Milsko/Core.h | 15 +++++++++------ include/Milsko/TypeDefs.h | 12 ++++++++++++ src/core.c | 28 ++++++++++++++++++++++++++++ src/window.c | 10 ++++++++-- 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/include/Milsko/Core.h b/include/Milsko/Core.h index 3a96596..55a6e38 100644 --- a/include/Milsko/Core.h +++ b/include/Milsko/Core.h @@ -7,12 +7,15 @@ MILSKODECL HMILSKO MilskoCreateWidget(MilskoClass class, HMILSKO parent, int x, int y, unsigned int width, unsigned int height); MILSKODECL void MilskoDestroyWidget(HMILSKO handle); -MILSKODECL void MilskoLoop(HMILSKO handle); -MILSKODECL void MilskoStep(HMILSKO handle); -MILSKODECL int MilskoPending(HMILSKO handle); -MILSKODECL void MilskoSetInteger(HMILSKO handle, const char* key, int n); -MILSKODECL void MilskoSetText(HMILSKO handle, const char* key, const char* value); -MILSKODECL void MilskoApply(HMILSKO handle, ...); +MILSKODECL void MilskoLoop(HMILSKO handle); +MILSKODECL void MilskoStep(HMILSKO handle); +MILSKODECL int MilskoPending(HMILSKO handle); + +MILSKODECL void MilskoSetInteger(HMILSKO handle, const char* key, int n); +MILSKODECL void MilskoSetText(HMILSKO handle, const char* key, const char* value); +MILSKODECL int MilskoGetInteger(HMILSKO handle, const char* key); +MILSKODECL const char* MilskoGetText(HMILSKO handle, const char* key); +MILSKODECL void MilskoApply(HMILSKO handle, ...); #endif diff --git a/include/Milsko/TypeDefs.h b/include/Milsko/TypeDefs.h index 043825a..e093514 100644 --- a/include/Milsko/TypeDefs.h +++ b/include/Milsko/TypeDefs.h @@ -9,6 +9,13 @@ typedef struct _MilskoPoint { int y; } MilskoPoint; +typedef struct _MilskoRect { + int x; + int y; + unsigned int width; + unsigned int height; +} MilskoRect; + typedef struct _MilskoTextKeyValue { char* key; char* value; @@ -40,6 +47,11 @@ typedef void* HMILSKO; #endif typedef struct _MilskoClass { + void* opaque; + void (*create)(HMILSKO handle); + void (*destroy)(HMILSKO handle); + void (*draw)(HMILSKO handle); + void (*click)(HMILSKO handle); } *MilskoClass, MilskoClassRec; #endif diff --git a/src/core.c b/src/core.c index 931ddb0..9749cde 100644 --- a/src/core.c +++ b/src/core.c @@ -3,6 +3,9 @@ #include "stb_ds.h" +#define Dispatch(x, y) \ + if(x->class != NULL && x->class->y != NULL) x->class->y(x) + HMILSKO MilskoCreateWidget(MilskoClass class, HMILSKO parent, int x, int y, unsigned int width, unsigned int height) { HMILSKO h = malloc(sizeof(*h)); @@ -19,12 +22,16 @@ HMILSKO MilskoCreateWidget(MilskoClass class, HMILSKO parent, int x, int y, unsi shdefault(h->text, NULL); shdefault(h->integer, -1); + Dispatch(h, create); + return h; } void MilskoDestroyWidget(HMILSKO handle) { int i; + Dispatch(handle, destroy); + if(handle->children != NULL) { for(i = 0; i < arrlen(handle->children); i++) { if(handle->children[i] == handle) { @@ -105,6 +112,27 @@ void MilskoSetText(HMILSKO handle, const char* key, const char* value) { } } +int MilskoGetInteger(HMILSKO handle, const char* key) { + if(strcmp(key, MilskoNx) == 0 || strcmp(key, MilskoNy) == 0 || strcmp(key, MilskoNwidth) == 0 || strcmp(key, MilskoNheight) == 0) { + int x, y; + unsigned int w, h; + + MilskoLLGetXYWH(handle->lowlevel, &x, &y, &w, &h); + + if(strcmp(key, MilskoNx) == 0) return x; + if(strcmp(key, MilskoNy) == 0) return y; + if(strcmp(key, MilskoNwidth) == 0) return w; + if(strcmp(key, MilskoNheight) == 0) return h; + return -1; + } else { + return shget(handle->integer, key); + } +} + +const char* MilskoGetText(HMILSKO handle, const char* key) { + return shget(handle->text, key); +} + void MilskoApply(HMILSKO handle, ...) { va_list va; char* key; diff --git a/src/window.c b/src/window.c index 940c88d..3a28c26 100644 --- a/src/window.c +++ b/src/window.c @@ -1,5 +1,11 @@ /* $Id$ */ #include -MilskoClassRec MilskoWindowClassRec = {}; -MilskoClass MilskoWindowClass = &MilskoWindowClassRec; +MilskoClassRec MilskoWindowClassRec = { + NULL, /* opaque */ + NULL, /* create */ + NULL, /* destroy */ + NULL, /* draw */ + NULL /* click */ +}; +MilskoClass MilskoWindowClass = &MilskoWindowClassRec;