JS: Support all builtin icons in new gui/icon module

This commit is contained in:
Willy-JL
2025-02-20 03:19:43 +00:00
parent 72281d9666
commit 1a4a940b74
2 changed files with 7 additions and 19 deletions

View File

@@ -1,28 +1,16 @@
#include "../../js_modules.h" #include "../../js_modules.h"
#include <assets_icons.h> #include <assets_icons.h>
typedef struct {
const char* name;
const Icon* data;
} IconDefinition;
#define ICON_DEF(icon) \
(IconDefinition) { \
.name = #icon, .data = &I_##icon \
}
static const IconDefinition builtin_icons[] = {
ICON_DEF(DolphinWait_59x54),
ICON_DEF(js_script_10px),
};
static void js_gui_icon_get_builtin(struct mjs* mjs) { static void js_gui_icon_get_builtin(struct mjs* mjs) {
const char* icon_name; const char* icon_name;
JS_FETCH_ARGS_OR_RETURN(mjs, JS_EXACTLY, JS_ARG_STR(&icon_name)); JS_FETCH_ARGS_OR_RETURN(mjs, JS_EXACTLY, JS_ARG_STR(&icon_name));
for(size_t i = 0; i < COUNT_OF(builtin_icons); i++) { for(size_t i = 0; i < ICON_PATHS_COUNT; i++) {
if(strcmp(icon_name, builtin_icons[i].name) == 0) { if(ICON_PATHS[i].path == NULL) continue;
mjs_return(mjs, mjs_mk_foreign(mjs, (void*)builtin_icons[i].data)); const char* iter_name = strrchr(ICON_PATHS[i].path, '/');
if(iter_name++ == NULL) continue;
if(strcmp(icon_name, iter_name) == 0) {
mjs_return(mjs, mjs_mk_foreign(mjs, (void*)ICON_PATHS[i].icon));
return; return;
} }
} }

View File

@@ -1,4 +1,4 @@
export type BuiltinIcon = "DolphinWait_59x54" | "js_script_10px"; export type BuiltinIcon = string;
export type IconData = symbol & { "__tag__": "icon" }; export type IconData = symbol & { "__tag__": "icon" };
// introducing a nominal type in a hacky way; the `__tag__` property doesn't really exist. // introducing a nominal type in a hacky way; the `__tag__` property doesn't really exist.