C refactor: separate out SDL_Rect integer extraction code

This commit is contained in:
Greg Shuflin
2026-07-01 16:58:02 -07:00
parent 1830995cc5
commit 21c9cad34b
+12 -6
View File
@@ -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));
}