diff --git a/c/sdl.c b/c/sdl.c index 3bc1578..bf6385f 100644 --- a/c/sdl.c +++ b/c/sdl.c @@ -241,16 +241,22 @@ lean_obj_res sdl_render_present(b_lean_obj_arg g_renderer, lean_obj_arg w) { return lean_io_result_mk_ok(lean_box(0)); } +static SDL_Rect lean_sdl_rect_to_c_SDL_Rect(b_lean_obj_arg rect_obj) { + return (SDL_Rect) { + .x = (int32_t)lean_ctor_get_uint32(rect_obj, 0), + .y = (int32_t)lean_ctor_get_uint32(rect_obj, 4), + .w = (int32_t)lean_ctor_get_uint32(rect_obj, 8), + .h = (int32_t)lean_ctor_get_uint32(rect_obj, 12), + }; +} + + lean_obj_res sdl_render_fill_rect(b_lean_obj_arg g_renderer, b_lean_obj_arg rect_obj) { SDL_Renderer* renderer = (SDL_Renderer*)lean_get_external_data(g_renderer); if (renderer == NULL) return lean_io_result_mk_error(lean_mk_string("C: Renderer is NULL")); - int32_t x = (int32_t)lean_ctor_get_uint32(rect_obj, 0); - int32_t y = (int32_t)lean_ctor_get_uint32(rect_obj, 4); - int32_t w = (int32_t)lean_ctor_get_uint32(rect_obj, 8); - int32_t h = (int32_t)lean_ctor_get_uint32(rect_obj, 12); - - SDL_FRect rect = {(float)x, (float)y, (float)w, (float)h}; + SDL_Rect r = lean_sdl_rect_to_c_SDL_Rect(rect_obj); + SDL_FRect rect = {r.x, r.y, r.w, r.h}; int32_t result = SDL_RenderFillRect(renderer, &rect); return lean_io_result_mk_ok(lean_box_uint32(result)); }