chore: split monolithic header to proper program files, add vec2 ruby class to proxy element position etc., other cleanup
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#include "app/app.h"
|
||||
#include "bindings/definitions.h"
|
||||
|
||||
namespace {
|
||||
void Params_free(mrb_state *mrb, void *ptr) {
|
||||
UNUSED(mrb);
|
||||
uint64_t id = ((Wrapper *)ptr)->id;
|
||||
app::element_pool.release(id);
|
||||
delete (Wrapper *)ptr;
|
||||
}
|
||||
|
||||
const struct mrb_data_type Params_type = {"Params", Params_free};
|
||||
|
||||
mrb_value Params_init(mrb_state *mrb, mrb_value self) {
|
||||
Wrapper *old = (Wrapper *)DATA_PTR(self);
|
||||
if (old)
|
||||
mrb_free(mrb, old);
|
||||
mrb_data_init(self, nullptr, &Params_type);
|
||||
Wrapper *s = new Wrapper();
|
||||
|
||||
mrb_int id;
|
||||
mrb_get_args(mrb, "z", &id);
|
||||
|
||||
app::element_pool.use(id);
|
||||
s->id = id;
|
||||
|
||||
mrb_data_init(self, s, &Params_type);
|
||||
return self;
|
||||
}
|
||||
|
||||
mrb_value params_get(mrb_state *mrb, mrb_value self) {
|
||||
mrb_sym key;
|
||||
mrb_get_args(mrb, "n", &key);
|
||||
|
||||
uint64_t id = ((Wrapper *)DATA_PTR(self))->id;
|
||||
app::element_pool.use(id);
|
||||
app::EText *element = (app::EText *)app::element_pool[id];
|
||||
|
||||
auto it = element->params.find(mrb_sym2name(mrb, key));
|
||||
if (it == element->params.end())
|
||||
return mrb_nil_value();
|
||||
return mrb_str_new_cstr(mrb, it->second.c_str());
|
||||
}
|
||||
|
||||
mrb_value params_set(mrb_state *mrb, mrb_value self) {
|
||||
mrb_sym key;
|
||||
mrb_value value;
|
||||
mrb_get_args(mrb, "no", &key, &value);
|
||||
|
||||
uint64_t id = ((Wrapper *)DATA_PTR(self))->id;
|
||||
app::element_pool.use(id);
|
||||
app::EText *element = (app::EText *)app::element_pool[id];
|
||||
|
||||
element->params[mrb_sym2name(mrb, key)] = mrb_str_to_cstr(mrb, mrb_obj_as_string(mrb, value));
|
||||
element->reload_text();
|
||||
|
||||
return mrb_nil_value();
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace definitions {
|
||||
void register_params() {
|
||||
DEF_CLASS(Params, MRB_ARGS_REQ(1));
|
||||
ADD_METHOD(Params, "[]", params_get, MRB_ARGS_REQ(1));
|
||||
ADD_METHOD(Params, "[]=", params_set, MRB_ARGS_REQ(2));
|
||||
bindings.Params = {Params_class, &Params_type};
|
||||
}
|
||||
} // namespace definitions
|
||||
Reference in New Issue
Block a user