Remove element script and allow images to be pixel updated for similar behaviour

This commit is contained in:
2026-06-05 11:00:15 +01:00
parent e7418fde08
commit 419e95ac89
9 changed files with 177 additions and 518 deletions
+43 -4
View File
@@ -18,6 +18,21 @@ mrb_value Image_init(mrb_state *mrb, mrb_value self) {
mrb_data_init(self, nullptr, &Image_type);
Wrapper *s = new Wrapper();
mrb_float width, height;
mrb_value kwargs;
mrb_get_args(mrb, "ff|H", &width, &height, &kwargs);
bool pixel_art = false;
if (!mrb_nil_p(kwargs))
HASH_BOOL(kwargs, pixel_art, pixel_art);
s->id = window.create_image({(float)width, (float)height}, pixel_art);
mrb_data_init(self, s, &Image_type);
return self;
}
mrb_value image_load(mrb_state *mrb, mrb_value) {
char *path;
mrb_value kwargs;
mrb_get_args(mrb, "z|H", &path, &kwargs);
@@ -26,10 +41,9 @@ mrb_value Image_init(mrb_state *mrb, mrb_value self) {
if (!mrb_nil_p(kwargs))
HASH_BOOL(kwargs, pixel_art, pixel_art);
s->id = window.load_image(path, pixel_art);
uint64_t id = window.load_image(path, pixel_art);
mrb_data_init(self, s, &Image_type);
return self;
return definitions::wrap(definitions::bindings.Image, id);
}
mrb_value image_equal(mrb_state *mrb, mrb_value self) {
@@ -63,16 +77,41 @@ mrb_value image_height(mrb_state *mrb, mrb_value self) {
uint64_t id = wrapper->id;
return mrb_float_value(mrb, window.get_image_size(id).y);
}
mrb_value image_update(mrb_state *mrb, mrb_value self) {
Wrapper *wrapper = (Wrapper *)DATA_PTR(self);
uint64_t id = wrapper->id;
mrb_float x, y, width, height;
char *new_content;
mrb_int length;
mrb_get_args(mrb, "ffffs", &x, &y, &width, &height, &new_content, &length);
bool success = window.update_image(
id,
Rect::from(
{(float)x, (float)y},
{(float)width, (float)height}
),
new_content,
(uint32_t)length
);
return mrb_bool_value(success);
}
} // namespace
namespace definitions {
void register_image() {
DEF_CLASS(Image, MRB_ARGS_REQ(1) | MRB_ARGS_OPT(1));
DEF_CLASS(Image, MRB_ARGS_REQ(2) | MRB_ARGS_OPT(1));
ADD_CLASS_METHOD(Image, "load", image_load, MRB_ARGS_REQ(2) | MRB_ARGS_OPT(1));
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());
ADD_METHOD(Image, "update", image_update, MRB_ARGS_REQ(5));
bindings.Image = {Image_class, &Image_type};
}
} // namespace definitions