mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
[FL-3925, FL-3942, FL-3944] JS features & bugfixes (SDK 0.2) (#4075)
* feat: JS GPIO PWM, JS GUI Widget view; fix: JS EvtLoop stop on request, JS EvtLoop stop on error * fix: f18 build * docs: widget * fix: js unit test * change feature naming Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
61
applications/system/js_app/modules/js_gui/icon.c
Normal file
61
applications/system/js_app/modules/js_gui/icon.c
Normal file
@@ -0,0 +1,61 @@
|
||||
#include "../../js_modules.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) {
|
||||
const char* 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++) {
|
||||
if(strcmp(icon_name, builtin_icons[i].name) == 0) {
|
||||
mjs_return(mjs, mjs_mk_foreign(mjs, (void*)builtin_icons[i].data));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
JS_ERROR_AND_RETURN(mjs, MJS_BAD_ARGS_ERROR, "no such built-in icon");
|
||||
}
|
||||
|
||||
static void* js_gui_icon_create(struct mjs* mjs, mjs_val_t* object, JsModules* modules) {
|
||||
UNUSED(modules);
|
||||
*object = mjs_mk_object(mjs);
|
||||
JS_ASSIGN_MULTI(mjs, *object) {
|
||||
JS_FIELD("getBuiltin", MJS_MK_FN(js_gui_icon_get_builtin));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void js_gui_icon_destroy(void* inst) {
|
||||
UNUSED(inst);
|
||||
}
|
||||
|
||||
static const JsModuleDescriptor js_gui_icon_desc = {
|
||||
"gui__icon",
|
||||
js_gui_icon_create,
|
||||
js_gui_icon_destroy,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const FlipperAppPluginDescriptor plugin_descriptor = {
|
||||
.appid = PLUGIN_APP_ID,
|
||||
.ep_api_version = PLUGIN_API_VERSION,
|
||||
.entry_point = &js_gui_icon_desc,
|
||||
};
|
||||
|
||||
const FlipperAppPluginDescriptor* js_gui_icon_ep(void) {
|
||||
return &plugin_descriptor;
|
||||
}
|
||||
Reference in New Issue
Block a user