LVGL v9.0.0新增内容

发布于:2024-12-18 ⋅ 阅读:(171) ⋅ 点赞:(0)


版本概述

LVGL v9.0.0 是一个重大版本更新,引入了许多新的功能和优化,同时对部分 API 进行了重大变更。虽然许多变更是内部重构,但也有一些直接影响开发者的改动。本版本还提升了性能,并提供了更多对运行时环境的支持。

在迁移项目时,请特别注意可能的非兼容性,因为某些变更可能不会直接导致编译错误,但会影响功能的正确性。


关键注意事项

  1. 缓冲区设置变更

    • 在 v8 中,使用 lv_disp_draw_buf_init 设置缓冲区大小(以像素为单位)。在 v9 中,需使用 lv_display_set_buffers 函数,并将缓冲区大小改为以字节为单位设置。
      示例:
    lv_display_set_buffers(display, buf1, buf2, buf_size_byte, mode);
    
  2. lv_color_t 类型
    v9 中,lv_color_t 统一为 RGB888 格式,和 LV_COLOR_DEPTH 无关。

  3. lv_conf.h 文件变更

    • lv_conf.h 改动较大,迁移时需使用新模板文件 lv_conf_template.h
    • 不要在 lv_conf.h 文件中包含 <stdint.h>,否则可能破坏汇编代码的性能优化。
  4. 在线图像转换器未更新
    使用 LVGLImage.py 脚本替代在线图像转换器。


主要新功能

1. 运行时显示器色彩格式调整

  • 支持 RGB888 渲染。
  • 允许在运行时动态调整显示器的色彩格式。

2. 增强的多线程和 RTOS 支持

内置支持 pthread、FreeRTOS 等操作系统环境。

3. 改进的并行渲染架构

提升渲染性能,支持更高效的并行绘制。

4. 内置显示和触摸驱动支持

  • 提供常见驱动,如 SDL、Linux Framebuffer、ST7789、ILI9341 等。

5. 矢量图形支持

引入 ThorVG 库,可在画布上绘制矢量图形。

6. 数据绑定和 Observer 模式

支持通过 Observer 模式将数据绑定到 UI 元件,实现更统一、易维护的 API。

7. 更多灵活选项

  • 新增 lv_image.h 支持对图像进行对齐、拉伸或平铺操作。
  • 支持在 GitHub CodeSpaces 上以三步操作运行 LVGL。

API 改动

通用改动

  • 命名规则调整:

    • lv_disp_... 改为 lv_display_...
    • btn_... 改为 button_...
    • img_... 改为 image_...
    • zoom 改为 scale
    • angle 改为 rotation
    • scr 改为 screen
    • act 改为 active
    • del 改为 delete
    • col 改为 column
  • API 函数调整:

    • lv_obj_clear_flag 改为 lv_obj_remove_flag
    • lv_obj_clear_state 改为 lv_obj_remove_state
    • lv_coord_t 类型被移除,统一为 int32_t

显示 API 变更

  1. 显示器创建
    在 v9 中,使用以下代码创建显示器并设置缓冲区:

    lv_display_t * disp = lv_display_create(hor_res, ver_res);
    lv_display_set_flush_cb(disp, flush_cb);
    lv_display_set_buffers(disp, buf1, buf2, buf_size_in_bytes, mode);
    
  2. 渲染模式

    • LV_DISPLAY_RENDER_MODE_PARTIAL:缓冲区可小于屏幕尺寸,推荐至少为屏幕的 1/10。
    • LV_DISPLAY_RENDER_MODE_DIRECT:缓冲区需与屏幕尺寸一致,内容始终保持同步。
    • LV_DISPLAY_RENDER_MODE_FULL:每次重绘整个屏幕,双缓冲模式下标准双缓冲。
  3. 显示器事件
    可以为显示器绑定事件:

    lv_display_add_event(disp, my_event_cb);
    
  4. 其他调整

    • 移除 set_px_cb,需要在 flush_cb 中手动处理像素转换。
    • disp_drv.scr_transp 被替换为 lv_display_set_color_format(disp, LV_COLOR_FORMAT_NATIVE_ALPHA)

输入设备(Indev)API 变更

  1. 输入设备创建

    lv_indev_t * indev = lv_indev_create();
    lv_indev_set_type(indev, LV_INDEV_TYPE_...);
    lv_indev_set_read_cb(indev, read_cb);
    
  2. 输入事件
    通过 lv_indev_add_event 绑定事件回调函数。

  3. 功能精简
    移除 feedback_cb,改为发送标准事件如 LV_EVENT_PRESSEDLV_EVENT_CLICKED


其他改动

  1. 消息机制更新
    移除 lv_msg,引入更强大的 lv_observer

  2. 刻度支持
    移除 lv_chart 的刻度支持,改为使用更通用的 lv_scale

  3. 消息框和选项卡改进

    • 消息框使用普通按钮代替按钮矩阵。
    • 选项卡使用普通按钮,增加灵活性。

总结

LVGL v9.0.0 带来了许多重要改进和功能增强,同时也对 API 进行了优化和统一。开发者在迁移现有项目时,需要特别注意不兼容的 API 改动,并熟悉新功能的使用方法。通过充分利用新特性,可以更高效地开发更强大和灵活的用户界面。


网站公告

今日签到

点亮在社区的每一天
去签到