From 3310a3a43e4ff1c86dd3beaa79c2f8cbdf2528dc Mon Sep 17 00:00:00 2001 From: Adolfo Reyna Date: Mon, 20 Jul 2026 00:21:01 -0400 Subject: [PATCH] feat(lvgl-module): complete canvas API export for GameBoy emulator - canvas: add missing getters/setters (get_buf, get_image, get_px, get_draw_buf, set_palette, copy_buf, init_layer, finish_layer, buf_size) - draw_buf: export create/destroy/init/dup/copy/goto/width_to_stride/align/palette/from_image/to_image - draw layer: create + alloc_buf - image: scale/rotation/pivot/offset for GB integer upscaling - style: transform_scale/pivot for fallback path Enables ELF apps to use full LVGL9 canvas docs API: - 160x144 raw buffer + lv_image_set_scale 2x/3x - layer init/finish for direct draw calls - palette for indexed GB modes Test: GameBoy app builds clean (0 missing symbols) vs 5.5.2 SDK Fixes missing symbol errors that previously required commented-out scaling workaround --- Modules/lvgl-module/source/symbols.c | 46 +++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/Modules/lvgl-module/source/symbols.c b/Modules/lvgl-module/source/symbols.c index 005e6818..91d7f10a 100644 --- a/Modules/lvgl-module/source/symbols.c +++ b/Modules/lvgl-module/source/symbols.c @@ -199,12 +199,50 @@ const struct ModuleSymbol lvgl_module_symbols[] = { DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_width), DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_selected_button), DEFINE_MODULE_SYMBOL(lv_buttonmatrix_clear_button_ctrl), - // lv_canvas + // lv_canvas - full API for emulator framebuffer use-cases (GameBoy 160x144) DEFINE_MODULE_SYMBOL(lv_canvas_create), - DEFINE_MODULE_SYMBOL(lv_canvas_fill_bg), - DEFINE_MODULE_SYMBOL(lv_canvas_set_draw_buf), DEFINE_MODULE_SYMBOL(lv_canvas_set_buffer), + DEFINE_MODULE_SYMBOL(lv_canvas_set_draw_buf), DEFINE_MODULE_SYMBOL(lv_canvas_set_px), + DEFINE_MODULE_SYMBOL(lv_canvas_set_palette), + DEFINE_MODULE_SYMBOL(lv_canvas_get_draw_buf), + DEFINE_MODULE_SYMBOL(lv_canvas_get_px), + DEFINE_MODULE_SYMBOL(lv_canvas_get_image), + DEFINE_MODULE_SYMBOL(lv_canvas_get_buf), + DEFINE_MODULE_SYMBOL(lv_canvas_copy_buf), + DEFINE_MODULE_SYMBOL(lv_canvas_fill_bg), + DEFINE_MODULE_SYMBOL(lv_canvas_init_layer), + DEFINE_MODULE_SYMBOL(lv_canvas_finish_layer), + DEFINE_MODULE_SYMBOL(lv_canvas_buf_size), + // lv_draw_buf - LVGL9 buffers (was lv_img_buf) + DEFINE_MODULE_SYMBOL(lv_draw_buf_create), + DEFINE_MODULE_SYMBOL(lv_draw_buf_destroy), + DEFINE_MODULE_SYMBOL(lv_draw_buf_init), + DEFINE_MODULE_SYMBOL(lv_draw_buf_dup), + DEFINE_MODULE_SYMBOL(lv_draw_buf_copy), + DEFINE_MODULE_SYMBOL(lv_draw_buf_goto_xy), + DEFINE_MODULE_SYMBOL(lv_draw_buf_clear), + DEFINE_MODULE_SYMBOL(lv_draw_buf_width_to_stride), + DEFINE_MODULE_SYMBOL(lv_draw_buf_align), + DEFINE_MODULE_SYMBOL(lv_draw_buf_set_palette), + DEFINE_MODULE_SYMBOL(lv_draw_buf_from_image), + DEFINE_MODULE_SYMBOL(lv_draw_buf_to_image), + // lv_draw layer helpers + DEFINE_MODULE_SYMBOL(lv_draw_layer_create), + DEFINE_MODULE_SYMBOL(lv_draw_layer_alloc_buf), + // lv_image transform/scale - critical for GB 2x/3x scaling (image as canvas) + DEFINE_MODULE_SYMBOL(lv_image_set_scale), + DEFINE_MODULE_SYMBOL(lv_image_set_scale_x), + DEFINE_MODULE_SYMBOL(lv_image_set_scale_y), + DEFINE_MODULE_SYMBOL(lv_image_set_rotation), + DEFINE_MODULE_SYMBOL(lv_image_set_pivot), + DEFINE_MODULE_SYMBOL(lv_image_set_offset_x), + DEFINE_MODULE_SYMBOL(lv_image_set_offset_y), + // generic obj transform styles (fallback scaling path) + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_scale_x), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_scale_y), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_pivot_x), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_pivot_y), // lv_label DEFINE_MODULE_SYMBOL(lv_label_create), DEFINE_MODULE_SYMBOL(lv_label_cut_text), @@ -431,7 +469,7 @@ const struct ModuleSymbol lvgl_module_symbols[] = { DEFINE_MODULE_SYMBOL(lv_draw_task_get_draw_dsc), DEFINE_MODULE_SYMBOL(lv_draw_task_get_label_dsc), DEFINE_MODULE_SYMBOL(lv_draw_task_get_fill_dsc), - DEFINE_MODULE_SYMBOL(lv_draw_buf_create), + // lv_draw_buf_create moved to canvas block (duplicate removed) // lv_image DEFINE_MODULE_SYMBOL(lv_image_create), DEFINE_MODULE_SYMBOL(lv_image_set_src),