mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-08-25 08:13:44 +02:00
Implement flashable and viewport element bindings for libretro builds
This commit is contained in:
parent
eb9a5a467e
commit
7d557354da
5 changed files with 101 additions and 1 deletions
|
@ -61,6 +61,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
GFX_LOCK
|
||||
plane = new Plane(viewport);
|
||||
SANDBOX_AWAIT(rb_iv_set, self, "viewport", viewport_obj);
|
||||
|
||||
set_private_data(self, plane);
|
||||
|
||||
|
@ -101,6 +102,25 @@ namespace mkxp_sandbox {
|
|||
return plane == NULL || plane->isDisposed() ? SANDBOX_TRUE : SANDBOX_FALSE;
|
||||
}
|
||||
|
||||
static VALUE get_viewport(VALUE self) {
|
||||
return sb()->bind<struct rb_iv_get>()()(self, "viewport");
|
||||
}
|
||||
|
||||
static VALUE set_viewport(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_GUARD_EXC(get_private_data<Plane>(self)->setViewport(get_private_data<Viewport>(value)));
|
||||
SANDBOX_AWAIT(rb_iv_set, self, "viewport", value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE get_bitmap(VALUE self) {
|
||||
return sb()->bind<struct rb_iv_get>()()(self, "bitmap");
|
||||
}
|
||||
|
@ -322,6 +342,8 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, klass, "initialize", (VALUE (*)(ANYARGS))initialize, -1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "dispose", (VALUE (*)(ANYARGS))dispose, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "disposed?", (VALUE (*)(ANYARGS))disposed, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "viewport", (VALUE (*)(ANYARGS))get_viewport, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "viewport=", (VALUE (*)(ANYARGS))set_viewport, 1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "bitmap", (VALUE (*)(ANYARGS))get_bitmap, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "bitmap=", (VALUE (*)(ANYARGS))set_bitmap, 1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "color", (VALUE (*)(ANYARGS))get_color, 0);
|
||||
|
|
|
@ -102,6 +102,23 @@ namespace mkxp_sandbox {
|
|||
return sprite == NULL || sprite->isDisposed() ? SANDBOX_TRUE : SANDBOX_FALSE;
|
||||
}
|
||||
|
||||
static VALUE flash(VALUE self, VALUE obj, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
int duration;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE obj, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_AND_SET(duration, rb_num2int, value);
|
||||
get_private_data<Sprite>(self)->flash(obj == SANDBOX_NIL ? NULL : &get_private_data<Color>(obj)->norm, duration);
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
|
||||
return sb()->bind<struct coro>()()(self, obj, value);
|
||||
}
|
||||
|
||||
static VALUE update(VALUE self) {
|
||||
GFX_LOCK;
|
||||
get_private_data<Sprite>(self)->update();
|
||||
|
@ -109,6 +126,25 @@ namespace mkxp_sandbox {
|
|||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
static VALUE get_viewport(VALUE self) {
|
||||
return sb()->bind<struct rb_iv_get>()()(self, "viewport");
|
||||
}
|
||||
|
||||
static VALUE set_viewport(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_GUARD_EXC(get_private_data<Sprite>(self)->setViewport(get_private_data<Viewport>(value)));
|
||||
SANDBOX_AWAIT(rb_iv_set, self, "viewport", value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE get_bitmap(VALUE self) {
|
||||
return sb()->bind<struct rb_iv_get>()()(self, "bitmap");
|
||||
}
|
||||
|
@ -462,7 +498,10 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, klass, "initialize", (VALUE (*)(ANYARGS))initialize, -1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "dispose", (VALUE (*)(ANYARGS))dispose, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "disposed?", (VALUE (*)(ANYARGS))disposed, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "flash", (VALUE (*)(ANYARGS))update, 2);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "update", (VALUE (*)(ANYARGS))update, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "viewport", (VALUE (*)(ANYARGS))get_viewport, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "viewport=", (VALUE (*)(ANYARGS))set_viewport, 1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "bitmap", (VALUE (*)(ANYARGS))get_bitmap, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "bitmap=", (VALUE (*)(ANYARGS))set_bitmap, 1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "src_rect", (VALUE (*)(ANYARGS))get_src_rect, 0);
|
||||
|
|
|
@ -104,6 +104,23 @@ namespace mkxp_sandbox {
|
|||
return viewport == NULL || viewport->isDisposed() ? SANDBOX_TRUE : SANDBOX_FALSE;
|
||||
}
|
||||
|
||||
static VALUE flash(VALUE self, VALUE obj, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
int duration;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE obj, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_AND_SET(duration, rb_num2int, value);
|
||||
get_private_data<Viewport>(self)->flash(obj == SANDBOX_NIL ? NULL : &get_private_data<Color>(obj)->norm, duration);
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
|
||||
return sb()->bind<struct coro>()()(self, obj, value);
|
||||
}
|
||||
|
||||
static VALUE update(VALUE self) {
|
||||
GFX_LOCK;
|
||||
get_private_data<Viewport>(self)->update();
|
||||
|
@ -238,6 +255,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, klass, "initialize", (VALUE (*)(ANYARGS))initialize, -1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "dispose", (VALUE (*)(ANYARGS))dispose, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "disposed?", (VALUE (*)(ANYARGS))disposed, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "flash", (VALUE (*)(ANYARGS))update, 2);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "update", (VALUE (*)(ANYARGS))update, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "rect", (VALUE (*)(ANYARGS))get_rect, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "rect=", (VALUE (*)(ANYARGS))set_rect, 1);
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
#define WASM_PAGE_SIZE ((uint64_t)65536U)
|
||||
|
||||
#define WASM_MIN_PAGES ((uint32_t)1536U)
|
||||
#define WASM_MIN_PAGES ((uint32_t)2048U)
|
||||
|
||||
extern "C" bool wasm_rt_is_initialized(void) {
|
||||
return true;
|
||||
|
|
|
@ -106,6 +106,25 @@ namespace mkxp_sandbox {
|
|||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
static VALUE get_viewport(VALUE self) {
|
||||
return sb()->bind<struct rb_iv_get>()()(self, "viewport");
|
||||
}
|
||||
|
||||
static VALUE set_viewport(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_GUARD_EXC(get_private_data<Window>(self)->setViewport(get_private_data<Viewport>(value)));
|
||||
SANDBOX_AWAIT(rb_iv_set, self, "viewport", value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE get_windowskin(VALUE self) {
|
||||
return sb()->bind<struct rb_iv_get>()()(self, "windowskin");
|
||||
}
|
||||
|
@ -419,6 +438,8 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, klass, "update", (VALUE (*)(ANYARGS))update, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "dispose", (VALUE (*)(ANYARGS))dispose, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "disposed?", (VALUE (*)(ANYARGS))disposed, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "viewport", (VALUE (*)(ANYARGS))get_viewport, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "viewport=", (VALUE (*)(ANYARGS))set_viewport, 1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "windowskin", (VALUE (*)(ANYARGS))get_windowskin, 0);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "windowskin=", (VALUE (*)(ANYARGS))set_windowskin, 1);
|
||||
SANDBOX_AWAIT(rb_define_method, klass, "contents", (VALUE (*)(ANYARGS))get_contents, 0);
|
||||
|
|
Loading…
Add table
Reference in a new issue