概述#
LVGL v8.3.0 引入了强大的新渲染能力、扩展的硬件加速支持以及改进的开发者体验。
图层#
支持对任何控件及其子控件进行变换(缩放和旋转),这些控件由 LVGL 绘制。为了实现这一点,LVGL 会将变换后的控件渲染到一个图层中,然后将该图层作为图像绘制,并应用所有变换。当设置了 opa(而不是 bg_opa、border_opa 等)和 blend_mode 时,也会使用图层。这样,嵌套对象会作为一个图层进行混合,以避免颜色渗透。更多信息请参见文档。
继承和初始样式属性#
除了为样式属性设置"正常值"外,现在还可以将它们设置为 inherit(继承父对象的值)和 initial(设置为系统默认值)。更多信息请参见文档。
NXP PXP 和 VGLite GPU 支持#
重新添加了对 NXP GPU 的支持,为 i.MX RT 和 i.MX 系列处理器带来了硬件加速。
彩色字体支持#
通过这一出色的新功能,您可以在文本中使用表情符号和图像。更多信息请参见文档。
ARM2D GPU 支持#
获得对 Arm 微控制器 2D 图形加速的支持,包括基于 Helium 的加速和基于 DMA-350 的加速。
PubSub 消息系统#
添加了基于发布者-订阅者的消息系统,使组件之间的通信更加容易。更多信息请参见文档。
拼音输入法#
添加了对拼音输入法中文输入的支持。更多信息请参见文档。
渲染开始回调函数#
在 lv_disp_drv_t 中添加了一个新的回调函数,用于指示渲染何时开始。这对于同步非常有用,例如等待 TE(撕裂效应)信号。
新功能#
- feat(ime_pinyin):添加 API 以支持 9 键输入模式
#3447 - feat(font):添加字体占位符绘制配置
#3446 - feat(fsdrv):添加 posix lseek() 错误检查
#3444 - feat(misc):添加异步调用函数取消功能
#3439 - feat(ime_pinyin):添加 API 以使用拼音输入法(中文输入)
#3408 - feat(style):添加 'inherit' 和 'initial' CSS 属性
#3390 - feat(porting):向模板添加刷新控制
#3384 - feat(anim):添加删除回调函数
#3295 - feat(cmsis-pack):5 月份月度更新
#3394 - feat(textarea):使其可以自定义项目符号字符
#3388 - feat(disp):添加临时失效禁用接口
#3378 - feat(group):添加边缘回调函数,当尝试将焦点移动到开始或结束位置之外时触发
#3374 - feat(benchmark):使 lvgl 以最高帧率渲染
#3352 - feat(rt-thread):允许用户在 lvgl 线程中控制刷新周期
#3375 - feat(cmsis-pack):5 月份月度更新(alpha)
#3359 - feat(demos):为基准测试添加回调函数
#3353 - feat(gpu):使用新功能更新 lv_gpu_arm2d
#3340 - feat(draw):改进 LV_IMG_CF_ALPHA_8BIT 的加速
#3337 - feat(anim):添加获取全局动画刷新计时器的函数
#3331 - feat(demo):添加加权 FPS 和不透明度速度日志输出
#3326 - feat(gpu):更新 gpu arm 2d
#3320 - feat(cmsis-pack):4 月份月度更新
#3300 - feat(fsdrv):修复 win32 后端的问题
#3284 - feat(cmake-build):添加允许构建共享库的选项
#3278 - feat(hal):向 disp_drv 添加 render_start_cb
#3274 - feat(cmsis-pack):4 月份月度更新(v1.0.3-alpha)
#3271 - feat(benchmark):为运行特定场景添加跟踪输出
#3245 - feat(env_support):cmsis pack 月度更新
#3209 - feat(tabview):支持垂直滚动
#3184 - feat(span):添加用于设置行数的接口
#3200 - feat(indev):添加一次性启用/禁用所有输入设备的功能
#3179 - feat(font):添加 imgfont - 可用于向 label/span 添加表情符号
#3160 - feat(gpu):添加 gpu arm2d
#3162 - feat(dma2d):添加 lv_draw_stm32_dma2d_buffer_copy 函数
#3147 - feat(disp):添加屏幕退出动画
#3081 - feat(menu):使菜单控件与编码器更兼容
#3061 - feat(label):添加动画样式属性以将其应用于标签控件的循环滚动动画
#3128 - feat(script):添加用于代码格式化的 pre-commit 配置
#3092 - feat(refr):防止脏区域在渲染期间被修改
#3107 - feat(log):改进 lv_log 并从 lv_demo_benchmark 添加日志结果
#3084 - feat(fragment):添加片段管理器(UI 控制器概念)
#2940 - feat(porting):添加宏 lv_run_timer_handler_in_period 以简化移植
#3063 - feat(gpu):重新附加 nxp pxp vglite 加速器
029eef7 - feat(draw):支持变换控件并改进软件变换
318146a - feat(msg):添加发布者-订阅者消息系统
79a29d7 - feat(benchmark):添加运行特定场景的 API
305ad00 - feat(gpu):添加 SWM341 gpu 支持(synwit)
07b7eea - feat(arc):添加 lv_arc_align_obj_to_angle 和 lv_arc_rotate_obj_to_angle
a76bb70 - feat(draw):添加 draw_ctx->buffer_copy
d034511 - feat(dropdown):添加 lv_dropdown_get_option_index
9997fb0 - feat(tabview):添加重命名选项卡的 API
2c9695a - feat(indev):在使用 wait_until_release 释放时发送 LV_EVENT_PRESS_LOST
cc18518 - feat(gridnav):添加 lv_gridnav_set_focused
b6d2daa
性能优化#
修复#
- fix(draw):解决与外部 ALIGN 定义的冲突
#3336 - fix(arc):修复 LV_ARC_MODE_REVERSE 的 bug
#3418 - fix(fragment):修复片段的内存泄漏
#3442 - fix(draw):解决内存泄漏问题
#3437 - fix(gridnav):修正 find_last_focusable 中的逻辑
#3423 - fix(examples):修正滑块示例中的注释
#3419 - fix(sdl):为 SDL 后端添加变换支持
#3403 - fix(bmp):修复 LV_COLOR_16_SWAP 的问题
#3412 - fix(sdl):修复 LRU
#3404 - fix(draw):避免在绘制圆弧时使用已释放的内存
#3399 - fix(subpx):修复子像素渲染字体不显示的 bug
#3387 - fix(style):在 gc sweep/lv_deinit 后重置样式查找表
#3385 - fix(benchmark):修复使用错误场景编号的问题
#3372 - fix(draw):修复索引和仅 alpha 的颜色支持
#3371 - fix(mem):修复当请求的大小过大时 TLSF 返回错误指针的问题
#3325 - fix(demo):修复警告
#3344 - fix(config):添加 LV_GPU_SDL_LRU_SIZE
#3348 - fix(txt):修复 lv_txt_iso8859_1_next(..., NULL) 的返回值
#3338 - fix(benchmark):为小屏幕移除冗余字符串
#3335 - fix(chart):修复访问未初始化的 point_area
#3327 - fix(config):将 LV_LAYER_SIMPLE_BUF_SIZE 添加到 Kconfig
#3312 - fix(config):保持控件的顺序
#3314 - fix(config):修复 LV_USE_PERF_MONITOR 和 LV_USE_MEM_MONITOR 中的拼写错误
#3313 - fix(refr):初始化 row_cnt 以消除警告
#3309 - fix(meter):修复拼写错误
#3308 - fix(draw):更新 Makefiles
#3303 - fix(lodepng):修复 NULL 指针访问
#3307 - fix(Kconfig):将 LV_FS_STDIO_LETTER 的类型从字符串改为整数
#3282 - fix(demo):修复 Wformat 警告
#3290 - fix(snapshot):添加缺失的 ASSERT 检查
#3292 - fix(Kconfig):将 LV_USE_GRIDNAV 和 LV_USE_FRAGMENT 添加到 Kconfig
#3270 - fix(msgbox):当 obj == NULL 时不执行 init obj
#3264 - fix(menu):对 new_node 使用 LV_ASSERT_MALLOC 检查
#3263 - fix(canvas):设置 canvas 的 buff 后图像缓存可能过期
#3267 - fix(obj_style):防止访问类空指针
#3252 - fix(png):修复解码失败时可能的内存泄漏
#3249 - fix(libs):修复扩展名匹配导致的可能缓冲区下溢
#3250 - fix(fs):使用 win32 后端跟踪多个目录句柄
#3243 - fix(png):使用 LV_IMG_CF_TRUE_COLOR_ALPHA 而不是 LV_IMG_CF_RAW_ALPHA
#3212 - fix(Keil-AC5):消除 Keil-AC5 中的警告
#3221 - fix(meter):修复循环变量类型不匹配导致的无限循环
#3232 - fix(chart):移除无效的决策分支
#3231 - fix(gradient):在除以 0 之前断言
#3228 - fix(calendar):修复循环变量类型不匹配导致的无限循环
#3230 - fix(flex):在除以 0 之前断言
#3237 - fix(hal):修复 LV_ASSERT_MALLOC 的错误位置
#3236 - fix(disp):修复缺失的空指针判断
#3238 - fix(obj_class):修复当默认 disp 为 NULL 时可能的内存泄漏
#3235 - fix(draw_sw_letter):修复指针的 sizeof 使用不正确
#3234 - fix(indev):修复拼写错误导致的空指针访问
#3229 - fix(event):移除无效的决策分支
#3233 - fix(draw_mask):移除无效的决策分支
#3225 - fix(spinbox):移除无效的判断
#3227 - fix(gradient):移除无效的决策分支
#3226 - fix(txt):如果 letter_uni 超出范围则返回 0
#3224 - fix(calendar):修复可能的数组越界访问
#3223 - fix(style):移除无用的空指针判断
#3222 - fix(obj):使用 lv_obj_set_parent() 时的滚动异常
#3210 - fix(libs):修复 memcmp 内存访问溢出
#3205 - fix(png):修复可能的文件泄漏
#3204 - fix(docs):将 task-handler.md 重命名为 timer-handler.md
#3203 - fix(lru):修复未定义变量的使用
#3181 - fix(rt-thread):Sconscript 使用 LOCAL_CFLAGS 替换 LOCAL_CCFLAGS
#3196 - fix(make):修复 draw/gpu 下的文件
#3202 - fix(docs-CN):修复 get-started 目录中的文档断链
#3195 - fix:修复 get-started 目录中的文档断链
#3190 - fix(indev):修复使用 %d 格式化 uint32_t 的警告
#3193 - fix(Kconfig):将 LV_USE_IMGFONT 移动到其他菜单
#3176 - fix(draw):当 LV_DRAW_COMPLEX 为 '0' 时 src_buf_tmp 将为 NULL
#3163 - fix(span):对齐基线
#3164 - fix(menu):修复删除时崩溃
#3154 - fix(Kconfig):添加缺失的 LV_USE_THEME_MONO
#3146 - fix(demo/stress):移除未使用的资源
#3139 - fix(jpg):当宏 LV_COLOR_16_SWAP 为 1 时交换高低字节
#3138 - fix(script):在 lv_conf_internal 中修复使用 Kconfig 时的一些控件依赖关系
#3119 - fix(demo):基准测试的小修复
#3114 - fix(misc):在 lv_map() 中处理最大值小于最小值的情况
#3113 - fix(extra):调整图像解码器初始化顺序
#3085 - fix(chart):优化图表失效
#3028 - fix(refr):修复性能监视器 NULL 指针访问
#3105 - fix(misc):移除 _lv_log_add 的重复声明
#3103 - fix(gridnav):从实际事件获取键码
#3101 - fix(draw_rect):删除 STDC_VERSION 以确保 C++ 兼容性
#3099 - fix(font):如果 get_glyph_dsc() 返回 false 则绘制占位符
#3000 - fix(conf):解决 GCC bug
#3082 - fix(fsdrv):为安全起见,用 lv_snprintf 替换 sprintf
#3079 - fix(cmsis-pack):为 cmsis-pack 添加 PIDX
#3064 - fix(fs):修复缓存读取并为 lv_fs 添加单元测试
98660a8 - fix(table):仅使更改的单元格失效
306fa19 - fix(draw):处理 ARGB 绘制的非 BLEND_MODE_NORMAL
9ac8ce6 - fix(draw):恢复处理非 MAIN 部分上的 style_opa
51a7a61 - fix(draw):在 lv_draw_sw_rect 中将 bg img 裁剪到矩形区域
77d726e - fix(obj):修复 LV_OBJ_FLAG_OVERFLOW_VISIBLE
c742f2c - fix(scroll):不要在每个滚动步骤上触发滚动开始/结束事件
25ce6e3 - fix(indev):不要向禁用状态的对象发送按键
b0a46c4 - fix(disp):使 lv_scr_load 与 lv_scr_load_anim 和 auto_del = true 更好地配合工作
52287fd - fix(draw):为混合模式创建中间图层
8b15007 - fix(group):在 lv_group_remove() 中修复要聚焦的对象被删除的问题
72cb683 - fix(draw):确保角度值在正确的范围内
e624b90 - fix(scroll):在没有动画时也发送 LV_EVENT_SCROLL_BEGIN/END
777fe1e - fix(arc):修复圆弧图像绘制问题
7153e3f - fix(refr):修复内存写入越界问题
13c99fc - fix(gif):修复绘制 gif 背景时的罕见问题
b1e2c06 - fix(chart):修复条形图上水平刻度线未对齐的问题
4572a0c - fix(font):对不可打印字符使用 0 宽度
7cf5709 - fix(keyboard):在映射更改时不显示弹出窗口
ac202e7 - fix(refr):考虑带有 LV_OBJ_FLAG_OVERFLOW_VISIBLE 的遮罩
a7f9dfa - fix(draw):修复变换坐标的计算
76de7c6 - fix(style):修复过渡样式的堆释放后使用
d9ae58b - fix(tabview, tileview):修复滚动
22854ff - fix(draw):修复 disp_bg_img 绘制
dea75d9 - fix(textarea):修复最大长度处理
127d8e8 - fix(btnmatrix):修复额外绘制大小计算以不裁剪阴影
7ada130 - fix(indev):当 vect 为负数时 scroll_throw_vect 无法收敛到 0
e5c11f1 - fix(theme):使基本主题更加简单
62d6f3c - fix(color):颜色混合舍入错误
523062b - fix(style):_lv_style_prop_lookup_flags 告知 LV_STYLE_PROP_ANY 的所有标志
e53f602 - fix(list):使用正确的图标格式
b171f7d - fix(layout):修复 FLOATING 子对象的处理
48728a7 - fix(style):使颜色过滤器可继承
5546b9d - fix(spinbox):在其类中设置其默认宽度
3d92972 - fix(draw):修复细分区域上的变换
cbff8e8 - fix(slider):修复范围模式下的左旋钮
17f5e0a - fix(Kconfig):允许取消选中 LV_CONF_SKIP
f3a07a3 - fix(style):修复在半径过渡中对宽度和高度都使用 width
6acbdaa - fix(dropdown):修复选项居中对齐时的滚动
e651383 - fix(grid):修复死分支
46bf27d - fix(hal):无论 LV_COLOR_SCREEN_TRANSP 如何,默认禁用 driver->screen_transp
ff7204e - fix(theme):修复单色主题初始化
5ec6694 - fix(bmp):修复 BPP 条件中的拼写错误
cbc38af - fix(theme):在基本主题中仅在聚焦状态下显示文本区域光标
bb03fb1 - fix(draw):修复图像重新着色
23eecce - fix(theme):在默认主题中向文本区域添加禁用样式
00f6759 - fix(meter):提高刻度线绘制的精度
0255c6d - fix(gpu):修复 NXP GPU 的警告
6be43b8 - fix(color):补偿混合期间的舍入错误
42d9c07 - fix(examples):使用类型安全函数检索事件参数
71d535d - fix(draw):确保变量被初始化以避免警告
276f28a - fix(spinbox):将 lv_spinbox_set_pos 重命名为 lv_spinbox_set_cursor_pos
a99eb6b - fix(layout):使用 uint16_t LV_LAYOUT_FLEX/GRID
c596a36 - fix(event):避免将布尔值用作指针
06fff4b - fix(theme):如果 LV_THEME_DEFAULT_TRANSITION_TIME==0 则正确禁用过渡
242112b - fix(scroll):修复向左滚动到视图
7c74f65 - fix(fs):默认将读取缓存标记为无效
54f9987 - fix(menu):修复删除时崩溃
a6c4c13 - fix(roller):修复无限模式下的意外跳跃
18f2d78
示例#
- example(ime_pinyin):改进 lv_example_ime_pinyin_1
#3428 - example(imgfont):修复 lvgl.h 包含路径
#3405 - example(btnmatrix):更新 lv_example_btnmatrix_2 以明确检查绘制了哪个部分
6b2eac1 - example(slider):使 lv_example_slider_3 也适用于深色主题
4a766c5 - example(span):避免歧义
7bb09e3 - demo(benchmark):添加 LV_DEMO_BENCHMARK_RGB565A8 选项
afaa8c9
文档#
- docs(indev):在输入设备部分添加注释
#3422 - docs(slider):提及 VALUE_CHANGED 不会在释放时发送
#3397 - docs(readme):添加葡萄牙语(巴西)版本
#3349 - docs(pc-simulator):添加带 FastModel 的 MDK
#3318 - docs(intro):更新至 v8.2.0
#3316 - docs(readme):更新 PlatformIO 注册表的链接
#3296 - docs(gesture):修复拼写错误 lv_indev_act() → lv_indev_get_act()
#3291 - docs(scroll):添加有关滚动坐标的信息
#3088 - docs(msgbox):修复拼写错误
#3095 - docs(scroll):使用 LV_DIR_VER 而不是 LV_DIR_TOP
#3066 - docs:重新排列入门部分
8a81532 - docs:添加渲染器和 gpu 部分
378aaa6 - docs:默认折叠 API
ebd20af - docs(images):修复关于 v8.2 中破坏性变更的注释
9a1e385 - docs(sim):添加 qt-creator 链接
88bbef1 - docs(chart):描述如何设置列之间的间距
746917d - docs(README):修复断链
c2c44c6 - docs(examples):在加载示例时避免重定向
d367bb7 - docs(gesture):描述如何在手势后阻止发送事件
65db5c9 - docs(get-started):将 quick-overview 添加到索引
91ebf81 - docs(others):将 imgfont 添加到索引
656a0e5
CI 和测试#
- ci(slider):添加单元测试
#3198 - test(line):为线控件添加单元测试
#3104 - test(table):复现减少表格单元格时的问题
#3121 - test(textarea):添加单元测试
#3074 - test(table):添加单元测试
#3040 - ci(docs):用正确的配置变量替换 sed 的使用
1816fa5 - ci:添加 Makefile 测试
ea79cee - test(mem):添加内存处理测试
9700664 - test(img):修复图像错误差异处理程序
48d87e1 - ci:更新文档构建器以使用 Python 3.10
a3d66c9 - ci:确保 LVGL 断言导致测试失败
b83c5aa - ci:移除格式化注释
d345f76 - ci:不要在 PR 上运行工作流两次
fcc1152 - ci:将测试超时提升至 30 秒
85e3e23 - ci:将测试限制为 15 秒
003f18f - ci(makefile):修复 GitHub action 中的拼写错误
a101e70 - ci(switch):修复内存泄漏测试
8481e3a - ci(stale):升级 action 版本
5977eef - ci:在 ARM 测试上也使用 GCC 问题匹配器
9fcefe5
