Files
armorpaint/paint/sources/plugin.c
T
2026-03-10 21:00:00 +01:00

39 lines
910 B
C

#include "global.h"
plugin_t *plugin_create() {
plugin_t *p = GC_ALLOC_INIT(plugin_t, {0});
p->name = string_copy(_plugin_name);
any_map_set(plugin_map, p->name, p);
return p;
}
void plugin_start(char *plugin) {
buffer_t *blob = data_get_blob(string("plugins/%s", plugin));
gc_unroot(_plugin_name);
_plugin_name = string_copy(plugin);
gc_root(_plugin_name);
js_eval(string("(1, eval)(`%s`)", sys_buffer_to_string(blob)));
data_delete_blob(string("plugins/%s", plugin));
}
void plugin_stop(char *plugin) {
plugin_t *p = any_map_get(plugin_map, plugin);
if (p->on_delete != NULL) {
js_call(p->on_delete);
}
map_delete(plugin_map, plugin);
}
void plugin_notify_on_ui(plugin_t *plugin, void *f) {
plugin->on_ui = f;
}
void plugin_notify_on_update(plugin_t *plugin, void *f) {
plugin->on_update = f;
}
void plugin_notify_on_delete(plugin_t *plugin, void *f) {
plugin->on_delete = f;
}