diff options
| author | arngo <[email protected]> | 2022-01-24 01:39:48 -0500 |
|---|---|---|
| committer | arngo <[email protected]> | 2022-01-24 01:39:48 -0500 |
| commit | ba4db7fe8c6c09b3594847c2578a07b92ba4da35 (patch) | |
| tree | f5464e798b13425590cb298d00f297f6bd7b0dbc | |
| parent | ae819b4f85218c37496a763a1ee3ff6161e87da4 (diff) | |
| download | mruby-raylib-ba4db7fe8c6c09b3594847c2578a07b92ba4da35.tar.gz mruby-raylib-ba4db7fe8c6c09b3594847c2578a07b92ba4da35.zip | |
npatch texture drawing function
| -rw-r--r-- | src/raylib.c | 103 |
1 files changed, 102 insertions, 1 deletions
diff --git a/src/raylib.c b/src/raylib.c index ce33713..56bd2d7 100644 --- a/src/raylib.c +++ b/src/raylib.c @@ -43,6 +43,77 @@ static const struct mrb_data_type Rectangle_type = { "Rectangle", mrb_free }; +static const struct mrb_data_type NPatchInfo_type = { + "NPatchInfo", mrb_free +}; + +static mrb_value +mrb_NPatchInfo_initialize(mrb_state* mrb, mrb_value self) { + mrb_value rect_source_obj; + mrb_int left = 10; + mrb_int top = 10; + mrb_int right = 10; + mrb_int bottom = 10; + mrb_int layout = NPATCH_NINE_PATCH; + mrb_get_args(mrb, "o|iiiii", &rect_source_obj, &left, &top, &right, &bottom, &layout); + + NPatchInfo *npatch_info = (NPatchInfo *)DATA_PTR(self); + if(npatch_info) { mrb_free(mrb, npatch_info ); } + mrb_data_init(self, NULL, &NPatchInfo_type); + npatch_info = (NPatchInfo *)mrb_malloc(mrb, sizeof(NPatchInfo)); + + Rectangle *rect_source = DATA_GET_PTR(mrb, rect_source_obj, &Rectangle_type, Rectangle); + + npatch_info->source = *rect_source; + npatch_info->left = left; + npatch_info->top = top; + npatch_info->right = right; + npatch_info->bottom = bottom; + npatch_info->layout = layout; + + mrb_data_init(self, npatch_info, &NPatchInfo_type); + return self; +} + +/* accessors probably not needed +static mrb_value +mrb_NPatchInfo_get_source_rec(mrb_state* mrb, mrb_value self) { + NPatchInfo *npi = DATA_GET_PTR(mrb, self, &NPatchInfo_type, NPatchInfo); + struct RClass *c = mrb_module_get(mrb, "Raylib"); + struct RClass *rec_class = mrb_class_get_under(mrb, c, Rectangle_type.struct_name); + return mrb_obj_value(Data_Wrap_Struct(mrb, rec_class, &Rectangle_type, &npi->source)); +} + +static mrb_value +mrb_NPatchInfo_get_left(mrb_state* mrb, mrb_value self) { + NPatchInfo *npi = DATA_GET_PTR(mrb, self, &NPatchInfo_type, NPatchInfo); + return mrb_fixnum_value(npi->left); +} + +static mrb_value +mrb_NPatchInfo_get_top(mrb_state* mrb, mrb_value self) { + NPatchInfo *npi = DATA_GET_PTR(mrb, self, &NPatchInfo_type, NPatchInfo); + return mrb_fixnum_value(npi->top); +} + +static mrb_value +mrb_NPatchInfo_get_right(mrb_state* mrb, mrb_value self) { + NPatchInfo *npi = DATA_GET_PTR(mrb, self, &NPatchInfo_type, NPatchInfo); + return mrb_fixnum_value(npi->right); +} + +static mrb_value +mrb_NPatchInfo_get_bottom(mrb_state* mrb, mrb_value self) { + NPatchInfo *npi = DATA_GET_PTR(mrb, self, &NPatchInfo_type, NPatchInfo); + return mrb_fixnum_value(npi->bottom); +} + +static mrb_value +mrb_NPatchInfo_get_layout(mrb_state* mrb, mrb_value self) { + NPatchInfo *npi = DATA_GET_PTR(mrb, self, &NPatchInfo_type, NPatchInfo); + return mrb_fixnum_value(npi->layout); +}*/ + static mrb_value mrb_Rectangle_initialize(mrb_state* mrb, mrb_value self) { mrb_float x = 0.0; @@ -309,6 +380,27 @@ mrb_draw_texture_pro(mrb_state* mrb, mrb_value self) { } static mrb_value +mrb_draw_texture_npatch(mrb_state* mrb, mrb_value self) { + mrb_value texture_obj; + mrb_value npi_obj; + mrb_value dest_rec_obj; + mrb_value pos_obj; + mrb_float rotation; + mrb_value tint_obj; + mrb_get_args(mrb, "oooofo", &texture_obj, &npi_obj, &dest_rec_obj, &pos_obj, &rotation, &tint_obj); + + Texture *texture_data = DATA_GET_PTR(mrb, texture_obj, &Texture_type, Texture); + NPatchInfo *npi_data = DATA_GET_PTR(mrb, npi_obj, &NPatchInfo_type, NPatchInfo); + Rectangle *dest_rec_data = DATA_GET_PTR(mrb, dest_rec_obj, &Rectangle_type, Rectangle); + Vector2 *pos_data = DATA_GET_PTR(mrb, pos_obj, &Vector2_type, Vector2); + Color *tint_data = DATA_GET_PTR(mrb, tint_obj, &Color_type, Color); + + DrawTextureNPatch(*texture_data, *npi_data, *dest_rec_data, *pos_data, rotation, *tint_data); + + return mrb_nil_value(); +} + +static mrb_value mrb_begin_scissor_mode(mrb_state* mrb, mrb_value self) { mrb_int x; mrb_int y; @@ -818,10 +910,19 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_method(mrb, rectangle_class, "_draw_lines", mrb_Rectangle_draw_rectangle_lines_ex, MRB_ARGS_REQ(2)); struct RClass *circle_class = mrb_define_class_under(mrb, raylib, "Circle", mrb->object_class); - //struct RClass *circle_class = mrb_class_get_under(mrb, raylib, "Circle"); mrb_define_method(mrb, circle_class, "collide_with_rec?", mrb_Circle_collide_with_rec, MRB_ARGS_REQ(1)); mrb_define_method(mrb, circle_class, "collide_with_circle?", mrb_Circle_collide_with_circ, MRB_ARGS_REQ(1)); + struct RClass *npatch_info_class = mrb_define_class_under(mrb, raylib, "NPatchInfo", mrb->object_class); + mrb_define_method(mrb, npatch_info_class, "initialize", mrb_NPatchInfo_initialize, MRB_ARGS_REQ(1) | MRB_ARGS_OPT(5)); + /* accessors probably not needed + mrb_define_method(mrb, npatch_info_class, "source_rec", mrb_NPatchInfo_get_source_rec, MRB_ARGS_NONE()); + mrb_define_method(mrb, npatch_info_class, "left", mrb_NPatchInfo_get_left, MRB_ARGS_NONE()); + mrb_define_method(mrb, npatch_info_class, "top", mrb_NPatchInfo_get_top, MRB_ARGS_NONE()); + mrb_define_method(mrb, npatch_info_class, "right", mrb_NPatchInfo_get_right, MRB_ARGS_NONE()); + mrb_define_method(mrb, npatch_info_class, "bottom", mrb_NPatchInfo_get_bottom, MRB_ARGS_NONE()); + mrb_define_method(mrb, npatch_info_class, "layout", mrb_NPatchInfo_get_layout, MRB_ARGS_NONE());*/ + #if defined(PLATFORM_WEB) mrb_define_class_method(mrb, raylib, "emscripten_set_main_loop", mrb_emscripten_set_main_loop, MRB_ARGS_NONE()); #endif |
