diff --git a/components/esp_lvgl_port/CHANGELOG.md b/components/esp_lvgl_port/CHANGELOG.md index 54f37404f..75712b475 100644 --- a/components/esp_lvgl_port/CHANGELOG.md +++ b/components/esp_lvgl_port/CHANGELOG.md @@ -2,6 +2,9 @@ ## [Unreleased] +### Features +- Added option to include a rounder callback + ### Fixes - Fixed deinitialization of the task which was created with caps - https://github.com/espressif/esp-bsp/issues/680 - Call lv_deinit() - https://github.com/espressif/esp-bsp/issues/635 diff --git a/components/esp_lvgl_port/README.md b/components/esp_lvgl_port/README.md index e52e648f7..5b05e6afd 100644 --- a/components/esp_lvgl_port/README.md +++ b/components/esp_lvgl_port/README.md @@ -64,6 +64,7 @@ Add an LCD screen to the LVGL. It can be called multiple times for adding multip .monochrome = false, .mipi_dsi = false, .color_format = LV_COLOR_FORMAT_RGB565, + .rounder_cb = my_rounder_cb, .rotation = { .swap_xy = false, .mirror_x = false, diff --git a/components/esp_lvgl_port/include/esp_lvgl_port_disp.h b/components/esp_lvgl_port/include/esp_lvgl_port_disp.h index a82728703..a8ef3e418 100644 --- a/components/esp_lvgl_port/include/esp_lvgl_port_disp.h +++ b/components/esp_lvgl_port/include/esp_lvgl_port_disp.h @@ -33,6 +33,11 @@ typedef struct { bool mirror_y; /*!< LCD Screen mirrored Y (in esp_lcd driver) */ } lvgl_port_rotation_cfg_t; +/** + * @brief Rounder callback + */ +typedef void (*lvgl_port_rounder_cb_t)(lv_area_t *area); + /** * @brief Configuration display structure */ @@ -51,6 +56,7 @@ typedef struct { bool monochrome; /*!< True, if display is monochrome and using 1bit for 1px */ lvgl_port_rotation_cfg_t rotation; /*!< Default values of the screen rotation (Only HW state. Not supported for default SW rotation!) */ + lvgl_port_rounder_cb_t rounder_cb; /*!< Rounder callback for display area */ #if LVGL_VERSION_MAJOR >= 9 lv_color_format_t color_format; /*!< The color format of the display */ #endif diff --git a/components/esp_lvgl_port/src/lvgl9/esp_lvgl_port_disp.c b/components/esp_lvgl_port/src/lvgl9/esp_lvgl_port_disp.c index 99021737a..3689de229 100644 --- a/components/esp_lvgl_port/src/lvgl9/esp_lvgl_port_disp.c +++ b/components/esp_lvgl_port/src/lvgl9/esp_lvgl_port_disp.c @@ -751,6 +751,12 @@ static void lvgl_port_disp_size_update_callback(lv_event_t *e) static void lvgl_port_display_invalidate_callback(lv_event_t *e) { + lvgl_port_display_ctx_t *disp_ctx = (lvgl_port_display_ctx_t *)lv_event_get_user_data(e); + lv_area_t *area = (lv_area_t *)lv_event_get_param(e); + if (area != NULL && disp_ctx != NULL && disp_ctx->rounder_cb != NULL) { + disp_ctx->rounder_cb(area); + } + /* Wake LVGL task, if needed */ lvgl_port_task_wake(LVGL_PORT_EVENT_DISPLAY, NULL); }