mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-08-23 15:23:44 +02:00
Re-add missing GFX_LOCK
/GFX_UNLOCK
calls in binding-sandbox
This commit is contained in:
parent
c18e7e28a3
commit
83a6b7a1f1
10 changed files with 119 additions and 78 deletions
|
@ -28,8 +28,6 @@
|
|||
#include "exception.h"
|
||||
#include "sandbox.h"
|
||||
|
||||
#define GFX_GUARD_EXC(exp) exp
|
||||
|
||||
#define SANDBOX_SLOT(slot_index) (::mkxp_sandbox::sb()->ref<typename ::mkxp_sandbox::slot_type<(slot_index), slots>::type>(::mkxp_sandbox::sb()->stack_pointer() + ::mkxp_sandbox::slot_offset<(slot_index), slots>::value))
|
||||
|
||||
#define SANDBOX_AWAIT(coroutine, ...) \
|
||||
|
@ -273,7 +271,7 @@ namespace mkxp_sandbox {
|
|||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
SANDBOX_GUARD(get_private_data<S>(self)->set##prop(sb().e, SANDBOX_VALUE_TO_BOOL(value))); \
|
||||
SANDBOX_GUARD_L(get_private_data<S>(self)->set##prop(sb().e, SANDBOX_VALUE_TO_BOOL(value))); \
|
||||
} \
|
||||
return value; \
|
||||
} \
|
||||
|
@ -302,7 +300,7 @@ namespace mkxp_sandbox {
|
|||
typedef decl_slots<V> slots; \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
SANDBOX_AWAIT_S(0, val2num, value); \
|
||||
SANDBOX_GUARD(get_private_data<S>(self)->set##prop(sb().e, SANDBOX_SLOT(0))); \
|
||||
SANDBOX_GUARD_L(get_private_data<S>(self)->set##prop(sb().e, SANDBOX_SLOT(0))); \
|
||||
} \
|
||||
return value; \
|
||||
} \
|
||||
|
@ -324,7 +322,7 @@ namespace mkxp_sandbox {
|
|||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
SANDBOX_GUARD(get_private_data<S>(self)->set##prop(sb().e, value == SANDBOX_NIL ? nullptr : get_private_data<V>(value))); \
|
||||
SANDBOX_GUARD_L(get_private_data<S>(self)->set##prop(sb().e, value == SANDBOX_NIL ? nullptr : get_private_data<V>(value))); \
|
||||
SANDBOX_AWAIT(rb_iv_set, self, #name, value); \
|
||||
} \
|
||||
return value; \
|
||||
|
@ -343,7 +341,7 @@ namespace mkxp_sandbox {
|
|||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
SANDBOX_GUARD(get_private_data<S>(self)->set##prop(sb().e, *get_private_data<V>(value))); \
|
||||
SANDBOX_GUARD_L(get_private_data<S>(self)->set##prop(sb().e, *get_private_data<V>(value))); \
|
||||
} \
|
||||
return value; \
|
||||
} \
|
||||
|
@ -449,6 +447,8 @@ namespace mkxp_sandbox {
|
|||
} while (0)
|
||||
|
||||
#define SANDBOX_GUARD(...) SANDBOX_GUARD_F(, __VA_ARGS__)
|
||||
#define SANDBOX_GUARD_LF(finalizer, ...) do { GFX_LOCK; SANDBOX_GUARD_F(finalizer; GFX_UNLOCK, __VA_ARGS__); GFX_UNLOCK; } while (0)
|
||||
#define SANDBOX_GUARD_L(...) SANDBOX_GUARD_LF(, __VA_ARGS__)
|
||||
|
||||
namespace mkxp_sandbox {
|
||||
// We need these helper functions so that the arguments to `SANDBOX_AWAIT`/`SANDBOX_AWAIT_R`/`SANDBOX_AWAIT_S` are evaluated before `sb()->bind` is called instead of after.
|
||||
|
|
|
@ -69,9 +69,9 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
}
|
||||
|
||||
if (argc == 1) {
|
||||
SANDBOX_GUARD(set_private_data(self, new Bitmap(sb().e, sb()->str(SANDBOX_SLOT(0)))));
|
||||
SANDBOX_GUARD_L(set_private_data(self, new Bitmap(sb().e, sb()->str(SANDBOX_SLOT(0)))));
|
||||
} else {
|
||||
SANDBOX_GUARD(set_private_data(self, new Bitmap(sb().e, SANDBOX_SLOT(1), SANDBOX_SLOT(2))));
|
||||
SANDBOX_GUARD_L(set_private_data(self, new Bitmap(sb().e, SANDBOX_SLOT(1), SANDBOX_SLOT(2))));
|
||||
}
|
||||
|
||||
SANDBOX_AWAIT(bitmap_init_props, self);
|
||||
|
@ -94,11 +94,7 @@ static VALUE initialize_copy(VALUE self, VALUE value) {
|
|||
|
||||
SANDBOX_AWAIT(rb_obj_init_copy, self, value);
|
||||
|
||||
{
|
||||
Bitmap *bitmap;
|
||||
SANDBOX_GUARD_F(delete bitmap, bitmap = new Bitmap(sb().e, *get_private_data<Bitmap>(value)));
|
||||
set_private_data(self, bitmap);
|
||||
}
|
||||
SANDBOX_GUARD_L(set_private_data(self, new Bitmap(sb().e, *get_private_data<Bitmap>(value))));
|
||||
|
||||
SANDBOX_AWAIT(bitmap_init_props, self);
|
||||
Font *font;
|
||||
|
@ -181,9 +177,9 @@ static VALUE blt(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
|
||||
if (get_private_data<Bitmap>(SANDBOX_SLOT(0)) != nullptr) {
|
||||
if (argc > 4) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->blt(sb().e, SANDBOX_SLOT(2), SANDBOX_SLOT(3), *get_private_data<Bitmap>(SANDBOX_SLOT(0)), get_private_data<Rect>(SANDBOX_SLOT(1))->toIntRect(), SANDBOX_SLOT(4)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->blt(sb().e, SANDBOX_SLOT(2), SANDBOX_SLOT(3), *get_private_data<Bitmap>(SANDBOX_SLOT(0)), get_private_data<Rect>(SANDBOX_SLOT(1))->toIntRect(), SANDBOX_SLOT(4)));
|
||||
} else {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->blt(sb().e, SANDBOX_SLOT(2), SANDBOX_SLOT(3), *get_private_data<Bitmap>(SANDBOX_SLOT(0)), get_private_data<Rect>(SANDBOX_SLOT(1))->toIntRect()));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->blt(sb().e, SANDBOX_SLOT(2), SANDBOX_SLOT(3), *get_private_data<Bitmap>(SANDBOX_SLOT(0)), get_private_data<Rect>(SANDBOX_SLOT(1))->toIntRect()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -210,9 +206,9 @@ static VALUE stretch_blt(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
|
||||
if (get_private_data<Bitmap>(SANDBOX_SLOT(1)) != nullptr) {
|
||||
if (argc > 4) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->stretchBlt(sb().e, get_private_data<Rect>(SANDBOX_SLOT(0))->toIntRect(), *get_private_data<Bitmap>(SANDBOX_SLOT(1)), get_private_data<Rect>(SANDBOX_SLOT(2))->toIntRect(), SANDBOX_SLOT(3)););
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->stretchBlt(sb().e, get_private_data<Rect>(SANDBOX_SLOT(0))->toIntRect(), *get_private_data<Bitmap>(SANDBOX_SLOT(1)), get_private_data<Rect>(SANDBOX_SLOT(2))->toIntRect(), SANDBOX_SLOT(3)););
|
||||
} else {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->stretchBlt(sb().e, get_private_data<Rect>(SANDBOX_SLOT(0))->toIntRect(), *get_private_data<Bitmap>(SANDBOX_SLOT(1)), get_private_data<Rect>(SANDBOX_SLOT(2))->toIntRect()););
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->stretchBlt(sb().e, get_private_data<Rect>(SANDBOX_SLOT(0))->toIntRect(), *get_private_data<Bitmap>(SANDBOX_SLOT(1)), get_private_data<Rect>(SANDBOX_SLOT(2))->toIntRect()););
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -231,13 +227,13 @@ static VALUE fill_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (argc == 2) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->fillRect(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), get_private_data<Color>(sb()->ref<VALUE>(argv, 1))->norm));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->fillRect(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), get_private_data<Color>(sb()->ref<VALUE>(argv, 1))->norm));
|
||||
} else {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, sb()->ref<VALUE>(argv, 0));
|
||||
SANDBOX_AWAIT_S(1, rb_num2int, sb()->ref<VALUE>(argv, 1));
|
||||
SANDBOX_AWAIT_S(2, rb_num2int, sb()->ref<VALUE>(argv, 2));
|
||||
SANDBOX_AWAIT_S(3, rb_num2int, sb()->ref<VALUE>(argv, 3));
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->fillRect(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3), get_private_data<Color>(sb()->ref<VALUE>(argv, 4))->norm));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->fillRect(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3), get_private_data<Color>(sb()->ref<VALUE>(argv, 4))->norm));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -252,7 +248,7 @@ static VALUE clear(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->clear(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->clear(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -277,7 +273,7 @@ static VALUE get_pixel(VALUE self, VALUE x, VALUE y) {
|
|||
if (get_private_data<Bitmap>(self)->surface() != nullptr || get_private_data<Bitmap>(self)->megaSurface() != nullptr) {
|
||||
SANDBOX_GUARD(sb().bitmap_pixel_buffer = get_private_data<Bitmap>(self)->getPixel(sb().e, SANDBOX_SLOT(1), SANDBOX_SLOT(2)));
|
||||
} else {
|
||||
SANDBOX_GUARD(sb().bitmap_pixel_buffer = get_private_data<Bitmap>(self)->getPixel(sb().e, SANDBOX_SLOT(1), SANDBOX_SLOT(2)));
|
||||
SANDBOX_GUARD_L(sb().bitmap_pixel_buffer = get_private_data<Bitmap>(self)->getPixel(sb().e, SANDBOX_SLOT(1), SANDBOX_SLOT(2)));
|
||||
}
|
||||
Color *color = new Color(sb().bitmap_pixel_buffer);
|
||||
set_private_data(SANDBOX_SLOT(0), color);
|
||||
|
@ -301,7 +297,7 @@ static VALUE set_pixel(VALUE self, VALUE x, VALUE y, VALUE colorObj) {
|
|||
SANDBOX_AWAIT_S(0, rb_num2int, x);
|
||||
SANDBOX_AWAIT_S(1, rb_num2int, y);
|
||||
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->setPixel(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), *get_private_data<Color>(colorObj)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->setPixel(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), *get_private_data<Color>(colorObj)));
|
||||
}
|
||||
|
||||
return self;
|
||||
|
@ -319,7 +315,7 @@ static VALUE hue_change(VALUE self, VALUE hueval) {
|
|||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, hueval);
|
||||
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->hueChange(sb().e, SANDBOX_SLOT(0)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->hueChange(sb().e, SANDBOX_SLOT(0)));
|
||||
}
|
||||
|
||||
return self;
|
||||
|
@ -343,10 +339,10 @@ static VALUE draw_text(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
SANDBOX_AWAIT_S(0, rb_string_value_cstr, &sb()->ref<VALUE>(argv, 1));
|
||||
}
|
||||
if (argc == 2) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->drawText(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), sb()->str(SANDBOX_SLOT(0))););
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->drawText(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), sb()->str(SANDBOX_SLOT(0))););
|
||||
} else {
|
||||
SANDBOX_AWAIT_S(2, rb_num2int, sb()->ref<VALUE>(argv, 2));
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->drawText(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), sb()->str(SANDBOX_SLOT(0)), SANDBOX_SLOT(2)););
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->drawText(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), sb()->str(SANDBOX_SLOT(0)), SANDBOX_SLOT(2)););
|
||||
}
|
||||
} else {
|
||||
SANDBOX_AWAIT_S(3, rb_num2int, sb()->ref<VALUE>(argv, 0));
|
||||
|
@ -360,10 +356,10 @@ static VALUE draw_text(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
SANDBOX_AWAIT_S(0, rb_string_value_cstr, &sb()->ref<VALUE>(argv, 4));
|
||||
}
|
||||
if (argc < 6) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->drawText(sb().e, SANDBOX_SLOT(3), SANDBOX_SLOT(4), SANDBOX_SLOT(5), SANDBOX_SLOT(6), sb()->str(SANDBOX_SLOT(0))););
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->drawText(sb().e, SANDBOX_SLOT(3), SANDBOX_SLOT(4), SANDBOX_SLOT(5), SANDBOX_SLOT(6), sb()->str(SANDBOX_SLOT(0))););
|
||||
} else {
|
||||
SANDBOX_AWAIT_S(2, rb_num2int, sb()->ref<VALUE>(argv, 5));
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->drawText(sb().e, SANDBOX_SLOT(3), SANDBOX_SLOT(4), SANDBOX_SLOT(5), SANDBOX_SLOT(6), sb()->str(SANDBOX_SLOT(0)), SANDBOX_SLOT(2)););
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->drawText(sb().e, SANDBOX_SLOT(3), SANDBOX_SLOT(4), SANDBOX_SLOT(5), SANDBOX_SLOT(6), sb()->str(SANDBOX_SLOT(0)), SANDBOX_SLOT(2)););
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -410,7 +406,7 @@ static VALUE get_raw_data(VALUE self) {
|
|||
SANDBOX_AWAIT_S(1, rb_str_new_cstr, "");
|
||||
SANDBOX_AWAIT(rb_str_resize, SANDBOX_SLOT(1), SANDBOX_SLOT(2));
|
||||
SANDBOX_AWAIT_S(0, rb_string_value_ptr, &SANDBOX_SLOT(1));
|
||||
SANDBOX_GUARD(bitmap->getRaw(sb().e, sb()->ptr(SANDBOX_SLOT(0)), SANDBOX_SLOT(2)));
|
||||
SANDBOX_GUARD_L(bitmap->getRaw(sb().e, sb()->ptr(SANDBOX_SLOT(0)), SANDBOX_SLOT(2)));
|
||||
}
|
||||
|
||||
return SANDBOX_SLOT(1);
|
||||
|
@ -428,7 +424,7 @@ static VALUE set_raw_data(VALUE self, VALUE value) {
|
|||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_string_value_ptr, &value);
|
||||
SANDBOX_AWAIT_S(1, get_bytesize, value);
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->replaceRaw(sb().e, sb()->ptr(SANDBOX_SLOT(0)), SANDBOX_SLOT(1)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->replaceRaw(sb().e, sb()->ptr(SANDBOX_SLOT(0)), SANDBOX_SLOT(1)));
|
||||
}
|
||||
|
||||
return self;
|
||||
|
@ -445,7 +441,7 @@ static VALUE to_file(VALUE self, VALUE value) {
|
|||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_string_value_cstr, &value);
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->saveToFile(sb().e, sb()->str(SANDBOX_SLOT(0))));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->saveToFile(sb().e, sb()->str(SANDBOX_SLOT(0))));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -470,7 +466,7 @@ static VALUE snap_to_bitmap(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
|
||||
SANDBOX_AWAIT_S(0, rb_obj_alloc, bitmap_class);
|
||||
|
||||
SANDBOX_GUARD(set_private_data(SANDBOX_SLOT(0), new Bitmap(sb().e, *get_private_data<Bitmap>(self), SANDBOX_SLOT(1))));
|
||||
SANDBOX_GUARD_L(set_private_data(SANDBOX_SLOT(0), new Bitmap(sb().e, *get_private_data<Bitmap>(self), SANDBOX_SLOT(1))));
|
||||
|
||||
SANDBOX_AWAIT(bitmap_init_props, SANDBOX_SLOT(0));
|
||||
}
|
||||
|
@ -494,7 +490,7 @@ static VALUE gradient_fill_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
} else {
|
||||
SANDBOX_SLOT(4) = false;
|
||||
}
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->gradientFillRect(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), get_private_data<Color>(sb()->ref<VALUE>(argv, 1))->norm, get_private_data<Color>(sb()->ref<VALUE>(argv, 2))->norm, SANDBOX_SLOT(4)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->gradientFillRect(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect(), get_private_data<Color>(sb()->ref<VALUE>(argv, 1))->norm, get_private_data<Color>(sb()->ref<VALUE>(argv, 2))->norm, SANDBOX_SLOT(4)));
|
||||
} else {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, sb()->ref<VALUE>(argv, 0));
|
||||
SANDBOX_AWAIT_S(1, rb_num2int, sb()->ref<VALUE>(argv, 1));
|
||||
|
@ -505,7 +501,7 @@ static VALUE gradient_fill_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
} else {
|
||||
SANDBOX_SLOT(4) = false;
|
||||
}
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->gradientFillRect(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3), get_private_data<Color>(sb()->ref<VALUE>(argv, 4))->norm, get_private_data<Color>(sb()->ref<VALUE>(argv, 5))->norm, SANDBOX_SLOT(4)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->gradientFillRect(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3), get_private_data<Color>(sb()->ref<VALUE>(argv, 4))->norm, get_private_data<Color>(sb()->ref<VALUE>(argv, 5))->norm, SANDBOX_SLOT(4)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -523,13 +519,13 @@ static VALUE clear_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (argc == 1) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->clearRect(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect()));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->clearRect(sb().e, get_private_data<Rect>(sb()->ref<VALUE>(argv, 0))->toIntRect()));
|
||||
} else {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, sb()->ref<VALUE>(argv, 0));
|
||||
SANDBOX_AWAIT_S(1, rb_num2int, sb()->ref<VALUE>(argv, 1));
|
||||
SANDBOX_AWAIT_S(2, rb_num2int, sb()->ref<VALUE>(argv, 2));
|
||||
SANDBOX_AWAIT_S(3, rb_num2int, sb()->ref<VALUE>(argv, 3));
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->clearRect(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->clearRect(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -544,7 +540,7 @@ static VALUE blur(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->blur(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->blur(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -562,7 +558,7 @@ static VALUE radial_blur(VALUE self, VALUE angle, VALUE divisions) {
|
|||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, angle);
|
||||
SANDBOX_AWAIT_S(1, rb_num2int, divisions);
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->radialBlur(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->radialBlur(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1)));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -577,7 +573,7 @@ static VALUE mega(VALUE self) {
|
|||
VALUE operator()(VALUE self) {
|
||||
typedef decl_slots<uint8_t> slots;
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(SANDBOX_SLOT(0) = get_private_data<Bitmap>(self)->getIsMega(sb().e));
|
||||
SANDBOX_GUARD_L(SANDBOX_SLOT(0) = get_private_data<Bitmap>(self)->getIsMega(sb().e));
|
||||
}
|
||||
return SANDBOX_BOOL_TO_VALUE(SANDBOX_SLOT(0));
|
||||
}
|
||||
|
@ -595,7 +591,7 @@ static VALUE get_animated(VALUE self) {
|
|||
VALUE operator()(VALUE self) {
|
||||
typedef decl_slots<uint8_t> slots;
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(SANDBOX_SLOT(0) = get_private_data<Bitmap>(self)->getIsAnimated(sb().e));
|
||||
SANDBOX_GUARD_L(SANDBOX_SLOT(0) = get_private_data<Bitmap>(self)->getIsAnimated(sb().e));
|
||||
}
|
||||
return SANDBOX_BOOL_TO_VALUE(SANDBOX_SLOT(0));
|
||||
}
|
||||
|
@ -610,7 +606,7 @@ static VALUE play(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->play(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->play(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -624,7 +620,7 @@ static VALUE stop(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->stop(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->stop(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -641,7 +637,7 @@ static VALUE goto_and_play(VALUE self, VALUE value) {
|
|||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, value);
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->gotoAndPlay(sb().e, SANDBOX_SLOT(0)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->gotoAndPlay(sb().e, SANDBOX_SLOT(0)));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -658,7 +654,7 @@ static VALUE goto_and_stop(VALUE self, VALUE value) {
|
|||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, value);
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->gotoAndStop(sb().e, SANDBOX_SLOT(0)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->gotoAndStop(sb().e, SANDBOX_SLOT(0)));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -712,7 +708,7 @@ static VALUE add_frame(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
}
|
||||
}
|
||||
if (argc >= 1) {
|
||||
SANDBOX_GUARD(SANDBOX_SLOT(1) = get_private_data<Bitmap>(self)->addFrame(sb().e, *get_private_data<Bitmap>(sb()->ref<VALUE>(argv, 0)), SANDBOX_SLOT(1)));
|
||||
SANDBOX_GUARD_L(SANDBOX_SLOT(1) = get_private_data<Bitmap>(self)->addFrame(sb().e, *get_private_data<Bitmap>(sb()->ref<VALUE>(argv, 0)), SANDBOX_SLOT(1)));
|
||||
}
|
||||
SANDBOX_AWAIT_S(0, rb_ll2inum, SANDBOX_SLOT(1));
|
||||
}
|
||||
|
@ -738,7 +734,7 @@ static VALUE remove_frame(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
SANDBOX_SLOT(0) = 0;
|
||||
}
|
||||
}
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->removeFrame(sb().e, SANDBOX_SLOT(0)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->removeFrame(sb().e, SANDBOX_SLOT(0)));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -753,7 +749,7 @@ static VALUE next_frame(VALUE self) {
|
|||
VALUE operator()(VALUE self) {
|
||||
typedef decl_slots<VALUE> slots;
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->nextFrame(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->nextFrame(sb().e));
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT_S(0, rb_ll2inum, get_private_data<Bitmap>(self)->currentFrameI(sb().e)));
|
||||
}
|
||||
return SANDBOX_SLOT(0);
|
||||
|
@ -768,7 +764,7 @@ static VALUE previous_frame(VALUE self) {
|
|||
VALUE operator()(VALUE self) {
|
||||
typedef decl_slots<VALUE> slots;
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->previousFrame(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->previousFrame(sb().e));
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT_S(0, rb_ll2inum, get_private_data<Bitmap>(self)->currentFrameI(sb().e)));
|
||||
}
|
||||
return SANDBOX_SLOT(0);
|
||||
|
@ -792,7 +788,7 @@ static VALUE set_font(VALUE self, VALUE value) {
|
|||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (get_private_data<Font>(value) != nullptr) {
|
||||
SANDBOX_GUARD(get_private_data<Bitmap>(self)->setFont(sb().e, *get_private_data<Font>(value)));
|
||||
SANDBOX_GUARD_L(get_private_data<Bitmap>(self)->setFont(sb().e, *get_private_data<Font>(value)));
|
||||
|
||||
SANDBOX_AWAIT_S(0, rb_iv_get, self, "font");
|
||||
SANDBOX_AWAIT_S(1, rb_iv_get, value, "name");
|
||||
|
|
|
@ -53,7 +53,7 @@ static VALUE update(VALUE self) {
|
|||
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(SANDBOX_SLOT(0) = shState->graphics().update(sb().e));
|
||||
SANDBOX_GUARD_L(SANDBOX_SLOT(0) = shState->graphics().update(sb().e));
|
||||
if (SANDBOX_SLOT(0)) {
|
||||
SANDBOX_YIELD;
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ static VALUE freeze(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(shState->graphics().freeze(sb().e));
|
||||
SANDBOX_GUARD_L(shState->graphics().freeze(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -91,6 +91,8 @@ static VALUE transition(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
SANDBOX_SLOT(1) = 8;
|
||||
SANDBOX_SLOT(2) = 40;
|
||||
|
||||
GFX_LOCK;
|
||||
|
||||
if (!shState->graphics().frozen()) {
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
@ -122,6 +124,7 @@ static VALUE transition(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
sb().transitioning = false;
|
||||
if (sb().trans_map != nullptr) {
|
||||
delete sb().trans_map;
|
||||
|
@ -147,7 +150,7 @@ static VALUE screenshot(VALUE self, VALUE value) {
|
|||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_string_value_cstr, &value);
|
||||
SANDBOX_GUARD(shState->graphics().screenshot(sb().e, sb()->str(SANDBOX_SLOT(0))));
|
||||
SANDBOX_GUARD_L(shState->graphics().screenshot(sb().e, sb()->str(SANDBOX_SLOT(0))));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -161,7 +164,7 @@ static VALUE reset(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(shState->graphics().reset(sb().e));
|
||||
SANDBOX_GUARD_L(shState->graphics().reset(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -200,6 +203,8 @@ static VALUE wait_(VALUE self, VALUE value) {
|
|||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, value);
|
||||
|
||||
for (SANDBOX_SLOT(1) = 0; SANDBOX_SLOT(1) < SANDBOX_SLOT(0); ++SANDBOX_SLOT(1)) {
|
||||
|
@ -210,6 +215,10 @@ static VALUE wait_(VALUE self, VALUE value) {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
|
@ -221,6 +230,8 @@ static VALUE fadeout(VALUE self, VALUE value) {
|
|||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, value);
|
||||
SANDBOX_SLOT(2) = shState->graphics().getBrightness();
|
||||
|
||||
|
@ -232,6 +243,10 @@ static VALUE fadeout(VALUE self, VALUE value) {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
|
@ -243,6 +258,8 @@ static VALUE fadein(VALUE self, VALUE value) {
|
|||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_AWAIT_S(0, rb_num2int, value);
|
||||
SANDBOX_SLOT(2) = shState->graphics().getBrightness();
|
||||
|
||||
|
@ -254,6 +271,10 @@ static VALUE fadein(VALUE self, VALUE value) {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
|
@ -266,7 +287,7 @@ static VALUE snap_to_bitmap(VALUE self) {
|
|||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT_S(0, rb_obj_alloc, bitmap_class);
|
||||
SANDBOX_GUARD(set_private_data(SANDBOX_SLOT(0), shState->graphics().snapToBitmap(sb().e)));
|
||||
SANDBOX_GUARD_L(set_private_data(SANDBOX_SLOT(0), shState->graphics().snapToBitmap(sb().e)));
|
||||
SANDBOX_AWAIT(bitmap_init_props, SANDBOX_SLOT(0));
|
||||
}
|
||||
|
||||
|
@ -335,6 +356,8 @@ static VALUE play_movie(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
|
||||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
// TODO: require at least 1 argument
|
||||
SANDBOX_AWAIT_S(0, rb_string_value_cstr, &sb()->ref<VALUE>(argv, 0));
|
||||
if (argc >= 2) {
|
||||
|
@ -355,7 +378,8 @@ static VALUE play_movie(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
}
|
||||
|
||||
~coro() {
|
||||
GFX_GUARD_EXC(sb().set_movie(nullptr););
|
||||
sb().set_movie(nullptr);
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -38,14 +38,18 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_AWAIT(viewportelement_initialize<Plane>, argc, argv, self);
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT(wrap_property, self, &get_private_data<Plane>(self)->getColor(sb().e), "color", color_class));
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT(wrap_property, self, &get_private_data<Plane>(self)->getTone(sb().e), "tone", tone_class));
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
|
|
|
@ -38,15 +38,19 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_AWAIT(viewportelement_initialize<Sprite>, argc, argv, self);
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT(wrap_property, self, &get_private_data<Sprite>(self)->getSrcRect(sb().e), "src_rect", rect_class));
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT(wrap_property, self, &get_private_data<Sprite>(self)->getColor(sb().e), "color", color_class));
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT(wrap_property, self, &get_private_data<Sprite>(self)->getTone(sb().e), "tone", tone_class));
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
|
|
|
@ -58,21 +58,25 @@ struct tilemap_autotiles_binding_init : boost::asio::coroutine {
|
|||
|
||||
VALUE operator()(VALUE self, VALUE i, VALUE obj) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
if (get_private_data<Tilemap::Autotiles>(self) == nullptr) {
|
||||
return self;
|
||||
}
|
||||
|
||||
SANDBOX_AWAIT_S(0, rb_num2ulong, i);
|
||||
|
||||
GFX_LOCK;
|
||||
get_private_data<Tilemap::Autotiles>(self)->set(SANDBOX_SLOT(0), get_private_data<Bitmap>(obj));
|
||||
SANDBOX_AWAIT_S(1, rb_iv_get, self, "array");
|
||||
SANDBOX_AWAIT(rb_ary_store, SANDBOX_SLOT(1), SANDBOX_SLOT(0), obj);
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, i, obj);
|
||||
|
@ -98,6 +102,8 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
|
||||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
{
|
||||
SANDBOX_SLOT(0) = SANDBOX_NIL;
|
||||
Viewport *viewport = nullptr;
|
||||
|
@ -108,7 +114,6 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
}
|
||||
}
|
||||
|
||||
GFX_LOCK;
|
||||
Tilemap *tilemap = new Tilemap(viewport);
|
||||
|
||||
set_private_data(self, tilemap);
|
||||
|
@ -138,12 +143,14 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
/* Circular reference so both objects are always
|
||||
* alive at the same time */
|
||||
SANDBOX_AWAIT(rb_iv_set, SANDBOX_SLOT(1), "tilemap", self);
|
||||
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
|
@ -157,9 +164,7 @@ static VALUE update(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
SANDBOX_GUARD_F(GFX_UNLOCK, get_private_data<Tilemap>(self)->update(sb().e));
|
||||
GFX_UNLOCK;
|
||||
SANDBOX_GUARD_L(get_private_data<Tilemap>(self)->update(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
|
|
@ -57,21 +57,25 @@ struct bitmap_array_binding_init : boost::asio::coroutine {
|
|||
|
||||
VALUE operator()(VALUE self, VALUE i, VALUE obj) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
if (get_private_data<TilemapVX::BitmapArray>(self) == nullptr) {
|
||||
return self;
|
||||
}
|
||||
|
||||
SANDBOX_AWAIT_S(0, rb_num2ulong, i);
|
||||
|
||||
GFX_LOCK;
|
||||
get_private_data<TilemapVX::BitmapArray>(self)->set(SANDBOX_SLOT(0), get_private_data<Bitmap>(obj));
|
||||
SANDBOX_AWAIT_S(1, rb_iv_get, self, "array");
|
||||
SANDBOX_AWAIT(rb_ary_store, SANDBOX_SLOT(1), SANDBOX_SLOT(0), obj);
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, i, obj);
|
||||
|
@ -149,9 +153,7 @@ static VALUE update(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
SANDBOX_GUARD_F(GFX_UNLOCK, get_private_data<TilemapVX>(self)->update(sb().e));
|
||||
GFX_UNLOCK;
|
||||
SANDBOX_GUARD_L(get_private_data<TilemapVX>(self)->update(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
|
|
@ -37,13 +37,17 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_AWAIT(viewportelement_initialize<Window>, argc, argv, self);
|
||||
SANDBOX_GUARD(SANDBOX_AWAIT(wrap_property, self, &get_private_data<Window>(self)->getCursorRect(sb().e), "cursor_rect", rect_class));
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
|
@ -53,7 +57,7 @@ static VALUE update(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<Window>(self)->update(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<Window>(self)->update(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
|
|
@ -40,9 +40,10 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
|
||||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
GFX_LOCK;
|
||||
|
||||
SANDBOX_SLOT(1) = SANDBOX_SLOT(2) = SANDBOX_SLOT(3) = SANDBOX_SLOT(4) = 0;
|
||||
|
||||
GFX_LOCK;
|
||||
if (rgssVer >= 3) {
|
||||
if (argc == 4) {
|
||||
SANDBOX_AWAIT_S(1, rb_num2int, sb()->ref<VALUE>(argv, 0));
|
||||
|
@ -67,11 +68,14 @@ static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
|||
SANDBOX_GUARD(set_private_data(SANDBOX_SLOT(0), new Bitmap(sb().e, 1, 1)));
|
||||
SANDBOX_AWAIT(bitmap_init_props, SANDBOX_SLOT(0));
|
||||
SANDBOX_AWAIT(rb_iv_set, self, "contents", SANDBOX_SLOT(0));
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
|
||||
~coro() {
|
||||
GFX_UNLOCK;
|
||||
}
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
|
@ -81,7 +85,7 @@ static VALUE update(VALUE self) {
|
|||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_GUARD(get_private_data<WindowVX>(self)->update(sb().e));
|
||||
SANDBOX_GUARD_L(get_private_data<WindowVX>(self)->update(sb().e));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
@ -117,9 +121,7 @@ static VALUE move(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h) {
|
|||
SANDBOX_AWAIT_S(1, rb_num2int, y);
|
||||
SANDBOX_AWAIT_S(2, rb_num2int, w);
|
||||
SANDBOX_AWAIT_S(3, rb_num2int, h);
|
||||
GFX_LOCK;
|
||||
SANDBOX_GUARD_F(GFX_UNLOCK, get_private_data<WindowVX>(self)->move(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3)));
|
||||
GFX_UNLOCK;
|
||||
SANDBOX_GUARD_L(get_private_data<WindowVX>(self)->move(sb().e, SANDBOX_SLOT(0), SANDBOX_SLOT(1), SANDBOX_SLOT(2), SANDBOX_SLOT(3)));
|
||||
}
|
||||
|
||||
return SANDBOX_NIL;
|
||||
|
|
|
@ -94,7 +94,7 @@ RB_METHOD(tilemapVXUpdate) {
|
|||
|
||||
TilemapVX *t = getPrivateData<TilemapVX>(self);
|
||||
|
||||
BINDING_GUARD(t->update(e));
|
||||
BINDING_GUARD_L(t->update(e));
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue