Fix inputs and add methods
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user