Fix inputs and add methods

This commit is contained in:
2026-05-07 13:55:02 +01:00
parent a77f75dcf4
commit 0f693a5de0
12 changed files with 500 additions and 93 deletions
+85 -1
View File
@@ -134,6 +134,16 @@ static mrb_value image_hash(mrb_state *mrb, mrb_value self) {
return mrb_fixnum_value(id);
}
static mrb_value image_width(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_Image(mrb, self);
return mrb_float_value(mrb, window.get_image_size(id).x);
}
static mrb_value image_height(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_Image(mrb, self);
return mrb_float_value(mrb, window.get_image_size(id).y);
}
static void Animation_free(mrb_state *mrb, void *ptr) {
UNUSED(mrb);
uint64_t id = ((Wrapper *)ptr)->id;
@@ -578,6 +588,18 @@ static mrb_value element_text_click_through_set(mrb_state *mrb, mrb_value self)
return mrb_nil_value();
}
static mrb_value element_text_width(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementText(mrb, self);
app::EText *element = (app::EText *)app::element_pool[id];
return mrb_float_value(mrb, element->size(&window).x);
}
static mrb_value element_text_height(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementText(mrb, self);
app::EText *element = (app::EText *)app::element_pool[id];
return mrb_float_value(mrb, element->size(&window).y);
}
static void ElementRect_free(mrb_state *mrb, void *ptr) {
UNUSED(mrb);
uint64_t id = ((Wrapper *)ptr)->id;
@@ -1413,6 +1435,58 @@ static mrb_value app_mouse_position(mrb_state *mrb, mrb_value) {
return result;
}
static mrb_value app_is_down(mrb_state *mrb, mrb_value) {
mrb_sym key_sym;
mrb_get_args(mrb, "n", &key_sym);
std::string key_name = mrb_sym2name(mrb, key_sym);
Key key = get_key(key_name);
return mrb_bool_value(app_->down_keys[key]);
}
static mrb_value app_is_pressed(mrb_state *mrb, mrb_value) {
mrb_sym key_sym;
mrb_get_args(mrb, "n", &key_sym);
std::string key_name = mrb_sym2name(mrb, key_sym);
Key key = get_key(key_name);
for (Key pressed_key : app_->pressed_keys)
if (pressed_key == key)
return mrb_bool_value(true);
return mrb_bool_value(false);
}
static mrb_value app_is_released(mrb_state *mrb, mrb_value) {
mrb_sym key_sym;
mrb_get_args(mrb, "n", &key_sym);
std::string key_name = mrb_sym2name(mrb, key_sym);
Key key = get_key(key_name);
for (Key released_key : app_->released_keys)
if (released_key == key)
return mrb_bool_value(true);
return mrb_bool_value(false);
}
static mrb_value app_map_key(mrb_state *mrb, mrb_value) {
mrb_sym key_sym;
mrb_sym action_sym;
mrb_get_args(mrb, "nn", &key_sym, &action_sym);
std::string key_name = mrb_sym2name(mrb, key_sym);
std::string action_name = mrb_sym2name(mrb, action_sym);
set_action_mapping(action_name, key_name);
return mrb_nil_value();
}
static mrb_value app_scroll(mrb_state *mrb, mrb_value) {
Vec2<float> scroll = app_->scroll;
mrb_value result = mrb_hash_new(mrb);
HASH_SET(result, x, mrb_float_value(mrb, scroll.x));
HASH_SET(result, y, mrb_float_value(mrb, scroll.y));
return result;
}
static mrb_value app_text_input(mrb_state *mrb, mrb_value) {
return mrb_str_new_cstr(mrb, app_->text.c_str());
}
static mrb_value app_exit(mrb_state *, mrb_value) {
app_->exit();
return mrb_nil_value();
@@ -1428,6 +1502,8 @@ inline void setup() {
ADD_METHOD(Image, "==", image_equal, MRB_ARGS_REQ(1));
ADD_METHOD(Image, "eql?", image_equal, MRB_ARGS_REQ(1));
ADD_METHOD(Image, "hash", image_hash, MRB_ARGS_NONE());
ADD_METHOD(Image, "width", image_width, MRB_ARGS_NONE());
ADD_METHOD(Image, "height", image_height, MRB_ARGS_NONE());
DEF_CLASS(Animation, MRB_ARGS_REQ(1) | MRB_ARGS_OPT(1));
ADD_METHOD(Animation, "==", animation_equal, MRB_ARGS_REQ(1));
@@ -1463,6 +1539,8 @@ inline void setup() {
ADD_METHOD(ElementText, "z", element_text_z_get, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "click_through=", element_text_click_through_set, MRB_ARGS_REQ(1));
ADD_METHOD(ElementText, "click_through", element_text_click_through_get, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "width", element_text_width, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "height", element_text_height, MRB_ARGS_NONE());
DEF_CLASS(ElementRect, MRB_ARGS_REQ(3) | MRB_ARGS_OPT(1));
ADD_METHOD(ElementRect, "==", element_rect_equal, MRB_ARGS_REQ(1));
@@ -1527,7 +1605,13 @@ inline void setup() {
ADD_MODULE_METHOD(App, "language=", app_language_set, MRB_ARGS_REQ(1));
ADD_MODULE_METHOD(App, "language", app_language_get, MRB_ARGS_NONE());
ADD_MODULE_METHOD(App, "mouse_position", app_mouse_position, MRB_ARGS_NONE());
ADD_MODULE_METHOD(App, "exit", app_exit, MRB_ARGS_NONE());
ADD_MODULE_METHOD(App, "down?", app_is_down, MRB_ARGS_REQ(1));
ADD_MODULE_METHOD(App, "pressed?", app_is_pressed, MRB_ARGS_REQ(1));
ADD_MODULE_METHOD(App, "released?", app_is_released, MRB_ARGS_REQ(1));
ADD_MODULE_METHOD(App, "map_key", app_map_key, MRB_ARGS_REQ(2));
ADD_MODULE_METHOD(App, "scroll", app_scroll, MRB_ARGS_NONE());
ADD_MODULE_METHOD(App, "text_input", app_text_input, MRB_ARGS_NONE());
ADD_MODULE_METHOD(App, "exit!", app_exit, MRB_ARGS_NONE());
}
} // namespace definitions