LVGL v9官方文档完美翻译(第三部分)

Layout

Flex

概述

Flexbox(简称为Flex)是CSS Flexbox的一个子集。
它可以将项目安排成行或列(tracks),处理换行,调整项目和tracks之间的间距,处理_grow_以使项目根据最小/最大宽度和高度填充剩余空间。
要将一个对象设置为flex容器,可以调用lv_obj_set_layout(obj, LV_LAYOUT_FLEX)。
请注意,LVGL的flex布局功能需要在lv_conf.h中通过LV_USE_FLEX全局启用。

术语

  • tracks:行或列
  • 主方向:行或列,即项目排列的方向
  • 交叉方向:与主方向垂直的方向
  • 换行:如果在当前track中没有更多空间,则开始新的track
  • grow:如果在项目上设置了grow,它将扩展以填充track上的剩余空间。可用空间将根据项目的grow值分配(值越大,分配的空间越多)
  • 间隙:行和列之间或track上的项目之间的空间

简单接口

使用以下函数可以在任何父对象上设置Flex布局。

Flex流动

lv_obj_set_flex_flow(obj, flex_flow)
flex_flow的可能值有:

Flex对齐

要管理子项的放置,请使用lv_obj_set_flex_align(obj, main_place, cross_place, track_cross_place)

  • main_place确定如何在主轴上分配track中的项目。例如,将项目推到LV_FLEX_FLOW_ROW_WRAP上的右侧。(在CSS中称为justify-content
  • cross_place确定如何在交叉轴上分配track中的项目。例如,如果项目具有不同的高度,将它们放置在track的底部。(在CSS中称为align-items
  • track_cross_place确定如何分配tracks(在CSS中称为align-content
    可能的值有:
  • LV_FLEX_ALIGN_START:在水平方向上为左,在垂直方向上为上(默认)
  • LV_FLEX_ALIGN_END:在水平方向上为右,在垂直方向上为下
  • LV_FLEX_ALIGN_CENTER:居中
  • LV_FLEX_ALIGN_SPACE_EVENLY:项目分配均匀,任何两个项目之间的间距(以及到边缘的空间)相等。不适用于track_cross_place
  • LV_FLEX_ALIGN_SPACE_AROUND:项目在track中均匀分布,周围间距相等。请注意,视觉上间距并不相等,因为所有项目在两侧都有相等的空间。第一个项目与容器边缘之间有一个单位的空间,但下一个项目之间有两个单位的空间,因为下一个项目有自己的间距。不适用于track_cross_place
  • LV_FLEX_ALIGN_SPACE_BETWEEN:项目在track中均匀分布:第一个项目在起始线,最后一个项目在终止线。不适用于track_cross_place
Flex grow

Flex grow可以用于使一个或多个子项填充track上的可用空间。当多个子项具有grow参数时,可用空间将按grow值成比例分配。例如,有400像素的剩余空间和4个具有grow的对象:

  • A的grow值为1
  • B的grow值为1
  • C的grow值为2
    AB将各自占100像素大小,而C将占200像素大小。
    可以通过lv_obj_set_flex_grow(child, value)在子项上设置flex grow。value需要大于1或0以禁用子项上的grow。

样式接口

所有与Flex相关的值都是样式属性,可以像其他样式属性一样使用它们。
以下是存在的flex相关样式属性:

  • FLEX_FLOW
  • FLEX_MAIN_PLACE
  • FLEX_CROSS_PLACE
  • FLEX_TRACK_PLACE
  • FLEX_GROW
内部填充

要修改Flexbox在对象之间插入的最小空间,可以在flex容器样式上设置以下属性:

  • pad_row设置行之间的填充。
  • pad_column设置列之间的填充。
    例如,如果不希望对象之间有任何填充,可以使用lv_style_set_pad_column(&row_container_style, 0)来设置。

其他功能

RTL

如果容器的基础方向设置为LV_BASE_DIR_RTL,则在ROW布局中LV_FLEX_ALIGN_STARTLV_FLEX_ALIGN_END的意义将会互换。即START将表示右。
ROW布局中,项目将从右到左排列,而在COLUMN布局中,tracks将从右到左排列。

新track

你可以通过lv_obj_add_flag(child, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)强制Flex将项目放入新行。

Grid

概述

Grid布局是CSS Grid的一个子集。
它可以将项目排列成一个具有行或列(tracks)的二维“表格”。项目可以跨越多个列或行。track的大小可以设置为像素、最大项目的大小(LV_GRID_CONTENT)或“自由单位”(FR),以按比例分配剩余空间。
要将一个对象设置为grid容器,可以调用lv_obj_set_layout(obj, LV_LAYOUT_GRID)。
请注意,LVGL的grid布局功能需要在lv_conf.h中通过LV_USE_GRID全局启用。

术语

  • tracks:行或列
  • 自由单位(FR):如果track的大小设置为FR,它将扩展以填充父容器的剩余空间。
  • 间隙:行和列之间或track上项目之间的空间

简单接口

使用以下函数,可以轻松地在任何父对象上设置Grid布局。

Grid描述符

首先需要描述行和列的大小。可以通过声明两个数组并在其中设置track大小来完成。最后一个元素必须是LV_GRID_TEMPLATE_LAST
例如:

static int32_t column_dsc[] = {100, 400, LV_GRID_TEMPLATE_LAST};   /*两列,宽度分别为100和400像素*/
static int32_t row_dsc[] = {100, 100, 100, LV_GRID_TEMPLATE_LAST}; /*三行,每行高度为100像素*/

要在父对象上设置描述符,请使用lv_obj_set_grid_dsc_array(obj, col_dsc, row_dsc)。
除了简单的像素大小设置外,你还可以使用两个特殊值:

  • LV_GRID_CONTENT 将大小设置为适应此track上的最大子项
  • LV_GRID_FR(X) 指定此track应使用剩余空间的比例。值越大,分配的空间越多。
Grid项目

默认情况下,子项不会自动添加到grid中。需要手动将它们添加到单元格中。
为此,调用lv_obj_set_grid_cell(child, column_align, column_pos, column_span, row_align, row_pos, row_span)。
column_alignrow_align确定如何在单元格中对齐子项。可能的值有:

  • LV_GRID_ALIGN_START:在水平方向上表示左对齐,在垂直方向上表示顶部对齐(默认)
  • LV_GRID_ALIGN_END:在水平方向上表示右对齐,在垂直方向上表示底部对齐
  • LV_GRID_ALIGN_CENTER:居中对齐
    column_posrow_pos表示项目应放置的单元格的从零开始的索引。
    column_spanrow_span表示项目应跨越的track数。必须>= 1
Grid对齐

如果有一些空余空间,可以通过多种方式对齐track:

  • LV_GRID_ALIGN_START:在水平方向上表示左对齐,在垂直方向上表示顶部对齐(默认)
  • LV_GRID_ALIGN_END:在水平方向上表示右对齐,在垂直方向上表示底部对齐
  • LV_GRID_ALIGN_CENTER:居中对齐
  • LV_GRID_ALIGN_SPACE_EVENLY:项目分布均匀,任何两个项目之间的间距(以及到边缘的空间)相等。不适用于track_cross_place
  • LV_GRID_ALIGN_SPACE_AROUND:项目在track中均匀分布,周围间距相等。请注意,视觉上间距并不相等,因为所有项目在两侧都有相等的空间。第一个项目与容器边缘之间有一个单位的空间,但下一个项目之间有两个单位的空间,因为下一个项目有自己的间距。不适用于track_cross_place
  • LV_GRID_ALIGN_SPACE_BETWEEN:项目在track中均匀分布:第一个项目在起始线,最后一个项目在终止线。不适用于track_cross_place
    要设置track的对齐方式,请使用lv_obj_set_grid_align(obj, column_align, row_align)。
子Grid

如果将一个控件的列和/或行grid描述符设置为NULL,它将使用父控件的grid描述符。例如,如果你在父控件的2到6列和1到3行上创建一个grid项目,该grid项目将看到5列和4行,并使用相应的父控件的track大小。
这样,即使在grid上使用包装项目,也可以从grid的角度将其“透明化”。
限制:

  • 子grid仅在一级深度解析。也就是说,grid可以有一个子grid,但子grid不能再有其他子grid。
  • LV_GRID_CONTENT tracks在子grid中不会处理,只会在其自身的grid中处理。
    子grid功能与CSS中的工作方式相同。有关详细信息,请参见此描述

样式接口

所有与Grid相关的值都是样式属性,可以像其他样式属性一样使用它们。
以下是存在的grid相关样式属性:

  • GRID_COLUMN_DSC_ARRAY
  • GRID_ROW_DSC_ARRAY
  • GRID_COLUMN_ALIGN
  • GRID_ROW_ALIGN
  • GRID_CELL_X_ALIGN
  • GRID_CELL_COLUMN_POS
  • GRID_CELL_COLUMN_SPAN
  • GRID_CELL_Y_ALIGN
  • GRID_CELL_ROW_POS
  • GRID_CELL_ROW_SPAN
内部填充

要修改Grid在对象之间插入的最小空间,可以在grid容器样式上设置以下属性:

  • pad_row设置行之间的填充。
  • pad_column设置列之间的填充。

其他功能

RTL

如果容器的基础方向设置为LV_BASE_DIR_RTLLV_GRID_ALIGN_STARTLV_GRID_ALIGN_END的意义将会互换。即START将表示最右侧。
列将从右到左排列。

第三方库

文件系统接口(File System Interfaces)

LVGL提供了一个文件系统模块,为各种文件系统驱动程序提供抽象层。
LVGL内置支持以下文件系统:

  • FATFS
  • STDIO(Linux和Windows,使用C标准函数,例如fopenfread
  • POSIX(Linux和Windows,使用POSIX函数,例如openread
  • WIN32(Windows,使用Win32 API函数,例如CreateFileAReadFile
  • MEMFS(从内存缓冲区读取文件)
    你仍然需要提供驱动程序和库,此扩展仅提供FATFS、STDIO、POSIX、WIN32和LVGL之间的桥梁。

使用方法

lv_conf.h中启用LV_USE_FS_...,并将一个大写字母分配给LV_FS_..._LETTER(例如,'S')。之后,你可以使用该驱动程序字母访问文件。例如:"S:path/to/file.txt"
可以使用LV_FS_..._PATH设置工作目录。例如:"/home/joe/projects/"。实际的文件/目录路径将附加在该路径后面。
如果LV_FS_..._CACHE_SIZE设置为非零值,则支持缓存读取。lv_fs_read()会缓存此大小的数据,以减少实际从存储器读取的次数。
要使用内存映射文件仿真,需要创建并初始化一个lv_fs_path_ex_t对象。这个对象可以作为文件名传递给lv_fs_open()

lv_fs_path_ex_t mempath;
lv_fs_file_t file;
uint8_t *buffer;
uint32_t size;

/*初始化缓冲区*/
...

lv_fs_make_path_from_buffer(&mempath, LV_FS_MEMFS_LETTER, (void*)buffer, size);
lv_fs_res_t res = lv_fs_open(&file, (const char *)&mempath, LV_FS_MODE_RD);

此示例展示了如何初始化内存路径并打开文件以进行读取。

API

lv_fs.h

BMP decoder

此扩展允许在LVGL中使用BMP图像。
库源代码:bmp-decoder
像素是按需读取的(而不是整个图像被加载),因此使用BMP图像需要非常少的RAM。
如果在lv_conf.h中通过LV_USE_BMP启用,LVGL会自动注册一个新的图像解码器,这样BMP文件可以直接用作图像源。例如:

lv_image_set_src(my_img, "S:path/to/picture.bmp");

请注意,需要注册一个文件系统驱动程序才能从文件中打开图像。有关更多信息,请阅读文件系统部分,或者在lv_conf.h中启用一个LV_USE_FS_...

限制

  • 仅支持BMP文件,不支持BMP图像作为C数组(lv_image_dsc_t)。这是因为BMP文件和LVGL的图像格式在存储图像数据方面没有实际差异。
  • BMP文件只能从文件中加载。如果你想将它们存储在闪存中,最好使用LVGL的图像转换器将它们转换为C数组。
  • BMP文件的颜色格式需要与LV_COLOR_DEPTH匹配。使用GIMP将图像保存为所需格式。RGB888和ARGB888都适用于LV_COLOR_DEPTH 32
  • 不支持调色板。
  • 因为没有读取整个图像,所以不能进行缩放或旋转。

其他

File Explorer

lv_file_explorer 提供了一个API来浏览文件系统的内容。lv_file_explorer仅提供文件浏览功能,并不提供实际的文件操作功能。换句话说,你不能像在PC上一样点击图片文件来打开和查看图片。lv_file_explorer会告诉你当前点击文件的完整路径和名称,文件操作功能需要用户自行实现。
lv_file_explorer中的文件列表基于lv_table.h,快捷访问栏基于lv_list.h。因此,需要确保启用了lv_table.hlv_list.h

使用方法

lv_conf.h中启用LV_USE_FILE_EXPLORER
首先使用lv_file_explorer_create(lv_screen_active())来创建一个文件浏览器,默认大小为屏幕大小。之后,你可以像小部件一样自定义样式。

快捷访问

快捷访问栏是可选的。你可以在lv_conf.h中关闭LV_FILE_EXPLORER_QUICK_ACCESS,这样快捷访问栏将不会被创建。这样可以节省一些内存,但不会很多。快捷访问栏创建后,可以通过点击浏览区域左上角的按钮将其隐藏,这对于小屏幕设备非常有用。
你可以使用lv_file_explorer_set_quick_access_path(file_explorer, LV_FILE_EXPLORER_QA_XX, "path")来设置快捷访问栏的路径。目前有以下项目:

  • LV_FILE_EXPLORER_QA_HOME
  • LV_FILE_EXPLORER_QA_MUSIC
  • LV_FILE_EXPLORER_QA_PICTURES
  • LV_FILE_EXPLORER_QA_VIDEO
  • LV_FILE_EXPLORER_QA_DOCS
  • LV_FILE_EXPLORER_QA_MNT
  • LV_FILE_EXPLORER_QA_FS
排序

你可以使用lv_file_explorer_set_sort(file_explorer, LV_EXPLORER_SORT_XX)来设置排序方法。
目前有以下排序方法:

  • LV_EXPLORER_SORT_NONE
  • LV_EXPLORER_SORT_KIND
    你可以自定义排序。自定义排序之前,请将默认排序设置为LV_EXPLORER_SORT_NONE。默认排序是LV_EXPLORER_SORT_NONE

事件

  • LV_EVENT_READY:目录打开时发送。你可以自定义排序。
  • LV_EVENT_VALUE_CHANGED:文件列表中的项目(文件)被点击时发送。
    你可以在事件处理函数中使用lv_file_explorer_get_cur_path()获取当前路径,并使用lv_file_explorer_get_sel_fn()获取当前选中文件的名称。例如:
static void file_explorer_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * obj = lv_event_get_target(e);

    if(code == LV_EVENT_VALUE_CHANGED) {
        char * cur_path = lv_file_explorer_get_cur_path(obj);
        char * sel_fn = lv_file_explorer_get_sel_fn(obj);
        LV_LOG_USER("%s%s", cur_path, sel_fn);
    }
}

你还可以通过strcpy()strcat()等函数将获得的路径文件名保存到数组中以供以后使用。

ChangeLog

v9.0.0

迁移指南

由于v9是一个主要版本,它包含了一些会导致API不兼容的变更。虽然v9的大部分概念变化是内部的,但API也受到了影响,一些组件进行了重命名和重构。

重要提示

如果你要将v8项目更新到v9,需要特别注意以下几点,因为某些部分:

  • 不会导致编译错误,但可能会因为相关问题而无法正常运行LVGL
  • 会导致难以理解的编译错误
    特别注意以下几点:
  • :cpp:func:lv_display_set_buffers(display, buf1, buf2, buf_size_byte, mode) 大致相当于v8中的 lv_disp_draw_buf_init(&draw_buf_dsc, buf1, buf2, buf_size_px),但在v9中,缓冲区大小是以字节为单位设置的。
  • 在v9中,lv_color_t总是RGB888,无论LV_COLOR_DEPTH如何设置。
  • lv_conf.h 发生了很多变化,所以不要忘记从 lv_conf_template.h 更新它。
  • 确保在 lv_conf.h没有包含 <stdint.h>。在v9中,我们有一些汇编部分以实现更好的性能,随意的包含会导致汇编部分出错。
  • 在线图像转换器尚未更新。在此之前,请使用 LVGLImage.py
主要新特性
  • 运行时显示颜色格式调整,支持RGB888
  • 内置支持pthreadFreeRTOS和其他用于渲染的(RT)OSes
  • 内置支持LVGL的C库和其他标准库
  • 更好的并行渲染架构,详见 :ref:here
  • 内置显示和触摸驱动:支持SDL、Linux Frame buffer、NuttX LCD和触摸驱动、ST7789和ILI9341驱动,更多驱动即将推出
  • :ref:observer 允许将数据绑定到UI元素,创建统一且易于维护的API
  • GitHub CodeSpace集成,使LVGL可以在在线VSCode编辑器中运行,只需三次点击。详见此处
  • 通过ThorVG添加矢量图形支持。可用于在Canvas上绘制矢量图形
  • :ref:lv_image 支持对图像源进行对齐、拉伸或平铺,如果组件比图像源大或小
通用API更改

虽然lv_api_map.h 解决了大部分重构问题,但我们鼓励您直接使用最新的API。

  • lv_disp_... 重命名为 lv_display_...
  • btn_... 重命名为 button_...
  • btnmatrix_... 重命名为 buttonmatrix_...
  • img_... 重命名为 image_...
  • zoom 重命名为 scale
  • angle 重命名为 rotation
  • scr 重命名为 screen
  • act 重命名为 active
  • del 重命名为 delete
  • col 重命名为 column
  • lv_obj_clear_flag 重命名为 lv_obj_remove_flag
  • lv_obj_clear_state 重命名为 lv_obj_remove_state
  • lv_coord_t 被移除,替换为 int32_t
新颜色格式管理
  • LV_IMG_CF_...LV_COLOR_FORMAT_... 取代
  • 支持 LV_COLOR_DEPTH 24 用于RGB888渲染
  • lv_color_t 始终表示RGB888
显示API
  • lv_disp_drv_tlv_disp_draw_buf_t 被移除
  • 创建并设置显示的方法:
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);
  • 注意,现在缓冲区大小以字节为单位,而不是像素
  • mode
    
    可以是:
    • LV_DISPLAY_RENDER_MODE_PARTIAL:这样缓冲区可以比显示屏小,以节省RAM。建议至少使用1/10屏幕大小的缓冲区。
    • LV_DISPLAY_RENDER_MODE_DIRECT:缓冲区必须为屏幕大小,LVGL会将内容渲染到缓冲区的正确位置。这样缓冲区始终包含整个图像。使用两个缓冲区时,缓冲区内容会自动保持同步。(旧版v7行为)
    • LV_DISPLAY_RENDER_MODE_FULL:始终重绘整个屏幕。使用两个缓冲区是标准的双缓冲。
  • 类似于组件,现在可以为显示附加事件,使用 lv_display_add_event()
  • monitor_cb 被移除,改为触发 LV_EVENT_RENDER_READY 事件
  • 取消显示背景颜色和图像,添加 lv_layer_bottom(),可以在其中设置任何颜色或创建任何组件
  • 可以在运行时通过调用 lv_display_set_color_format(disp, LV_COLOR_FORMAT_...) 调整显示的目标颜色格式
  • LV_COLOR_16_SWAP 被移除,可以在 flush_cb 中手动调用 lv_draw_sw_rgb565_swap() 以进行就地交换
  • disp_drv.scr_transp 被移除,可以改用 lv_display_set_color_format(disp, LV_COLOR_FORMAT_NATIVE_ALPHA)
  • set_px_cb 被移除,可以在 flush_cb 中转换渲染后的图像
  • 更多细节,请查看文档 here /porting/display>__here /overview/display>__
输入设备API
  • 类似于显示,lv_indev_drv_t 被移除,可以像这样创建输入设备:
  • 类似于组件,现在可以为输入设备附加事件,使用 lv_indev_add_event()
  • feedback_cb 被移除,改为向输入设备发送 LV_EVENT_PRESSED/CLICKED/etc 事件
lv_indev_t * indev = lv_indev_create();
lv_indev_set_type(indev, LV_INDEV_TYPE_...);
lv_indev_set_read_cb(indev, read_cb);

其他

  • lv_msg 被移除,替换为 lv_observer
  • lv_chart 刻度支持被移除,可以使用 lv_scale 代替
  • lv_msgbox 更新为更灵活。它使用普通按钮代替按钮矩阵
  • lv_tabview 更新为使用真实按钮而非按钮矩阵

v9.1.0 2024年3月20日

新特性

  • feat(indev) 添加对指针输入设备的表冠支持 5057
  • feat(test): 测试二进制图像是否加载到RAM 5895
  • feat(script): 将trace_filter默认跟踪日志文件更改为log_file.systrace 5900
  • feat(vg_lite): 根据opa自动选择路径类型 5896
  • feat(freertos): 支持Espressif的FreeRTOS版本 5862
  • feat(tests): 添加freetype字体压力测试 5828
  • feat(vg_lite): 添加描边路径支持 5831
  • feat(docs): 添加中文翻译(跳转链接) 5839
  • feat(ci): 更新发行版到ubuntu 22.02以修复freetype构建问题 5834
  • feat(image_cache): 为图像缓存添加调整大小功能 5829
  • feat(nuttx): 添加CPU空闲获取器 5814
  • feat(test): 为步幅调整测试添加多种颜色格式 5690
  • feat(libjpeg_turbo): 添加JPEG图像EXIF数据解析 5263
  • feat(freetype): 更改斜体freetype字体的倾斜度 5812
  • feat(vg_lite): 添加矩阵断言 5766
  • feat(vg_lite): 添加渐变缓存大小配置和自动释放缓存 5731
  • feat(draw_buf): 支持draw_buf_copy中的索引图像 5686
  • feat(nuttx): 更新显示驱动 5752
  • feat(fs): 实现littlefs lfs.h驱动支持 5562
  • feat(test_keyboard): 添加键盘测试 5739
  • feat(x11): 添加LV_KEYs 5704
  • feat(display): 添加保存截图到文件支持 5481
  • feat(decoder): 如果设置了“no_cache”,则不尝试缓存 5688
  • feat(event): 返回事件dsc以便稍后移除 5630
  • feat(keyboard) 添加Home和End键映射 5675
  • feat(draw_buf): 区分lv_image_dsc_t和lv_draw_buf_t 5496
  • feat(indev): 在滚动时移除PRESSED状态 5660
  • feat(sysmon): 显示最大内存使用量 5661
  • feat(image_decoder): 添加步幅警告 5471
  • feat(image, layer): 添加位图遮罩功能 5545
  • feat(draw-sw): 添加简单的Helium加速 5596
  • feat(cache): 使用统一的缓存条目释放回调 5612
  • feat(draw_buf): 使用draw_buf作为invalidate_cache API的参数 5602
  • feat(script): 添加ARGB8565格式支持 5593
  • feat(vg_lite): 添加ARGB8565支持 5592
  • feat(vg_lite): 添加GPU空闲刷新 5571
  • feat(vg_lite_tvg): 添加缓冲区地址对齐配置 5576
  • feat(vg_lite/vector): 为不支持剪刀的兼容处理添加功能 5572
  • feat(vg_lite): 移除对RGB565A8的支持 5574
  • feat(vg_lite_label): 将路径质量升级为HIGH 5556
  • feat(font_glyph_format): 将绘制和字体格式重构为lv_font_glyph_format_t 5540
  • feat(vg_lite): 添加索引格式解码支持 5476
  • feat(vector): 添加API以附加弧线 5510
  • feat(nuttx_image_cache): 添加独立的图像缓存堆支持 5528
  • feat(cache): 重构缓存框架并添加新API 5501
  • feat(drivers): 添加libinput/xkb驱动 5486
  • feat(draw_buf): 杂项更新 5498
  • feat(draw): 添加方便的方法以安全地获取正确的绘制描述符 5505
  • feat(profiler): 添加多线程支持和测试用例 5490
  • feat(doc): 更新显示相关文档以适应新API 5489
  • feat(image_cache): 添加图像头缓存删除功能 5472
  • feat(fbdev): 添加文档并允许强制刷新 5444
  • feat(script): 添加工具以查看二进制图像 5451
  • feat(vg_lite): 添加分析仪工具 5434
  • feat(draw_letter): 适配lv_font_glyph_format_t用于draw_letter过程 3c1a765
  • feat(color): 添加ARGB8565颜色格式 86016a8

性能优化

  • perf(draw): 对rgb565颜色混合进行小优化 5603
  • perf(draw): 使用更简单
    的图层清除方法
    5470
  • perf(vg_lite): 添加异步渲染支持 5398

修复

  • fix(obj_tree): 修复对象删除时意外的点击触发 5907
  • fix(monkey): 添加缺失的包含文件 5903
  • fix(demo/vector_graphic): 添加缺失的缓冲区清除 5898
  • fix(image): 修复当LV_BIN_DECODER_RAM_LOAD == 0时的图像解码器 5892
  • fix(indev): 修复等待释放时无法清除的滚动对象 5833
  • fix(vglite): 更新NXP的VGLite实现 5887
  • fix(imagebutton): 修复中间部分的裁剪区域 5849
  • fix(drm): 默认为XRGB8888帧缓冲区 5851
  • fix(vg_lite): 修复描边路径内存泄漏 5883
  • fix(ci): 通过Ubuntu 22.04镜像中的ASAN错误 5867
  • fix(conf): 修正导致thorvg未启用的拼写错误 5837
  • fix(indev): 始终保存最后一个键 5795
  • fix(fsdrv/fatfs): 修复fs_dir_read中未检测到条目结束的问题 5826
  • fix(layer): 在状态更改时更新缓存的图层类型 5801
  • fix(file_explorer): 修复快速访问编译错误 5783
  • fix(msgbox): 在lv_msgbox_get_footer中返回页脚 5804
  • fix(x11): 修复删除时的断言 5799
  • fix(demo_music): 修复音乐演示中的上一曲按钮不可点击的问题 5808
  • fix(draw): 修复未抗锯齿的rgb565a8变换 5782
  • fix(freetpye): 修复设置斜体时字体绘制不完整的问题 5807
  • fix(fsdrv): 添加缺失的lv_fs_littlefs_init函数声明 5778
  • fix(vg_lite): 修复在垂直或水平方向上的错误渲染问题 5789
  • fix(env): 在ESP配置中添加*.cpp全局配置 5761
  • fix(draw): 修复缩放区域的失效问题 5548
  • fix(warning): 变量已设置但未使用 5757
  • fix(draw): 修复使用LV_BLEND_MODE_MULTIPLY的rgb565问题 5749
  • fix(api_map_v8): 添加一些缺失的函数 5710
  • fix(refr): 在直接模式下修复ARGB8888缓冲区清除问题 (#5741) 5758
  • fix(draw_buf): 按顺序初始化结构体成员 5753
  • fix(refr): 在部分更新模式下考虑步幅 5741
  • fix(x11): 修正拼写错误 5742
  • fix(draw_vector): 检查路径中点的长度在lv_vector_path_get_bounding中 5734
  • fix(vg_lite): 修复绘制图层绘制不完整问题 5729
  • fix(test_span): 修复img包含span_1.png,但代码中没有的问题 5736
  • fix(vg_lite): 修复绘图命令累积 5730
  • fix(vg_lite): 修复矢量渲染填充dsc矩阵未生效 5728
  • fix(stdlib): 修复使用LVGL TLSF内存池管理超过4 GiB内存时的问题 5720
  • fix(vg_lite): 移除多余的MOVE_TO操作 5713
  • fix(nuttx): 修复编译警告 5701
  • fix(draw_vector): 移除多余的MOVE_TO操作 5715
  • fix(draw_buf): 使用高度作为循环条件而不是检查数据指针 5687
  • fix(vg_lite): 修复圆角矩形显示精度丧失问题 5714
  • fix(test): 检查编译器标志不应包含’_’ 5706
  • fix(imagebutton): 修复示例 5719
  • fix(drm): 消除对不存在的lv_api_map.h的使用并启用烟雾测试 5694
  • fix(test): 启用-Wpedantic 5676
  • fix(pxp): 修复pxp缓存管理回调中的问题 5685
  • fix(windows): 通过使用高分辨率滴答计数和定时器延迟实现提高图形性能 5711
  • fix(windows): 改进文档 5699
  • fix(example): 修复lv_example_obj_2 5697
  • fix(draw): 修复禁用LV_DRAW_SW_COMPLEX时的编译错误 5695
  • fix(test): 允许在本地Mac上运行测试 5672
  • fix(sdl): 修复lv_display_delete上的缓冲区内存泄漏 5692
  • fix(decoder): 解码后的图像应始终与原始图像具有相同的宽高 5689
  • fix(cache): 修复警告 [5671](https://github.com/lvgl/lvgl
    /pull/5671)
  • fix(dave2d): 跟随lvgl变化 5659
  • fix(vg_lite): 修复decoder_close中的拼写错误 5683
  • fix(vg_lite): 使用浮点数代替整数以避免类型转换 5682
  • fix(formatting): 修复代码格式 5673
  • fix(freetype): 在禁用LV_USE_FS_MEMFS时修复构建失败 5651
  • fix(array): 使用memmove代替memcopy 5656
  • fix(image): 修复错误的日志级别声明 5655
  • fix(tests): 修复test_img_emoji_F617.c的错误包含路径 5652
  • fix(FreeRTOS): 栈大小计算 5647
  • fix(benchmark): 修复FPS计算 5646
  • fix(label): 考虑最大宽度 5644
  • fix(demo): 修复矢量演示中的内存泄漏 5643
  • fix(calendar): 修复未设置默认值时的崩溃 5621
  • fix(freetype): 修复使用memfs创建FT字体的问题 5627
  • fix(indev): 在预处理器警告中修复变量名 5637
  • fix(rle): 当压缩数据不是像素单位时避免缓冲区溢出 5619
  • fix(LVGLImage): 使用lv_image_dsc_t代替lv_img_dsc_t 5629
  • fix(vg_lite): 修复线性图像在释放后使用的问题 5618
  • fix(kconfig): 默认跳过lv_conf.h 5617
  • fix(image): 为所有c-array图像添加data_size字段 5608
  • fix(doc): 修复显示透明度的错误代码 5607
  • fix(refr): 在部分更新模式下考虑步幅 5583
  • fix(test): 修复与#5559相关的拼写错误 5594
  • fix(sysmon): 修复启用LV_USE_PERF_MONITOR_LOG_MODE时的构建错误 5597
  • fix(sdl): 在图层中使用新的绘制缓冲区结构 5578
  • fix(benchmark): 改善基准测试 5558
  • fix(ffmpeg): 为ffmpeg图像添加缺失的步幅设置 5580
  • fix(sysmon): 修复构建错误 5585
  • fix(tileview): 在大小更改时自动更新瓷砖位置 5577
  • fix(sdl): 修复键盘处理 5575
  • fix(lv_conf): 修复lv_conf_template.h中的小错误 5570
  • fix(vg_lite): 修复弧形图像未移动到弧形中心的问题 5554
  • fix(vg_lite): 添加渐变图像缓冲区检查 5552
  • fix(obj): 修复具有半透明渐变的覆盖更改 5531
  • fix(vg_lite): 路径矩阵应使用主矢量矩阵 5538
  • fix(vg_lite): 修复LV_RADIUS_CIRCLE不圆的问题 5543
  • fix(vg_lite): 添加配置以禁用绘制阴影 5534
  • fix(neon): 将步幅从px更新为字节 5526
  • fix(script): 删除LVGLImage.py的TRUECOLOR 5523
  • fix(sysmon): 支持在没有显示器的情况下启动LVGL 5518
  • fix(chart): 正确设置系列ID 5482
  • fix(vg_lite): 修复裁剪角图像显示错误 5517
  • fix(arduino): 更新示例LVGL_Arduino.ino以适应v9 5499
  • fix(fb): 正确设置DPI 5508
  • fix(layer): 更新覆盖使用的内存计算 5504
  • fix(bin_decoder): 修复潜在的垃圾地址释放问题 5509
  • fix(decoder): 将ALLOCATED c-array图像视为绘制缓冲区 5483
  • fix(vg_lite_tvg): 修复更改目标画布时的释放后使用问题 5497
  • fix(keyboard): 在示例中设置阿拉伯字体(如果启用) 5457
  • fix(codespaces): 修复codespaces中lv_conf.h未启用的问题 5484
  • fix(textarea): 修复大端系统上的接受字符问题 5479
  • fix(draw_line): 修复dash_dap等于1且不能正确显示水平线的问题 5473
  • fix: 从原型中删除LV_ATTRIBUTE_FAST_MEM函数属性 5467
  • fix(arm2d): 对arm-2d加速应用临时补丁 5466
  • fix(snapshot): 在截图之前更新组件的布局 5475
  • fix(vg_lite): 添加缺少的24位颜色支持检查 5469
  • fix(display): 在lv_display中将last_activity_time设置为当前时间 5463
  • fix(observer): 修复lv_subject_remove_all_obj 5464
  • fix(image
    _decoder): 修复解码器未关闭
    5437
  • fix(nuttx): 修复构建失败 5440
  • fix: 使用GCC 11时修复-flto的警告 5433
  • fix(assert): 添加新宏以格式化断言消息 5453
  • fix(decoder): 如果绘制单元支持索引图像,不要添加到缓存 5438
  • fix(bar): 遮罩背景以在值调整时修复 5426
  • fix(lvgl.mk): 修复vg_lite_tvg.cpp无法编译 5435
  • fix(ci): 使用PlatformIO的dev分支 5432
  • fix(vector) : 添加路径边界和矩阵变换函数 5389
  • fix(warning): 修复阴影变量警告 47750f1
  • fix(thorvg): 将lvgl_thorvgl与lvgl链接 9b09182
  • fix(warning): 错误:文件末尾没有换行符 9a6a194
  • fix(color): 将RGB565A8 bpp视为RGB565 52426ec
  • fix(warning): 错误:在所有C版本中没有原型的函数声明已被弃用 c81f654

示例

文档

  • docs: 更新README 5841
  • docs: 使添加更多其他翻译变得容易 5874
  • docs: 构建文档时忽略README 5840
  • docs(st7789): 更新文档并添加STM32的代码示例和逐步指南 5511
  • docs(arduino): 更新tick设置 5832
  • docs(display): 使用lv_display_delete_refr_timer删除显示定时器 5835
  • docs(lv_conf): 显示如何在lv_conf.h中包含内容 5740
  • docs(tick): 简化并推广lv_tick_set_cb 5781
  • docs(style): 将样式属性输出到style-props.rst 5802
  • docs(changelog): 提到LV_COLOR_DEPTH 8尚不支持 5796
  • docs(image): 将align更新为inner_align 5721
  • docs(README_Zh): 删除SquareLine Studio的提及 5640
  • docs(profiler): 修复my_get_cpu_cb实现 5641
  • docs(demos): 删除不一致的README 5626
  • docs(README): 删除SquareLine Studio的提及 5638
  • docs(changelog): 提到v9中删除的更多功能 5632
  • docs(micropython): 更新文档中的MicroPython示例 5622
  • docs(contributing): 修复链接 5615
  • docs(porting): 在移植文档中添加缺失的冒号 5613
  • docs(contributing): 更新功能开发工作流程 5601
  • docs(tabview): 修复tabview文档 5588
  • docs(indev): 记录LV_INDEV_MODE_EVENT与data->continue_reading之间的关系 5586
  • docs(pc-simulator): 记录如何手动设置SDL,而无需IDE 5563
  • docs(disp): 记录lv_refr_now 5480
  • docs(disp): 修复flush_cb示例中的指针转换 5439
  • docs(font): 关于“基本目录” 5429

CI和测试

  • test(conf): 更新配置并删除已弃用的配置 5881
  • tests(freetype): 重构代码结构 5871
  • ci(micropython): 捕捉测试中的事件失败 5787
  • ci(ref_imgs): 自动生成缺失的参考图像文件夹 5696
  • ci(assets): 添加LV_BUILD_TEST保护 5616
  • ci(codecov): 禁用CodeCov 5623
  • test(asset): 在test_img_emoji_F617中添加保护 5559
  • ci(micropython): 使用master分支 5460
  • test(snapshot): 为#5475添加测试用例 5478

其他

  • chore(cmsis-pack): 为v9.1.0做准备 5917
  • chore: 修复头文件包含递归问题 5844
  • chore(group): 避免空指针访问 5863
  • refactor(conf): 重命名LV_DRAW_SW_LAYER_SIMPLE_BUF_SIZE为LV_DRAW_LAYER_SIMPLE_BUF_SIZE 5798
  • chore(freetype): 删除未使用的代码 5885
  • chore: 修复编译时警告 5872
  • 为缺少的头文件添加extern "C" 5857
  • chore(stdlib): 删除重复的函数声明 5845
  • chore(benchmark): 添加可能内存不足
    的警告
    5797
  • chore(group): 添加断言以避免空指针访问 5769
  • refact(Kconfig): 根据lv_conf_template.h更新 5780
  • 修复lvgl 9.x在rtthread上的编译错误问题 5794
  • refact(vg_lite): 抽象出通用的待释放逻辑 5756
  • doc(stm32): 修正拼写错误 5772
  • doc(cache): 为缓存API添加文档字符串 5718
  • chore(docs): 修正拼写错误 5738
  • chore(font): 删除未使用的定义 5716
  • chore: 在图像资源文件中添加步幅信息 5653
  • chore(draw_buf): 删除不必要的信息日志 5634
  • chore(cmsis-pack): 追赶更新 5611
  • 在输入设备文件中进行更多的杂务工作 5604
  • 步幅调整到位 5423
  • chore(conf): 使用EXTERNAL和INTERNAL宏配置库 5046
  • chore(vg_lite): 使用指针访问矩阵元素 5591
  • refactor(image): 将align重命名为inner_align 5560
  • chore(deps): 将codecov/codecov-action从3提升到4 5567
  • chore(deps): 将carlosperate/arm-none-eabi-gcc-action从1.8.0提升到1.8.1 5565
  • chore(deps): 将mymindstorm/setup-emsdk从13提升到14 5566
  • chore(deps): 将actions/cache从3提升到4 5568
  • chore(deps): 将uraimo/run-on-arch-action从2.6.0提升到2.7.1 5569
  • 可选安装演示和库 5387
  • chore(arc): 修正拼写错误 5553
  • 还原"feat(font_glyph_format): 将绘制和字体格式重构为lv_font_glyph_format_t" 5550
  • chore(thorvg): 修复警告 5535
  • refactor(snapshot): 使用绘制缓冲区接口 5487
  • chore(vg_lite): 修正拼写错误 5525
  • demo(music): 添加png资产 5520
  • chore(indev): 在进行双击和三击支持工作前清理 5512
  • chore(demos): 删除未使用的定义 5506
  • chore(obj_draw): 删除重复的失效 5503
  • chore(widgets): 为MY_CLASS定义添加括号 5485
  • chore(draw-sw-transform): 删除重复代码 5488
  • chore(README): 修复#5491中的拼写错误 5492
  • chore(vg_lite): 移除64字节对齐要求 5477
  • chore(refr): 修正拼写错误 5474
  • chore(array): 使用array_front并像数组一样使用它 5448
  • chore(cache): 仅缓存文件类型图像的头信息 5455
  • refactor(indev_scroll): 重构代码 5456
  • chore(draw_buf): 在绘制缓冲区中添加头部标志 5449
  • chore(Kconfig): 添加缺失的分析仪跟踪缓冲区大小配置 5436
  • chore(libpng): 修复警告 5431

其他

  • refactor(freetype): 重构freetype参数 0c84cc0
  • refactor(freetype): 重构glyph_index获取方法 0b3016c
  • chore(README): 修复#5491中的拼写错误 (#5492) 9c025d3
  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值