ZLG AWTK 1.1 Release Notes

一、介绍

AWTK全称Toolkit AnyWhere，是ZLG开发的开源GUI引擎，旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的GUI引擎。

AWTK寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG物联网操作系统AWorksOS内置GUI。

AWTK源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。
  • 支持开发Linux应用程序。
  • 支持开发MacOS应用程序。
  • 支持开发Windows应用程序。
  • 支持开发Web APP。
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发Android应用程序。
  • 支持开发iOS应用程序。
  • 支持开发2D小游戏。

三、主要特色

1.跨平台

AWTK是跨平台的，这有两个方面的意思：

  • AWTK本身是跨平台的。目前支持的平台有ZLG AWorksOS、Windows、Linux、MacOS、嵌入式Linux和嵌入式裸系统，可以轻松的移植到各种RTOS上。AWTK以后也可以运行在浏览器(即将公测)、各种小程序、Android和iOS等平台上运行。

  • AWTK同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串(UTF8和widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用AWTK开发的应用程序可以真正跨平台运行。

2.高效

AWTK通过一系列的手段保证AWTK应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持3 FrameBuffer让界面以最高帧率运行(可选)。
  • UI描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种GPU加速接口。如OpenGL、DirectX、Vulkan和Metal等。
  • 支持嵌入式平台的各种2D加速接口。目前STM32的DMA2D和NXP的PXP接口，厂家可以轻松扩展自己的加速接口。

3.稳定

AWTK通过下列方式极力让代码稳定可靠：

  • 使用cppcheck和facebook infer进行静态检查。
  • 使用valgrind进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG强大GUI团队的支持。
  • 经过多个实际项目验证。
  • 多平台/多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4.强大

  • 丰富的控件(持续增加中)。
  • 支持各种图片格式(png/jpg/gif/svg)。
  • 支持各种字体格式(点阵和矢量)。
  • 支持窗口动画
  • 支持控件动画
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的Cortex M3到各种高端CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和RTOS。

5.易用

  • 大量的示例代码。
  • 完善的API文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用AWTK本身开发的界面编辑器(开发中)。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片(png/jpg/svg/gif)。

6.高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的LCD接口。
  • 可以扩展自己的矢量引擎(如使用skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7.多种开发语言

AWTK本身是用C语言开发的，可以通过IDL生成各种脚本语言的绑定。生成的绑定代码不是简单的把C语言的API映射到脚本语言，而是生成脚本语言原生代码风格的API。目前支持以下语言(以后根据需要增加)：

  • C
  • Lua
  • Javascript on jerryscript
  • Javascript on nodejs

8.国际化

  • 支持Unicode。
  • 支持输入法。
  • 支持字符串翻译(实时生效)。
  • 支持图片翻译(实时生效)。
  • 文字双向排版(计划中)。

9.开放源码，免费商用(LGPL)。

四、1.1 版本更新

1.稳定性增强

  • 多个实际项目验证。
  • 新增数百个测试用例。
  • 增加控件运行时类型检查。
  • 使用infer静态检查，并修改发现的问题。
  • 使用cppcheck静态检查，并修改发现的问题。
  • 使用valgrind动态内存检查，并修改发现的问题。

2.优化性能

  • 绘制半透明色矩形速度提高3倍。
  • 缩放不透明图片快1倍(bgr565格式LCD)。
  • 缩放半透明图片快30%(bgr565格式LCD)。

3.新增特性

  • 窗口动画支持自定义。
  • 新增4种内置窗口动画。
  • 对话框高亮策略支持自定义。
  • 内置动态和静态背景变暗的对话框高亮策略。
  • 新增 object_t接口。
  • 对话框支持非模态。
  • 窗口支持全屏窗口。
  • 增加toast/info/confirm等内置对话框。
  • slide view支持循环切换。
  • slide view增加更多切换动画。
  • 数字时钟支持英文的星期和月份。
  • 支持自定义软键盘。
  • 增加lcd_profile用于对绘制函数进行profile。
  • data资源支持同文件名不同扩展名。
  • window manager支持paint事件。
  • UI XML文件支持简单表达式。
  • 改进编译脚本和资源生成脚本。

4.新增控件

  • 增加mutable image，用于实现camera和video时显示图像。

5.新增重要API

  • window_manager_back 返回上一级窗口。
  • window_manager_back_to_home 返回主窗口。
  • window_close_force 强制关闭窗口(忽略动画)。
  • ui_loader_load_widget 用于加载局部组件。

6.Bug修改和完善功能

详情请参考docs/changes.md。

五、预告

下一个版本计划推出下列功能：

  • 新增控件。
  • 抽象音频接口。
  • 桌面版本支持多原生窗口。
  • 在sylixos和linux上支持多进程。
  • AWTK-WEB 让AWTK应用程序在浏览器中运行。
  • AWTK-MVVM 为嵌入式系统定制的MVVM框架。

需要什么功能，请在github上留言，我们会优先安排。


ZLG AWTK 1.2 Release Notes

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。
  • 支持开发 Linux 应用程序。
  • 支持开发 MacOS 应用程序。
  • 支持开发 Windows 应用程序。
  • 支持开发 Web APP。
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 Android 应用程序。
  • 支持开发 iOS 应用程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在浏览器（即将公测）、各种小程序、Android 和 iOS 等平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行（可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台/多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件（持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式（点阵和矢量）。
  • 支持窗口动画
  • 支持控件动画
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的界面编辑器（开发中）。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎（如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言（以后根据需要增加）：

  • C
  • Lua
  • Javascript on jerryscript
  • Javascript on nodejs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译（实时生效）。
  • 支持图片翻译（实时生效）。
  • 文字双向排版（计划中）。

9. 开放源码，免费商用 (LGPL)。

四、1.2 版本更新

1. 细节完善

  • 输入法候选字支持滚动。
  • slider 支持上下左右键。
  • guage pointer 支持锚点。
  • slide view indicator作为独立控件。
  • 修改 slider 支持放在 slide_view 中。
  • 完善 idl gen 工具支持外部项目并编写文档。
  • 完善 doc gen 工具支持外部项目并编写文档。
  • 修改 slide_menu 支持放在 slide_view 中。
  • edit 在焦点状态时，如果文本为空，仍然显示 tips。
  • button/check_button 在收到回车和空格键时触发 click 事件。
  • 重构 pointer/key 事件处理流程，分成三个阶段：子控件处理前、子控件和子控件处理后。
  • 重构 image loader 支持自定义的 image loader（使用 imae_loader_register 注册自己的 loader)。
  • 因为脚本绑定生成工具只接受一个 IDL 文件，所以增加 merge.js 工具用于将多个 IDL 文件合并成一个 IDL 文件。
  • 支持用 focusable 属性将控件设置可获得焦点，实现 tab stop 类似的效果。focusable 的控件，其 style 必须具有 focused 状态，否则无法显示。
  • 窗口在切换到前台和后台时分别触发事件 EVT_WINDOW_TO_FOREGROUND 和 EVT_WINDOW_TO_BACKGROUND
  • 去掉 TK_DEFAULT_FONT 宏定义，提供函数 system_info_set_default_font 设置缺省字体（一般不用调用）。
  • 将 ListView 的布局策略放到 children_layouter_list_view 中，并支持边距和间距等参数。
  • children_layouter_list_view 增加 keep_disable 和 keep_invisible 参数。
  • children_layouter_default 增加 keep_disable 和 keep_invisible 参数。
  • 缺省启用 style mutable，具体用法请参考窗体样式文档。
  • 增加 style border_width
  • 支持动态修改屏保时间。
  • 增加 app_root 自动检测。
  • SDL FB 模式启用脏矩形。
  • 新增内存耗尽处理。

3. 新增特性

  • cairo 实现的 vgcanvas。
  • 支持 32 位 Windows 编译。
  • 增加条件变量 tk_cond_var。
  • 支持用 tab 键切换控件的焦点。
  • 完整弹出窗口动画，支持在不同位置弹出。
  • image/svg/gif 支持从文件系统中加载图片。
  • 增加widget_gen脚本用于生成自定义控件的框架。
  • 增加 self_layouter_menu 方便实现弹出菜单。
  • 增加 lcd_mem_special 用于实现一些特殊的 FB 格式。
  • style 增加 margin_left/margin_right/margin_top/margin_bottom 几个参数用于细化之前的 margin 参数。

4. 新增控件

  • mledit 多行编辑器。
  • overlay overlay 窗口。
  • hscroll_label 可水平滚动的文本。

5. 新增重要 API

  • timer_modify
  • widget_add_idle。
  • widget_find_animator

6.Bug 修改和完善功能

详情请参考 docs/changes.md。


ZLG AWTK 1.3 Release Notes

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。
  • 支持开发 Linux 应用程序。
  • 支持开发 MacOS 应用程序。
  • 支持开发 Windows 应用程序。
  • 支持开发 Web APP。
  • 支持开发 Android 应用程序。
  • 支持开发 iOS 应用程序。
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、Web 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序和 iOS 等平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行 （可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台 / 多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件 （持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式 （点阵和矢量）。
  • 支持窗口动画
  • 支持控件动画
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的界面编辑器 （开发中）。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎 （如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言 （以后根据需要增加）：

  • C
  • Lua
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译 （实时生效）。
  • 支持图片翻译 （实时生效）。
  • 文字双向排版 （计划中）。

9. 开放源码，免费商用 (LGPL)

四、1.3 版本更新

1. 细节完善

  • 完善输入法和软键盘。
  • 完善控件焦点的处理。
  • 完善 freetype 的支持。
  • 用户自定义的资源的目录。
  • popup 支持 highlight效果。
  • 支持 8bit gray+alpha png。
  • 修改 Linux CPU 占用高的问题
  • time clock 支持指针支持锚点。
  • progress bar 支持 max 属性。
  • 时间修改为 64 位，防止时间溢出。
  • 完善 edit/mledit获得焦点时选中文本。
  • glyph 的 x/y/w/h 改为 16 位，以防超大字体溢出问题。

3. 新增特性

  • 支持单色屏。
  • 支持主题切换实时生效。
  • OpenGL 模式下支持脏矩形。
  • OpenGL 模式下支持屏幕旋转。
  • 增加UI反馈接口(方便实现按键音和震动效果)。
  • 引入片段帧缓存 (Fragment Frame Buffer)，有效解决无framebuffer时闪烁的问题。

4. 新增控件

  • draggable
  • combo_box_ex

5. 新增重要 API

  • 增加 semaphore
  • 增加 object_array
  • 增加 event_source
  • 增加 ring_buffer
  • 增加 graphic_buffer
  • 增加 stream 接口以及各种实现。
  • 增加 ubjson 实现，为嵌入式系统提供高效、紧凑和标准的格式，可以用于存储和通信。

6. 新增平台

  • android
  • tencentos
  • rt-thread
  • esp32(第三方开发者提供)
  • freertos(第三方开发者提供)

7. 新增语言绑定

  • QuickJS

8. 新增原厂支持

  • 君正

9.Bug 修改和完善功能

详情请参考 docs/changes.md。

欢迎广大开发者一起参与开发：生态共建计划。

谢谢大家支持，请投AWTK一票


ZLG AWTK 1.4 Release Notes

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

欢迎广大开发者一起参与开发：生态共建计划。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk
  • 稳定版整合包：https://pan.baidu.com/s/1_oRgj67M-I4kivk-YzwFWA 提取码：1cmi

AWTK Designer 界面设计工具：

  • 不再需要手写 XML
  • 拖拽方式设计界面，所见即所得
  • 快速预览，一键打包资源
  • 注册及下载地址：https://awtk.zlg.cn

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。✔
  • 支持开发 Linux 应用程序。✔
  • 支持开发 MacOS 应用程序。✔
  • 支持开发 Windows 应用程序。✔
  • 支持开发 Web APP。✔
  • 支持开发 Android 应用程序。✔
  • 支持开发 iOS 应用程序。✔
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、iOS、Web 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行 （可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台 / 多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件 （持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式 （点阵和矢量）。
  • 支持窗口动画
  • 支持控件动画
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 主题切换实时生效。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的 界面编辑器。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎 （如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言 （以后根据需要增加）：

  • C
  • C++
  • lua
  • java
  • python
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译 （实时生效）。
  • 支持图片翻译 （实时生效）。
  • 文字双向排版 （计划中）。

9. 为嵌入式软件定制的 MVVM 框架，彻底分离用户界面和业务逻辑。

  • 性能高。
  • 内存开销小。
  • 隔离更彻底。
  • 可移植到其它 GUI。
  • 代码小 (~5000 行）。
  • 无需学习 AWTK 控件本身的 API。
  • 支持多种编程语言（目前支持 C/JS)。

详情请参考：https://github.com/zlgopen/awtk-mvvm

10. 开放源码，免费商用 (LGPL)。

四、1.4 版本更新

1. 细节完善

  • 完善 fs 接口。
  • 完善工具支持多主题。
  • list view 支持上下键滚动。
  • 完善窗口切换时焦点恢复的问题。
  • 完善 combobox，选择之后重新打开输入法。
  • progress circle 支持 line cap 属性。
  • 增加 vgcanvas_line_join_t 定义。
  • 增加 vgcanvas_line_cap_t 定义。
  • 修改 android resume 后界面黑屏的问题。
  • slide view/pages 每个页面支持独立的初始焦点。
  • 增加函数 widget_set_child_text_utf8。
  • 增加函数 widget_set_child_text_with_double。
  • keyboard 在 grab_keys 时，keyboard 处理 key 事件后，应用窗口不再处理。
  • 完善 image value，支持点击时加上一个增量，增加到最大值后回到最小值。

大量细节完善去请参考： https://github.com/zlgopen/awtk/blob/master/docs/changes.md

3. 新增特性

  • 无文件系统是支持多主题。
  • opengles 支持 snapshot。
  • dit/mledit 支持自己指定软键盘名称。
  • 点击鼠标右键触发 context menu 事件。
  • 使用 event_source_manager 实现主循环。
  • 增加 awtk_main.inc，用于标准程序的主函数。
  • 用 SDL 重新实现 PC 版本的线程和同步相关函数 。
  • edit 增加 input type “custom_password”类型。

4. 新增控件

  • audio_view 音频播放控件。
  • lrc_view 歌词显示控件。
  • video_view 视频播放控件。

5. 新增重要 API

  • 增加 action thread。
  • 增加 action thread pool。
  • 增加动态链接库的接口 dl.h。
  • 增加 waitable ring buffer。
  • 增加 widget_close_window。
  • 增加 waitable_action_queue。
  • 增加 path_replace_extname 函数。
  • 增加 async.c/.h 用于实现函数异步调用。
  • 增加 path_replace_extname 函数。
  • 增加 async.c/.h 用于实现函数异步调用。
  • 增加 data reader 接口和 data writer，用于抽象外部 flash 等设备。
  • 增加函数 fs_get_user_storage_path 用于统一 PC 和 android 平台保存数据的目录。

6. 新增平台

  • ios

7. 新增语言绑定

  • python
  • java
  • cpp
  • nodejs
  • minijvm

8. 新增相关项目

  • http client
  • media player
  • awtk-mobile-plugins(android 平台插件）

欢迎广大开发者一起参与开发：生态共建计划。


ZLG AWTK 1.5 Release Notes

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

欢迎广大开发者一起参与开发：生态共建计划。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk
  • 稳定版整合包：https://pan.baidu.com/s/1_oRgj67M-I4kivk-YzwFWA 提取码：1cmi

AWTK Designer 界面设计工具：

  • 不再需要手写 XML
  • 拖拽方式设计界面，所见即所得
  • 快速预览，一键打包资源
  • 注册及下载地址：https://awtk.zlg.cn

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。✔
  • 支持开发 Linux 应用程序。✔
  • 支持开发 MacOS 应用程序。✔
  • 支持开发 Windows 应用程序。✔
  • 支持开发 Web APP。✔
  • 支持开发 Android 应用程序。✔
  • 支持开发 iOS 应用程序。✔
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、iOS、Web 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行 （可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台 / 多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件 （持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式 （点阵和矢量）。
  • 支持窗口动画。
  • 支持控件动画。
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 主题切换实时生效。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。
  • 支持事件录制与重放进行压力测试。
  • 支持 Appium 进行全自动化 UI 测试。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的 界面编辑器。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎 （如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言 （以后根据需要增加）：

  • C
  • C++
  • lua
  • java
  • python
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译 （实时生效）。
  • 支持图片翻译 （实时生效）。
  • 文字双向排版。

9. 为嵌入式软件定制的 MVVM 框架，彻底分离用户界面和业务逻辑。

  • 性能高。
  • 内存开销小。
  • 隔离更彻底。
  • 可移植到其它 GUI。
  • 代码小 (~5000 行）。
  • 无需学习 AWTK 控件本身的 API。
  • 支持多种编程语言（目前支持 C/JS)。

详情请参考：https://github.com/zlgopen/awtk-mvvm

10. 开放源码，免费商用 (LGPL)。

四、1.5 版本更新

1. 细节完善

  • 增加离线 canvas。
  • 修改切换语言奔溃的问题。
  • 完善 android 资源加载。
  • 修改输入法中内存临时泄漏。
  • button 支持设置长按时间。
  • edit/mledit 支持翻译提示信息。
  • 支持 shift+tab 向后切换焦点。
  • edit/mledit 支持 cancelable 属性。
  • 软键盘支持“clear”/”cancel”两个功能按钮。
  • 完善表达式，增加 iformat/fformat 函数。
  • Linux/MacOS/Windows 支持编译为动态库。
  • 候选字控件 (candidate) 支持设置 margin style。
  • 完善 keyboard 增加 back/back_to_home 按钮的支持。
  • edit/mledit/slider 支持 WIDGET_PROP_INPUTING 属性，用于辅助实现 MVVM。

大量细节完善去请参考： https://github.com/zlgopen/awtk/blob/master/docs/changes.md

2. 新增文档

  • 新增文档《如何使用对话框》
  • 新增文档《如何实现弹出菜单》
  • 新增文档《如何绘制旋转文字》
  • 新增文档《为 512K Flash 优化空间》
  • 新增文档《如何用 edit 控件编辑日期》
  • 新增文档《如何用 edit 控件编辑时间》
  • 新增文档《如何用 edit 控件编辑 IP 地址》
  • 新增文档《如何存取应用程序的配置信息》
  • 新增文档《项目描述文件 project.json 介绍》
  • 新增文档《如何使用软键盘上的 action 按钮》
  • 新增文档《如何用 valgrind 查找内存相关问题》
  • 新增文档《如何去掉不需要的控件，以节省 flash 空间》
  • 新增文档《如何定制 combo_box 控件中按钮的风格和大小》

3. 新增特性

  • 新增触屏版 T9 输入引擎。
  • 新增按键版 T9 输入引擎。
  • 支持 rgb565 格式的图片
  • 新增 app_conf 实现配置文件的访问。
  • edit 支持时间、日期和 IPV4 等格式的编辑。
  • 支持从 SD 卡加载资源，做了一些小的改动
  • 增加事件录制与重放功能，辅助手动测试和压力测试。
  • 新增自动化测试引擎，兼容Appium，实现全自动化测试。
  • 重新设计内存管理器架构，新增加锁、调试和防内存碎片功能。
  • 基本控件的文本支持双向排版 (Unicode Bidirectional Algorithm)

4. 新增控件

  • 二维码

  • number-label

  • 代码编辑器

  • 日期选择器

  • 表格视图

  • 仿微信列表项

5. 新增重要 API

  • 新增类 mutex_nest
  • 新增类 object_locker
  • 新增函数 emitter_exist
  • 新增函数 str_append_more。
  • 新增函数 tk_wstr_dup_utf8
  • 新增函数 fs_os_file_tell
  • 新增函数 fs_os_file_size
  • 新增函数 fs_os_file_stat
  • 新增函数 fs_os_file_sync
  • 新增函数 tk_mutex_try_lock
  • 新增函数 widget_get_text_utf8
  • 新增函数 canvas_get_font_height
  • 新增函数 date_time_get_month_name
  • 新增函数 date_time_get_wday_name

7. 新增平台

  • mvvm 在 stm32 上的移植。

8. 新增相关项目

  • UI 自动测试引擎
  • Restful WEB 框架
  • 自定义控件生成器
  • 自定义字体加载器
  • 演示窗口之间的通讯方式

欢迎广大开发者一起参与开发：生态共建计划。


ZLG AWTK 1.6 Release Notes

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

欢迎广大开发者一起参与开发：生态共建计划。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk

AWTK Designer 界面设计工具：

  • 不再需要手写 XML
  • 拖拽方式设计界面，所见即所得
  • 快速预览，一键打包资源
  • 注册及下载地址：https://awtk.zlg.cn

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。✔
  • 支持开发 Linux 应用程序。✔
  • 支持开发 MacOS 应用程序。✔
  • 支持开发 Windows 应用程序。✔
  • 支持开发 Web APP。✔
  • 支持开发 Android 应用程序。✔
  • 支持开发 iOS 应用程序。✔
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、iOS、Web 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行 （可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台 / 多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件 （持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式 （点阵和矢量）。
  • 支持窗口动画。
  • 支持控件动画。
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 主题切换实时生效。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。
  • 支持事件录制与重放进行压力测试。
  • 支持 Appium 进行全自动化 UI 测试。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的 界面编辑器。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎 （如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言 （以后根据需要增加）：

  • C
  • C++
  • lua
  • java
  • python
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译 （实时生效）。
  • 支持图片翻译 （实时生效）。
  • 文字双向排版。

9. 为嵌入式软件定制的 MVVM 框架，彻底分离用户界面和业务逻辑。

  • 性能高。
  • 内存开销小。
  • 隔离更彻底。
  • 可移植到其它 GUI。
  • 代码小 (~5000 行）。
  • 无需学习 AWTK 控件本身的 API。
  • 支持多种编程语言（目前支持 C/JS)。

详情请参考：https://github.com/zlgopen/awtk-mvvm

10. 开放源码，免费商用 (LGPL)。

四、1.6 版本更新

1. 细节完善

  • rich text 增加 yslidable 属性。
  • text_selector 控件增加循环显示功能。
  • 进度条增加 reverse 属性，用于反向显示进度。
  • overlay 窗口支持 always_on_top 属性。
  • image_animation 支持运行时修改 interval。
  • label 增加 line_wrap 属性 和 word_wrap 属性。
  • EVT_VALUE_WILL_CHANGE 事件返回 RET_STOP 可以阻止修改值
  • 增加 TK_KEY_LONG_PRESS_TIME，让触屏长按和键盘长按可以设置为不同的时间。
  • mledit 增加 open_im_when_focused 和 close_im_when_blured 属性。
  • overlay 增加 click_throgh 属性，允许 overlay 窗口在没点击到子控件时，穿透到底层窗口。

大量细节完善去请参考： https://github.com/zlgopen/awtk/blob/master/docs/changes.md

2. 新增文档

  • 《如何将生成的可执行文件和资源打包》
  • 《如何在打开新窗口时关闭当前窗口？》
  • 《如何设置当前的语言？》
  • 《如何将板子键盘的键值映射到 AWTK？》
  • 《如何定制软键盘/候选字的风格？》
  • 《fscript widget 扩展函数》
  • 《value 扩展函数》
  • 《object 扩展函数》
  • 《app_conf 扩展函》数
  • 《CRC 扩展函数》
  • 《大端小端扩展模块》
  • 《JSON 扩展模块》
  • 《文件系统扩展模块》
  • 《日期和时间扩展模块》
  • 《读缓冲区扩展模块》
  • 《istream 扩展模块》
  • 《TCP/UDP 流扩展模块》
  • 《文件流扩展模块》
  • 《串口流扩展模块》
  • 《动态数组扩展模块》
  • 《ostream 扩展模块》
  • 《typed array 扩展模块》
  • 《写缓冲区扩展模块》
  • 《读缓冲区扩展模块》
  • 《应用程序的类型》

3. 新增特性

  • 支持长按键事件。
  • 增加 url 解析器。
  • 增加插件管理器。
  • 增加 csv file库。
  • 水平视图支持按页滚动。
  • 增加脚本引擎 fscript。
  • android 增加 BLE 插件。
  • 支持将多张图片打包成一张图片。
  • 支持多点手势识别事件（旋转和缩放）。
  • 增加根据子控件以及文本调整空间自身大小
  • 支持自动根据屏幕大小自动缩放控件的位置和大小。

4. 新增重要 API

  • 增加 str_encode_hex
  • 增加 data_reader_mem
  • 增加 data_writer_wbuffer
  • 增加 conf_ini_create
  • 增加 conf_json_create
  • 增加 conf_ubjson_create
  • 增加 timer_resume/timer_suspend
  • 增加 window_manager_switch_to
  • 增加 fs_copy_file、fs_copy_dir和dir_exist
  • 增加 fs_get_temp_path、fs_remove_dir_r、fs_create_dir_r 和 fs_change_dir

5. 新增控件

  • 垂直文本

6. 新增相关项目

  • 增加 vscode 实时预览插件。
  • 增加录音功能awtk-media-player
  • 增加 awtk-openxlsx

欢迎广大开发者一起参与开发：生态共建计划。


ZLG AWTK 1.7 Release Notes

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

欢迎广大开发者一起参与开发：生态共建计划。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk

AWTK Designer 界面设计工具：

  • 不再需要手写 XML
  • 拖拽方式设计界面，所见即所得
  • 快速预览，一键打包资源
  • 注册及下载地址：https://awtk.zlg.cn

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。✔
  • 支持开发 Linux 应用程序。✔
  • 支持开发 MacOS 应用程序。✔
  • 支持开发 Windows 应用程序。✔
  • 支持开发 Web APP。✔
  • 支持开发 Android 应用程序。✔
  • 支持开发 iOS 应用程序。✔
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、iOS、Web 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行 （可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台 / 多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件 （持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式 （点阵和矢量）。
  • 支持窗口动画。
  • 支持控件动画。
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 主题切换实时生效。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。
  • 支持事件录制与重放进行压力测试。
  • 支持 Appium 进行全自动化 UI 测试。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的 界面编辑器。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎 （如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言 （以后根据需要增加）：

  • C
  • Go
  • C++
  • lua
  • java
  • python
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译 （实时生效）。
  • 支持图片翻译 （实时生效）。
  • 文字双向排版。

9. 为嵌入式软件定制的 MVVM 框架，彻底分离用户界面和业务逻辑。

  • 性能高。
  • 内存开销小。
  • 隔离更彻底。
  • 可移植到其它 GUI。
  • 代码小 (~5000 行）。
  • 无需学习 AWTK 控件本身的 API。
  • 支持多种编程语言（目前支持 C/JS)。

详情请参考：https://github.com/zlgopen/awtk-mvvm

10. 开放源码，免费商用 (LGPL)。

欢迎对照 《GUI 引擎评价指标》 进行评测。

四、1.7 版本更新

1. 细节完善

  • 优化 layout。
  • 修复完善圆角矩形。
  • 窗口完全进入后台时不再绘制。
  • 修复设置后台窗口焦点导致的问题。
  • 修改资源生成脚本不预先加载字体。
  • 修复 asset_loader_zip 在 Windows 上的问题。
  • 完善 pthread 实现的 thread 等待时不能及时响应。

大量细节完善请参考 最新动态

2. 新增文档

  • 在 windows 下使用 gcc 编译 AWTK
  • 优化 freetype 解析矢量字体的显示效果
  • 优化 stb_truetype 在 mono 模式下的字体显示效果
  • 极简键盘 (3 键键盘、5 键键盘和旋转按钮）

3. 新增重要特性

  • 支持多脏矩形。
  • 重新设计 demoui。
  • edit 显示支持 bidi。
  • fscript 支持函数定义。
  • 增加多个 fscript 扩展模块。
  • gauge_pointer 支持精确脏矩形。
  • 增加网络接口以及 Linux/Windows 实现。
  • style 支持渐变色（目前支持垂直方向）。
  • 键盘支持跟随编辑（指定 floating=true 即可）
  • 增加输入类型 INPUT_ASCII，用于输入纯英文字符。
  • 增加对极简键盘 (3 键键盘、5 键键盘和旋转按钮）的支持。
  • style 支持 feedback/focusable。
  • window_open 支持打开本地 xml 文件。
  • image value 支持支持水平和垂直对齐。
  • 修改 canvas_draw_image 改成用 rectf 类型。
  • 完善图片解码器，优先使用用户自定义的解码器。
  • stb 支持外部硬件加速 yuv 转 rgb 的宏和函数。
  • strgen 工具生成国际化字符串时保留文本两端的空格。
  • switch 支持 click 事件，支持 space/return 触发。
  • 如果 edit 的 keyboard 属性为空字符串，则不弹出软键盘
  • 增加宏 NATIVE_WINDOW_NOT_RESIZABLE，用于禁止用户调整 desktop 应用程序的窗口大小。
  • 窗口增加属性 strongly_focus。点击非 focusable 控件时，用于控制是否让当前焦点控件失去焦点。
  • 增加宏 WITHOUT_WINDOW_ANIMATOR_CACHE 用于控制窗口动画是否使用缓存。如果内存紧缺，又希望启用窗口动画，可以打开本宏。

4. 新增重要 API

  • general_factory
  • wstr_set_with_len
  • tk_utf8_from_utf16_ex
  • wstr_set_utf8_with_len
  • data_writer_flush。
  • fscript_syntax_check
  • event_clone
  • widget_dispatch_async
  • widget_auto_scale_children。
  • widget_get_focused_widget。
  • gif_image_play
  • gif_image_stop
  • gif_image_pause
  • ui_feedback_deinit
  • path_extname_is
  • window_manager_set_max_fps
  • vgcanvas_set_fill_gradient
  • vgcanvas_set_fill_gradient。
  • image_manager_set_max_mem_size_of_cached_images

5. 新增控件

  • HTML View

  • rive 动画

  • rlottie 动画

  • Web View

  • 增加 vpage 扩展控件（配合 pages 控件使用，可以自动加载/卸载页面，并提供入场/出场动画）

6. 新增语言支持

  • Go 语言

7. 新增相关项目

  • 用 ReactJS 开发 AWTK

  • AWTK 回归测试

欢迎广大开发者一起参与开发：生态共建计划。


API 注释格式

AWTK 中的 API 注释，除了作为 API 的文档之外，还有以下用途：

  • 提取 JSON 格式的 IDL，用于生成各种语言的绑定代码。
  • 用于设计器 (designer) 获取各个控件的元信息。
  • 生成动态库的导出符号表。

这里采用了类似于 jsduck 的 API 注释格式，但是 jsduck 并不支持 C 语言的数据类型，所以没有办法完全兼容 jsduck 的格式。

一、类的注释

@class 表示类定义。

示例：

/**
 * @class progress_bar_t
 * @parent widget_t
 * @annotation ["scriptable"]
 * 进度条控件。
 */

里面说明了类的名称、基类的名称和该类型是否可以脚本化。对于类，annotation 的取值有：

  • scriptable 该类可以被脚本化。
  • fake 该类是 fake 的，并不真实存在。
  • widget 表示该类是 widget 的子类。
  • window 表示该类是窗口的子类。
  • design 表示可以在 UI 设计器中使用。

二、属性注释

@property 表示属性定义。

示例：

  /**
   * @property {uint8_t} value
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 进度条的值 [0-100]。
   */

里面说明了成员变量的类型、名称和是否只读等信息。对于 property，annotation 的取值有：

  • set_prop 是否可以通过 widget_set_prop 来设置该属性。
  • get_prop 是否可以通过 widget_get_prop 来获取该属性。
  • readable 该属性是否可以直接读取。
  • writable 该属性是否可以直接修改。
  • persitent 该属性是否需要持久化。
  • design 该属性可以在设计器中设置。
  • scriptable 该属性是否支持脚本化。

三、函数的注释

@method 表示函数定义。

示例：

/**
 * @method progress_bar_create
 * @annotation ["constructor", "scriptable"]
 * 创建 progress_bar 对象
 * @param {widget_t*} parent 父控件
 * @param {xy_t} x x 坐标
 * @param {xy_t} y y 坐标
 * @param {wh_t} w 宽度
 * @param {wh_t} h 高度
 *
 * @return {widget_t*} 对象。
 */
widget_t* progress_bar_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);

/**
 * @method progress_bar_cast
 * 转换为 progress_bar 对象（供脚本语言使用）。
 * @annotation ["cast", "scriptable"]
 * @param {widget_t*} widget progress_bar 对象。
 *
 * @return {widget_t*} progress_bar 对象。
 */
widget_t* progress_bar_cast(widget_t* widget);

/**
 * @method progress_bar_set_value
 * 设置进度条的进度。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {uint8_t}  value 进度
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t progress_bar_set_value(widget_t* widget, uint8_t value);

里面说明了函数的名称、参数和返回值。对于 property，annotation 的取值有：

  • global 是否是全局函数。除了指明为全局函数，函数是当前类的成员函数。
  • cast 类型转换函数。
  • constructor 构造函数
  • deconstructor 析构函数
  • scriptable 是否可以脚本化。对于特殊函数（通常有回调函数作为参数）不方便直接产生代码，可以指定为 scriptable:custom，使用定制的绑定代码。

四、枚举的注释

@enum 表示枚举定义。

示例：

/**
 * @enum align_v_t
 * @annotation ["scriptable"]
 * 垂直对齐的常量定义。
 */
typedef enum _align_v_t {
  /**
   * @const ALIGN_V_NONE
   * 无效对齐方式。
   */
  ALIGN_V_NONE= 0,
  /**
   * @const ALIGN_V_MIDDLE
   * 居中对齐。
   */
  ALIGN_V_MIDDLE,
  /**
   * @const ALIGN_V_TOP
   * 顶部对齐。
   */
  ALIGN_V_TOP,
  /**
   * @const ALIGN_V_BOTTOM
   * 底部对齐。
   */
  ALIGN_V_BOTTOM
}align_v_t;

里面定义了枚举的名称和各个枚举值。对于枚举，annotation 的取值有：

  • scriptable 该类可以被脚本化。

五、事件的注释

@event 表示事件定义。

示例：

/**
 * @event {pointer_event_t} EVT_CLICK
 * 点击事件。
 */

/**
 * @event {pointer_event_t} EVT_LONG_PRESS
 * 长按事件。
 */


支持可独立安装的小应用程序 (applet)

AWTK 应用程序通常是一个单体的应用程序，里面所有的窗口都共享一个资源包（目录），不能单独卸载和安装。但是在有的设备里，AWTK 应用程序又扮演着”系统”的角色，比如在智能手表中，用户可以自己安装喜欢的表盘甚至应用程序，为了方便说明，我们可以独立安装的这类应用程序成为小应用程序 (applet)。

小应用程序 (applet) 的资源必须是独立的，才方便安装和卸载。运行时，先到自己的资源目录中找资源，如果找不到，再到系统中去找。AWTK 最近对此做了支持。具体使用方法如下：

1. 使用方法

1.1 设置小应用程序 (applet) 资源所在的根目录

所有的小应用程序 (applet) 的资源都安装到该目录下。

/**
 * @method assets_managers_set_applet_res_root
 * 设置小应用程序 (applet) 的资源根目录。
 * @param {const char*} res_root 资源根目录。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t assets_managers_set_applet_res_root(const char* res_root);

如：

assets_managers_set_applet_res_root("applets/");

1.2 为窗口指定 applet_name 属性

为窗口指定 applet_name 属性后，窗口优先到对应的 applet 中查找引用的资源，如果找不到就到系统中去查找。

在开发小程序应用 (applet)，其中所有窗口都必须指定同一个 applet 名称。

  /**
   * @property {char*} applet_name
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 小应用程序 (applet) 的名称。
   *
   * > 如果该窗口属于某个独立的小程序应用 (applet)，需要指定它的名称，以便到对应的资源目录查找资源。
   */
  char* applet_name;

示例：

<window text="foo" anim_hint="htranslate" applet_name="foo">
...
</window>

1.3 打开小应用程序 (applet) 中的窗口

要进入小应用程序 (applet)，就要打开其中的窗口。在调用 window_open 时就要指定小应用程序 (applet) 的名称。

格式为：小应用程序 (applet) 名 . 窗口名

示例：

window_open("foo.main");

2. 小应用程序 (applet) 的管理

对小应用程序 (applet) 的管理，比如安装、卸载和查看，需要应用程序自己处理。

3. 完整示例

完整示例


AWTK 应用程序中的资源

一、项目目录结构

使用 AWTK Designer （下文简称：Designer）可以创建 AWTK 项目，默认情况下，项目的目录结构如下表所示：

项目 | 说明
3rd | 存放 Designer 安装的插件（自定义控件）以及其他第三方库。
bin | 存放可执行文件和动态库。
design | 存放项目的原始资源，可在Designer上编辑。
lib | 存放静态库。
res | 存放项目运行时需要的资源，由 Designer 打包或者scripts/update_res.py脚本生成。
scripts | 存放编译项目和打包资源的脚本。
src | 存放项目的源码文件。
tests | 存放项目的单元测试代码。
project.json | 项目的描述文件，包含项目设置等信息，Designer 可通过该文件打开项目。
manifest.json | 校验文件，保存项目文件的 md5 信息。
SConstruct | SCons编译脚本。

二、资源目录结构

项目创建后，design 目录默认有一个名称为”default”的主题目录。主题的目录结构如下表所示：

项目 | 说明
data | 存放该主题的自定义资源，即除了字体、图片、语言、样式、UI、XML、脚本之外的文件。
fonts | 存放该主题使用的字体，内涵子目录详见下文。
images | 存放该主题使用的图片，内涵子目录详见下文。
scripts | 存放该主题使用的脚本文件。
strings | 存放该主题使用的语言文件。
styles | 存放该主题使用的样式文件。
ui | 存放该主题使用的UI文件。

(1) fonts 目录中包含以下子目录：

  • config：临时目录，存放记录字体的保留字符的文件；
  • origin：临时目录，存放被裁剪的TTF的原始文件。

(2) images 目录中包含以下子目录： - xx：存放与屏幕密度无关的图片； - x1：存放普通密度屏幕上使用的图片； - x2：存放2倍密度屏幕上使用的图片； - x3：存放3倍密度屏幕上使用的图片； - svg：存放svg图片。

备注：AWTK运行时会优先在 x1、x2、x3 目录中的其中一个查找图片（比如LCD的DPR=1，则在x1目录），如果找不到，则在xx目录中查找。

三、如何使用常规资源

这里说的常规资源指的是 字体、图片、UI、样式等资源，具体的使用方法可以参考文档：AWTK 中的资源管理。

四、如何使用data目录下的资源（自定义资源）

主题中的 data 目录可以存放除了字体、图片、语言、样式、UI、XML、脚本之外的文件，比如项目的配置文件或者其他自定义类型的文件。这里假设项目存在一个配置文件 conf.json，内容如下：

{
    "tom": {
        "name": "tom",
        "age": 100
    },
    "jim": {
        "name": "jim",
        "age": 200
    },
    "kite": {
        "name": {
            "first": "kite",
            "last": "gates"
        }
    }
}

可以将它存放在项目的 design/default/data 目录中，其中”default”是主题名称，使用 Designer 或执行 scripts/update_res.py 脚本打包资源时，会自动将该目录下的资源打包到 res 的对应目录中。

在代码中，可以通过 assets_manager_ref 接口查找并引用资源，代码如下：

assets_manager_t* am = assets_manager();                                   /* 获取资源管理器对象 */
asset_info_t* info = assets_manager_ref(am, ASSET_TYPE_DATA, "conf.json"); /* 查找并引用资源对应资源 */

/* 获取自定义资源并做处理，这里仅打印信息，可根据实际情况编写处理代码 */
log_debug("%s\n", (char*)info->data);

assets_manager_unref(am, info);  /* 释放引用资源 */

五、相关文档

  • AWTK 中的资源管理


利用 app_helper 编写 SConstruct

AWTK 项目中有 SConstruct 文件，该文件是 Scons 的编译脚本。当开发者需要在程序中使用依赖库或者进行自定义预处理时，需要遵循 Python 语法编写 SConstruct 文件，这是一件繁琐的事情。

为简化 SConstruct 的编写，AWTK 把一些公共功能提取到 awtk/scripts/app_helper_base.py 中，并且在项目目录下的 scripts/app_helper.py 中导入 app_helper_base.py，让开发者可直接在项目的 SConstruct 文件中调用这些函数。

1 相关函数

app_helper.py 提供了下表中的函数，具体用法请参考 awtk/docs/app_helper_usage.md。

函数名称 | 说明
add_deps | 增加依赖的第三方库
add_libs | 增加依赖的库
set_dll_def | 设置动态库的 def 文件名
add_cpppath | 增加头文件搜索路径
add_libpath | 增加库的搜索路径
add_cxxflags | 增加C++预处理参数
add_ccflags | 增加C 预处理参数
add_linkflags | 增加链接参数
add_platform_libs | 增加特定平台的需要的库
add_platform_cpppath | 增加特定平台的需要的头文件搜索路径
add_platform_libpath | 增加特定平台的需要的库搜索路径
add_platform_ccflags | 增加特定平台的需要的C 预处理参数
add_platform_cxxflags | 增加特定平台的需要的C++预处理参数
add_platform_linkflags | 增加特定平台的需要的链接参数

上表中的函数实现在 awtk/scripts/app_helper_base.py 中。

2 示例

使用 app_helper.py 首先需要在SConstruct中导入它，然后调用 Helper 函数得到helper对象，最后使用 helper 对象调用上一节的函数。

例如，在项目中使用 SQLite 软件库（SQL数据库引擎），静态链接库以及头文件的目录结构如下：

项目目录/
    |-- 3rd/sqlite3/sqlite3.h
    |-- lib/sqlite3.lib

在项目目录下的 SConstruct 文件中调用 add_libs() 函数增加 sqlite3.lib 依赖库，并且调用 add_cpppath() 函数增加该依赖库头文件的搜索路径，代码如下：

import os
import scripts.app_helper as app

helper = app.Helper(ARGUMENTS);
helper.add_libs(['sqlite3']).add_cpppath([os.path.join(helper.APP_ROOT, '3rd')]).call(DefaultEnvironment)

SConscript(['src/SConscript', '3rd/sqlite3/SConscript'])

需要注意的是：

  1. 本示例中将静态链接库 sqlite3.lib 放在项目目录的 lib 文件夹下，AWTK 默认将该路径添加到库的搜索路径中。如果开发者将静态链接库放在其他路径，则还需要调用 add_libpath() 函数将该路径添加到库的搜索路径中。
  2. helper 支持链式调用，call 函数需要放到最后。

3 特殊函数

调用 app_helper.py 提供的函数，通常只需要传入文件或目录对应的路径，但有个别函数的还需要传入其他参数，包括 add_deps 和 add_platform_ 开头的所有函数，下面举例说明。

（1）add_deps() 函数原型如下：

def add_deps(self, DEPENDS_LIBS):

调用 add_deps() 函数增加依赖的第三方库，代码如下：

DEPENDS_LIBS = [
{
  "root" : '../awtk-restful-httpd',
  'shared_libs': ['httpd'],
  'static_libs': []
}
]
helper.add_deps(DEPENDS_LIBS)

“root”为第三方库的路径，支持相对路径和绝对路径；”shared_libs”为动态链接库；”static_libs”为静态链接库。

（2）add_platform_libs() 函数原型如下：

def add_platform_libs(self, plat, PLATFORM_LIBS)

调用 add_platform_libs() 函数增加 Windows 平台下的 ws2_32.lib 库，代码如下：

helper.add_platform_libs('Windows', ['ws2_32'])

plat参数为特定平台，取值如下：Windows、Linux 和 Darwin，分别表示 Windows 平台、Linux 平台和 macOS 平台。PLATFORM_LIBS 参数为库的名称。其他 add_platform_ 开头的函数用法也类似。

  1. awtk-hello
  2. awtk-mvvm-c-hello
  3. awtk-widget-table-view


应用程序的类型

在 AWTK 中，应用程序有以下类型：

/**
 * @enum app_type_t
 * @prefix APP_
 * @annotation ["scriptable"]
 * 应用程序类型。
 */
typedef enum _app_type_t {
  /**
   * @const APP_MOBILE
   * 嵌入式或移动 APP
   */
  APP_MOBILE = 0,
  /**
   * @const APP_SIMULATOR
   * 模拟器。
   */
  APP_SIMULATOR,
  /**
   * @const APP_DESKTOP
   * 桌面应用程序。
   */
  APP_DESKTOP
} app_type_t;

APP_SIMULATOR

默认运行方式，有以下特点：

  • 使用 AWTK 的输入法
  • 使用 AWTK 的剪切板
  • 在 PC 上运行时，窗口不可调整大小。

APP_DESKTOP

用于开发 PC 软件，有以下特点：

  • 使用系统的输入法
  • 使用系统的剪切板
  • 窗口可以调整大小。

APP_MOBILE

在 Android/iOS 上： * 使用系统的输入法 * 使用系统的剪切板 * 窗口自动调整大小。

在嵌入式系统： * 使用 AWTK 的输入法 * 使用 AWTK 的剪切板 * 窗口自动调整大小。

使用方法

建议使用 awtk_main.inc。

对于 PC 软件，需要 APP_TYPE 为 APP_DESKTOP，其它情况保持默认即可，编译时会自动判断。

示例(demos/demo_desktop.c)

#define LCD_WIDTH 400
#define LCD_HEGHT 400
#define APP_TYPE APP_DESKTOP

#ifdef WITH_FS_RES
#define APP_DEFAULT_FONT "default_full"
#endif /*WITH_FS_RES*/

#include "awtk_main.inc"


资源目录变更通知

为了支持多个主题在运行时实时切换，我们对目录结构做了一些调整： 在资源目录下增加主题子目录。

如：

  • 旧的目录结果如下：
assets
  inc
  raw
  • 新的目录结果如下：
assets
  default
    inc
    raw

资源更新脚本也需要做相应改动：

旧的 scripts/update_res.py

common.init(AWTK_ROOT, ASSETS_ROOT, ASSET_C);
common.updateRes()

新的 scripts/update_res.py

common.init(AWTK_ROOT, ASSETS_ROOT, 'default', ASSET_C);
common.updateRes()


AWTK 中的资源管理

一、基本架构

这里的资源管理器并非 Windows 下的文件浏览器，而是负责对各种资源，比如字体、窗体样式、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个：

  • 让上层不需要了解存储的方式。在没有文件系统时或者内存紧缺时，把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时，资源放在文件系统中。在有网络时，资源也可以存放在服务器上（暂未实现）。资源管理器为上层提供统一的接口，让上层而不用关心底层的存储方式。

  • 让上层不需要了解资源的具体格式。比如一个名为 earth 的图片，没有文件系统或内存紧缺，图片直接用位图数据格式存在 ROM 中，而有文件系统时，则用 PNG 格式存放在文件系统中。资源管理器让上层不需要关心图片的格式，访问时指定图片的名称即可（不用指定扩展名）。

  • 让上层不需要了解屏幕的密度。不同的屏幕密度下需要加载不同的图片，比如 MacPro 的 Retina 屏就需要用双倍解析度的图片，否则就出现界面模糊。资源管理器需要为此提供支持，让上层不需关心屏幕的密度。

  • 对资源进行内存缓存。不同类型的资源使用方式是不一样的，比如字体和窗体样式加载之后会一直使用，UI 文件在生成界面之后就暂时不需要了，PNG 文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。

负责资源管理器和资源管理相关的组件如下图所示：

网络加载暂未实现。

二、资源的生成

AWTK 中的资源需要进行格式转换才能使用：

  • 在没有文件系统时或者内存紧缺时，需要把资源转成常量数组直接编译到代码中。
  • XML 格式的 UI 文件需要转换成二进制的格式。
  • XML 格式的窗体样式文件需要转换成二进制的格式。
  • TTF 可以根据需要转换成位图字体。
  • PNG 可以根据需要转换成位图图片。

相关工具：

  • bin/fontgen 位图字体生成工具
  • bin/imagegen 位图图片生成工具
  • bin/resgen 二进制文件生成资源常量数组
  • bin/themegen XML 窗体样式转换成二进制的窗体样式
  • bin/xml_to_ui XML 的界面描述格式转换二进制的界面描述格式
  • ./scripts/update_res.py 批量转换整个项目的资源

三、资源初始化

将资源生成常量数组直接编译到代码中时，其初始化过程为：

    1. 包含相应的数据文件。
#include "assets/inc/fonts/ap.data"
#include "assets/inc/fonts/default.data"
#include "assets/inc/fonts/default_ttf.data"
#include "assets/inc/images/bricks.data"
#include "assets/inc/images/checked.data"
...
    2. 将资源增加到资源管理器中。
assets_manager_add(rm, font_ap);
assets_manager_add(rm, font_default);
assets_manager_add(rm, font_default_ttf);
assets_manager_add(rm, image_bricks);
assets_manager_add(rm, image_checked);
...

将资源放在文件系统中时，一般不需要特殊处理，不过可以用 assets_manager_load 预加载资源。如：

assets_manager_load(rm, ASSET_TYPE_THEME, "default");
assets_manager_load(rm, ASSET_TYPE_FONT, "default_ttf");

参考：demos/assets.c

四、资源使用方法

  • 加载图片图片

使用 image_manager_load，指定图片的名称即可。

bitmap_t img;
image_manager_load(image_manager(), "earth", &img);

或者通过更上层 widget 的函数去加载图片：

bitmap_t bitmap;
widget_load_image(widget, "myimage", &bitmap);
  • 使用 UI 数据

使用 window_open，指定资源的名称即可。如：

widget_t* win = window_open(name);
  • 使用字体

一般在窗体样式文件中指定字体即可。

  • 使用窗体样式

一般在界面描述文件中指定 style 即可。

五、资源的名称

资源名称一般就是资源的文件名，不带文件扩展名。比如图片名为 test.png，那资源名称就是 test，如果因为某种原因，把 test.png 换成了 test.jpg，对代码并无影响。

对于 DATA 类型的资源，由于其扩展名不固定，所以需要带扩展名才能访问。

比如资源文件名为”app.json”，不能用”app”访问，而是用”app.json”才能访问。

对于图片和 UI 资源名称，AWTK 还支持一种高级用法。想想下面几种情况：

  • 需要支持不同的分辨率。而在不同分辨率里，要使用不同的背景图片。
  • 需要支持竖屏和横屏。而有的界面自动排版不能满足需求，需要为竖屏和横屏个写一个 XML 文件。
  • 需要支持不同的语言。而在不同的语言里，有的图片是语言相关的。

为了应对这些情况，AWTK 提供了名称表达式：

  • 名称中可以带变量和表达式。变量用${xxx}表示，xxx 将被替换成实际的值。
  • 可以指定多个名称，依次匹配，直到找到的为止。多个名称之间用逗号分隔。

示例 1：

<style name="sky">
  <normal bg_image="bg_${device_orientation}_1"/>
</style>

在竖屏下，相当于：

<style name="sky">
  <normal bg_image="bg_portrait_1"/>
</style>

在横屏下，相当于：

<style name="sky">
  <normal bg_image="bg_landscape_1"/>
</style>

示例 2:

<image image="flag_${country},flag_none" x="c" y="m:-80" w="80" h="80"/>

在 locale 为 zh_CN 时，相当于：

<image image="flag_CN,flag_none" x="c" y="m:-80" w="80" h="80"/>

依次查找 flag_CN 和 flag_none 两个图片。

在 locale 为 en_US 时，相当于：

<image image="flag_US,flag_none" x="c" y="m:-80" w="80" h="80"/>

依次查找 flag_US 和 flag_none 两个图片。

变量名可以使用 system_info 中的成员变量

六、扩展用法

有时候在嵌入式平台开发项目中会出现一种情况，项目的资源分为两部分，一部分是基本上不会修改的资源（例如字库资源等），一部分会根据开发过程中会进行修改或者更换资源（例如图片资源等）。

这个时候需要把不会修改的资源烧写指定的地方（flash 或者 其他的存储设备中），然后再通过特定的方法加载到 awtk 中。

6.1 示例：

#include "base/assets_manager.h"

/* 字体文件资源烧写到 0x60520000 的地址中 */
#define FONT_FULL_ADD 0x60520000
/* 字体文件资源大小长度 */
#define FONT_FULL_LEN 0x00220000

ret_t assets_init(void) {
  assets_manager_t* am = assets_manager();
   /*
   * 把字体文件资源 data 数据直接加载到 awtk 中
   * 并且该字体文件资源的名字为 "default_full"
   * 程序内部可以通过 "default_full" 名字来使用该字体资源
   */
  assets_manager_add_data(am, "default_full", ASSET_TYPE_FONT, ASSET_TYPE_FONT_TTF,
                          (const uint8_t*)FONT_FULL_ADD, FONT_FULL_LEN);
}

备注：assets_manager_add_data 函数传入的资源 data 数组，会拷贝一份在 awtk 内部，所以如果资源 data 数组是通过 malloc 等方法创建出来的话，就需要自行释放资源 data 数组。

七、相关文档

  • AWTK 应用程序中的资源


AWTK 资源打包

在支持文件系统的时候，AWTK 的资源缺省是以独立文件的形式放在指定目录里的。但在有的情况下，把全部资源文件放到一个 zip 文件中，是更好的或唯一的选择。比如：

  • 开发 PC 应用程序。

  • 在没有文件系统的情况下，把资源放到外部 flash。

  • 开发 IOS 应用程序（通过 cmake 创建 Xcode 项目时，似乎没有办法让资源保持原有的目录结构）。

一、生成 zip 文件

在 bash 下，可以使用 scripts/create_assets_zip.sh 脚本完成以上工作。

如：

../awtk/scripts/create_assets_zip.sh

假设当前在应用程序的根目录，应用程序和 awtk 并列在同一个目录中，生成的 zip 文件名为 assets.zip。

二、启用从 zip 文件中加载资源

实际使用时，只需要在包含 awtk_main.inc 之前，定义 ASSETS_ZIP 即可。如：

#define ASSETS_ZIP "./assets.zip"

#include "awtk_main.inc"

asset_loader_zip 支持从 zip 文件加载，也支持从抽象的 data reader 接口加载。希望从外部 flash 中加载，可以把读取 flash 的功能包装成 data reader 的接口。


如果您针对某个芯片或平台移植过 AWTK，或者为 AWTK 扩展过炫酷的控件，并希望共享这个适配代码，可以联系我们开源到 GitHub 上，我们愿意在 AWTK 技术上对您提供进一步的支持服务，大家可以一起把这个适配做稳做好，构建 AWTK 良好的生态。

进一步了解我们的 AWTK 生态共建计划

索引

  • 操作系统适配
  • MCU芯片适配
  • 扩展控件
  • 编程语言绑定
  • 编译构建工具
  • 商业应用案例

操作系统适配

桌面操作系统

操作系统 | 下载地址 | 作者
Windows | https://github.com/zlgopen/awtk | ZLG
Linux | https://github.com/zlgopen/awtk | ZLG
macOS | https://github.com/zlgopen/awtk | ZLG

嵌入式操作系统

操作系统 | 下载地址 | 作者
AWorksOS | MCU芯片适配 |
嵌入式 Linux | MCU芯片适配 |
RT-Thread | MCU芯片适配 |
TencentOS | MCU芯片适配 |
FreeRTOS | MCU芯片适配 |
SylixOS | https://github.com/zlgopen/awtk-sylixos | ZLG
ms-rtos | https://github.com/ms-rtos/awtk | 翼辉

软件框架和软件平台

操作系统 | 下载地址 | 作者
海思Linux | https://github.com/zlgopen/awtk-linux-fb/issues/28 | kent52712
VSF平台 | https://github.com/vsfteam/vsf | vsfteam【原厂】
Wayland | https://github.com/zjm1060/awtk-wayland | zjm1060
Web | https://github.com/zlgopen/awtk-web | ZLG
Android | https://github.com/zlgopen/awtk-android | ZLG
iOS | https://github.com/zlgopen/awtk-ios | ZLG

MCU芯片适配

以下按芯片厂商名字字母排序

Anyka

芯片 | 操作系统 | 下载地址 | 作者
AK376xD | RT-Thread | 请联系作者 | Anyka【原厂】
AK376xD | Linux | 请联系作者 | Anyka【原厂】

Espressif

芯片 | 操作系统 | 下载地址 | 作者
ESP32 | FreeRTOS | https://github.com/jason-mao/esp32-awtk | jason-mao

GigaDevice

芯片 | 操作系统 | 下载地址 | 作者
GD32450Z | 无 | 请联系作者 | ZLG

Ingenic

芯片 | 操作系统 | 下载地址 | 作者
M200 | Linux | https://github.com/zlgopen/awtk-port-ingenic | Ingenic【原厂】
X1000 | Linux | https://github.com/zlgopen/awtk-port-ingenic | Ingenic【原厂】
X1830 | Linux | https://github.com/zlgopen/awtk-port-ingenic | Ingenic【原厂】

MindMotion

芯片 | 操作系统 | 下载地址 | 作者
MM32F103RET6 | 无 | 请联系作者 | MindMotion【原厂】

Nordic

芯片 | 操作系统 | 下载地址 | 作者
NRF52840 | FreeRTOS | 请联系作者 | jimmywong2003

NXP

芯片 | 操作系统 | 下载地址 | 作者
RT1052 | AWorksOS | https://github.com/zlgopen/awtk-aworks-rt1052 | ZLG
RT1052 | 无 | https://github.com/zlgopen/awtk-easyarm-rt1052-raw | ZLG
RT1052 | FreeRTOS | https://github.com/chinachuli/awtk-imxrt1052-raw | 褚立
RT1020 | 无 | 请联系作者 | ZLG
RT1011 | 无 | 请联系作者 | ZLG
RT1176 | FreeRTOS | 请联系作者 | ZLG
RT500 | FreeRTOS | 请联系作者 | ZLG
i.MX6 Cortex-A7 | AWorksOS | 请联系作者 | ZLG
i.MX6 Cortex-A7 | Linux | https://github.com/zlgopen/awtk-linux-fb | ZLG
i.MX6 Cortex-A9 | Linux | https://github.com/zlgopen/awtk-linux-fb | ZLG
i.MX283 | Linux | https://github.com/zlgopen/awtk-linux-fb | ZLG
LPC54608 | 无 | 请联系作者 | ZLG
LPC54018 | 无 | 请联系作者 | ZLG
LPC1768 | 无 | https://github.com/zlgopen/awtk-lpc1768-raw | ZLG

ST

芯片 | 操作系统 | 下载地址 | 作者
STM32F103 | 无 | https://github.com/zlgopen/awtk-stm32f103ze-raw | ZLG
STM32F103 | RT-Thread | https://github.com/zlgopen/awtk-stm32f103ze-rtthread | ZLG
STM32F103 | TencentOS | https://github.com/zlgopen/awtk-stm32f103ze-tencentos | ZLG
STM32H743 | TencentOS | https://github.com/zlgopen/awtk-stm32h743iitx-tencentos | ZLG
STM32H743 | FreeRTOS | https://github.com/zlgopen/awtk-stm32h743iitx-freertos | ZLG
STM32F429 | 无 | https://github.com/zlgopen/awtk-stm32f429igtx-raw | ZLG
STM32F767 | 无 | https://github.com/zlgopen/awtk-stm32f767igtx-raw | ZLG
STM32F769 | FreeRTOS | https://github.com/wpmyj/awtk-stm32f769-freertos | 王培明

SigmaStar

芯片 | 操作系统 | 下载地址 | 作者
SSD201 | Linux | 请联系作者 | SigmaStar【原厂】
SSD202D | Linux | 请联系作者 | SigmaStar【原厂】
SSD212 | Linux | 请联系作者 | SigmaStar【原厂】
SSD210 | Linux | 请联系作者 | SigmaStar【原厂】
SSD222 | Linux | 请联系作者 | SigmaStar【原厂】
SSD268G | Linux | 请联系作者 | SigmaStar【原厂】

以上信息如果有误，或需要补充的，请联系 chentan@zlg.cn 修正

扩展控件

基础控件

控件名称 | 下载地址 | 作者
二维码 | https://github.com/zlgopen/awtk-widget-store | ZLG
下拉按钮 | https://github.com/zlgopen/awtk-widget-store | ZLG
日期选择 | https://github.com/zlgopen/awtk-widget-store | ZLG
旋转文本 | https://github.com/zlgopen/awtk-widget-store | ZLG
数字显示 | https://github.com/zlgopen/awtk-widget-store | ZLG
蒙板视图 | https://github.com/zlgopen/awtk-widget-store | ZLG
圆形滑块 | https://github.com/longyuwlz/awtk_slider_circle | longyuwlz

图表控件

控件名称 | 下载地址 | 作者
饼图 | https://github.com/zlgopen/awtk-widget-store | ZLG
柱状图 | https://github.com/zlgopen/awtk-widget-store | ZLG
曲线图 | https://github.com/zlgopen/awtk-widget-store | ZLG
表格视图 | https://github.com/zlgopen/awtk-widget-store | ZLG

多媒体控件

控件名称 | 下载地址 | 作者
摄像头 | https://github.com/zlgopen/awtk-widget-store | ZLG
视频动画 | https://github.com/zlgopen/awtk-widget-store | ZLG

编程语言绑定

C

解析引擎 | 下载地址 | 作者
C99 | https://github.com/zlgopen/awtk | ZLG

JavaScript

解析引擎 | 下载地址 | 作者
JerryScript | https://github.com/zlgopen/awtk-jerryscript | ZLG
QuickJS | https://github.com/zlgopen/awtk-quickjs | ZLG
Node.js | 请联系作者 | ZLG

Lua

解析引擎 | 下载地址 | 作者
Lua | https://github.com/zlgopen/awtk-lua | ZLG

C++

解析引擎 | 下载地址 | 作者
C++98 | https://github.com/zlgopen/awtk-cpp | ZLG

Java

解析引擎 | 下载地址 | 作者
JDK | https://github.com/zlgopen/awtk-java | ZLG

编译构建工具

构建工具 | 编译平台 | 下载地址 | 作者
SCons | PC ALL | https://github.com/zlgopen/awtk | ZLG
SCons | ARMCC | https://github.com/zlgopen/awtk-scons-armcc | ZLG
SCons | MinGW | https://github.com/zlgopen/awtk-scons-mingw | ZLG
CMake | MSVC | https://github.com/zlgopen/awtk-msvc | ZLG
CMake | macOS | https://github.com/oskycar/awtktest_cmake | allenyang

商业应用案例

智能家居

智能穿戴

汽车电子

医疗电子

工业控制


AWTK 生态共建计划

各位关注和使用 AWTK 的开发者，你们好！

如果您针对某个芯片或平台移植过 AWTK，或者为 AWTK 扩展过炫酷的控件，并希望共享这个适配代码，可以联系我们开源到 GitHub 上，我们愿意在 AWTK 技术上对您提供进一步的支持服务，大家可以一起把这个适配做稳做好，构建 AWTK 良好的生态。

您可以获得

  • 在 AWTK 官方页面上，加入您的相关链接
  • 更进一步的 AWTK 技术支持服务
  • 更多的资源和信息共享，与我们一起共建共赢嵌入式开发生态

联系方式

发送邮件到 chentan@zlg.cn，标题写 AWTK 生态共建；

或添加小Z微信（zlgmcu-888），备注写 AWTK 生态共建，申请加入 AWTK 生态共建交流群

您需要提供

需要给我们提供一些基本信息：

  1. 项目的名称
  2. 适配的平台：包括 MCU 型号、Flash 和 RAM 大小、屏幕分辨率及颜色位数、操作系统等
  3. 您的姓名和联系方式
  4. 项目在 GitHub 上的地址
  5. 公司名称（个人项目可以不填）

如何上传代码

我们期待与芯片原厂和操作系统原厂的合作，同时也欢迎个人项目的参与

针对原厂和个人的项目有不同的上传方式：

如果是原厂合作的项目
  1. 我们将会在 GitHub 创建一个专属的仓库 zlgopen/awtk-port-公司名，并在 AWTK 官方页面加上链接
  2. 请您在 GitHub 上注册一个维护账号，我们会将这个账号加入该仓库的上传权限
  3. 您可以将公司介绍、项目说明和项目代码 push 到该仓库
  4. 我们将为您建立专项支持微信群，提供更进一步的 AWTK 技术支持服务
如果是个人的项目

  1. 需要您把项目上传到 GitHub 的个人仓库中，然后把仓库地址发给我们

  2. 我们审核完之后会在 AWTK 官方页面加上链接

  3. 我们会邀请您加入 AWTK 生态共建交流群，并提供更优先的技术支持服务

2019/11/8


AWTK 中支持的字体

AWTK 支持显示以下两种字体：

  1. 矢量字库，通常为 .ttf、.otf 格式的文件，AWTK 默认采用 stb 库将矢量字库解析为字模（位图）。
  2. 点阵字，即已经解析好的位图字体。

它们的优缺点如下：

类型 | 优点 | 缺点
矢量字库 | 管理方便，占用的 flash 空间小 | 整个字库文件都需要加载到内存中，且需要消耗性能解码，同时解码时存在内存峰值
点阵字 | 可裁剪掉 AWTK 中的字体解码模块，显示时无需解码，加载速度快 | 由于提前解码好，所以非常占用 flash 空间

1 使用 AWTK 中的工具裁剪字体

如果需要对矢量字库进行裁剪或者生成点阵字，可以使用 AWTK 内置的字体工具，使用方法可以查看 font_gen。

2 使用 AWTK Designer 裁剪字体

使用 AWTK Designer 创建项目后，字体文件一般存储项目目录的 design/default/fonts 中，其中包含以下目录或文件：

目录/文件 | 作用
config | 存放裁剪字体文件的配置
origin | 存放被裁剪前的原始字体文件
default.ttf | 项目当前使用的被裁剪后的缺省矢量字库

使用 AWTK Designer 可以裁剪字体文件与生成点阵字文件，详情请参阅 awtk文档 中 “FAQ常见问题” 里的 “AWTK Designer” 章节。


AWTK 应用程序的入口

一、背景

虽然 main 函数是 C 语言的标准入口，但是不同平台的入口函数仍然有多种不同的形式。比如：

  • 嵌入式系统用 gui_app_start
  • ios/android 用 SDL_main
  • Linux/MacOS 用 main
  • Windows 用 wWinMain

如果希望开发的程序要在多个平台上运行，就需要处理多种入口函数。为了简化这个过程，AWTK 把入口函数的处理封装到 awtk_main.inc 中，开发者只需要 include 进来即可。

二、基本用法

  • 实现 application_init 函数
ret_t application_init() {
  /*do sth.*/
  return RET_OK;
}
  • 实现 application_exit 函数
ret_t application_exit() {
  log_debug("application_exit\n");
  return RET_OK;
}
  • 包含 awtk_main.inc
#include "awtk_main.inc"

请参考完整的例子

三、高级用法

  • 指定APP TYPE和窗口大小
#define LCD_WIDTH 800
#define LCD_HEGHT 600
#define AWTK_APP_TYPE APP_DESKTOP

#include "awtk_main.inc"

请参考完整的例子

  • 处理命令行参数
static ret_t on_cmd_line(int argc, char* argv[]) {
  script_file = argc == 2 ? argv[1] : "./demos/demoui.js";

  return RET_OK;
}

#define ON_CMD_LINE on_cmd_line

#include "awtk_main.inc"

请参考完整的例子

  • 指定应用程序的名称
#define APP_NAME "AWTK-JS"

#include "awtk_main.inc"
  • 指定缺省字体
#define APP_DEFAULT_FONT "default_full"

#include "awtk_main.inc"
  • 指定资源路径
#define APP_RES_ROOT "./"

#include "awtk_main.inc"
  • 从zip文件加载资源
#define ASSETS_ZIP "./assets.zip"

#include "awtk_main.inc"
  • 旋转屏幕
//横屏当竖屏
#define WITH_LCD_PORTRAIT 1

//竖屏当横屏
#define WITH_LCD_LANDSCAPE 1

#include "awtk_main.inc"
  • 启用鼠标指针
#define ENABLE_CURSOR 1

#include "awtk_main.inc"
  • 指定默认语言
#define APP_DEFAULT_LANGUAGE "zh"
#define APP_DEFAULT_COUNTRY "CN"

#include "awtk_main.inc"
  • 关闭命令行窗口
#define APP_ENABLE_CONSOLE FALSE

#include "awtk_main.inc"

请参考完整的例子


AWTK 项目描述文件

AWTK Designer（下面简称 Designer）创建的项目均有一个项目描述文件 project.json。该文件是一个JSON格式的文件，是每个项目必须的，主要描述了项目的名称、类型、启动页面、资源配置等。Designer 通过该文件来获取项目信息并识别项目是否可以打开。

如：

{
  "name": "project_name",
  "version": "1.0.0",
  "date": "2020-07-04",
  "team": "AWTK Develop Team",
  "author": "XXXX <xxxx@zlg.cn>",
  "desc": "使用 XML(UI文件)描述用户界面 和 C/C++ 实现业务逻辑的应用程序",
  "copyright": "Guangzhou ZHIYUAN Electronics Co.,Ltd.",
  "type": "PROJECT_WIDGETS_APPLICATION",
  "subType": "",
  "entry": "main",
  "assets": {
    "activedTheme": "default",
    "outputDir": "res",
    "loadFrom": "any",
    "const": "resource_data",
    "screenDPR": "x1",
    "defaultLanguage": "zh",
    "defaultCountry": "CN",
    "themes": {
      "default": {
        "activedSystemBar": "system_bar",
        "activedBottomSystemBar": "system_bar_b",
        "packaged": true,
        "fonts": {
          "default": {
            "text": " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~，。？！确定取消",
            "18": " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~，。？！确定取消"
          }
        },
        "lcd": {
          "width": "800",
          "height": "480",
          "colorDepth": "16bit",
          "colorFormat": "BGR(A)"
        }
      }
    }
  },
  "creator": {
    "name": "AWTK Designer",
    "version": "1.0.0"
  },
  "awtkRoot": "${DesignerPath}/SDK/awtk",
  "usesSdk": {
    "awtk:minSdkVersion": "20070",
    "awtk:maxSdkVersion": "20090",
    "awtk:targetSdkVersion": "20090"
  }
}

1. name

name 是必须的，表示项目的名称。

注意：对于自定义控件库项目，该名称必须是全小写英文字母，单词之间用下划线连接。

2. version

version 是可选的，表示项目的版本号，缺省为“1.0.0”。

3. date

date 是可选的，表示项目创建的日期。

4. team

team 是可选的，表示项目开发团队的名称。

5. author

author 是可选的，表示作者、联系方式。

6. desc

desc 是可选的，表示项目简介或者功能描述。

7. copyright

copyright 是可选的，表示版权声明。

8. type

type 是可选的，表示项目类型，缺省为“PROJECT_WIDGETS_APPLICATION”。

目前有如下几种项目类型：

  • PROJECT_WIDGETS_APPLICATION 表示使用 XML(UI文件)描述用户界面 和 C/C++ 实现业务逻辑的应用程序，在代码中可通过 AWTK API 直接访问 Widget；

  • PROJECT_CUSTOM_WIDGET 表示自定义控件库，可导入 Designer，安装到项目后可以像内置控件一样编辑并实时预览显示效果；

  • PROJECT_THEME 表示应用程序主题，可导入 Designer 并应用到不同的项目；

  • PROJECT_UI_SNIPPET 表示界面片段，可导入 Designer 并应用到不同的项目。

9. subType

subType 是可选的。

对于PROJECT_UI_SNIPPET类型的项目，目前有system_bar（系统栏）、keyboard（软键盘）两种。

10. entry

entry 是必须的，表示应用程序或者示例程序的启动页面。

11. assets

assets 是必须的，是应用程序或者示例程序的资源配置。主要参数有：

11.1 activedTheme

activedTheme 表示Designer当前激活的主题，也是应用程序或者示例程序的默认主题。

11.2 outputDir

outputDir 表示资源打包时的输出目录。默认为项目的res目录。

11.3 loadFrom

loadFrom 表示资源的打包方式，有 2 个选项：

  • any 表示文件+常量，即同时生成用于文件系统的资源和可直接编译到代码中的常量资源（以常量数组的形式存在）；

  • fs 表示为仅文件，即仅生成用于文件系统的资源。

11.4 const

const 表示资源的常量格式，主要指字体、图片打包时生成的常量资源的格式，有 2 种格式：

  • resource_data 表示原始数据，即常量数组中缓存的是原始的文件数据（比如，PNG 图片的原始数据为 PNG 数据）；

  • bitmap_data 表示位图数据，即常量数组中缓存的是 Bitmap 数据。

  • all_data 表示同时生成上述两种类型的数据。

11.5 screenDPR

screenDPR 表示LCD的设备像素比（DPR），影响打包生成常量资源时应包含哪些图片资源，有 3 个选项：

  • x1 表示包含 x1、xx、svg；

  • x2 表示包含 x2、xx、svg；

  • x3 表示包含 x3、xx、svg。

11.6 defaultLanguage

defaultLanguage 表示应用程序默认使用的语言，默认为中文（zh）。

11.7 defaultCountry

defaultCountry 表示应用程序默认使用的语言所属的国家或地区，默认为中国（CN）。

11.8 themes

themes 表示应用程序使用的主题，主题可以有多个，缺省为default。

主题的参数有：

  • activedSystemBar 表示正在使用的顶部系统栏

  • activedBottomSystemBar 表示正在使用的底部系统栏

  • packaged 表示资源打包时是否打包该主题

  • fonts 表示该主题使用到的字体及其设置 比如名称为 default 的字体，可以设置： text 表示裁剪 TTF 文件时需要保留的字符； 18 表示生成 18 字号的 Bitmap 字体时需要保留的字符，这里数值表示字体的字号。

  • lcd 表示 目标 LCD 的参数 主要的参数有： width 表示 LCD 的宽度 height 表示 LCD 的高度 colorDepth 表示 LCD 的颜色深度 colorFormat 表示 LCD 的颜色格式

其中，LCD 的颜色深度和颜色格式决定了 LCD Frame Buffer 的格式。

颜色深度为 1bit 时，颜色格式固定为 MONO，表示 Frame Buffer 为 MONO； 颜色深度为 16bit 且颜色格式为 RGB(A)，表示 Frame Buffer 为 RGB565； 颜色深度为 32bit 且颜色格式为 RGB(A)，表示 Frame Buffer 为 RGB8888； 颜色深度为 16bit 且颜色格式为 BGR(A)，表示 Frame Buffer 为 BGR565； 颜色深度为 32bit 且颜色格式为 BGR(A)，表示 Frame Buffer 为 BGR8888。

而 LCD Frame Buffer 的格式又决定打包生成的字体位图数据（也就是字模数据）和图片位图数据的格式。

对于字体： Frame Buffer 为 MONO 时，字模的 alpha 通道为 1bit；否则为 8bit。 对于图片： Frame Buffer 为 MONO 时，无论图片的颜色通道是什么格式，统一转为 1bit；原颜色灰度>10 时 为 1（表示白色），否则为 0（表示黑色）。 Frame Buffer 为 565 格式时，没有 alpha 通道的图片会转为 565 格式的位图数据，但有 alpha 通道 的图片则仍会转为 8888 格式的位图数据（运行时经过半透混合会转成 565 格式）； Frame Buffer 为 8888 格式时，则全部转为 8888 格式的位图数据。 需要注意的是，对于控件样式（比如背景颜色、文本颜色等）： 由于运行时计算灰度会影响效率，因此，当 Frame Buffer 为 MONO 时，AWTK 认为颜色的 R 通道为 0 时表示黑色，否则为白色。建议 MONO 模式下，样式里的颜色均显式地设为黑色或白色。

12. creator

creator 是必须的，表示项目的创建者，主要的参数有：

  • name 表示创建者的名称，固定为“AWTK Designer”；

  • version 表示创建者的版本号，比如“0.1.6”。

13. usesSdk

usesSdk 是可选的，表示项目依赖的SDK的信息。

比如，项目依赖的AWTK有如下参数：

  • 参数 awtk:minSdkVersion 是可选的，表示兼容的最低版本。

  • 参数 awtk:maxSdkVersion 是可选的，表示兼容的最高版本。

  • 参数 awtk:targetSdkVersion 是可选的，表示最佳版本。

上述版本号对应发布的 AWTK 中 component.json 文件中的 “release_id” 注意：如果没有显式设置，则认为兼容所有版本。

14. awtkRoot

对于1.0.0以上版本的Designer，awtkRoot 是必须的，用于指定项目编译时（即点击 Designer 工具栏上的编译按钮启动编译时）依赖的 AWTK 的路径。

默认为 “${DesignerPath}/SDK/awtk”。

其中， “${DesignerPath}” 表示 Designer 的安装目录。

使用 scons 进行编译时，可以通过 AWTK_ROOT 参数手动设置 AWTK 的路径，比如：

scons AWTK_ROOT=c:/AWTK/SDK/awtk


自定义控件支持脚本绑定

本文 二维码控件 为例，介绍一下如何让自定义控件支持脚本绑定。

本文前提：

  • 安装 node.js
  • 安装 python 3.x
  • awtk 编译环境
  • 在 bash 中运行

1. 获取自定义控件的源码

git clone https://github.com/zlgopen/awtk-widget-qr.git

2. 把自定义控件的源码拷贝到 AWTK 的 ext_widgets 目录下

cp -rf awtk-widget-qr/src/qr  awtk/src/ext_widgets/qr
cp -rf awtk-widget-qr/src/qr_register.*  awtk/src/ext_widgets/

3. 注册控件

修改 awtk/src/ext_widgets/ext_widgets.c

#include "qr_register.h"

ret_t tk_ext_widgets_init(void) {
...
qr_register();
...

}

4. 编译 awtk

cd awtk
scons -j2
cd -

5. 更新绑定代码

git clone https://github.com/zlgopen/awtk-binding
cd awtk-binding
./gen.sh
cd -

6. 同步绑定代码到需要的语言

git clone https://github.com/zlgopen/awtk-jerryscript
cd awtk-jerryscript
./sync.sh
scons

7. 注意

  • 开发应用程序时记得拷贝自定义控件的 style 到资源中。
  • 如果代码下载太慢，可以从 fastgit 下载。


特殊平台编译配置

有些平台编译比较特殊，不能使用 scons 编译，也不能使用 keil 编译。我们用一个配置文件描述项目，然后用脚本来编译或生成项目模板。目前有 web、ios 和 android 版本使用这种方式。

配置文件采用 JSON 格式，位置放在项目的根目录下，推荐命名为 build.json。

一、通用选项

  • name 应用程序名称（不支持中文和特殊符号）。
  • version 版本号。
  • assets 资源所在的目录（相对于配置文件所在的目录，android/ios 一般使用”res/assets”, web 一般使用 design）。
  • sources 源文件列表（相对于配置文件所在的目录）。文件名支持通配符如*.c。只要添加应用程序本身和使用的第三方库的源码即可，AWTK 本身用到的代码会自动添加。
  • includes 头文件搜索路径列表（相对于配置文件所在的目录）。

sources 虽然是通用选项，但是不同平台，包含的源文件可能并不相同，此时应该放到具体平台之下，如果两者都有，则对其进行合并。

二、web 平台选项

web 平台选项放在 web 子键下面，目前支持以下选项：

  • app_type 目前可选择的值有。”c” 表示用 C 语言开发的应用程序，”js”表示用 Javascript 开发的应用程序。

  • romfs（可选） 用于指定配置文件的目录，编译脚本将该目录打包成 romfs，在 AWTK-WEB 中可以通过 os_fs 访问。

  • config 用于指定一些运行参数。

  • width 如果应用开发时没有做自适应性布局，可以用 width 参数指定画布的宽度。
  • height 如果应用开发时没有做自适应性布局，可以用 height 参数指定画布的高度。
  • defaultFont 缺省字体。缺省为”sans”。

  • fontScale 字体的缩放比例。缺省为 1。

  • depends 依赖自定义控件的目录（该目录下需要提供 export.json，具体描述见后面）

config 中的参数也可以直接在 URL 中指定。如：

http://192.168.1.117:8080/demoui/index.html?width=480&height=800&fontScale=0.8&defaultFont=serif

如：

用 C 语言写的 demoui 的配置文件：

  "web": {
    "app_type": "c",
    "assets": "design",
    "romfs": "data",
    "depends":["../awtk-widget-html-view"],
    "sources": [
      "demos/*.c"
    ],
    "config": {
      "fontScale": "0.8",
      "defaultFont": "sans"
    }
  }

用 Javascript 写的 demoui 的配置文件：

{
  "name":"demouijs",
  "version":"1.0",
  "app_type":"js",
  "assets": "design",
  "sources":["./design/default/scripts/basic.js"]
}

三、android 平台选项

android 平台选项放在 android 子键下面，目前支持以下选项：

  • app_name 应用程序的完整名称。如：org.zlgopen.demoui
  • cflags C 代码额外的编译参数。
  • cppflags C++代码额外的编译参数。
  • features 平台专用特性。目前支持：
  • fullscreen 是否全屏。true 表示全屏，false 表示不全屏。

示例：

  "android": {
    "features": {
      "fullscreen":true
    },
    "app_name": "org.zlgopen.demoui",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c",
      "demos/vg_common.inc",
      "res/assets.inc",
      "res/assets/__assets_default.inc"
    ]
  },

四、 ios 平台选项

  • app_name 应用程序的完整名称。如：org.zlgopen.demoui
  • defines 宏定义。ios 和 android 定义方式有些不同，宏定义要放到 defines 中，而不能放到 cflags 和 cppflags。格式也有些不同，如：
"defines":" HAVE_CONFIG_H=1 BUILDING_LIBCURL=1 WITH_CURL=1 ",

  "ios": {
    "app_name": "org.zlgopen.demoui",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c",
      "demos/vg_common.inc",
      "res/assets.inc",
      "res/assets/__assets_default.inc"
    ]
  }

五、完整示例

下面是 demoui 的完整示例

{
  "name": "demoui",
  "version": "1.0",
  "assets": "res/assets",
  "author": "xianjimli@hotmail.com",
  "copyright": "Guangzhou ZHIYUAN Electronics Co.,Ltd.",
  "web": {
    "app_type": "c",
    "assets": "design",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c"
    ],
    "config": {
      "fontScale": "0.8",
      "defaultFont": "sans"
    }
  },
  "android": {
    "app_name": "org.zlgopen.demoui",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c",
      "demos/vg_common.inc",
      "res/assets.inc",
      "res/assets/__assets_default.inc"
    ]
  },
  "ios": {
    "app_name": "org.zlgopen.demoui",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c",
      "demos/vg_common.inc",
      "res/assets.inc",
      "res/assets/__assets_default.inc"
    ]
  }
}

六、export.json 的用法

为了方便引用自定义控件，自定义控件（包括无界面的库）需要提供一个 export.json 的配置文件，用于声明对外提供的源文件和编译参数。

  • sources 源文件列表（相对于配置文件所在的目录）。文件名支持通配符如*.c。

  • includes 头文件搜索路径列表（相对于配置文件所在的目录）。

  • cflags C 语言的编译参数。

  • cxxflags C++语言的编译参数。

  • depends 依赖其它自定义控件的目录。

示例：

{
  "cflags":["-DLITEHTML_UTF8=1"],
  "cxxflags":[""],
  "includes":[
    "src",
    "src/litehtml",
    "src/litehtml/src",
    "src/litehtml/include",
    "src/litehtml/src/gumbo/include",
    "src/litehtml/src/gumbo/include/gumbo",
    "src/litehtml/include/litehtml"
  ],
  "sources":[
    "src/*.c",
    "src/*.cpp",
    "src/litehtml/src/*.cpp",
    "src/litehtml/src/gumbo/*.c",
    "src/html_view/*.cpp",
    "src/html_view/*.c"
  ]
}

七、示例与参考

  • awtk-http-client 的配置文件

  • awtk-hello 的配置文件

  • Android/IOS 插件的配置文件

  • awtk-web-js 的配置文件


最新动态

2023/10/16 * 增加函数 conf_node_get_child_value_int32/conf_node_get_child_value_bool/conf_node_get_child_value_str

2023/10/12 * 增加process支持使用命令行启动子程序以及修复编译警告(感谢智明提供补丁)

2023/10/11 * 修复字体管理器没有正常释放的问(感谢培煌提供补丁) * 修改WITH_JERRYSCRIPT的值默认为false(感谢智明提供补丁) * edit控件和mledit控件支持双击选择单词(感谢颖健提供补丁)

2023/10/10 * 修复window_base_set_applet_name可能导致野指针的问题(感谢培煌发现问题) * 重构widget_get_assets_manager/widget_get_font_manager等函数。 * 修复字体、图片、本地化等资源管理器没有正常释放的问(感谢培煌提供补丁) * 修改如果发现缺失最后一次编译信息提示用户重新编译(感谢智明提供补丁) * 修复python2的保存json配置文件保存失败问题(感谢智明提供补丁)

2023/10/09 * 修复编译脚本python2不兼容的问题(感谢智明提供补丁) * 修复xml_to_ui_gen、str_gen、theme_gen工具中的内存泄漏(感谢高源提供补丁) * 修复value_test中的警告信息(感谢高源提供补丁) * 完善api_doc_lint(感谢俊圣提供补丁)

2023/10/08 * 修复edit控件上一次error状态没有清除的问题(感谢陈聪提供补丁)

2023/10/07 * 增加子程序的模块(感谢智明提供补丁) * 针对edit中的hex输入模式新添加增加delta值方法，修复min，max，step不生效问题(感谢颖健提供补丁)

2023/10/04 * 增加RET_EXCEED_RANGE

2023/10/03 * 增加RET_INVALID_ADDR

2023/10/02 * 增加函数tkc_crc16_modbus * 增加stream_factory

2023/10/01 * 增加函数url_get_param_int32/url_get_param_bool

2023/09/28 * 完善endian.h的注释。

2023/09/27 * 更新文档。 * 修复tinysvg内存泄漏(感谢陈聪提供补丁); * 增加保留最后一次编译的编译参数功能以便于app使用(感谢智明提供补丁) * 修复不兼容mvvm的编译问题(感谢智明提供补丁) * 修正canvas_get_text_metrics函数计算行高算法错误的(感谢陈谭提供补丁)

2023/09/26 * 修复对旧linux-fb的debug模式为true的问题(感谢智明提供补丁) * 修复环形进度条value为0时候画成百分百以及修改nanovg的浮点比较问题(感谢智明提供补丁)

2023/09/25 * 按标准c库修正iswspace 函数定义(感谢陈谭提供补丁) * 增加函数csv_file_object_load/csv_file_object_load_from_buff * 增加函数csv_file_object_save_to_buff/csv_file_object_save_as * xml/json/ubjson/ini/hash_table增加示例代码。

2023/09/25 * 增加函数path_prepend_temp_path * 增加函数path_prepend_user_storage_path

2023/09/24 * 增加函数tk_iostream_tcp_create_client * 增加函数hash_table_size * 更新API文档。

2023/09/23 * 完善socket_helper * 完善serial_helper * 将serial_helper.c/.h移动到tkc目录。

2023/09/21 * 修改scroll_view在children_layout中设置ym垂直间距时，底部没有间距的bug，并在demouiold添加演示(感谢颖健提供补丁) * 完善serial_open的注释(感谢俊杰提供补丁) * 增加编译时检查部分的输入参数是否正确以及改用有序字典来存放参数(感谢智明提供补丁) * 修复新查找脚本失败的问题(感谢智明提供补丁) * 兼容旧的liunx-fb编译报错的问题(感谢智明提供补丁)

2023/09/20 * 修复gauge_pointer测试用例不过的问题(感谢智明提供补丁) * 修改fs_stat对mingw的宽字符串问题(感谢智明提供补丁) * conf_doc增加一个标志位控制是否可以get/set object类型(感谢兆坤提供补丁)。 * 完善WASM支持。 * 修复多个mutable_image控件紧贴或重叠时，出现的 闪烁问题(感谢雨欣提供补丁)。

2023/09/18 * 修复打包工具打包有特殊字符导名字的资源导致断言的问题(感谢智明提供补丁) * 修复测试用例崩溃问题(感谢智明提供补丁) * 修复gtest不过的问题(感谢智明提供补丁) * 修复卸载资源管理器不正常的问题(感谢智明提供补丁) * 在mingw下盘符路径不正常的问题(感谢智明提供补丁) * 修复命令行使用mwindow不正常的问题(感谢智明提供补丁) * 修正cppcheck和infer静态检查警告(感谢陈谭提供补丁)

2023/09/15 * 修复 path_basename_ex 的对于混合斜杆不支持的问题(感谢智明提供补丁) * 增加scons清除的时候顺便把lib和bin目录也删除功能(感谢智明提供补丁)

2023/09/14 * 修复label自动换行并且置顶时文本会往下移动几个像素的问题(感谢颖健提供补丁)

2023/09/13 * 增加如何将资源编译到应用程序并使用它们 (感谢雨欣提供补丁) * 修复当BUILD_DIR指定的路径在SConstruct文件所在目录之外的目录时无法正常编译的问题(感谢培煌提供补丁) * 为 text_selector 新增文本缩写功能(感谢颖健提供补丁)

2023/09/11 * 增加 ASSERT_STREQ_UNIX_FILE * 增加blend的g2d的注释说明(感谢智明提供补丁)

2023/09/08 * 给APP的编译参数增加WIN32_RES参数(感谢智明提供补丁) * 修复快速旋转构建180度图片的时候像素点偏移多一位的问题(感谢智明提供补丁)

2023/09/07 * 统一宏TK_STRDUP和TK_STRNDUP与对应接口的行为(感谢雨欣提供补丁)

2023/09/06 * 给导出的awtk_config_define.py文件 中增加字符串反转义字符串(感谢智明提供补丁) * 修复控重复播放控件动画时延迟属性不生效的问题(感谢智明提供补丁)

2023/09/05 * 公开函数idle_exist(感谢兆坤提供补丁) * fscript_json文档增加获取数组类型节点子元素数量的示例(感谢雨欣提供补丁)

2023/09/04 * conf_node支持object类型(感谢兆坤提供补丁)

2023/08/30 * 增加函数tk_sscanf_simple

2023/08/29 * 完善编译脚本(感谢智明提供补丁)

2023/08/28 * 增加函数tk_socket_get_client_ip/tk_socket_get_self_ip/tk_socket_get_client_ip_str/tk_socket_get_self_ip_str * tcp_send/tcp_recv增加命令行参数。 * 增加函数tk_ostream_write_str/tk_ostream_printf * 增加函数path_abs_normalize/path_abs_normalize_with_root

2023/08/25 * 完善wasm helper * 完善编辑脚本(感谢智明提供补丁)

2023/08/24 * 完善wasm helper * 修复字符串为中文的时候判断是否为空格时候会断言问(感谢智明提供补丁) * 完善demoui/demouiold的资源(感谢泽武提供补丁)

2023/08/23 * 修复控件动画的回调函数收到注册顺序影响(感谢智明提供补丁) * 让部分函数支持scriptable属性(感谢兆坤提供补丁) * 完善编译脚本(感谢高源提供补丁) * 修复API文档错误。

2023/08/22 * slide_meun增加一个注释来说明代码用途(感谢智明提供补丁) * 控件动画增加relayout的属性(感谢智明提供补丁) * fscript增加控件动画回调事件(感谢智明提供补丁) * 增加fscript_widget的widget_layout和widget_request_relayout函数(感谢智明提供补丁)

2023/08/21 * 增加函数cmd_args_process_wstr * 增加函数tk_utf8_dup_wstr * 增加函数tk_to_utf8_argv * 增加函数tk_free_utf8_argv * 增加宏MAIN/END_MAIN * 完善Windows平台初始化，让Console输出支持UTF8 * 卸载资源缓存失败的问题(感谢雨欣提供补丁)

2023/08/16 * 增加函数str_equal/wstr_eq/wstr_create/wstr_destroy/wstr_append_more等函数 * 增加宏STR_DESTROY/WSTR_DESTROY。 * 完善资源生成脚本(感谢智明提供补丁) * 修复x2 < x1或者y2 < y1时，画线错误的问题(感谢兆坤提供补丁)

2023/08/14 * edit 的 tip 属性支持双向排版功能(感谢泽武提供补丁) * edit 在 readonly 属性为 true 时，点击键盘上下键与滑动鼠标滚轮不会再修改 edit 的值(感谢泽武提供补丁)

2023/08/11 * 优化image_base控件的点击逻辑，只有当指针落下与抬起都在控件内才触发click事件(感谢泽武提供补丁) * 完善window_manager_close_window_force注释(感谢泽武提供补丁)

2023/08/10 * 完善progress bar的脏矩形(感谢智明提供补丁) * 完善demoui text selector资源(感谢智明提供补丁) * agge 模式增加 argb 和 abgr 的颜色支持(感谢智明提供补丁) * 修复 awtk 使用 mingw 的时候，在 windows 下无法消除背后的 cmd 窗口(感谢智明提供补丁) * 完善conf json支持按指定的方式缩进(感谢林福提供补丁)。 * 完善 event_source_manager_default 让调用者有机会知道 select 是否失败(感谢林福提供补丁)。

2023/08/09 * 增加函数bits_stream_set/bits_stream_get

2023/08/08 * 完善str_replace(感谢陈聪提供补丁) * 完善demoui资源(感谢兆坤提供补丁)

2023/08/07 * 完善demoui的style(感谢兆坤提供补丁) * 完善demoui的渐变色(感谢兆坤提供补丁)

2023/08/02 * 修复在dialog上打开toast高亮消失的问题(感谢兆坤提供补丁) * 修复label控件样式设置ellipses属性和页边距时，省略号绘制位置不正确的问题(感谢雨欣提供补丁)

2023/08/01 * 修复字体管理器可能会重复添加默认字体(感谢福明提供补丁) * 将tyeps_def.h中WASM相关的代码移到wasm_helper.h中。

2023/07/31 * 更新demoui的style(感谢兆坤提供补丁) * 完善WITH_WASM(感谢智明提供补丁)

2023/07/30 * 完善文档docs/build_config.md

2023/07/29 * 完善ROMFS支持带目录前缀。 * AWTK_WEB文件包含UBJSON。

2023/07/27 * 增加ROMFS。 * 修改克隆label控件时没有拷贝ellipses属性的问题(感谢朝泽提供补丁) * 修复克隆 rich_text 对象失败的问题(感谢智明提供补丁) * 修复在 scrollable 的 tab_button_group 上面快速点击有概率会导致瞬移的问题(感谢智明提供补丁) * 完善layout(感谢兆坤提供补丁) * 完善conf_io的文档(感谢俊杰提供补丁);

2023/07/26 * 修改Windows下路径带中文时fs_os_get_exe的返回结果不是utf8的问题(感谢朝泽提供补丁)

2023/07/24 * 修复增加main loop console导致部分平台编译失败的问题(感谢兆坤提供补丁) * 修改tab_button_group控件layout时如果virutal_w发生变化才重置xoffset，避免一触发layout就重置子控件的位置(感谢朝泽提供补丁) * 修复 awtk 的 popup 高亮的时候再弹出对话框会导致动画断言的问题(感谢智明提供补丁) * 修改资源存放在缺省的assets_manager中时通过applet的assets_manager去引用资源会重复load的问题(感谢朝泽提供补丁)

2023/07/23 * popup 的高亮状态和弹出软键盘下，点击外部 popup 的区域关闭 popup 的时候，出现崩溃的问题(感谢智明提供补丁) * popup 的高亮状态下，弹出对话框的时候，动画不正常的问题(感谢智明提供补丁)

2023/07/21 * 完善api_doc_lint(感谢俊圣提供补丁)

2023/07/19 * 给widget增加一个ellipses属性用于文字超过控件大小后自动变成缩略符(感谢智明提供补丁)。 * 完善str/wstr注释(感谢智明提供补丁)

2023/07/16 * 修复关闭窗口动画的时候popup在没有高亮的属性的时候使用上一帧的高亮背景导致崩溃(感谢智明提供补丁)。

2023/07/14 * 修复 awtk 的使用对话框的高亮更新背景的属性后整个程序改变大小会导致崩溃以及对话框没有 layout 的问题(感谢智明提供补丁) * widget_layout_self_menu_with_rect当超出area时调整widget位置(感谢兆坤提供补丁) * edit使用实体键盘输入时也有密码输入延迟隐藏功(感谢兆坤提供补丁)

2023/07/13 * 增加设置 layout 的注释说明(感谢智明提供补丁)。 * 修复打包的时候 awtk 的路径带有空格时失败的问题(感谢智明提供补丁)。 * 完善conf_doc_create分配内存失败的处理(感谢林福提供补丁)。

2023/07/12 * add tools/dltest * 修复dialog高亮销毁时没有刷新区域的问题(感谢兆坤提供补丁) * 优化点击事件处理逻辑，确保pointer_down的widget是enable且sensitive的(感谢陈聪提供补丁)

2023/07/06 * 完善tools/common。 * 完善demo的资源(感谢泽武提供补丁)

2023/07/05 * 完善serial helper的文档(感谢俊杰提供补丁)。 * 完善资源生成脚本(感谢智明提供补丁)。 * 完善ubjson_writer_write_kv_value。 * 修复 awtk 打包资源在 python 2 的时候出错的问题以及修复没有资源文件导出路径不正常的问题(感谢智明提供补丁)。

2023/07/04 * 完善conf_node_get_child_value。

2023/07/03 * 增加控制台应用类型(感谢兆坤提供补丁) * 新增str_append_uint32(感谢陈聪提供补丁) * 修复json写uint32的问(感谢陈聪提供补丁)

2023/06/30 * 增加函数conf_ini_load_from_buff/conf_ini_save_to_buff * 增加函数conf_json_load_from_buff/conf_json_save_to_buff * 增加函数conf_xml_load_from_buff/conf_xml_save_to_buff * 增加函数conf_ubjson_load_from_buff/conf_ubjson_save_to_buff

2023/06/29 * 更新API文档。 * 增加函数combo_box_remove_option_by_index。 * 完善conf_doc文档((感谢泽武提供补丁)

2023/06/28 * 感谢朝泽提供以下补丁： * 修改 locale_infos_change 时最后 change 缺省的 locale_info()，避免 EVT_LOCALE_CHANGED 触发时小程序的资源未更新； * 修正 timegm 在 windows 下不识别的问题； * 修正 ‘\e’ 在 windows 下为不可识别的字符转义序列的问题； * 修正 ui load 时根控件没有触发 EVT_WIDGET_LOAD 的问题； * 修改 combobox 的 popup button 被删除时自动添加一个默认的 button； * 修复API注释错误(感谢俊圣提供补丁) * 修复焦点在mledit和edit中来回切换可能导致两种控件高度混乱的问题(感谢泽武提供补丁) * 支持EVT_DROP_FILE事件。

2023/06/26 * 完善date_time_to_time/date_time_from_time： * 类型由uint64改为int64。 * 本地时间改为GMT时间。

2023/06/22 * 增加函数ret_code_from_name/ret_code_to_name。

2023/06/21 * 修复action_thread quit时间过长问题(感谢兆坤提供补丁)。 * 完善dialog的注释(感谢泽武提供补丁) * 增加函数slist_tail/slist_head。

2023/06/20 * 修复 widget_get_style 获取非当前状态的 mutable 风格失败的问题(感谢智明提供补丁)

2023/06/19 * 完善预览可设置是否打开控制台窗口及可自定义设置资源路径(感谢培煌提供补丁)

2023/06/18 * 修复切换主题的同时调用获取风格数据导致崩溃的问题(感谢智明提供补丁)

2023/06/17 * 增加函数event_source_manager_set_min_sleep_time。 * 修复 scroll_bar 的克隆的时候没有创建子控件的问题(感谢智明提供补丁)

2023/06/15 * 修复widget_get_style在特殊状态下获取普通风格数据出错的问题(感谢智明提供补丁) * 修改label_auto_adjust_size调用widget_resize来修改宽高(感谢智明提供补丁)

2023/06/13 * 修复 awtk 在 keil 上面编译出错的问题(感谢智明提供补丁)

2023/06/12 * 修复非普通窗口在底部时候弹出软键盘导致窗口动画跳变的问题以及软键盘导致窗口平移后切换edit导致画面跳变的问题(感谢智明提供补丁) * 修改 combox 水平方向在窗口外时下拉框没有对齐 combox 的问题(感谢智明提供补丁) * 完善tab_button_group对不可见子控件的处理。

2023/06/07 * 修复modeless资源属性名(感谢智明提供补丁)

2023/06/06 * object_array_clean_invalid_props在没有清理非法属性时，不分发ITEMS_CHANGED事件(感谢兆坤提供补丁)。 * 增加获取非widget状态的风格(感谢智明提供补丁) * overlay模拟非模态窗口的效果(感谢智明提供补丁)

2023/06/02 * combo_box控件弹出popup菜单时，使用小程序applet_name中的资源(感谢雨欣提供补丁)

2023/05/31 * 修改resize控件时，控件宽高如果大于children_layout中指定的宽高，使子控件的宽高始终>=children_layout中指定的宽高(感谢朝泽提供补丁) * 去掉fscript_module中一些无用的调试信息(感谢雨欣提供补丁)。 * 增加widget_get_style(感谢智明提供补丁)。 * 修复edit的uint类型最大值不能超过int32的最大值的问题(感谢智明提供补丁)。

2023/05/30 * popup恢复支持高亮(感谢智明提供补丁)。 * 修复在linux上面设置layout_params出错的问题(感谢智明提供补丁)。 * 去掉不必要的警告(感谢兆坤提供补丁)

2023/05/29 * main_loop_dispatch_events支持分发EVT_KEY_LONG_PRESS * event_from_name增加窗口被切换到前台、后台事件，用于给窗口绑定(感谢兆坤提供补丁) * 完善注释(感谢泽武提供补丁) * 将hscroll_label中only_focus的行为修改为只有当控件的focusable属性和focused属性同时为TRUE时才滚动(感谢泽武提供补丁)

2023/05/28 * 增加函数emitter_forward_retarget。

2023/05/27 * 完善ubjson_do_parse_array数组中包含数组的处理。

2023/05/26 * 增加函数ubjson_writer_write_kv_array_begin。 * 增加函数conf_node_get_child_value。 * 增加函数conf_node_get_child_value_by_index。 * 修复fs_file_read_line函数在读取到空行时文件指针异常的问题(感谢泽武提供补丁)

2023/05/25 * 修改widget的xoffset 或 yoffset != 0时widget_is_point_in结果不正确的问题(感谢朝泽提供补丁) * 回退之前的 widget_to_screen 的修改，增加了测试用例，确保 widget_to_screen 和widget_to_loacl 配对转化(感谢智明提供补丁) * 让data_writer_factory与data_reader_factory逻辑一致(感谢兆坤提供补丁) * 修复opengl下受离线画布的影响，lcd的字体大小在需要更新时没有更新的问题(感谢兆坤提供补丁) * 修复image_resize工具可能溢出的问题(感谢szsam提供补丁)

2023/05/24 * 完善编译脚本(感谢朝泽提供补丁) * 导出assest_manager_build_assest_filename函数(感谢福明提供补丁) * 去除font_loader_ft中的FT_OUTLINE_HIGH_PRECISION标记(感谢雨欣提供补丁)

2023/05/23 * 对话框中的ok/cancel使用不同的风格。

2023/05/22 * 修复高亮对话框打开无窗口动画的窗口时候绘图不正常的问题(感谢智明提供补丁) * 修复鼠标进入和移出窗口时控件over状态没有正确更新的问题(感谢煜楷提供补丁)

2023/05/21 * 增加图片绘制类型：IMAGE_DRAW_FILL

2023/05/19 * 增加了debugger的get和set调试状态的重载函数指针(感谢智明提供补丁)

2023/05/17 * 修改EVT_POINTER_LEAVE事件返回RET_STOP则停止后续操作(感谢朝泽提供补丁) * 修复cairo模式下LCD屏幕旋转报错问题(感谢高源提供补丁)。 * 修复cairo模式下快速旋转的适配问题(感谢高源提供补丁)。 * 修复cairo模式下内存泄漏问题(感谢高源提供补丁)。 * 修复离线画布下快速旋转导致的画面耦合导致的画面错乱问题(感谢高源提供补丁)。

2023/05/16 * 修复候选框打印警告问题(感谢智明提供补丁) * 修改对话框重叠system_bar的高亮显示不正常和底部的system_bar导致窗口动画不正常的问题(感谢智明提供补丁)

2023/05/13 * 扩展debugger接口支持VSCode DAP协议。

2023/05/11 * 完善event_from_name(感谢兆坤提供补丁)

2023/05/10 * 自定义键值支持字符转键值(感谢兆坤提供补丁)

2023/05/09 * 修复启动时 widget_is_keyboard 和 widget_is_normal_window 的判空警告, 使用了 free 且未置空的指针(感谢高源提供补丁)。 * 修复在 lcd_mem 模式下，创建离线画布影响全局LCD宽高问题(感谢高源提供补丁)。 * 补全svg_image离线画布创建时的编码格式(感谢高源提供补丁)。 * 完善 api_doc_lint VS2023编译问题(感谢俊圣提供补丁)。

2023/05/04 * 完善tk_object_to_json对不同数据类型和数组的处理。

2023/04/28 * 修复由于未初始化预留空间而导致的bsvg打包频繁更新问题(感谢高源提供补丁)。 * 修复slide_view删除元素与实际页面元素不对问题(感谢高源提供补丁)。 * 修复slide_view删除后当前选中下标元素错乱问题(感谢高源提供补丁)。 * 新增 demouiold slide_view删除指定下标页面的测试用例(感谢高源提供补丁)。 * 修复style_mutable的get函数没有从default_style获取值的问题(感谢福明提供补丁)。 * 修复dialog_toast为非顶层窗口时仍然会播放关闭窗口动画的问题(感谢泽武提供补丁)。

2023/04/27 * 修复scroll_bar滑块位置没有正确更新(感谢煜楷提供补丁)

2023/04/26 * 修复object_date_time_test.cc中的错误(感谢szsam提供补丁) * 修复tools/common/utils.c中没有检查空指针的问题(感谢szsam提供补丁) * 修复input_engine_pinyin中表达式顺序的问题(感谢szsam提供补丁)

2023/04/25 * 修复剪切板的问题(感谢雨欣提供补丁)。 * 修复window_manager_animate_done中先销毁动画再获取相关资源的bug(感谢泽武提供补丁)

2023/04/24 * combo_box_ex控件以及测试和demo(感谢煜楷提供补丁)

2023/04/23
* 修复cppcheck发现的问题。 * 修复遗漏的空指针检查(感谢szsam提供补丁)

2023/04/21 * 完善action thread pool(感谢俊杰提供补丁) * 完善文档注释(感谢俊杰提供补丁) * 修复widget_clone得到的combo_box_ex控件与直接创建的控件行为不一致(感谢煜楷提供补丁)

2023/04/19 * 新增is_horizon属性判断(感谢高源提供补丁) * 修改scroll_bar_show_by_opacity_animation函数开放层级(感谢高源提供补丁)

2023/04/18 * 修改离线画布用户自定义函数的宏名字(感谢智明提供补丁) * 支持SDL点击窗口后自动聚焦(感谢智明提供补丁) * 修复thread_with_sdl的内存泄露的问题(感谢智明提供补丁) * assets_manager自定义加载资源返回NULL则继续使用默认方式加载资源(感谢朝泽提供补丁)

2023/04/15 * 增加cmd_args用于解析命令行参数。

2023/04/14 * 修复svg_image声明注释问题(感谢高源提供补丁) * 优化XML写入(感谢陈聪提供补丁)

2023/04/13 * 修复style_get函数的注释有误的问题(感谢福明提供补丁)

2023/04/12 * 增加函数file_read_as_unix_text。 * 增加函数str_attach_with_size。 * 优化str_replace。 * 修正locale info初始化时没有初始化refcount的问题(感谢朝泽提供补丁)

2023/04/11 * 增离线画布缓存功能(不修改图片时跳过bsvg解析步骤，使用bitmap绘制在线画布)(感谢高源提供补丁) * 新增图片绘制方式，目前仅支持scale、scale_auto(感谢高源提供补丁) * demouiold svg栏目新增上述两个部分的用例(感谢高源提供补丁) * 修复在OpenGL下旋转LCD同时嵌套调用离线画布导致绘图不正常的问题(感谢智明/高源提供补丁) * 修正assets_manager_load_asset_t的声明错误(感谢朝泽提供补丁) * 修正font_manager_get_font_t的声明错误，以及 fm->fallback_get_font()没有正确传递ctx的问题(感谢朝泽提供补丁) * 修正image_manager_get_bitmap_t的声明错误，以及im->fallback_get_bitmap没有正确传递ctx的问题(感谢朝泽提供补丁) * 修正locale_infos_init时没有初始化emitter的问题(感谢朝泽提供补丁) * 添加locale_info_create_ex、locale_info_set_fallback_tr2、locale_info_set_custom_tr(感谢朝泽提供补丁) * 添加style_get(感谢朝泽提供补丁) * 修正由于wstr_extend、str_extend的修改导致单元测试失败的问题(感谢朝泽提供补丁)

2023/04/06 * 增加函数str_attach/wstr_attach/wstr_append_int。

2023/04/04 * 完善api doc(感谢俊圣提供补丁)
* 增加component_open和close事件，用于给组件绑定事件(感谢兆坤提供补丁)

2023/03/28 * 修复文档文件名(感谢俊杰提供补丁) * 支持applet设置默认主题(感谢兆坤提供补丁) * 增加widget_set_self_layout_params支持参数为NULL的情况(感谢智明提供补丁) * 统一mledit和edit在readonly状态下的特性：不显示光标并支持选中文本(感谢雨欣提供补丁)

2023/03/27 * 修复mledit的选中文本在控件丢失焦点后不复位的问题(感谢雨欣提供补丁) * 添加locale_infos_on和locale_infos_off(感谢朝泽提供补丁) * 完善api_doc_lint工具(感谢俊圣提供补丁)

2023/03/24 * 完善api_doc_lint工具(感谢俊圣提供补丁)
* 增加文档 如何自定义资源加载方式(感谢泽武提供补丁)

2023/03/22 * 修复 awtk 的 agg 编译出错的问题(感谢智明提供补丁)

2023/03/21 * 完善关于offset的文档(感谢智明提供补丁) * 完善slide view(感谢雨欣提供补丁) 2023/03/20 * 修复分发double_clicked事件时存在的野指针风险(感谢雨欣提供补丁) * 优化按键逻辑，尽量用text_edit的逻辑(感谢陈聪提供补丁) * 完善EVT_VALUE_CHANGING和EVT_VALUE_CHANGED事件(感谢陈聪提供补丁) * 修复嵌入式系统硬键盘无法输入的问题(感谢陈聪提供补丁)

2023/03/16 * 完善JSON(感谢俊杰提供补丁)

2023/03/15 * 完善types_def.h(感谢雨欣提供补丁)

2023/03/14 * easing 完善注释与单元测试(感谢泽武提供补丁)

2023/03/13 * 完善编译脚本(感谢高源提供补丁)

2023/03/10 * 完善api_doc_lint工具(感谢俊圣提供补丁)
* 完善打包工具：get_appint_folder未处理awtk designer端文件夹不存在以及为文件的情况，导致编译失败(感谢高源提供补丁) * 完善gif image(感谢雨欣提供补丁) * 修复 loop 属性的表现，作为控件循环播放的次数； * loop 归零，播放完毕后，需要停留在 gif 图的最后一帧，而不是先跳到第0帧，再刷新的最后一帧； * loop 归零，播放完毕后，调用 gif_image_set_loop 接口设置循环次数后，需要从第一帧开始播放，而不是最后一帧。

2023/03/09 * 完善api_doc_lint工具(感谢俊圣提供补丁)
* 新增scons dblite版本检查，编译时python版本与当前python版本不一致则删除dblite(感谢高源提供补丁) * text_selector 取消个数上限(感谢泽武提供补丁)

2023/03/08 * 修改编译警告(感谢智明提供补丁)。 * 打包工具在原有基础上添加支持分子目录，工具行为是穷尽所有子目录并进行打包(感谢高源提供补丁) * update_res_common.py新增获取指定类型文件全路径以及相对路径函数以及修改工具子目录支持(感谢高源提供补丁) * 把 awtk 的 gradient 类的 get 相关函数的 gradient 参数改为 const gradient (感谢智明提供补丁)。

2023/03/07 * 完善api_doc_lint工具(感谢俊圣提供补丁)
* 完善vgcanvas API 注释(感谢泽武提供补丁) * 添加注册easing接口(感谢泽武提供补丁)

2023/03/06 * 完善api_doc_lint工具(感谢俊圣提供补丁)

2023/03/03 * 增加ASSERT_STREQ_UNIX(gtest_helper.h)用于在单元测试中跨平台比较从文件中读取的字符串。 * 完善api_doc_lint工具(感谢俊圣提供补丁)
* 改进 usage * 完善函数的返回类型的解析 * 加入自动测试

2023/03/02 * 增加api doc错误检查工具(感谢俊圣提供补丁) * 完善 previewi_ui 工具(感谢培煌/朝泽提供补丁)

2023/03/01 * 5key在两个控件之间循环跳动的问题，修改左/右移动时控件选择逻辑(感谢高源提供补丁) * 完善debugger接口(感谢智明提供补丁)。 * fscript 新增设置屏保时间函数 (感谢泽武提供补丁)

2023/02/28 * 修复API注释错误(感谢俊圣提供补丁)

2023/02/24 * 修复API注释错误(感谢俊圣提供补丁) * 完善slider控件(感谢高源提供补丁)

2023/02/23 * 修复API注释错误(感谢俊圣提供补丁) * slider控件添加滑块移出滚动条效果（使用margin为负数实现，最大偏移距离为控件图标的一半大小）(感谢高源提供补丁)

2023/02/22 * slider_view控件把最后一个要修改的值缓存起来，动画播完后切换到该值(感谢雨欣提供补丁) * 修复API注释错误(感谢雨欣提供补丁) * 修复edit在password模式下，在最后一位未变为 ‘*‘ 前切换焦点到别的控件，最后一位一直为原字符的问题(感谢泽武提供补丁) * 修改path_normalize的测试用例不兼容linux的问题(感谢智明提供补丁)

2023/02/21 * 修复API注释错误(感谢俊圣提供补丁) * 修改path_normalize对末尾为点的处理问题(感谢俊圣提供补丁)

2023/02/20 * 修复API注释错误(感谢俊圣提供补丁) * 删除pages中的页面时，分发事件页面变化和值变化事件 (感谢雨欣提供补丁) * window_manager_default_close_window函数对prev_win进行判断，让prev_win为非键盘窗口 (感谢泽武提供补丁) * 完善conf_io的README(感谢泽武提供补丁)

2023/02/19 * 增加函数tk_sha256_file。

2023/02/17 * 给gauge_pointer控件增加了dirty_rect的属性(感谢智明提供补丁) * 优化edit的error状态(感谢陈聪提供补丁) * str_t类型新增create和destroy接口(感谢雨欣提供补丁) * 修复通过点击事件关闭带有键盘的窗口时，点击时间小于100ms导致窗口无法正确关闭的问题(感谢泽武提供补丁) * 修复软件盘弹出时，再打开模态对话框，关闭后窗口状态异常的问题(感谢泽武提供补丁) * demouiold 增加 combo box 菜单多列的示例用法(感谢泽武提供补丁) * 修复API注释错误(感谢俊圣提供补丁)

2023/02/16 * 回退widget_to_loacl的修改(感谢智明提供补丁) * 关于自定义控件的offset的使用注意事项(感谢智明提供补丁) * 修复API注释错误(感谢俊圣提供补丁) * dialog_toast修改为非模态窗口，更新demouiold中对应的示例(感谢泽武提供补丁) * 修复text_selector点击后无法跳转到对应选项的问题(感谢泽武提供补丁)

2023/02/14 * 修复fscript注释错误(感谢俊圣提供补丁)

2023/02/10 * 完善当被调用的打包工具出现异常或资源文件打包失败时打包脚本结束执行(感谢培煌提供补丁)。 * 没有拼音输入法资源时，用软键盘输入中文触发断言(感谢兆坤提供补丁)。

2023/02/09 * 去除设置hscroll_label控件文本时打印的不必要的警告信息(感谢雨欣提供补丁)

2023/02/08 * 是修复 awtk 在 OpenGL 下，使用离线画布后，把离线画布的位图数据，通过 draw_image 函数绘图后，马上释放离线画布，会导致绘图异常的情况(感谢智明提供补丁)。

2023/02/03 * 去除conf_obj_create时不必要的警告信息(感谢雨欣提供补丁) * 修复了text_selector控件在前几项与最后一项切换时动画异常的问题(感谢泽武提供补丁)

2023/01/31 * 优化slide_menu增加属性：菜单项的宽度、是否动态裁剪菜单项(感谢陈聪提供补丁)

2023/01/30 * 修复了text_selector控件点击后无法正确跳转到对应选项的问题(感谢泽武提供补丁)

2023/01/29 * 完善how_to_use_3rd_lib.md文档(感谢雨欣提供补丁) * 修复emitter多层消息分发递归后释放最顶级的iter后出现野指针导致崩溃的问题(感谢智明提供补丁)

2023/01/28 * 将scroll_view的虚拟宽高作为布局时的宽高(感谢雨欣提供补丁)

2023/01/13 * 修改asset_info_t兼容以前的资源以及修复不同平台下asset_info_t大小不 同的问题(感谢智明提供补丁) * 修改asset_info的name属性的注释(感谢智明提供补丁) * 将pages控件的should_save_target属性名修改为auto_focused(感谢泽武提供补丁)

2023/01/12 * 修复编译警告(感谢陈聪提供补丁) * 完善注释(感谢泽武提供补丁)

2023/01/11 * 修复编译警告(感谢陈聪提供补丁)

2023/01/10 * 卸载字体时重置canvas字体(感谢陈聪提供补丁) * 修正一个scons兼容性的问题，主要是如果windows系统是64bit，但安装的python是32bit的情况下，原来的scons脚本会出错(感谢陈谭提供补丁)。 * 修正mingw中没有wcscasecmp函数编译出错的问题(感谢陈谭提供补丁)。 * 卸载字体事件的对象使用字体对象而不是字体名字(感谢陈聪提供补丁)

2023/01/09 * 退回补丁e1565fd(感谢雨欣提供补丁) * 退回补丁ef4118b(感谢雨欣提供补丁) * 修复agge和opengl字符间距和字符高度不一致的问题(感谢陈聪提供补丁)

2023/01/06 * 修复窗口打开动画播放时，调用window_manager_close_window_force接口关闭窗口失败的问题(感谢雨欣提供补丁) * 适配数字小键盘，capslock和numlock改为由适配层传入(感谢陈聪提供补丁)。 * 完善资源名称长度的优化后在STM32上的问题(感谢陈聪提供补丁)。

2023/01/05 * 完善编译脚本(感谢雨欣提供补丁) * 完善 tab button和pages(感谢俊杰提供补丁) * 导出函数widget_move_resize_ex(感谢俊杰提供补丁)

2023/01/04 * widget为designing_window的子控件时，widget_set_need_relayout失败的问题(感谢朝泽提供补丁) * 修复了fs_create_dir_r函数中tokenizer没有释放就return的问题(感谢泽武提供补丁) * 善了 awtk 的编译脚本，在 win 平台上，默认指定 scons 使用 msvc 编译器，除非用户自己指定 TOOLS_NAME=’mingw’，避免按照 scons 内部的顺序来查找编译器(感谢雨欣提供补丁) * 完善app_helper_base(感谢雨欣提供补丁)

2023/01/03 * 资源名称长度超过上限时，另外申请空间来保存(感谢陈聪提供补丁) * 完善progress_circle的line_cap属性的注释(感谢朝泽提供补丁) * 增加函数value_dup_wstr(感谢雨欣提供补丁)

2022/12/30 * 文件选择器当selected file不为空时，才可点击ok(感谢兆坤提供补丁)

2022/12/29 * 高亮在背景窗口为全屏时，不显示系统栏(感谢兆坤提供补丁) * 修复在dialog上打开键盘后，高亮消失的问题(感谢兆坤提供补丁)

2022/12/28 * list_view_h控件新添加x_margin与y_margin属性，可以设置列表项的边距(感谢泽武提供补丁) * 修复combo box坐标计算错误(感谢雨欣提供补丁) * fscript 不再管obj的引用计数(感谢兆坤提供补丁)

2022/12/26 * 修复绑定slide_indicator的value时，slide_view没有改变当前页的问题(感谢兆坤提供补丁)。

2022/12/22 * 公开函数 conf_node_find_child_by_index(感谢俊杰提供补丁) * 修复combo_box 只有一项 options 时，scroll_bar layout 会打印警告的问题(感谢陈聪提供补丁) * 双击事件的判定加上限制坐标，防止在两个点之间快速来回点击也会触发双击事件(感谢陈聪提供补丁)

2022/12/19 * 修复有圆角时的边框绘制(感谢兆坤提供补丁)。

2022/12/19 * 增加窗口动画demo(感谢兆坤提供补丁)。

2022/12/17 * 更新文件浏览器的资源(感谢兆坤提供补丁)。

2022/12/16 * 文件浏览器增加奇偶项样式设置属性 (感谢兆坤提供补丁)。 * 文件浏览器增加关闭按钮(感谢兆坤提供补丁)。 * 修复调用 widget_get_prop_str 接口获取 label 控件的 value 属性时会报出类型错误的问题(感谢雨欣提供补丁) * fs_create_dir_r 接口失败时返回RET_FAIL(感谢泽武提供补丁) * 完善《如何打包并发布项目》(感谢泽武提供补丁) * pages控件新增属性，可选择切换页面时是否保存当前页面焦点(感谢泽武提供补丁)

2022/12/14 * 完善文档(感谢泽武提供补丁)

2022/12/13 * 窗口动画期间拦截输入事件，不要拦截已经按下的按键的抬起事件(感谢陈聪提供补丁) * 修复在3KEYS/5KEYS模式下第一次移动焦点的操作没有反应的问题(感谢陈聪提供补丁) * 修复check button 控件在触发值变化事件时，event 对象中的 old/new_value数据类型错误(感谢雨欣提供补丁)

2022/12/08 * 兼容全屏状态下打开普通窗口显示系统栏，打开键盘不显示系统栏两种情况(感谢兆坤提供补丁)。

2022/12/07 * fscript 支持省略参数。如:print(1,,2)，方便函数内部使用默认值。

2022/12/06 * combo_box 支持设置回调函数，去处理弹出窗口item被点击的事件。 * 修复没有定义WITH_RES_TOOLS时，项目中使用到svg_to_bsvg编译无法通过的问题(感谢兆坤提供补丁)。 * 完善dialog的注释(感谢泽武提供补丁) * 切换语言时触发自动window manager layout(感谢泽武提供补丁) * list_view中没有scroll_bar时打印报告，不要使程序崩溃(感谢泽武提供补丁)

2022/12/05 * combo_box_ex支持分组显示。 * combo_box_ex支持自动调整弹出窗口的宽度。 * 完善demoui资源(感谢兆坤提供补丁)。 * 完善fs注释(感谢雨欣提供补丁)。

2022/12/03 * fscript 支持注册常量。 * 完善widget_find_target_default(感谢兆坤提供补丁)。 * 完善progress_circle测试用例(感谢雨欣提供补丁)。

2022/12/02 * 色块控件默认边框颜色改为透明(感谢兆坤提供补丁)。 * 修复上个窗口为全屏时，窗口动画仍显示系统栏的问题(感谢兆坤提供补丁)。 * 修复edit失去焦点时删除edit，其软键盘动画不正常的问题(感谢兆坤提供补丁)。 * 修复agge渲染模式下progress_circle线帽为方头时绘制出现残留的问题(感谢雨欣提供补丁)。

2022/11/30 * 修复label控件没有文本时无法绘制icon的问题(感谢雨欣提供补丁) * 完善widget_set_focused_internal(感谢智明提供补丁)

2022/11/29 * 完善文档(感谢泽武提供补丁) * 去除编译警告(感谢兆坤提供补丁)。

2022/11/28 * demoui 1M资源版去除部分资源，让其维持在1M以内(感谢兆坤提供补丁)。 * 修改demoui 1M资源版界面(感谢兆坤提供补丁)。

2022/11/25 * 修复当控件头文件中存在多个类的时候导致虚表函数导出失败的问(感谢智明提供补丁)

2022/11/24 * 完善spin box，支持设置按钮的位置(感谢泽武提供补丁)

2022/11/21 * 完善widget_lookup接口，避免访问空指针导致程序崩溃(感谢雨欣提供补丁)

2022/11/20 * 增加lcd_mem的测试用例题(感谢智明提供补丁)

2022/11/18 * 完善log系统，支持调试器拦截日志。 * 完善 demoui (感谢兆坤提供补丁) * 修复stb_image申请内存失败后崩溃的问题(感谢陈聪提供补丁) * 完善svg(感谢陈聪提供补丁) * 修复canvas中font野指针的问题(感谢陈聪提供补丁) * 修复image_manager中内存泄漏的问题(感谢陈聪提供补丁) * 完善了 conf_obj_create 接口，避免打印不必要的警告信息(感谢雨欣提供补丁)

2022/11/17 * 修复demoui界面控件样式设置错误的问题(感谢兆坤提供补丁)

2022/11/16 * 完善README，添加进入微信群的方法(感谢雨欣提供补丁) * 公开函数scroll_bar_hide_by_opacity_animation(感谢兆坤提供补丁)

2022/11/15 * 修复使用combo_box控件打开下拉列表的同时调用window_manager_switch_to改变窗口顺序导致popup无法正常显示的问题(感谢泽武提供补丁) * 新增第三方库svgtiny来解析svg，增加渐变等功能(感谢陈聪提供补丁) * 优化slide_view拖拽时才刷新界面而非按下时刷新(感谢智明提供补丁) * 修复如果widget_to_screen的widget为滚动控件的话会导致获取失败(感谢智明提供补丁)

2022/11/14 * uiex 增加 spin_box 样式(感谢兆坤提供补丁) * uiex 增加 scroll_left scroll_right 按钮样式(感谢兆坤提供补丁) * 修改 agge 只有局部渐变左边不渐变的情况下显示不正常的问题(感谢智明提供补丁) * 增加 vgcanvas_get_canvas 接口，给 svg 写字使用，以免修改 svg 原来的接口可以支持显示字(感谢智明提供补丁)

2022/11/11 * 完善fscript解析。 * 完善json对\的处理。 * 删除导出idle的时候多 余的打印信息(感谢智明提供补丁)

2022/11/09 * 在Windows下将wcscasecmp定义为wcsicmp(感谢雨欣提供补丁)

2022/11/08 * scroll_view控件的set_value函数添加对value合法性的判断(感谢泽武提供补丁) * 修复了mledit控件在总行数过大时，计算偏移量可能会出现数值超出范围的问题(感谢泽武提供补丁)

2022/11/07 * 增加函数value_min/value_max。

2022/11/03 * 导出conf_node_count_children函数(感谢智明提供补丁) * 修复纯黑做半透明的融合时候颜色不对的问题(感谢智明提供补丁) * 增加一个关闭默认提供的G2D函数的宏用于动态库的时候TK_WEAK失效的问题(感谢智明提供补丁)

2022/11/02 * 控件收到软键盘action按钮的done事件后保存text并发送值变化事件(感谢雨欣提供补丁)

2022/11/01 * 完善slide_menu控件，新增spacer属性(感谢雨欣提供补丁) * 完善hscroll_label控件，新增stop_at_begin属性(感谢雨欣提供补丁) * 修复windows下如果出现串口异常 的时候会导致检查线程没有睡眠的问题(感谢智明提供补丁)

o2022/10/31 * 更新version为1.7.1(感谢朝泽提供补丁)。 * 修复 awtk 导出 def 时缺少部分的 get_widget_vtable 函数的问题(感谢智明提供补丁) * 修复添加了动画的控件在slide_view上移动过程中停留时不会刷新的问题(感谢志鹏提供补丁)

2022/10/27 * 增加函数value_mod/value__expt

2022/10/26 * 增加函数value_abs/value_add/value_sub/value_mul/value_div * 统一修改支持EVT_CLICK事件的控件，让点击事件的回调函数返回值有效(感谢雨欣提供补丁)

2022/10/24 * 修复designer中勾选旋转但编译参数无效的问题(感谢兆坤提供补丁) * 完善how_to_use_fast_lcd_portrait.md文档(感谢雨欣提供补丁)

2022/10/21 * 完善line number高亮行(方便awblock用于显示断点) * 完善fscript array的文档(感谢雨欣提供补丁) * 修复text_selector勾选loop_options时无法跳转到指定选项的问题(感谢雨欣提供补丁)

2022/10/20 * 增加tk_object_to_json函数。 * custom_keys增加ENABLE_CUSTOM_KEYS宏(感谢兆坤提供补丁) * 增加宏APP_ENABLE_CONSOLE控制命令窗口(感谢雨欣提供补丁) * 完善awtk_main.md(感谢雨欣提供补丁)

2022/10/19 * 删除了 image 控件中的 vg 修改，并完善了 canvas_get_vgcanvas 接口(感谢雨欣提供补丁)

2022/10/18 * 完善了 fscript widget 的 tr 接口，支持使用指定控件的 locale_info(感谢雨欣提供补丁) * 完善获取自定义键值表函数(感谢兆坤提供补丁) * 完善获取自定义键值表函数的测试和文档(感谢兆坤提供补丁) * 修复switch控件点击事件回调函数返回RET_STOP无效 的问题(感谢雨欣提供补丁) * 修复agge模式下image控件无法同时使用缩放和透明度动画的问题(感谢雨欣提供补丁)

2022/10/17 * 增加获取自定义键值表函数接口(感谢兆坤提供补丁) * 修复list_view的按键 滚动的问题(感谢智明提供补丁) * 修改slide_view在开头页上一页或者最后一页的时候切换下一页滑动逻辑(感谢智明提供补丁) * applet支持优先加载自己的多国语言字符串资源(感谢朝泽提供补丁)

2022/10/15 * 增加str_from_xxx函数。

2022/10/13 * slide_menu load后如果得到焦点，则让选中子控件得到焦点(感谢兆坤提供补丁)

2022/10/12 * 删除WITH_WIDGET_TYPE_CHECK宏支持非awtk类库继承控件方案(感谢智明提供补丁)

2022/10/11 * fscript_widget新增show_fps接口(感谢雨欣提供补丁) * 完善高亮策略中的update_background功能(感谢雨欣提供补丁) * 修复安卓下修改system_info的分辨率不正确的问题(感谢智明提供补丁) * 修复gif控件编译警告的问题(感谢智明提供补丁) * 删除mini的无用资源让103项目编译通过(感谢智明提供补丁) * 完善tk_istream_read_line超时处理(感谢忠吉提供补丁)

2022/10/10 * 修复awtk拼写错误和格式问题(感谢兆坤提供补丁)

2022/10/09 * edit输入密码时，输入一个字符先显示明文然后再隐藏(感谢兆坤提供补丁) * 修复enums编译报错问题(感谢智明提供补丁) * 删除demouiold的1m资源让stm32的板子可以编译过(感谢智明提供补丁) * 修复启用WITHOUT_FSCRIPT后无法给widget设置自定义属性的问题(感谢智明提供补丁) * 增加tk_strnlen和wcsncmp函数让stm32项目编译通过(感谢智明提供补丁) * 修复edit输入密码明文恢复后，光标的位置不正确问题(感谢兆坤提供补丁)

2022/10/08 * 修复systembar上有edit时窗口复位的问题(issue #773)。 * 完善单元测试，修复编译报错(感谢雨欣提供补丁)

2022/10/01 * 增加文档如何支持软键盘按钮预览

2022/09/30 * 按钮增加enable_preview属性，用于键盘中按钮preview。 * 修复digit_clock在destroy的时候找不到窗口导致警告的问(感谢智明提供补丁) * 修复popup弹窗不见的问题(感谢智明提供补丁) * 修复sizeof 的警告问题(感谢智明提供补丁) * 修复非focused时候设置slide_view激活子控件的逻辑(感谢智明提供补丁) * 完善fscript_wdiget，统一widget_lookup的语义和行为(感谢雨欣提供补丁) * 完善widget_set_self_layout接口，判断前刷新self_layout缓存(感谢雨欣提供补丁)

2022/09/29 * 支持设置自定义键值(感谢兆坤提供补丁)

2022/09/27 * 把windows下加载res资 源的逻辑移动在awtk_config.py文件中(感谢智明提供补丁)

2022/09/26 * 增加value_lshift/value_rshift/value_lshift_r/value_rshift_r等函数。 * 增加value_set_bit/value_get_bit/value_toggle_bit等函数。 * 增加value_bit_not/value_bit_and/value_biti_or等函数。

2022/09/24 * GIF 支持设置running属性，方便MVVM绑定。

2022/09/23 * 完善资源生成脚本(感谢雨欣提供补丁) * 完善rbuffer_read_string接口(感谢雨欣提供补丁)

2022/09/22 * 完善fscript单元测试(感谢雨欣提供补丁) * 增加判断目录是否为空的接口(感谢兆坤提供补丁) * 完善types_def.h(感谢文静提供补丁) * 新增文档app_assets(感谢兆坤提供补丁) * slide_menu 在滚动期间子控件不接收key事件(感谢兆坤提供补丁)

2022/09/21 * 完善编译脚本对mingw的支持(感谢俊杰提供补丁) * 按钮失去焦点后取消按下状态(感谢兆坤提供补丁)。 * 修复slide menu使用键盘左右选择button后，按enter键后点击的按钮错误问题(感谢兆坤提供补丁)。 * 消除fscript_array中不必要的警告(感谢雨欣提供补丁) * 完善fscript_str的相关接口，返回值采用dup形式 (感谢雨欣提供补丁)

2022/09/20 * 修改 tkc 支持 windows 下加载 res 资源(感谢智明提供补丁) * 使用scons清理时把bin文件夹中的sharedlib删除(感谢兆坤提供补丁) * fscript_array新增虚函数表(感谢雨欣提供补丁)。 * 修复str_replace修改容量导致fscript中replace接口返回值有误的问题(感谢雨欣提供补丁)。 * 完善fscript 中 fformat(感谢雨欣提供补丁)。

2022/09/16 * path_dirname 处理斜杠和反斜杠的混用的路径时候不正常的问题(感谢智明提供补丁) * 修复awtk只有dll没有lib文件复制失败的问题(感谢兆坤提供补丁)

2022/09/14 * 支持在添加idle和添加timer是指定ID(感谢智明提供补丁)

2022/09/11 * widget 的虚表 only_active_children 属性改为 widget_get_only_active_children_t 函数指针(感谢智明提供补丁)

2022/09/09 * scroll_view增加slide_limit_ratio属性(感谢雨欣提供补丁) * 完善linux串口打开失败时的处理(感谢忠吉提供补丁) * 支持设置候补翻译函数。 * 增加combo_box_get_text_of_selected/combo_box_set_selected_index_by_text。

2022/09/08 * 修复toast的内容为空的时候显示不正常的问题(感谢智明提供补丁)

2022/09/07 * 解决Windows平台网络接口的一个bug：网卡名不正确时，接口应返回NULL(感谢忠吉提供补丁)

2022/09/06 * 修复text selector中注释错误(感谢朝泽提供补丁)。 * 修复edit pattern的问题(感谢俊杰发现问题)。 * 修复打包工具打包时打印警告的问题 (感谢智明提供补丁)

2022/09/05 * tkc修复tk_memcpy拷贝异常的问题 (感谢智明提供补丁) * 修复 children_layouter_list_view 在子控件为NULL时崩溃的问题(感谢雨欣提供补丁) * 修复tab_button与edit使用时弹出软键盘空白的问题 (感谢雨欣提供补丁)

2022/09/03 * 修复切换语言后，digit clock没有及时更新的问题(感谢兆坤提供补丁)

2022/09/02 * 完善软键盘关闭。 * children_layouter_list_view新增animating_time属性，支持添加和删除item时播放缓动动画(感谢雨欣提供补丁) * text_selector 增加了 mask_easing 属性和 mask_area_scale 属性 (感谢雨欣提供补丁) * 修改toast的内容为空的时候触发断言的问题 (感谢智明提供补丁)

2022/09/01 * 修复valgrind发现的问题。 * 修复edit对5keys/3keys键盘的处理。 * demoui增加退出按钮(感谢兆坤提供补丁) * 增加 system_event_t 用于接收SDL收到的操作系统的事件，分发到窗口管理器。 * 修复path_normalize函数多次返回上一级的时候会数据出现不正常的问题(感谢智明提供补丁) * 修复text_selector控件点击某项时行为异常的问题(感谢雨欣提供补丁)

2022/08/31 * 设置digit clock控件显示格式后强制刷新(感谢雨欣提供补丁)
* 修复digit clock更改格式后没有重绘问(感谢兆坤提供补丁)
* 修复ComboBox下拉框如果存在相同名称的选项时, 触发值改变事件,获取到的索引值永远指向第一个的索引的问题(感谢兆坤提供补丁) * 支持image_set_image 检查是否相同的图片(感谢智明提供补丁) * 支持 mutable_image动态绑定贴图属性(感谢智明提供补丁) * 支持widget_set_text支持字符串比较相同字符串不刷新和新增widget_set_text_ex函数支持不检查以及测试用例(感谢智明提供补丁) * 支持获取当前资源管理的主题名称(感谢智明提供补丁) * 修复text_selector控件绘制蒙版出现残影的问题和选择文本后yoffset_save没有重置的问题(感谢雨欣提供补丁)

2022/08/30 * 完善注释(感谢雨欣提供补丁) * 数字时钟增加时段显示(感谢兆坤提供补丁) * wstr_set_utf8接口设置失败时打印警告并返回参数异常(感谢雨欣提供补丁)

2022/08/28 * 支持指定改变控件属性时附带动画的播放时间(感谢雨欣提供补丁)
* 修复fscript调用type_array_get时，传参有误导致程序崩溃的问题(感谢雨欣提供补丁)

2022/08/26 * 增加函数 slide_view_set_animating_time(感谢雨欣提供补丁)

2022/08/25 * 增加函数tk_pre_init，用于在命令参数处理前，做些基本功能的初始化。 * button公开pressed属性，方便MVVM实现点动按钮。

2022/08/24 * 统一get_offset的逻辑(感谢智明提供补丁)

2022/08/23 * 完善 fscript_locals_get * 完善 fscripts 示例。 * 完善 fscript 文档(感谢雨欣提供补丁) * 补充新增接口； * 修正接口参数； * 新增接口示例； * 矫正错别字、文档格式、章节编号 等等。 * 修复滚动列表中已经看不到的控件还可以刷新脏矩形的问题(感谢智明提供补丁)

2022/08/22 * 完善 data_reader_factory_create_reader处理Windows的盘符(感谢ufbycd提供补丁)。

2022/08/20 * 支持gauge_pointer的默认指针的宽度跟随控件宽度改变而改变(感谢智明提供补丁) * 统一pointer_event的button的属性值 (感谢智明提供补丁)

2022/08/17 * 完善conf_xml，支持通过@text访问文本内容。 * 修复编译警告(感谢智明提供补丁) * 完善编译脚本(感谢智明提供补丁) * 统一mingw和win32的控制台窗口的逻辑(感谢智明提供补丁) * 完善mledit(感谢俊圣提供补丁) * 交叉编译的时候，可以全局配置交叉编译工具的链接库路径(感谢智明提供补丁)

2022/08/16 * 完善grid(感谢雨欣提供补丁)

2022/08/15 * 完善conf_xml。 * 完善conf_obj_create_sub_object

2022/08/13 * 修复bitmap高效lcd旋转的时候显示不正常的问题(感谢智明提供补丁) * 修复高效lcd旋转同时开启窗口背景色宏导致有概率出现窗口 残影的问题(感谢智明提供补丁)。 * 修复编译警告(感谢雨欣提供补丁) * 完善demoui old (感谢智明提供补丁)

2022/08/10 * 修复编译警告(感谢智明提供补丁)。 * 修复agge直线渐变开始颜色的坐标比结束颜色的要大的时候会导致绘图不正常的问题(感谢智明提供补丁)。

2022/08/08 * 完善project.json(感谢俊杰提供补丁)

2022/08/06 * 修复slide_view控件drag_threshold属性的拼写错误以及函数注释(感谢雨欣提供补丁) * 完善spin_box API注释(感谢朝泽提供补丁) * 完善awtk_main(感谢朝泽提供补丁)

2022/08/04 * fix memory leak * improve fscript get/unset * 完善对话框高亮(感谢智明提供补丁)。

2022/08/03 * 增加spin控件增加repeat参数支持修改按钮连续触发的速度(感谢智明提供补丁) * 优化了光标在多行编辑框的底部时候弹出软键盘显示逻辑(感谢智明提供补丁) * 修复events API注释(感谢朝泽提供补丁)

2022/08/02 * 增加fscript_clean。 * 增加滚动的grid例子(感谢智明提供补丁)

2022/08/01 * 增加fscript_find_func。

2022/07/29 * 增加函数object_array_remove_value * 更新fs_aworks.c(感谢文浩提供补丁) * 完善demoui(感谢雨欣提供补丁） * 增加widget_invalidate函数的注释说明(感谢智明提供补丁)

2022/07/28 * 修复gauge_pointer控件初始化的时候警告的问题(感谢智明提供补丁) * slide view增加darg_threshold属性(感谢智明提供补丁)。 * 完善注释(感谢智明提供补丁)。

2022/07/27 * 增加fscript函数 widget_clone/widget_destroy_children * 增加EVT_MODEL_CHANGE事件，方便fscript实现窗口间通讯。 * 增加widget_dispatch_model_event * 修复label_set_prop导致全屏刷的问题 (感谢智明提供补丁)

2022/07/26 * 更新REAMDE中的demos链接(感谢雨欣提供补丁）。 * 修复image_dither的背景色为非16位色的时候导致图片颜色不正常的问题(感谢智明提供补丁) * 修复打开指定坐标的dialog时被强制居中的问题(感谢雨欣提供补丁）。

2022/07/25 * 修复file_browser和file_dialog没有包括头文件导致编译报错的问题(感谢雨欣提供补丁）

2022/07/22 * debugger增加restart函数(感谢智明提供补丁) * 完善debugger，调试结束后从列表中移除调试器。 * 完善image dither (感谢智明提供补丁)

2022/07/21 * 完善文件对话框。 * 完善API注释(感谢俊杰提供补丁)。 * 完善serial_widget，增加check_interval属性(感谢雨欣提供补丁) * 修复低版本gcc编译fscript_test报错的问题 (感谢雨欣提供补丁）

2022/07/20 * 增加文件选择对话框的函数。 * 增加文件选择对话框的函数的fscript包装。 * 增加了dialog_info/warn/confirm/toast等函数的fscript包装。 * 完善文档 fscript_widget.md * 完善 widget_take_snapshot_rect 支持控件内的偏移裁剪区(感谢雨欣提供补丁) * 修复 AWTK 在 APP_SIMULATOR 模式下光标基准点坐标不正确的问题(感谢雨欣提供补丁) * 修复edit在创建hook_button时打印的警告(感谢雨欣提供补丁)

2022/07/19 * 完善demoui的字符串(感谢兆坤提供补丁) * fscript支持实例的hooks(感谢智明提供补丁) * 修复 darray_remove_range 编译警告(感谢智明提供补丁)

2022/07/15 * 增加demoui一个切换分辨率的按钮(感谢智明提供补丁) * 完善window_base_set_applet_name

2022/07/14 * win32_res兼容x86平台编译(感谢雨欣提供补丁)

2022/07/13 * 重构 widget_add_child * 完善 pages 动态增加子控件。 * 完善API注释(感谢福明提供补丁) * tk_atoi/tk_atol/tk_atoul等函数视’#’开头的字符串为十六进制。

2022/07/12 * 对话框高亮增加参数update_background(感谢雨欣提供补丁) * 完善 auto_adjust_size 为true时layout的处理(感谢智明提供补丁)

2022/07/11 * grid控件的列定义增加参考fill_available，用于填充剩余宽度(只有一列可以指定)。

2022/07/08 * 完善serial helper * 增加函数 tk_iostream_serial_wait_for_data * 增加事件EVT_DATA/EVT_CONNECT * 增加控件serial_widget * 增加文档使用 serial_widget 简化串口编程

2022/07/07 * 完善widget fscript事件处理。 * 将tk_is_ui_thread移动到utils.c中。 * 完善str_set_with_len。 * 修复打印ubjson的时候出现二进制断言的问题(感谢智明提供补丁) * 增加控件timer_widget。

2022/07/06 * 修复支持applets时主题切换的问题。 * fscript支持ret_t中的常量，并更新文档。 * 增加函数path_prepend_app_root * 增加函数widget_set_prop_pointer_ex * 增加函数tk_object_set_prop_pointer_ex * 增加函数value_set_pointer_ex

2022/07/05 * 完善文档(感谢雨欣提供补丁) * 支持独立可以安装的applet，让它们具有独立的资源目录。 * 增加文档支持可独立安装的小应用程序 (applet)

2022/06/30 * 增加函数 fscript_get_code_id * 支持 image_animation 修改 interval 属性马上生效(感谢智明提供补丁)

2022/06/29 * 完善 edit 中 hook_children_button 的逻辑(感谢雨欣提供补丁) * 完善 Windows 的串口(感谢智明提供补丁) * 完善 guage pointer的脏矩形(感谢智明提供补丁)

2022/06/27 * 增加 fs_copy_dir_ex

2022/06/26 * 增加文档读写 XML/JSON/INI 和 UBJSON 等格式的数据文件

2022/06/25 * 完善 platform_prepare * 完善 awtk_main

2022/06/24 * 修复连续切换edit焦点，关闭键盘后，还原窗口位置不正确问题(感谢兆坤提供补丁) * 切换键盘时不再有动画效果(感谢兆坤提供补丁) * 弹出软键盘和mledit自动修改高度先后顺序问题(感谢兆坤提供补丁)

2022/06/23 * 修复demoui(感谢兆坤提供补丁) * 完善fscrit_widget * 兼容designer通过创建的项目，当使用web时，包含的文件名从assets_web.inc改为assets.inc(感谢兆坤提供补丁) * 增加stb支持解码24位位图的功能以及完善stb_load_image的 函数接口(感谢智明提供补丁)

2022/06/22 * 修复mledit改变大小后，scroll_bar的滑块没有改变的问题(感谢兆坤提供补丁)

2022/06/21 * 修复在高亮的对话下切换语言后高亮截图没有刷新的问题((感谢智明提供补丁) * 修复在高亮的对话下切换主题后高亮截图没有刷新的问题(感谢兆坤提供补丁) * 删除demoui无用代码(感谢兆坤提供补丁) * 完善demoui(感谢兆坤提供补丁) * 修复edit弹出软键盘异常问题(感谢兆坤提供补丁) * 完善fscrit_widget

2022/06/20 * 增加 log_if_fail。 * 完善 grid。

2022/06/19 * 完善 grid 控件，请参考grid控件用法

2022/06/18 * 修复tab键切换焦点时重新打开参考的问题。 * 完善弹出软键盘时窗口位置。

2022/06/17 * 完善str_unescape * text selector的options支持字符转义，方便使用特殊字符。 * combo box的options支持字符转义，方便使用特殊字符。 * 修改通过margin_left或margin_right可以调整compact模式下tab_button的宽度(感谢朝泽提供补丁)

2022/06/16 * 完善draggable * 新增 widget_layout_self_reinit 接口，用于在不销毁 控件的 self_layout 对象的情况下重置对象中的数据(感谢雨欣提供补丁)

2022/06/15 * 支持double clieck事件。用法参考:double_click.c

2022/06/14 * 完善slide menu 支持clip。 * 完善hscroll_label的裁剪区域。 * 生成资源时跳过空白文件(感谢培煌提供补丁) * 修复lcd旋转和修改窗口大小同时使用导致崩溃的问题(感谢智明提供补丁) * 修复高效旋转在多fb下脏矩形不正常的问题(感谢智明提供补丁)

2022/06/12 * conf doc 支持向数组中追加数据。

2022/06/11 * 完善spin box，支持不同的形态。具体请参考spin box的三种形态

2022/06/10 * edit/mledit 支持属性获取行高。 * 完善软键盘弹出，平移窗口的距离由编辑器决定。 * 完善 window_animator_vtranslate 支持指定前一个窗口的平移范围。 * 完善软键盘弹出，对于多行编辑器，如果上面的空间无法容纳，自动调整其高度。 * 完善edit克隆(感谢兆坤提供补丁)。 * 完善how_to_use_fast_lcd_portrait文档 (感谢智明提供补丁) * 软键盘的action按钮支持显示空字符串(感谢雨欣提供补丁)

2022/06/07 * 完善fscript调试器(感谢兆坤提供补丁)。 * 完善demoui，使用theme_of_popup属性(感谢兆坤提供补丁)。 * 允许在gif上绘制文字。 * gif支持绘制背景。 * svg支持绘制背景。

2022/06/07 * combo box 增加theme_of_popup属性。 * 增加文档 如何设置下拉选择框 (combo box) 弹出窗口/列表项的样式

2022/06/04 * 增加函数 conf_doc_set_node_prop

2022/06/03 * 增加函数 dialog_create_with_ok_cancel * 增加函数conf_doc_node_dup

2022/06/02 * 修复高亮对话框中弹出软键盘导致高亮被删除的问题(感谢雨欣提供补丁) * 修复mledit控件过高时弹出软键盘将窗口上移导致光标被遮挡的问题(感谢雨欣提供补丁)

2022/05/31 * 增加函数 theme_foreach * 增加函数str_encode_xml_entity/str_encode_xml_entity_with_len。 * 增加conf_xml用于读写xml文件。

2022/05/30 * 完善 children_layouter_default (感谢俊圣提供补丁)

2022/05/28 * 注册icon控件为image控件的别名。

2022/05/27 * 增加函数 svg_file_to_bsvg。 * typed_array支持bool类型(感谢兆坤提供补丁)。 * 去除debugger警告log (感谢兆坤提供补丁)。 * 增加debugger_client分发其他消息处理(感谢兆坤提供补丁)。

2022/05/26 * 公开函数bsvg_draw_path/svg_path_parse

2022/05/25 * 完善编辑脚本（感谢朝泽提供补丁） * scons -c时不执行app_helper的prepare() * 修复项目编译时由于awtk的idl.json不存在导致idl_gen失败的问题

2022/05/24 * 完善 svg image * 完善 edit 对 readonly 的处理(感谢雨欣提供补丁)

2022/05/23 * 完善demoui，删除无用代码(感谢兆坤提供补丁) * 增加函数bitmap_init_ex（感谢智明提供补丁）。 * 修复 tab_button 在动态加载的时候会打印警告的问题（感谢智明提供补丁）。 * 完善scons脚本，支持使用其它的 graphic_buffer 类 （感谢智明提供补丁）。

2022/05/20 * 完善text edit。 * 增加EMITTER_ENABLE/EMITTER_DISABLE * 完善widget_set_tr_text(感谢俊圣提供补丁) * 完善widget_create_animator(感谢俊圣提供补丁) * 修复窗口高亮的属性为空字符串会导致警告的问题（感谢智明提供补丁）。 * 修复label获取value的值失败的问题（感谢智明提供补丁）。

2022/05/19 * 完善func_str * 增加函数tk_memdup * 增加fscript函数binary * 完善测试程序 (感谢俊圣提供补丁) * 重构widget_set_xywh (感谢俊圣提供补丁) * 重构text_edit_get_selected_text(感谢俊圣提供补丁) * 完善func_json_save_ex（感谢国文提供补丁）。

2022/05/18 * 完善Windows下utf8转换。按照utf16的规则，对大于0x10000的字符值进行正确的编码 (感谢俊圣提供补丁)

2022/05/17 * 增加函数 widget_set_props

2022/05/16 * 修复 awtk 的打开了一个无动画的窗口后下一帧关闭背后的有动画窗口会导致画面闪烁的问题（感谢智明提供补丁）。 * 完善 utf16_to_utf8 拷贝不下, 返回NULL, 避免崩溃或越界访问(感谢俊圣提供补丁) * 完善 tk_utf8_dup_utf16 (感谢俊圣提供补丁)

2022/05/15 * 完善 input_engine_pinyin_add_candidate (感谢俊圣提供补丁)

2022/05/14 * 修复opengl模式下无法渲染缺少ascent、descent信息字体的问题，并统一agge模式下的效果（感谢雨欣提供补丁）。 * 完善 input_engine_pinyin_add_candidate (感谢俊圣提供补丁) * 完善widget_set_name，name为NULL时清除widget->name。

2022/05/13 * 完善load_asset_zip(感谢俊圣提供补丁) * 完善fps测试(感谢俊圣提供补丁) * 修复缺少 ascent 和 descent 信息，stb 没能正确的算出字体的缩放比例 scale 的问题（感谢雨欣提供补丁）。 * 使用stb不支持的symbol类型矢量字库时打印警告提示（感谢雨欣提供补丁）。 * 设置 spin_box 的默认 input_type 为 int。 * 修复 fscript中json_load参数个数大于1时的问题（感谢国文提供补丁）。

2022/05/12 * 完善load_asset(感谢俊圣提供补丁) * 修复mledit控件触发EVT_WIDGET_LOAD事件后打开右键菜单的问题（感谢雨欣提供补丁）。 * 修复edit控件得到焦点后弹出软键盘后控件内部measure_text 打印警告的问题（感谢雨欣提供补丁）。 * 完善资源管理器API注释（感谢智明提供补丁）。 * 完善value API注释（感谢智明提供补丁）。

2022/05/11 * 优化无渐变色时圆角矩形的绘制效率（感谢雨欣提供补丁）。 * 修复demouiold中的silder界面在agge模式下绘制有残留问题（感谢雨欣提供补丁）。 * 完善 conf_obj_save

2022/05/10 * 修复API注释错误(感谢朝泽提供补丁) * 修复绘制子控件时错误的使用了父控件dirty_rect_tolerance属性的问题 （感谢雨欣提供补丁）。

2022/05/09 * 修改打包工具配合desiger打包lcd旋转资源的修改（感谢智明提供补丁）。

2022/05/07 * 增加代码开启高效旋转的接口以及代码动态判断是否使用高效旋转（感谢智明提供补丁）。 * edit/mledit支持右键菜单。 * 增加如何启用编辑器的上下文菜单 * 修复file_browser_view获取属性失败的问题(感谢福明提供补丁)

2022/05/06 * 增加如何显示上下文菜单（俗称右键菜单） * 增加 STYLE_ID_CLEAR_BG。为 true 时，绘制背景时用 clear_rect 代替 fill_rect。其作用是可以直接修改 lcd 颜色的 alpha 通道，方便于其它硬件层（如摄像头/视频）进行合成。 * 修复窗口动画播放完后由于在线canvas数据与lcd不一致导致的有一帧闪屏的现象（感谢雨欣提供补丁）。

2022/05/05 * 修复combo_box设置readonly和value控件后焦点状态切换异常的问题（感谢雨欣提供补丁）。 * 修复 103 编译 flash 过大导致编译失败 （感谢智明提供补丁）。 * 修复SysTick_Handler函数使用weak导致编译出错的问题（感谢智明提供补丁）。 * 修改了快速旋转的说明文档和修改 image_rotate_ex 函数结果不正确的问题以及增加异常情况的断言（感谢智明提供补丁）。

2022/05/03 * 增加 list_item_seperator 控件，用于模拟实现风琴 (accordion) 控件。

2022/05/02 * 增加 tk_object_copy_props。 * 增加 theme_xml 支持加载 xml 格式的 style。

2022/04/30 * 完善 FAQ 增加 找不到 glibconfig.h 的处理方法。

2022/04/28 * 增加函数 widget_get_child_text_utf8。 * 完善 combo_box 在非加载时设置 options 后，更新显示文本。 * 修复 OpenGL 渐变色左边和上边画多一个像素点的问题 （感谢智明提供补丁）。 * 修复关闭正在打开的窗口的问题（感谢智明提供补丁）。 * 修复 scroll_bar_d 设置隐藏滚动条断言和 scroll_bar_m 隐藏后背后的区域无法触发以及 list_view 的 auto_hide_scroll_bar 属性在虚拟高比控件高要小时候隐藏后背后的区域无法触发 （感谢智明提供补丁）。 * 修复 slider 设置 dragger_size 属性失败和圆角矩形绘图失败后不显示的问题 （感谢智明提供补丁）。 * 完善 fscript json 的示例和文档（感谢雨欣提供补丁）。 * 修复窗口 clone 的问题。

2022/04/27 * 修复 combo_box_ex 初始化时出现文本全选的问题（感谢雨欣提供补丁）。

2022/04/26 * 完善 stream serial 的文档（感谢智明提供补丁）。 * 重构了 slider 的滑动条和滑块计算逻辑（感谢智明提供补丁）。

2022/04/25 * 完善 fscript_ext.c，使用宏定义控制包含的头文件（感谢雨欣提供补丁）。 * 修正 vgcanvas_bezier_to 接口的注释 （感谢雨欣提供补丁）。 * 修正 awtk_main 命令较长时可能超出局部数组长度导致异常的问题（感谢朝泽提供补丁）。 * 修复 list_view 只有 default_item_height 的时候滚动按钮无效的问题（感谢智明提供补丁）。

2022/04/24 * 修复 font_gen 工具无法打包 stb_mono 点阵字的问题（感谢雨欣提供补丁）。 * 增加 weak 机制以及在 g2d 和 raw 中增加 weak （感谢智明提供补丁）。

2022/04/23 * 完善 socket_resolve 防止溢出（感谢叶冬提供补丁） * 完善 tk_socket_close 支持 AWorks（感谢叶冬提供补丁） * 增加 async_call_init_ex2（感谢叶冬提供补丁） * 重构 time clock 中 anchor 处理。 * 重构 gauge pointer 中 anchor 处理。

2022/04/22 * 增加 tk_eval_ratio_or_px * 增加 TK_STR_IS_EMPTY * 增加 TK_STR_IS_NOT_EMPTY * 统一 slider_indictor 中的 anchor_x/anchor_y。 * 完善 idl_gen（感谢王程提供补丁）。

2022/04/19 * 完善 tk_istream_read_line * 修复测量文本宽度精度丢失的问题（感谢福明提供补丁）。

2022/04/18 * 增加函数 path_app_root_ex * 完善 ui_loader_load 对 xml 的支持。 * 增加函数 assets_manager_set_fallback_load_asset * awtk 修复缺少连接 ws2_32 类库的问题 （感谢智明提供补丁）。 * 修复关闭对话框后马上打开对话框不正常的问题（感谢智明提供补丁）。

2022/04/17 * fscript 增加函数 widget_add_value

2022/04/16 * 增加函数 tk_socket_bind_ex * 增加函数 tk_iostream_udp_create_client_ex * tr_text/tr_tips 为空字符串时当作空指针处理。 * 完善 event_from_name 支持 long_press。

2022/04/15 * 解决在 linux-fb，鼠标移动且无按压时，界面上的鼠标指针没有跟着移动的问题（感谢兆坤提供补丁）。 * 修复 hscroll_label 控件当有设置 speed 属性同时字符串长度少于控件宽度导致无法正常显示的问题（感谢智明提供补丁）。

2022/04/14 * 让 windows 的串口也支持 select 的形式（感谢智明提供补丁）。 * 还原 app_helper_base.py 脚本的修改（感谢智明提供补丁）。 * 修复 awtk 在 OpenGL 下的渐变色，上面的颜色坐标比例比下面的颜色要大的时候，颜色不正确的问题（感谢智明提供补丁）。

2022/04/13 * 复切换主题时，销毁 style 后，由于控件 need_update_style 为 false，没有通知该控件 style 更新数据，导致获取该控件样式属性时发生崩溃问题（感谢兆坤提供补丁）。

2022/04/12 * 完善 awtk_main

2022/04/09 * fscript 增加 define_param 用于辅助反向生成 AWBlock。 * 完善 fscript 语法检查

2022/04/08 * 增加 LCD 旋转对 project 文件的适配（感谢智明提供补丁） * 修复不支持渐变色的百分比的设置问题（感谢智明提供补丁）

2022/04/07 * 增加函数 url_to_string。

2022/04/06 * 完善软键盘 grab_keys=true 时物理键盘按键太快丢失按键的问题。

2022/04/03 * 完善 style_mutable，去掉 default style 为 NULL 时的警告。 * 完善 color_picker 处理 alpha 通道的问题。 * 修复当打开了新窗口后旧窗口的软键盘关闭导致窗口动画播放不正确的问题（感谢智明提供补丁）。

2022/04/01 * 完善给 edit、mledit 和 combo_box 增加了 empty_over 状态（感谢雨欣提供补丁） * 完善 URL 解析并增加一些新的 schema。 * 完善 ubjson writer

2022/03/31 * 增加带统计功能的 stream （感谢林福提供） * 增加移除和替换 qaction 的 action_darray_thread（感谢林福提供） * 修复 combox 的鼠标弹起后无法释放拖拽状态的问题（感谢智明提供补丁）。 * 给 edit、mledit 和 combo_box 增加了 empty_over 状态（感谢雨欣提供补丁） * 修复 demoui 中的多行编辑器右侧的字符会被遮挡的问题（感谢兆坤提供补丁） * 补充 demoui 中 edit、mledit 和 combo_box 中 empty_over 和 over 状态的样式 （感谢兆坤提供补丁）

2022/03/30 * fscript 支持延迟解析函数。 * 完善 fscript 局部变量的访问。 * fscript 支持通过 require 函数加载模块。

2022/03/29 * 优化 fscript 局部变量的访问。 * 更新 aworkslp 移植代码（感谢文静提供） * 修复兼容以前的 lcd 旋转贴图的断言判断（感谢智明提供补丁） * 修复在虚拟机上面 lcd_mem 字体错位的问题以及兼容以前 lcd 旋转运行的问题（感谢智明提供补丁） * 删除 mingw 的 UNICODE 宏和 msvc 统一宏的版本（感谢智明提供补丁）。

2022/03/28 * 完善 fscript。

2022/03/24 * 修复切换语言时 canvas 的 font 对象被清空导致控件无法正常绘制的问题（感谢雨欣提供补丁）

2022/03/23 * 改用 mingw 默认的宏来定义 MINGW 宏（感谢智明提供补丁）。 * 修复在离线画布多次数据回流导致内存泄露的问题（感谢智明提供补丁）。 * 完善 ubjson 对字符的处理（感谢攀峰提供补丁）

2022/03/22 * 修复软键盘让窗口上移后再次弹出软键盘导致窗口动画不正常的问题（感谢智明提供补丁） * 修复在 text_edit 在点击和拖拽的时候执行 layout 导致的卡顿问题以及修复翻页不正常的问题（感谢智明提供补丁）

2022/03/21 * 完善 3or5keys 文档（感谢雨欣提供补丁） * 完善 mingw 编译（感谢智明提供补丁）。

2022/03/20 * 完善 ubjson_writer_write_object。 * 完善 fscript 函数 len

2022/03/19 * 完善 fscript 函数 bit_not * 完善 fargs_get_data_and_size * 完善 object_date_time 支持 foreach。

2022/03/18 * 完善 tk_\cond_var_wait（感谢兆坤提供补丁）。 * 修复 AWTK_LITE 编译问题（感谢智明提供补丁） * 完善 edit 和 combox 的 over 和 enter 的状态风格切换（感谢智明提供补丁）

2022/03/17 * 修复离线画布数据回流才可以使用的问题（感谢智明提供补丁） * 完善 canvas_measure_text 函数的缓存逻辑优化其速度（感谢智明提供补丁）

2022/03/16 * 增加通配符匹配函数 tk_wild_card_match。 * 完善 canvas_measure_text 函数的缓存逻辑优化其速度（感谢智明提供补丁）

2022/03/15 * 增加 canvas_measure_text 函数的缓存逻辑优化其速度（感谢智明提供补丁）

2022/03/14 * edit 和 combox 的 over 和 enter 的状态风格切换（感谢智明提供补丁）

2022/03/11 * 修复 theme_gen 的模板部分编译出错问题（感谢智明提供补丁） * 修复 combox 在没有默认值的时候创建控件会和 mvvm 的列表渲染赋值的覆盖问题 （感谢智明提供补丁） * 完善 3_5key 的说明文档（感谢雨欣提供补丁）

2022/03/10 * 完善 fscript debugger * 完善 line_number * 修复 style_get_color 函数处理渐变色时候崩溃的问题（感谢智明提供补丁） * 修复 edit 控件，输入类型为 int/uint/float/ufloat 时，edit_set_text 错误把 max 当作最大长度使用。

2022/03/08 * 支持 LCD 快速旋转 （感谢智明提供补丁）。 * 修复 awtk 在安卓下划线不正常的问题（感谢智明提供补丁）。 * 修复窗口管理宽高没有对话框的大时候播放对话框的窗口动画会导致断言的问题（感谢智明提供补丁）。 * 修复控件动画停止时候导致裁剪区不正常的问题（感谢智明提供补丁）。

2022/03/04 * 修复 icon_at 靠边不正常的问题（感谢智明提供补丁）。 * 修改 csv 中的内存泄漏（感谢林福提供补丁）。 * 修复控件动画修改坐标和宽高导致残影的问题（感谢智明提供补丁）。

2022/03/03 * 修复 icon_at 靠边不正常的问题（感谢智明提供补丁）。

2022/03/02 * AWorks 的 serial_helper 增加设置超时的接口（感谢林福提供补丁）。 * image_value 控件添加了 -+ 号的映射（感谢雨欣提供补丁）。 * 完善 widget_set_pointer_cursor，实时生效。

2022/02/26 * draggable 支持拖动原生窗口。

2022/02/25 * 增加函数 combo_box_has_option_text * 完善 themegen （感谢兆坤提供补丁）。

2022/02/24 * 增加函数 str_format/str_append_format。

2022/02/23 * 修复导出 IDL 文件的时候因为查找不到依赖的类导致出现警告（感谢智明提供补丁）。 * 集成了 IoT.js，所以同步更新 app_helper_base.py（感谢朝泽提供补丁） * 修复编译警告（感谢智明提供补丁）。

2022/02/22 * 完善 API 注释。 * 完善 fscript 调试器。 * 统一 lcd 旋转的方向为逆时针和增加相关接口的说明（感谢智明提供补丁）。

2022/02/21 * 修复 fscript global 对象初始化的问题。 * 修复 value_int64/value_uint64 对大数的处理。

2022/02/18 * 增加函数 fscript_set_global_object。

2022/02/16 * 增加函数 ui_loader_load_widget_from_xml。 * 增加 vg 加载字体的错误判断和提示 （感谢智明提供补丁）。

2022/02/15 * conf 对象支持 foreach_prop。 * conf 支持创建子对象。

2022/02/14 * 完善 combo_box_ex（感谢培煌提供补丁）

2022/02/11 * 修复 csv 中的内存泄漏（感谢兆坤提供补丁）

2022/02/10 * 完善 str_append_json_str。 * 完善 API 注释（感谢朝泽提供补丁） * color_tile 支持渐变色（感谢智明提供补丁） * 完善 canvas_draw_image_at（感谢智明提供补丁） * 增加输入框中支持按键和鼠标输入保持光标常亮的功能（感谢智明提供补丁）

2022/02/08 * 增加 widget_find_parent_by_type/widget_find_parent_by_name。

2022/02/07 * 合并对环形进度条的优化。

2022/02/04 * 增加函数 path_basename_ex。

2022/02/02 * 完善 fscript 语法错误检查。

2022/01/29 * 完善 fscript debugger

2022/01/25 * 完善离线画布（感谢智明提供补丁）

2022/01/24 * 完善 fscript debugger * 优化 tk_strncpy（感谢智明提供补丁） * 增加 slider 增加修改前景色的线帽形状属性（感谢智明提供补丁） * 修复 demoui 界面上有 edit 控件且控件中存在文本时切换主题会打印警告的问题（感谢兆坤提供补丁） * 完善 demoui（感谢兆坤提供补丁）

2022/01/23 * 完善 fscript debugger, 支持 attach/launch 两种启动方式。

2022/01/22 * line_number 支持设置高亮行。 * 完善 fscript debugger

2022/01/21 * 完善 fscript debugger 并增加 fdb 命令行调试工具。 * 完善 aworks 平台的 serial_helper.c（感谢文静提供）

2022/01/20 * 增加 fscript 的构造函数和析构函数（感谢智明提供补丁）

2022/01/19 * 完善编译脚本（感谢雨欣提供补丁） * 完善 fscript 调试器（支持 step in/step out/step over/reload code)。

2022/01/16 * 完善 fscript 支持调试器。

2022/01/13 * 优化 tk_object_get_child_object（感谢雨欣提供补丁）

2022/01/12 * 完善 awtk 退出流程（感谢雨欣提供补丁）

2022/01/11 * 修复 awtk_main 中 reboot 残余代码导致嵌入式系统编译失败的问题。 * 修复 WITHOUT_FSCRIPT 没有生效的问题。 * 完善 fscript 表达式。

2022/01/10 * 完善 fscript if/elseif/else 语句

2022/01/08 * fscript 的 log 函数改名为 logf，避免与 flow 中的 log 重名。 * fscript 增加 date_time_get_prop/date_time_set_prop 等函数。

2022/01/07 * fscript 增加 str_is_empty/str_len/array_is_empty/array_size 等函数。 * object_typed_array 支持通过 TK_OBJECT_PROP_SIZE 获取元素个数。 * object_typed_array 支持通过 set_prop/get_prop 访问元素。 * fscript 支持 for/for_in 语句。

2022/01/06 * fscript 增加 random0to1。 * fscript 支持 until/repeat_times/repeat 语句。 * fscript 中增加 is_int/is_odd/is_even 等函数 * 还原 awtk_main.inc 文件的循环代码（感谢智明提供补丁） * log 后调用 fflush（感谢福明提供补丁）

2022/01/05 * fscript 公开函数 value_id/value_func。 * fscript 增加 log10/pow10 等函数。 * 修复在多次半透叠加后数据不正常的问题（感谢智明提供补丁） * 修复注释错误（感谢朝泽提供补丁） * fscript 中三角函数增加以度数为单位的相应函数。

2022/01/04 * fscript 支持保存函数名，方便调试。

2022/01/02 * 修复 fscript 中 while 语句对 return 的处理。 * 修复 emitter 被覆盖的问题（感谢智明提供补丁）

2022/01/01 * 优化 fscript 函数调用。 * 公开结构 fscript_func_call_t。 * fscript 支持设置错误处理函数。 * fscript 增加函数 sleep_ms。

2021/12/31 * fscript 允许重载 print 函数。 * 修复 emitter 的事件中删除事件同时递归触发事件导致 emitter 不正常的问题（感谢 zxc3489 和智明提供补丁） * 修复使用 thread_with_pthread 时，线程运行完毕后调 用 join 函数出现内存泄漏的问题 （感谢雨欣提供补丁）

2021/12/29 * 修复 fscript 中 unset 的问题。 * fscript 增加 f64/double 数据类型转换函数。 * 允许通过 widget_get_prop 获取 loading 属性（感谢兆坤提供补丁） * 修复 t9ext 输入法中输入完成后 Enter 键失效的问题（感谢雨欣提供补丁） * 解决 combo_box 设置 text 后，select_index 没有跟着变化的问题（感谢兆坤提供补丁）

2021/12/28 * 完善 demoui（感谢兆坤提供补丁）。 * 完善 serial_helper.c（感谢朝泽提供补丁）

2021/12/27 * 修复 T9Ext 输入法，输入 1 后删除 1，但是候选栏没有关闭的问题。 * 修复 demoui kb_ascii 软键盘输入内容错误问题（感谢兆坤提供补丁）。 * 将 page_tab_ctrl 中的 view 改为 tab_control，让 xml 更具有可读性（感谢兆坤提供补丁）。 * 修复 mledit 选择文本时鼠标指针拖到滚动条上的滑块后，再拖回 mledit 时无法继续选择文本的问题（感谢兆坤提供补丁）。 * 修复 SDL_DestroyWindow 后 SDL_GL_DeleteContext 无法正常释放导致泄漏的问题（感谢朝泽提供补丁） * 修复 data_reader_factory、data_writer_factory 重复 register 会引起内存泄漏的问题（感谢朝泽提供补丁）

2021/12/26 * 增加函数 array_reverse * 增加 fscript 函数 array_reverse

2021/12/25 * 增加函数 str_reverse/str_count。 * 增加 fscript 函数 text_reverse/text_count。

2021/12/24 * 修复 mingw 编译说明文档（感谢智明提供补丁） * 修复 SDL 释放的时候内存泄露的问题（感谢智明提供补丁） * 增加状态机（感谢林福提供补丁） * 修复单元测试：兼容非 utf8 编码的编译器（VS2015）（感谢雨欣提供补丁） * 完善部分 cast 函数的文档。

2021/12/23 * 增加 aworkslp 平台支持（感谢林福提供补丁） * fscript 增加 code_id，方便以后支持调试。 * 完善 fscript widget 扩展中的定时器相关接口（感谢雨欣提供补丁）。 * 修正 Win32 串口操作速度被限制的问题（感谢陈谭提供补丁）

2021/12/22 * 复原被覆盖的 tools/idl_gen/README.md（感谢雨欣提供补丁） * 增加 tkc/sha256.h

2021/12/21 * 增加小工具 expand_text。请参考 fongen 的说明

2021/12/20 * 修复在 mvvm 中 edit 控件输入值超过限定值后没有 通知数据层修改数据的问题（感谢智明提供补丁） * fscript 支持全局变量，可在多个脚本之间共享数据 请参考

2021/12/19 * 支持 4bits 的点阵字体。请参考 fongen 的说明

2021/12/18 * 修复圆角矩形在画小圆形的时候上下边缘抗锯齿效果不好的问题（感谢智明提供补丁） * 修复 edit 和 slider 以及 mledit 的 inputing 的状态切换的问题 （感谢智明提供补丁）

2021/12/16 * 修复在没有窗口动画的时候使用高亮对话框会导致 system_bar 画面不正常的问题 （感谢智明提供补丁） * 修复 hscroll_label 野计时器的问题 （感谢智明提供补丁）

2021/12/15 * 工具 font_gen 支持 指定字符的范围 * 增加函数 edit_set_double_ex。 * 修复 cairo 作为 vgcanvas 时的警告（感谢智明提供补丁） * 修复无文件系统时多国语言初始化失败的问题 （感谢雨欣提供补丁）

2021/12/14 * 增加工具 font_dump * 修复 hscroll_label 控件失去焦点后停止滚动的问题（感谢智明提供补丁）

2021/12/11 * 增加 tk_str_is_in_array。 * 增加 tk_utf8_trim_invalid_char。 * 完善 project.json（感谢俊杰提供补丁）

2021/12/09 * 完善 json 解析对整数的处理。 * 修复 guage_pointer 控件锚点设置为整数时，打印异常警告的问题 （感谢雨欣提供补丁） * 将 combo_box 与 combo_box_ex 的 layout 函数整合了一下，共用一个函数（感谢雨欣提供补丁）

2021/12/08 * 修复 combo_box_ex 打开默认弹窗时 layout 不正确的问题 （感谢雨欣提供补丁） * 增加 widget_move_to_center。

2021/12/02 * 完善 API 注释（感谢朝泽提供补丁）

2021/12/01 * 将 tkc 放到独立的仓库（以后通过 sync_tkc.sh 同步 tkc 代码）。 * edit 增加事件 EVT_IM_ACTION（感谢兆坤提供补丁） * 修复 awtk 的 nanovg_plus 的获取当前裁剪区不正常的问题 （感谢智明提供补丁） * 修复 widget_set_as_key_target 递归各个父集后导致全屏刷新的问题 （感谢智明提供补丁） * 修复 int16_endian_invert（严重 BUG，请更新代码）。

2021/11/29 * 完善 event_from_name（感谢兆坤提供补丁） * 完善 pages 方便绑定 MVVM （感谢兆坤提供补丁）

2021/11/27 * 完善 lcd_vgcanvas，部分函数完成后清除路径。 * 增加 point_init/pointf_init。

2021/11/26 * edit 回车切换到下一个焦点。 * 修复无文件系统下切换主题失败的问题 （感谢雨欣提供补丁）

2021/11/25 * 修复部分宏拼写错误（感谢兆坤提供补丁） * 修复 API 注释错误。

2021/11/24 * demouiold 增加 slider 示例（感谢雨欣提供补丁） * 修复触发按钮长按后导致丢失 up 消息的问题（感谢智明提供补丁）

2021/11/23 * 完善 slide_indicator 支持半透动画效（感谢智明提供补丁） * 完善资源脚本：修正了打包流图文件时生成的 inc 文件有误和没有 include 到代码里的问题（感谢朝泽提供补丁） * 增加 hscroll label 滚动速度设置，并在 demoui old 增加示例（感谢 yuanyuanyuanquan/兆坤提供补丁）。 * 修复 在控件销毁后，定时器没有销毁而产生的警告 问题（感谢兆坤提供补丁）。 * 修复 hscroll label 设置为往返滚动（yoyo）时，在滚动间隙时间会回到初始位置问题（感谢兆坤提供补丁）。 * 修复 offset_change_event 一些注释错误（感谢培煌提供补丁）

2021/11/22 * 完善 fscript 的文档（感谢福明提供补丁）

2021/11/20 * 增加函数 darray_push_unique * fscript 支持中文函数名和变量名。 * 增加 slide_indicator 控件的过渡效果（感谢智明提供补丁）

2021/11/19 * 将控件属性动画前缀从 animate. 改为 animate:（感谢兆坤提供补丁） * demoui 在 stm32f429 运行时，程序会先看到主界面闪过后再看到加载界面的问题（感谢兆坤提供补丁） * 增加修改 scroll_bar 翻页动画时间（感谢智明提供补丁）。

2021/11/17 * 增加 tk_min_int/tk_max_int/tk_max_float/tk_min_float。

2021/11/16 * 修复使用 fscript_ext 时 rbuffer 头文件未定义导致的编译警告，新增文档 fscript_ram_req（感谢雨欣提供补丁） * 修复 AWTK_LITE 编译出错的问题 （感谢智明提供补丁）。

2021/11/15 * 增加 hash table。

2021/11/11 * 修复在 fb 为 bgra8888 格式时半透明边缘出现明显边缘的问题以及前景和背景色都为半透明时候颜色不正常的问题（感谢智明提供补丁）。

2021/11/10 * 增加 widget_get_value_int/widget_set_value_int/widget_add_value_int * 修复截屏出现显存泄露的问题（感谢智明提供补丁）。 * 完善 rlog（感谢林福提供补丁）。

2021/11/09 * 修复 mledit oy 计算不正确的问题 （感谢兆坤提供补丁） * fscript 支持多国语言互译和主题切换（感谢雨欣提供补丁） * 修复 mledit 在 overwrite 模式下鼠标拖动，mledit 没有一起动的问题。（感谢兆坤提供补丁） * 新增了主题改变事件结构，并让 widget_set_theme 接口支持无文件系统时切换主题 （感谢雨欣提供补丁）

2021/11/08 * 优化 OpenGL 每次全屏 clear 的逻辑（感谢智明提供补丁）。 * 增加查询上一级目录的资源逻辑（感谢智明提供补丁）。 * fscript 中变量名以英文点开头时报错并将其直接当做字符串处理（感谢雨欣提供补丁） * 修复 tab_button_group 由小变大后无法复原子控 件的位置的问题（感谢智明提供补丁）。

2021/11/05 * 增加了 nanovg 获取当前裁剪区的函数和增加矩形是否在裁剪区的函数以及统一修改相关判断是否在裁剪区的代码（感谢智明提供补丁） * 修复在裁剪区下和高分屏情况下字体无法裁剪的情况（感谢智明提供补丁）。 * 修复离线画布和切换主题同时释放导致位图数据 多次释放的问题（感谢智明提供补丁）。 * 取消 nanovg 的脏矩形机（感谢智明提供补丁）。 * 修改 text_selector 没有选项时打印日志的问题 （感谢智明提供补丁）。

2021/11/03 * 增加 fs_foreach_file * 完善 demoui 界面（感谢兆坤提供补丁） * 修复 mledit oy 不正确的问题（感谢兆坤提供补丁） * 修复在 linuxfb 平台，mledit 下按 capslock 键会输入字符的问题（感谢兆坤提供补丁） * 修复在 linux 和 mac 平台，大键盘上的特殊字符（！@#￥）无法输入到 mledit 问题（感谢兆坤提供补丁）

2021/11/02 * 增加 tk_str_end_with * 修复 json 解析对 null 的处理。 * 增加 str_append_int64/str_append_uint64 * 完善 demoui/demouiold 动画演示（感谢兆坤提供补丁） * 修复 list 下 self_layout 不能自动布局的问题（感谢智明提供补丁）。 * 修复 lcd_vgcanvas 画线颜色不正确的问题（感谢智明提供补丁）。

2021/11/01 * 修复 agge 编译缺失的问题（感谢智明提供补丁）。 * 修复当字库名字超过 32 后导致不断添加新类库的问题（感谢智明提供补丁）。

2021/10/30 * 完善 RTT mutex 封装。 * 完善 awtk_main.inc，通过命令行参数决定是否打开控制台（感谢朝泽提供补丁）。 * 完善 value_anim 功能演示 demo 的补丁（感谢兆坤提供补丁） * 增加 nanovg_plus，优化 nanovg 性能（感谢智明提供补丁）。

2021/10/29 * 修复两个窗口同时打开时候会导致第一个窗口丢失 EVT_WINDOW_OPEN 消息（感谢智明提供补丁） * 修复 dialog_toast 在窗口动画比较慢的同时快速点击导致出现崩溃问题和窗口动画比 dialog_toast 要慢会出现断言的问题 （感谢智明提供补丁）

2021/10/27 * 修复函数注释不正确的问题（感谢智明提供补丁） * 完善 candidates_calc_child_width，去掉常数设置，完全由候选字按钮的 style 控制。

2021/10/26 * 完善 socket 意外断开处理。 * 增加文档 如何在改变控件属性时附带动画 （感谢兆坤提供补丁） * 修改 demouiold，value_anim 功能演示改为键盘退出动画结束后再修改值（感谢兆坤提供补丁） * 完善 mledit_insert_text 函数 （感谢兆坤提供补丁）

2021/10/25 * gif image 增加 loop 属性。 * 完善 value_float（感谢周聪提供补丁）

2021/10/23 * 完善 draggable，可以拖动任意层级的父控件。 * Android/iOS 调用 exit 退出进程。 * 增加函数 str_common_prefix。

2021/10/22 * 修改 value 值动画效果 （感谢兆坤提供补丁） * 完善离线 canvas （感谢智明提供补丁）

2021/10/21 * 修改 T9 输入法某些情况下，编辑器不能退出预编辑状态的问题。 * 修复 edit 在不可视状态下，预编辑时光标位置错误问题（感谢 zxc3489 和兆坤提供补丁）。 * 修复 edit 在不可视状态下，预编辑时失去焦点，预选字母没有变回、*号（感谢 zxc3489 和兆坤提供补丁）。 * 修复 mledit 按 tab 键没有触发 value_changing 事件的问题（感谢兆坤提供补丁）。

2021/10/20 * 完善极简键盘支持，增加 activated 状态。 * 修复在 agge 下程序窗口缩放有概率导致程序崩溃的问题（感谢智明提供补丁） * 修复警告和程序窗口缩放导致 layout 属性被修改的问题 （感谢智明提供补丁） * 修复释放位图时候 vgcanvas_asset_manager 已经被释放的问题 （感谢智明提供补丁） * 修复长按打开新窗口时，旧窗口收不到 pointer up 事件的问题。

2021/10/19 * 完善 fscript，增加函数 get。 * 完善 fscript，增加函数 get_last_error。 * 完善 fscript 中获取前缀为、$的变量，若变量不存在，则返回无效变量（感谢雨欣提供补丁）

2021/10/18 * 修改编译警告（感谢朝泽提供补丁） * 优化 line parser（感谢智明提供补丁）

2021/10/16 * 增加 WITH_DEFAULT_IM，方便在 android 上使用 AWTK 内置输入法。

2021/10/15 * 完善 str_from_wstr_with_len。 * 增加 vgcanvas_draw_image_repeat（感谢智明提供补丁） * 完善 mledit 虚拟高度计算错误问题（感谢兆坤提供补丁） * 修复在 opengl 下离线画布不回传数据不能显示的问题 （感谢智明提供补丁） * 完善 mledit 修复多行编辑器改变字体时编辑器没有重新布局的问题（感谢兆坤提供补丁）

2021/10/13 * 增加函数 str_append_n_chars * 增加函数 data_writer_write_all

2021/10/12 * 修复透明渐变窗口动画影响到顶层悬浮窗口的问题（感谢智明提供补丁） * 增加修改 sdl 窗口 title 的接口的功能（感谢智明提供补丁） * 增加左右滚动是否禁止动画的功能（感谢智明提供补丁） * 修复 demoui 在 320*480，agge 模式下，字体超出按钮范围的问题（感谢兆坤提供补丁）

2021/10/11 * 完善 app_help_base，修复 mvvm-js 项目编译时找不到 jerryscript 路径的问题（感谢雨欣提供补丁） * 启用 fscript_ext 时需定义宏 WITH_DATA_READER_WRITER （感谢雨欣提供补丁） * 完善 mledit（感谢兆坤提供补丁）。 * mledit 启动覆盖行时，选中文本不对的问题。 * 追加功能：在 mledit 启动覆盖行时，滚动条值不为最大时，mledit 偏移位置则不随光标位置改变。 * 修复当内存不足的时候导致 image_value 的 bitmap 被释放导致断言的问题（感谢智明提供补丁）

2021/10/09 * 修复拖拽控件在拖拽时且控件不移动时，没有发送 drag 事件（感谢兆坤提供补丁）

2021/09/30 * 修复 demoui 内存泄露和分辨率适配的问题（感谢兆坤提供补丁）

2021/09/29 * 修改 OpenGL 宏（感谢智明提供补丁） * AWTK-WEB 支持多主题（感谢兆坤提供补丁） * 修复圆角矩形渐变偏移不正常的问题（感谢智明提供补丁）

2021/09/28 * 修复控件使用圆角矩形后半透明的问题（感谢智明提供补丁）

2021/09/25 * 增加 object_create_ex

2021/09/24 * 完善文档 渐变色（感谢雨欣提供补丁）

2021/09/22 * 完善 object_get_child_object（感谢雨欣提供补丁） * 完善 android 版本 demo（感谢兆坤提供补丁） * 完善 ios 版本。 * 增加 object_widget，把 widget 包装成 object，方便在 fscript 中访问 widget 的属性（感谢雨欣提供补丁）

2021/09/19 * 修复 cppcheck 的一些警告。

2021/09/18 * 完善 func_eq（感谢雨欣提供补丁） * 取消升级 gtest。 * 修复 asset_loader_zip 在 Windows 上的问题。

2021/09/16 * 解除 assets-1m.c 和 demo_ui_app.c 之间的耦合（感谢兆坤提供补丁） * object_array_set_prop 函数，在 name 属性不符合要求时，返回设置失败（感谢雨欣提供补丁） * 还原 pc 的编译优化等级（感谢智明提供补丁） * 修改 gradient.c 文件为 inc（感谢智明提供补丁） * 修复 overlay 窗口打开后导致之前的窗口切换到后台而被挂起的问题（感谢智明提供补丁）

2021/09/15 * 升级 gtest。 * strgen 工具生成国际化字符串时保留文本两端的空格。 * 修改自动生成资源文件脚本，分为 assets、assets_old 和 assets_all，assets 包含新 demoui 的资源，assets_old 包含旧 demoui 的资源，assets_all 包含所有资源（感谢兆坤提供补丁）。 * 将 demo_ui_ex_app.c 改名为 demo_ui_app.c，而之前的 demo_ui_app.c 改名为 demo_ui_old_app.c（感谢兆坤提供补丁）。 * 新 demoui 增加渐变色按钮示例（感谢兆坤提供补丁）。 * 补充新 demoui 键盘中文翻译，修改 kb_foo 样式（感谢兆坤提供补丁）。 * 修复 gtest 编译警告（感谢智明提供补丁） * 修复编译警告（感谢智明和兆坤提供补丁） * 修复编译 demoui 警告（感谢兆坤提供补丁） * 完善 draw_rounded_rect（感谢智明提供补丁）

2021/09/14 * 根据新增接口，完善 object_array 以及 object_default（感谢雨欣提供补丁） * 完善 progress_circle 控件，兼容旧版的 unit 属性用法 i（感谢雨欣提供补丁） * 完善 progress_bar 控件，format 属性与 designer 显示效果保持一致（感谢雨欣提供补丁） * 新增 object_get_child_object 接口，方便 AWTK 内部的 object_t 派生类和 mvvm 直接调用（感谢雨欣提供补丁） * 修复 object default 中的内存泄漏。 * 完善 widget_set_as_key_target，修复 style 没有更新的问题。 * 去掉 tk_utf8_from_utf16_ex 中不必要的警告。 * 支持 style 支持 渐变色（感谢智明提供补丁）

2021/09/13 * 修改 canvas_draw_image 改成用 rectf 类型（感谢智明提供补丁） * 增加宏 WITH_GPU/WITH_GPU_GLES2（感谢智明提供补丁）

2021/09/11 * 增加 object_default_create_ex 用于禁止路径访问属性。

2021/09/10 * 完善 demo_ui_ex_app（感谢兆坤提供补丁）。 * mledit 控件增加追加文本、输入模式（超出最大行数后移除旧的行）功能（感谢兆坤提供补丁）。 * fscript_object 中新增了 object_forward_events 接口，并完善了单元测试和说明文档（感谢雨欣提供补丁） * object_array 添加事件触发，用于 mvvm 更新界面，并且在 set_prop 和 get_prop 函数中增加路径处理，向下查找一层，以便 mvvm 列表渲染逐层访问属性（感谢雨欣提供补丁） * 增加 WITHOUT_FSCRIPT，方便低端平台禁用 fscript（感谢智明提供补丁） * object_array/object_default 增加 exec/can_exec（感谢雨欣提供补丁） * edit 显示支持 bidi。

2021/09/09 * fscript 增加 json_save_to_string（感谢雨欣提供补丁） * 完善 fscript 文件系统相关接口（感谢雨欣提供补丁） * 完善 thread_with_sdl 中的 mutex（感谢雨欣提供补丁） * 完善 fscript 的文档（感谢雨欣提供补丁） * 增加 conf_doc_get_ex 和 conf_doc_find_node。

2021/09/08 * 增加 image_manager_set_max_mem_size_of_cached_images 用于限制最大图片缓存占用的内存。 * window_open 支持打开本地 xml 文件。

2021/09/07 * 完善 fscript，没有定义的变量，不再当作字符串。 * 完善 utf8（感谢智明提供补丁）

2021/09/06 * inline style 改用”.”分隔，仍然兼容”:”，建议用新的方式书写。请参考 样式 * 重新开发 demoui（之前的改名为 demouiold)（感谢兆坤提供补丁）。 * 完善 demoui（感谢兆坤提供补丁）。 * 增加 wcsncpy（感谢智明提供补丁） * 修复嵌入式平台编译出错问题（感谢智明提供补丁）

2021/09/04 * 用 darray 重新实现 object_default。 * 增加 darray_find_ex/darray_find_index_ex/darray_remove_ex。

2021/09/03 * 修复编译警告（感谢智明提供补丁） * 完善 list_view_h_on_scroll_view_layout_children 让用户自定义 layout 失效的问题。 * scroll view/hscrollale 不支持 WIDGET_PROP_LAYOUT_W/WIDGET_PROP_LAYOUT_H 属性，因为虚拟高度/宽度本身依赖于 children layout 的结果，children layout 的过程又依赖虚拟高度/宽度，会出现互相依赖。 * 修复 widget_use_style 的问题。 * button 支持 auto_adjust_size。 * 修复不需要刷新也进入 end_frame 的问题（感谢智明提供补丁）

2021/09/02 * 修改 idle 和定时器 id 翻转的问题（感谢智明提供补丁） * 完善 tick 的处理方法（感谢智明提供补丁） * 修改部分时间使用 32 位的问题（感谢智明提供补丁） * 修改资源生成脚本不预先加载字体。

2021/08/30 * 完善 edit_set_text * 增加 wstr_set_with_len * 修复圆角矩形半透重复绘图的问题（感谢智明提供补丁） * 如果 edit 的 keyboard 属性为空字符串，则不弹出软键盘

2021/08/27 * 增加 general_factory。 * 增加 darray_set/darray_replace/darray_sorted_insert。 * 重构 widgets_factory/fscript_register_func，有效降低内存使用。

2021/08/26 * fscript 支持函数定义。 2021/08/25 * 修改 OpenGL 的 lcd 旋转被裁剪的问题（感谢智明提供补丁） * 修复 linux-fb 的 lcd 旋转异常的问题（感谢智明提供补丁） * 修复 ctype 函数处理中文的问题。 * 修复 on_theme_changed（感谢兆坤提供补丁）。 * 修复 scroll_view_set_curr_page（感谢 Soky 智明提供补丁）

2021/08/23 * 修复多次调用 lcd 旋转的功能的问题（感谢智明提供补丁）

2021/08/21 * 修改 lcd_profile 编译问题。

2021/08/20 * 修复 scroll_view 在拖拽时且 scroll_view 里有子控件进行重新布局时，画面不正常问题（感谢兆坤提供补丁）。

2021/08/18 * 修复 label_resize_to_content 导致 confirm/info 等对话框大小计算有误的问题。

2021/08/17 * 修复设置后台窗口焦点导致的问题。 * 完善 slide menu（感谢兆坤提供补丁）。 * 完善 text edit（感谢雨欣提供补丁）。 * 修复 mono 编译和运行错误的问题（感谢智明提供补丁） * 修复 lcd 的脏矩形列表为空时画面不正常的问题（感谢智明提供补丁） * 修复 top 的 UI 的图片超过 overlay 导致在 mono 上面有残留的问题（感谢智明提供补丁） * 修复 Windows 下 send/recv 无法用 errno 判读是否正常的问题。

2021/08/16 * check button 允许使用 radio 属性控制单选多选。 * scroll bar 允许使用 is_mobile 属性控制 mobile/desktop

2021/08/12 * 增加 lcd_set_orientation（感谢智明提供补丁）。

2021/08/11 * 解决使用 self_layout 后不能移动的问题（感谢智明提供补丁） * 修复 lcd_fb_dirty_rects 头文件注释不对的问题（感谢智明提供补丁） * 修复 lcd_sdl 的 lcd 旋转后画面不正常的问题（感谢智明提供补丁） * 修复 lcd 旋转导致脏矩形异常后导致中断的问题（感谢智明提供补丁） * 修复 vgcanvas_asset_manager 的 gtest 失败的问题（感谢智明提供补丁） * 修复其他的 layout 调用 widget_move_resize 函数的问题（感谢智明提供补丁）

2021/08/10 * 修复 list_view 没有滚动条的警告问题（感谢智明提供补丁） * 删除不断打印 relayout 的信息的代码（感谢智明提供补丁） * 给 text_selector 增加可以设置是否修改值的时候启动动画（感谢智明提供补丁） * 修复 vgcanvas_asset_manager 内存泄露的问题（感谢智明提供补丁）

2021/08/06 * 完善 image value。 * 完善 awtk_version.h（感谢智明提供补丁）。 * 修复 vgcanvas_cairo_reset 中设置 global alpha 的问题。

2021/08/05 * 增加 src/platforms/README.md * 增加函数 bitmap_transform

2021/08/04 * 增加函数 combo_box_remove_option。 * 完善 demoui（感谢兆坤提供补丁）。

2021/08/03 * 键盘支持跟随编辑（指定 floating=true 即可） * 更新文档。 * 完善 vpage 事件处理。

2021/08/02 * 公开函数 timer_manager_dispatch。 * 修复 fragment fb 编译问题（感谢智明提供补丁）。

2021/07/30 * 完善 ostream 的 fscript 绑定。 * 完善 pages 和 button group（感谢兆坤提供补丁）。

2021/07/28 * 完善 slide_menu（感谢智明提供补丁）。 * 修改 agge 兼容没有 d3d 会崩溃的问题（感谢智明提供补丁）。 * 完善 slide view 删除当前 view 的处理（感谢兆坤提供补丁）。

2021/07/27 * 裁剪了 assets-1m 的资源（感谢智明提供补丁）。 * 修改 lcd_mem_flush 为按照脏矩形列表来拷贝（感谢智明提供补丁）。

2021/07/26 * 完善脏矩形，以便 2fb 在 swap 的方式也可以支持脏矩形。 * 完善 pages 和 button group，处理为空的情况（感谢兆坤提供补丁）。 * 修复 edit input_type 属性为 int，当 text 长度大于 32 时会有 assert 的问题（感谢兆坤提供补丁）。

2021/07/24 * 完善和重构 slider。

2021/07/23 * 完善 fscript 的 iostream_serial_create。

2021/07/22 * 完善 emitter_disable/emitter_enable 支持嵌套调用。 * 完善 switch（感谢陈谭提供补丁）

2021/07/21 * 修复多个脏矩形时没有修改片段式 Framebuffer 的问题（感谢雨欣提供补丁） * 修复 agge 模式下 widget_take_snapshot_rect 的逻辑错误问题（感谢智明提供补丁）。 * 裁剪了 assets-1m 的资源（因为在 429 上面报 flash 不够大（感谢智明提供补丁））。

2021/07/20 * fscript 修复对负号的处理。 * fscript math 增加 d2r/r2d。 * 完善 slider（感谢兆坤提供补丁） * 完善对话框高亮（感谢兆坤提供补丁） * 修复窗口创建完后的 loading 状态还是 TRUE 的问题（感谢智明提供补丁）

2021/07/19 * fscript 增加 usubstr 函数。

2021/07/17 * 增加 array_clone_and_sort。 * 增加 lcd_is_support_dirty_rect（感谢智明提供补丁） * 用 WITHOUT_WINDOW_ANIMATORS 替代 WITH_WINDOW_ANIMATORS（感谢智明提供补丁）。

2021/07/16 * 增加 fscript str * 增加 字符串扩展模块 * fscript math 增加 atan2/log/is_prime/exp 等函数。 * fscript ext 增加 trim_left/trim_right/ulen/totitle/char_at * 完善 mem_allocator_std 内存统计（感谢 QQ276310465 提供补丁） * fscript array 增加 min/max/avg/sum 等函数。 * 增加了 get_offset 接口以及相关的控件（感谢智明提供补丁） * 修改 lcd_mem 的编译警告问题（感谢智明提供补丁） * 修复兼容以前开启脏矩形机制，解决以前的三 fb 无脏矩形的情况（感谢智明提供补丁） * 修复滚动条在底部时候 layout 会偏移的问题和修复没有 WITH_WIDGET_TYPE_CHECK 宏会导致非 mobile 的滚动条当做 mobile 滚动条的问题（感谢智明提供补丁） * 完善 event source manager（感谢林福提供补丁） * 完善 widget_get，如果类型是 wstr，转换成 str。

2021/07/15 * 完善 widget_factory，允许覆盖之前注册的控件。 * 增加 object_array_sort 及 fscript 的包装 * 增加 object_array_dup 及 fscript 的包装 * fscript ext 增加 index_of/last_index_of/char_at

2021/07/14 * 增加 object_array_shift 及 fscript 的包装 * 增加 object_array_index_of 及 fscript 的包装 * 增加 object_array_last_index_of 及 fscript 的包装 * 增加 object_array_create_with_str 及 fscript 的包装 * 增加 object_array_get_and_remove 及 fscript 的包装 * 增加 array_create_with_repeated_value

2021/07/13 * 修改编译警告（感谢智明提供补丁） * 完善 fscript 文档（感谢攀峰提供补丁） * 修复 fscript returned 没有重置的问题（感谢林福提供补丁）。

2021/07/12 * 完善文档。 * 优化 layout。 * 完善 input_method_default，支持 T9/T9EXT 的默认键盘。 * 修复异步 layout 和同步 invalidate 造成部分控件不刷新的问题。

2021/07/11 * 增加函数 path_extname_is 函数。 * 完善从 zip 文件加载资源的代码、工具和文档。

2021/07/10 * 将 dirty_rects 通过 begin_frame 传递到 canvas 和 lcd。 * 完善 tab_button_group（感谢智明提供补丁） * 修复开启了 WITH_LCD_CLEAR_ALPHA 后使用透明窗口后，会导致刷新部分不正常的问题（感谢智明提供补丁）

2021/07/09 * tokenizer_next_expr_until 添加了对”{}”和”[]”的处理（感谢朝泽提供补丁） * 修复在 SDL 的桌面模式下拉伸窗口不正常的问题（感谢智明提供补丁） * lcd_mem 类增加一个 lcd_mem_init 函数（感谢智明提供补丁）

2021/07/08 * 修复不必要的警告（感谢兆坤提供补丁） * 导出 lcd_get_dirty_rect（感谢智明提供补丁） * 修复限制最高绘图帧率机制的问题（感谢智明提供补丁） * 修改 mledit 输入提示对齐的问题（感谢智明提供补丁）。

2021/07/07 * 窗口完全进入后台时不再绘制。 * 去除因 hscroll_label 重复增加定时器所导致的警告（感谢兆坤提供补丁） * 补充 vpage 在打开页面时的 widget_layout（感谢兆坤提供补丁） * 修复 lcd 的 resize 失败后导致的崩溃问题（感谢智明提供补丁） * 修复限制最高绘图帧率机制的问题（感谢智明提供补丁） * 完善 pthread 实现的 thread 等待时不能及时响应（感谢陈谭提供补丁）。

2021/07/05 * 完善 release 脚本（感谢朝泽提供补丁） * 完善 csv file（感谢雨欣提供补丁） * 修复圆角矩形编译警告（感谢智明提供补丁）

2021/07/02 * 修复延迟动画刷新的问题（感谢智明提供补丁） * 修复 agge 的 ras 初始化的值不正常的问题（感谢智明提供补丁） * 修复 linux-fb 无法修改 lcd 分辨率问题（感谢智明提供补丁）

2021/07/01 * 增加 rectf_t。 * 完善 switch。 * 修复部分源文件的 UTF-8 BOM 标志（感谢陈谭提供补丁）。 * 完善 canvas。如果图片缩放，而且只是绘制部分，为了避免取整出现坐标异位，使用 vgcanvas 绘制。

2021/06/30 * 将 fps 计算放到 fps.h 中。 * 还原 vg 资源管理器的宏 （感谢智明提供补丁） * 增加 vgcanvas_set_fill_gradient/vgcanvas_set_fill_gradient。

2021/06/29 * 增加 vgcanvas_clip_path 和基于 cairo 的实现。

2021/06/28 * 增加函数 matrix_transform_pointf。 * 增加一个生成 object 的框架代码的小工具。 * 完善编辑脚本，APP 支持输出到不同目录（感谢 ufbycd 提供补丁）。

2021/06/27 * 修复输入法软键盘判断坐标的问题。

2021/06/26 * 完善 edit * 完善 offline canvas（感谢智明提供补丁） * 修改 ui loader 的内存问题（感谢朱俊提供补丁） * 增加 window_manager_set_max_fps 用于限制最大帧率。

2021/06/25 * 完善编译脚步（感谢雨欣提供补丁）

2021/06/24 * 支持多个脏矩形。 * gauge_pointer 支持精确脏矩形（可大幅提高 gauge 界面的流畅度）。 * 页面切换速度比动画速度快时导致显示不正常问题（感谢兆坤提供补丁）。 * 消除 ui_loader_load edit、mledit 所产生的警告信息（感谢兆坤提供补丁）。

2021/06/23 * 完善 awtk_config.py（感谢朝泽提供补丁） * 完善 awtk_main.inc（感谢朝泽提供补丁）

2021/06/19 * 完善 vgcanvas_asset_manager（感谢智明提供补丁）

2021/06/18 * 把截屏函数和离线画布都改用多 vg 的模式（感谢智明提供补丁） * 增加 vgcanvas_asset_manager 的机制，来保证不同 vg 公用同一份资源时候不会出现问题（感谢智明提供补丁）

2021/06/17 * 增加 rect_has_intersect。 * 完善 widget_paint_with_clip。 * 完善 awtk_main.inc（感谢朝泽提供补丁） * 修改控件动画的刷新时间和最高帧率绑定一起（感谢智明提供补丁） * 增加 lcd 的接口并且完善其他的类型 lcd 的接口（感谢智明提供补丁） * 修复圆角矩形依赖宏来判断 lcd 类型来打点的问题（感谢智明提供补丁） * 增加加载没有文件后缀的图片资源（感谢智明提供补丁） * 完善 keyboard 对 hard_key 的支持。

2021/06/16 * 支持 极简键盘 (3 键键盘、5 键键盘和旋转按钮） * edit/mledit 不处理 escape 和功能键。 * 修复拼音输入法 assert: https://github.com/zlgopen/awtk/issues/563

2021/06/15 * edit 不再用左右键切换焦点。 * 完善 is_same_col/is_same_row 的算法。 * 完善 font manager 字体卸载（感谢智明提供补丁） * 完善 canvas_draw_text_bidi_in_rect 对空行的处理。

2021/06/11 * 修改一些编译警告。 * 增加文档 如何使用 keil 的 AC6 工具链编译

2021/06/11 * 完善焦点处理。 * pages 支持 clip。 * 完善 edit 对自动测试的支持。 * 重构 clip view，将 clip 函数抽取出来方便重用。 * 增加 data_time_format 注释，导出相关函数（感谢雨欣提供补丁） * 修复 widget_set_style_color 函数的说明错误问题（感谢智明提供补丁） * 增加 text_selector 控件设置 value 会触发动画滚动效果（感谢智明提供补丁） * 修复 label 显示多行阿拉伯文本的问题。

2021/06/10 * 完善编辑器对左右键的处理。 * 修复 vpage 中注释的问题（感谢朝泽提供补丁）
* 完善 widget_on_keydown，优先处理焦点切换按钮。

2021/06/09 * 重构 pages。 * 修复 ui_builder 不能重入的问题。 * 增加 window_manager_set_ignore_input_events。 * 增加 vpage 扩展控件（配合 pages 控件使用，可以自动加载/卸载页面，并提供入场/出场动画）

2021/06/08 * 完善编译脚本（感谢兆坤提供补丁） * 完善 slide menu，支持用左右键切换。 * 修复嵌入式系统硬键盘无法输入的问题。 * 完善 slide view，垂直 slide view 用上下键切换页面。 * 完善 slide view，处理滑动太快，中间没有 move 事件的问题。 * 修复 hscrollable，点击边缘控件没有滚动效果的问题（感谢智明提供补丁）

2021/06/07 * 重构和完善文档。 * 完善 mmap.c（感谢陈谭提供补丁） * 完善 release 脚本拷贝自定义控件的动态库。 * self layout default 的百分比使用浮点数。 * 完善 file browser view 的 value changed 事件（感谢智明提供补丁）

2021/06/06 * 重构 widget 部分代码。

2021/06/05 * 完善 switch 控件。修复滑动太快，pointer down 和 pointer up 之间没有 move 事件的问题。

2021/06/04 * scroll bar mobile 支持 auto_hide 属性。 * 完善 scroll bar mobile 支持圆角。 * 修复 hscroll_label 在一开始未显示的 page 中无法自动滚动的问题（感谢智明提供补丁）

2021/06/03 * 完善 scroll bar。 * 完善 menu layout。 * 修改 ubjson_writer_write_key_len 的问题（感谢攀峰提供补丁）。

2021/06/02 * 优化 widget_set_visible（感谢智明提供补丁） * 限制在 SDL 的 pc 模拟下才可以调用 msize（感谢智明提供补丁） * 增加离线画布在 linux-fb 下支持 24 位色的功能（感谢智明提供补丁） * 修改当内存小于 32kb 则不分配内存池，如果内存很少的话，其实没有必要开辟一块内存池了，因为这个时候内存池反而占用了一大块的无法使用的内存碎片了（感谢智明提供补丁）。 * 去掉不必要的运行时警告信息。

2021/06/01 * 修复 text selector 通过 widget_get_text 返回 NULL 的问题。 * 完善控件 EVT_VALUE_CHANGED/EVT_VALUE_WILL_CHANGE 事件的文档。 * 完善 slider，支持点击修改。

2021/05/31 * 完善 vgcanvas_null/vgcanvas_nanovg_soft 的编译宏，方便制作 keil 的 pack（感谢静儒提供补丁）

2021/05/28 * 增加 log_dummy 函数，方便在没有真正的 log 函数时设置断点调试。 * 由于 mem.c 中导出了 malloc 等函数，没有必要重载 new/delete 等操作符，所以去掉 misc/new.cpp|.hpp 中的代码，但为了兼容保留文件。 * 完善文档。

2021/05/28 * 修改 scroll view/scroll bar/text selector/switch/slide view，在不启用控件动画时也可以使用。 * 增加 EXPORT_STD_MALLOC，用于在没有定义 HAS_STD_MALLOC 时，是否将 AWTK 内存分配函数封装成标准 C 的内存分配函数。 * 修复在 win7 平台下由于 SDL_Init 和 SDL_OpenAudioDevice 不在同一线程中调用导致音频设备打开失败的问题。（感谢兆坤提供补丁）

2021/05/27 * 完善 std mem alloctor，增加内存使用统计。 * 完善自定义控件文档。

2021/05/26 * 修复 gauge_pointer 控件旋转角度为浮点型（感谢智明提供补丁）。 * 增加宏 WITHOUT_WINDOW_ANIMATOR_CACHE 用于控制窗口动画是否使用缓存。如果内存紧缺，又希望启用窗口动画，可以打开本宏。

2021/05/25 * 完善 edit。 * 增加 ui_feedback_deinit。

2021/05/23 * style 支持 feedback/focusable。

2021/05/22 * 完善图片解码器，优先使用用户自定义的解码器（感谢智明提供补丁）。 * stb 支持外部硬件加速 yuv 转 rgb 的宏和函数（感谢智明提供补丁）。

2021/05/21 * 窗口增加属性 strongly_focus。点击非 focusable 控件时，用于控制是否让当前焦点控件失去焦点。

2021/05/20 * Window 支持 EVT_PAINT 事件。 * 完善 widget_to_xml。 * 完善后台线程 OOM 的处理和测试。

2021/05/19 * 增加宏 NATIVE_WINDOW_NOT_RESIZABLE，用于禁止用户调整 desktop 应用程序的窗口大小。 * 修复设置屏保时间为 0 时候不能马上退出屏保的问题（感谢智明提供补丁）

2021/05/18 * 完善 image 事件处理和测试。 * 增加函数 widget_get_focused_widget。 * 为 AWTK_LITE 优化大小（感谢智明提供补丁） * 增加禁止在 mmap 模式下增加外部 include 的资源（感谢智明提供补丁） * 完善 gif，增加 gif_image_play/gif_image_stop/gif_image_pause。

2021/05/17 * 完善文档。 * 增加 widget_auto_scale_children。 * 将 widget_on_pointer_xxx_children 公开。 * 为 AWTK_LITE 优化大小（感谢智明提供补丁）

2021/05/16 * 完善 layout 处理流程。 * 重构封装获取 lcd 大小的代码。

2021/05/15 * 完善圆角矩形（感谢智明提供补丁） * 修改 label 高度的限制条件。 * 完善 widget_set_need_relayout。 * 增加函数 event_clone * 增加函数 widget_dispatch_async * 异步分发 space/return 触发的 click 事件。

2021/05/14 * switch 支持 click 事件，支持 space/return 触发。 * 修复圆角矩形的多次半透叠加后出现颜色不对的问题（感谢智明提供补丁）

2021/05/13 * 完善和优化 layout 处理流程。 * 完善 layout 中 auto adjust size 的处理。 * 完善 event_source_manager_default_dispatch_fds（感谢林福提供补丁）。 * 完善 object_compositor_on_destroy（感谢 zhujun19790920 提供补丁）。

2021/05/12 * 完善 mledit（感谢兆坤提供补丁） * 针对 AWTK_LITE 优化 canvas.c。 * 完善 popup，使用 widget_add_timer 代替 timer_add，以便窗口关闭时销毁 timer。

2021/05/11 * 完善 dialog_helper。 * 完善 WINDOW_CLOSABLE_CONFIRM 的处理。 * 增加 widget_back/widget_back_to_home。 * 完善定时关闭的 popup: 有用户操作后重新开始计时。 * 为了避免歧义，将 styles 资源名称由“主题”改为“窗体样式”（感谢雨欣提供补丁）。

2021/05/08 * 重构 popup 和相关测试。

2021/05/07 * 完善 mledit（感谢兆坤提供补丁） * 重构 button 和相关测试。 * 重构 check_button 和相关测试。

2021/05/06 * 完善 combo_box/combo_box_ex。

2021/04/30 * image value 支持支持水平和垂直对齐。 * image value 支持 scale/scale_w/scale_h/scale_auto * image value 支持 margin_left/margin_right/margin_top/margin_bottom。 * 完善 mledit/line_number（感谢兆坤提供补丁）

2021/04/29 * 重构内置对话框的代码。 * 重构 label 去掉不需要的代码。

2021/04/28 * 重构 label 并完善对 margin 的支持。 * 完善 Windows 下应用程序图标的支持（感谢陈谭提供补丁）。

2021/04/27 * 完善 label 对 auto adjust size 的处理。 * 完善 line_parser_next，让空格在行尾。 * 完善 label_get_text_line_max_w，使用 line_parser 确保使用同一种算法换行。 * 修复 windows 下，wstat 无法处理”c:”之类的路径的问题。 * 修复输入法没有键盘名字导致拷贝报错 （感谢智明提供补丁） * 修复全屏 lcd 旋转 270 的时候目标贴图的 buffer 溢出导致崩溃的问题 （感谢智明提供补丁）

2021/04/26 * 完善 darray（感谢兆坤提供补丁）

2021/04/25 * 完善内存管理器（感谢王程提供补丁）

2021/04/24 * 完善内存管理器和测试程序。

2021/04/22 * 修改内存泄漏问题。 * 内存管理器支持管理多块不连续的内存。 * 增加网络接口的命令行工具（感谢忠吉提供）。

2021/04/20 * 完善 progress cirle demo（感谢雨欣提供补丁） * 添加 获取光标位置 接口（感谢兆坤提供补丁） * 添加 选中一段文本 接口 （感谢兆坤提供补丁） * 添加 获取当前选中的文本 接口（感谢兆坤提供补丁） * 添加 滚动到指定偏移位置 接口（感谢兆坤提供补丁）

2021/04/19 * 修复 bitmap_clone。

2021/04/18 * 增加函数 fscript_syntax_check（感谢福明提供补丁）

2021/04/17 * 完善编译脚本（感谢朝泽提供补丁）。

2021/04/15 * 文件浏览器增加 top_dir 属性用来限制用户 up 到更上层目录。

2021/04/13 * 增加函数 data_writer_flush。

2021/04/11 * 完善 fs_create_dir_r。 * 快捷键格式修改为用下划线连接，如 ctrl_s。（感谢福明提供补丁）

2021/04/10 * 去掉 value_t 对齐的限制。

2021/04/09 * 修复 combox 一开始没有 text 的时候不显示选项的问题（感谢智明提供补丁）

2021/04/08 * 修复 mutex_nest 中的 BUG。 * mutable_image 增加 mutable_image_set_need_redraw。

2021/04/07 * 完善控件 API 注释中的事件（感谢培煌提供补丁）。 * gauge 拼写错误为 guage，修改成正确拼写。XML 和 API 做了兼容处理，两种写法都可以，新写的代码请用正确的拼写。

2021/04/06 * 增加 idle_queue_ex/timer_queue_ex 方便脚本绑定时使用。 * 增加 hscroll_label 检测焦点状态下长度变化重新播放动画的机制（感谢智明提供补丁）

2021/04/04 * 增加 gui_app_start_ex，方便嵌入式系统指定资源路径。 * 增加 WITH_MBEDTLS 控制是否编译 stream_mbedtls。

2021/04/03 * 修复 T9 测试失败的问题（感谢智明提供补丁） * 完善 image animation（感谢 hantianheng 提供补丁，感谢智明验证）

2021/04/01 * 修复 T9 编译问题（感谢智明提供补丁）

2021/03/29 * 修复 slider 控件的 bar_size 属性过大画面不正常的问题（感谢智明提供补丁） * 修改 mutable_image 支持在 desiger 界面上面不刷新的功能（感谢智明提供补丁） * 修复 WHEEL_BEFORE_CHILDREN 事件无法通过 wheel_event_cast 转换的问题（感谢福明提供补丁） * 修改调用 edit_set_text 等函数后没有重绘的问题。

2021/03/28 * 修改一些注释错误。 * 修改部分代码，方便在 Go 语言中调用 (Go 不支持位域，无法访问 union 成员，type 是关键字）。

2021/03/26 * 完善文档 how_to_use_action_text.md。

2021/03/25 * 合并 mbedtls 分支，增加基于 mbedtls 的 io stream * 增加文档 优化 freetype 解析矢量字体的显示效果 （感谢雨欣提供） * 增加文档 优化 stb_truetype 在 mono 模式下的字体显示效果 （感谢雨欣提供）

2021/03/24 * 修复 file_browser_view 控件返回上级目录时将文件夹显示为文件的问题（感谢雨欣提供补丁） * 优化 freetype 获取灰度图字模型的效果，添加 stb 二值化字模的功能并在 mono 模式下默认使用 stb（感谢雨欣提供补丁）

2021/03/19 * 修复 list view layout 内存泄漏（感谢兆坤提供补丁） * 增加 tk_utf8_from_utf16_ex 和 wstr_set_utf8_with_len。

2021/03/18 * 修复在 linux64 位平台下，因为 long 和 int 长度不同 而导致字符串转整形错误的问题（感谢兆坤提供补丁）

2021/03/17 * 完善 linux-fb 的 egl 适配（感谢智明提供补丁） * 增加文档 在 windows 下使用 gcc 编译 AWTK * 为 progress_bar 控件和 progress_circle 控件添加 format 属性，方便用户可以自行格式化显示文本（感谢雨欣提供补丁）

2021/03/16 * hal 网络接口增加 windows 实现（感谢忠吉提供）

2021/03/14 * 增加 HTML View

2021/03/13 * 修复 label_get_text_line_max_w 接口在 tr_text 属性为空调用失败的问题（感谢雨欣提供补丁）

2021/03/10 * 增加输入类型 INPUT_ASCII，用于输入纯英文字符。 * 修复 font_manager_unload_font 在 OpenGL 模式下不能卸载字体的问题。 * 修复 dialog_info 等内置对话框显示翻译文本时 label 大小异常的问题（感谢雨欣提供补丁）

2021/03/07 * 用 WITH_SDL 代替 SDL2，没有必要同时使用两个宏。 * 完善 window_manager_back_to_home_async，处理遇到模态对话框时触发 assert 的问题。 * 修复 window_manager_default vtable 初始化顺序。

2021/03/06 * 完善 build.json，支持多主题。 * 完善编译脚本，支持 rpath。

2021/03/04 * 修复在 mac 上面的 OpenGL 模式下 lcd 旋转窗口动画的问题 （感谢智明提供补丁） * 修改 list_view 设置 scroll_bar_mobile 的虚拟高最低为 widget 高度（感谢智明提供补丁） * 增加右键和中键的触发事件（在 demoui 中加入了点击中键会打印信息出来测试，右键的话还会触发 EVT_CONTEXT_MENU 事件，中键会触发 EVT_KEY_UP/DOWN 事件） （感谢智明提供补丁） * 修改 stb_truetype 缓冲机制避免由于内存不足导致程序崩溃的现象并添加相关文档（感谢雨欣提供补丁） * 修复 demoui 在 VS 中编译报错的问题（感谢雨欣提供补丁）

2021/03/03 * 修复 slide indicator 没有更新的问题（感谢智明提供补丁）

2021/03/02 * 删除将 QT XML 生成 AWTK UI 的转换工具（感谢陈谭提供补丁）。 * 修复 widget_clone 处理 tr_text 的 BUG（感谢网友 Eagle 提供补丁）。 * 增加函数 fs_copy_file、fs_copy_dir 和 dir_exist。

2021/03/01 * 修复 slide_view 通过 indicator 快速切换 page 的时候导致有概 率出现播放动画异常（感谢智明提供补丁） * 修复 text_selector 在播放动画的时候调用 text_selector_reset_options 会导致崩溃的问题（感谢智明提供补丁）

2021/02/27 * 修复缺省输入法改用 CLOSE 事件造成崩溃的问题（感谢智明提供补丁）

2021/02/26 * 修复 SD L 内存泄露的问题（感谢智明提供补丁） * 修复 csv_row_to_str（感谢林福提供补丁） * 修改退出 gpinyin 的时候释放缓存句柄，以免出现内存泄露的问题（感谢智明提供补丁） * 修复找不到字库导致使用非默认的字库显示的问题，统一修了查找字库的逻辑为先找指定的字库，如果找不到就找默认的字库，如果都找不到就返回 NULL，字体就不显示了。（感谢智明提供补丁）

2021/02/25 * 修改 TK_IM_MAX_CANDIDATE_CHARS 为 0 的时候候选字长度才动态扩张的功能（发现之前的是默认候选字长度动态扩张的，应该改为不动态扩张才对，需要设置 TK_IM_MAX_CANDIDATE_CHARS 为 0 才动态扩张的）（感谢智明提供补丁） * 重新实现 window_manager_close_all 允许窗口触发事件，同时避免在窗口关闭事件中关闭其它窗口的问题。 * 修改默认输入法，在 keyboard 关闭时清除状态而不是销毁的时候，因为 EVT_DESTROY 可能会异步执行。 * 修改 system_bar 在没有顶层窗口时的警告。 * 修复生成 dark 主题资源的 json 文件（感谢智明提供补丁） * 修复内存泄露的问题（感谢智明提供补丁）

2021/02/24 * 修复更新风格类型失败的问题（感谢智明提供补丁） * scripts.app_helper 增加 use_std_cxx 指定 c++编译器的版本。 * 修复 widget_add_idle 函数和 widget_add_time 函数内存泄露的问题和修复多个控件的 idle 上下文 widget 被释放的问题（感谢智明提供补丁）。
* 修复调用退出程序时候调用 window_manager_close_all 函数无法触发 keyboard 销毁事件无法清除 idle 回调函数导致 idle 回调中出现野指针的问题（感谢智明提供补丁）

2021/02/23 * 更新文档。 * 增加 tk_expr_eval。 * 修改 csv_row_to_str 行尾多分隔符的问题（感谢林福提供）。 * 增加 xml 的 CDATA 的值为空的语法支持（感谢智明提供补丁）。 * combox 修改大小后导致字体偏移和修改了 tips_text 默认左对齐（感谢智明提供补丁）。 * 增加 TK_DEFAULT_WAIT_TIME，用来控制 event source manager 中 select 最长等待时间。

2021/02/22 * 修改 stm32 上编译警告。 * 修复 list_view_h 空子集的时候崩溃的问（感谢智明提供补丁）。

2021/02/20 * 完善编译脚本（感谢雨欣提供补丁） * 修复 ini 的值为空的问题。 * fscript 增加 one_of 函数。 * 修复 slide_view 保存焦点不正常的问题以及完善和统一 slide_view 和 pages 控件的保存焦点的代码（感谢智明提供补丁）。 * 修复创建 dialog 的时候没有根据 label 的风格来计算大小的导致显示不正常问题（感谢智明提供补丁）。 * 修复在高亮背景的对话框中打开 popup 窗口导致高亮失效的问题以及修复了在对话框中打开另外的窗口后切换到指定窗口导致对话框截获 system_bar 的消息问题（感谢智明提供补丁）。 * 修复 awtk 搜索目录和生成不同主题的时候生成的资源不正确的问题（感谢智明提供补丁）

2021/02/19 * fscript 支持 return 语句。 * fscript 支持 else if 语句。

2021/02/05 * 修改 awtk-web 编译错误（感谢智明提供补丁）

2021/02/04 * 重构 pages（感谢智明提供补丁） * 增加函数 str_decode_hex （感谢林福提供）。 * 增加函数 window_set_auto_scale_children。 * 重命名 auto_scale_xxx 为 auto_scale_children_xxx。 * 增加 network_interface 接口及 linux 平台实现（感谢国文提供）。 * 增加 《如何根据实际分辨率自动调整窗口中子控件的位置大小》

2021/02/03 * 修复缺少 SDL 线程函数的声明的问题（感谢智明提供补丁） * 修复改变 lcd 的大小后 vg 的裁剪区没有修改的问题（感谢智明提供补丁） * 修复 digit_clock 控件在后台窗口无法刷新的问题（感谢雨欣提供补丁）。 * 修复 page 控件套 pages 控件的时候释放子 pages 控件导致父 pages 控件的 target 为野指针的问题（感谢智明提供补丁） * 窗口增加 design_w/design_h/auto_scale_x/auto_scale_y/auto_scale_w/auto_scale_h 等参数。

2021/02/02 * 修改注释错误（感谢网友 QQ631757707 提供补丁） * 增加 widget_get_style_type 和 style_update_state（感谢智明提供补丁）

2021/02/01 * 完善文档（感谢忠吉提供补丁）。 * 修复 theme_t 重定义的问题（感谢雨欣提供补丁）。 * 修复打包主题工具打包字符串的时候偏移值出错的问题（感谢智明提供补丁）

2021/01/31 * 增加文档 应用程序的类型

2021/01/29 * 修改 scroll view 注释错误（感谢朝泽提供补丁） * 修改 mmap 注释错误（感谢网友 (QQ631757707) 提供补丁） * 支持 Ubuntu 下使用输入法（感谢智明提供补丁） * 修复风格数据为负数的时候出现的 bug（感谢智明提供补丁） * 重构了 theme 类统一操作风格数据的方法（感谢智明提供补丁） * 修复 pages 控件设置焦点后马上被释放导致 idle 空对象问题（感谢智明提供补丁）

2021/01/28 * 修改 pages_restore_target 后马上是否焦点对象的问题（感谢智明提供补丁） * 修改 pages 控件当 on_target_destroy 和 on_view_destroy 上下文被释放的时候导致出错的问题（感谢智明提供补丁）

2021/01/27 * 为 object prop 增加了一些包装函数。

2021/01/26 * 修改注释错误（感谢攀峰提供补丁）。 * 增加支持直接使用 OpenGL API 的机制（感谢智明提供补丁） * 修复输入框输入大写的时候没有找到 key_pressed_info 类型而报错的问题（感谢智明提供补丁） * 修复 awtk 源码在、windows\ 平台的某些 PC 上编译 SDL 库出现符号重复定义的问题（感谢雨欣提供补丁）。
* 修复 scroll_view 的 snap_to_page 删除 item 不更新页信息问题和增加了是否每次翻一页属性 （感谢智明提供补丁）

2021/01/25 * 修复 list_view_h 中的滑动视图设置 children_layout 后无法无法正常滑动的问题（感谢雨欣提供补丁）。 * 感谢智明提供以下补丁： * 重构 list_view 的布局代码 * 完善原来的 auto_hide_scroll_bar 属性的显示效果 * 完善支持多个列时候，每一项高度不一样显示不正常的问题 * 修复 widget_ensure_visible_in_scroll_view 滚动不正常的问题。 * 增加 floating_scroll_bar 属性，list_view 支持滚动条悬浮效果（类似 vscode 中的滚动条效果，鼠标悬停在哪个 list_view 上面，鼠标滚动既可以滚动 list_view 不需要点击鼠标确定焦点） * scroll_view 增加 recursive 属性可以遍历子控后计算最终的虚拟宽高的功能，由于 scroll_view 的孙控件不在子控件的区域中也可以通过滚动条找到其孙控件。

2021/01/24 * 修改 android 全屏的问题。

2021/01/22 * 修改 pages 崩溃的问题。

2021/01/21 * 完善文档。 * 部分文件增加 UTF8-BOM（感谢陈谭提供补丁）。 * 将销毁自定义属性代码放到 on_destroy 回调函数之后。 * 增加 csv file，请参考 csv file。 * text_selector 支持同时修改选项的步长和格式 （感谢智明提供补丁）

2021/01/20 * 增加函数 slist_insert。 * 增加函数 darray_insert。 * 修复 page 的 default_focused_child 没效果的问题（感谢智明提供补丁） * 由于 Ubuntu 默认下不支持 c++11，所以编译 gtest 编译出错的问题（感谢智明提供补丁） * 修复 combox 控件设置 open_window 属性在弹出 popup 窗体后改变整个程序窗口的大小后显示不正常的问题（感谢智明提供补丁）

2021/01/19 * 修改 label 的歧义注释（感谢智明提供补丁） * 新增 widget_load_asset_ex 函数（感谢智明提供补丁） * 修复 scroll_view 控件的 snap_to_page 滚动不正常的问题（感谢智明提供补丁）

2021/01/18 * 修复色块控件不能支持圆角矩形的问题（感谢智明提供补丁） * 支持平头线帽和增加圆形进度条支持平头线帽（感谢智明提供补丁） * 修改统一 rich_text 控件的 margin 属性优先选择风格的问题（感谢智明提供补丁） * 修复 color_picker 控件由于 rgb 精度不够导致 slider 控件移动的问题（感谢智明提供补丁）

2021/01/17 * 完善 json 对空数组的处理。

2021/01/15 * 增加 data_url_copy。 * 修改 tools 中拼写错误 (floder->folder)。感谢 suzp1984 提供补丁。

2021/01/14 * 增加 app_conf_reset 用于恢复出厂设置。 * 增加 《TCP/UDP 流扩展模块》 * 增加 《文件流扩展模块》 * 增加 《串口流扩展模块》 * 增加 《动态数组扩展模块》 * 增加 《ostream 扩展模块》 * 增加 《typed array 扩展模块》 * 增加 《写缓冲区扩展模块》 * 增加 《读缓冲区扩展模块》 * 修复 combox 控件的 gtest 的错误（感谢智明提供补丁） * 修复 children_layouter_default 计算偏移出现负数导致数据溢出的问题（感谢智明提供补丁） * 修复 edit 控件初始化的设置 text 的时候触发 cancelable 属性的消息事件以及修复 edit 控件的步长不受到 ui 的定义属性的位置影响（感谢智明提供补丁）

2021/01/13 * 完善 fscript.md。 * 完善 api 注释（感谢福明提供补丁） * 增加 《大端小端扩展模块》 * 增加 《JSON 扩展模块》 * 增加 《文件系统扩展模块》 * 增加 《日期和时间扩展模块》 * 增加 《读缓冲区扩展模块》 * 增加 《istream 扩展模块》 * 修复 tkc/event.c/event.h 中的错误（感谢忠吉提供补丁） * 修复 text_selector 控件空选项时候选值出错问题（感谢智明提供补丁） * edit 控件的 text 值设置为错误的值时没有正确显示 error 状态和一开始 xml 上面设置错误值没有正确显示 error 状态（感谢智明提供补丁） * 修改 edit 和 mledit 的边距属性以及优化了这两个控件的结构体布局（感谢智明提供补丁） * 修改统一 tr_text 由 widget_re_translate_text 函数翻译（感谢智明提供补丁）

2021/01/12 * 增加函数 tk_atoul * 完善 widget_exec_code * fscript widget 增加 send_key。 * fscript 增加 eval 和 widget_eval。 * 修复 agge 初始化裁剪区宽高默认为-1 的问题（感谢智明提供补丁） * 修改 resgen 工具生成空文件的资源失败的输出信息（感谢雨欣提供补丁）

2021/01/11 * 更新文档。 * 修复 ios 编译问题。 * 增加 value 扩展函数 * 增加 object 扩展函数 * 增加 app_conf 扩展函数 * 增加 CRC 扩展函数 * 修改提示信息支持修改 tips_text_color 风格和多行显示（感谢智明提供补丁） * 增加通过风格来控制 scroll_bar 控件无上下按钮的模式（感谢智明提供补丁） * 增加圆形进度条增加圆形底环效果（感谢智明提供补丁）

2021/01/10 * 增加 《fscript widget 扩展函数》 * 用 valgrind 检查内存问题并修改发现的问题。

2021/01/09 * 将基本的 widget 函数包装成 fscript 函数。 * 支持用 fscript 写简单的事件处理函数。

2021/01/08 * 完善 typed_array * 完善 object_array * 增加 object_date_time。 * 完善 fscript 和 fscript_ext。 * 增加 date_time_set_xxx 系列函数。 * 将 date_time/object_array 包装成 fscript 的函数。 * 完善 object_default，支持通过。访问子对象的属性。 * 修复 xml_parser 中的注释错误（感谢忠吉提供补丁）。 * 修复 widget_const 中的注释错误（感谢福明提供补丁）。 * 修复第一次打开软键盘输入单个字符无候选字的问题（感谢雨欣提供补丁）。

2021/01/07 * 完善 fscript 和 fscript_ext。 * 增加函数 date_time_to_time。 * 更新《生态共建计划》文档（感谢陈谭提供补丁） * 将 fs/bits/app_conf/json/ubjson 包装成 fscript 的函数。

2021/01/06 * 完善 fscript 和 fscript_ext。 * 将 istream/ostream/iostream 包装成 fscript 的函数。 * 将 tcp/udp/serial 包装成 fscript 的函数。

2021/01/05 * 完善 fscript 和 fscript_ext。 * 支持修改输入候选字的个数或者候选字个数自动扩展功能（感谢智明提供补丁） * 修复 text_selector 控件循环一圈后头二项的序号出错的问题（感谢智明提供补丁） * 增加线程通用优先级枚举和转换函数以及修改了线程池支持修改堆栈等功能（感谢智明提供补丁）

2021/01/04 * 完善 value_str_ex。 * fscript 增加 assert 函数。 * 完善 xml builder 的文档。 * 修复 crc32 中的问题，并增加 api 文档。 * 将 crc/endian 相关函数包装到 fscript。 * 将 wbuffer/rbuffer 相关函数包装到 fscript。 * 完善《如何用 valgrind 查找内存相关》（感谢忠吉发现问题）

2021/01/03 * 增加 typed_array。 * 将 object 包装成 fscript。 * 增加函数 value_type_size。 * 将 typed_array 包装成 fscript。 * rbuffer 包装成对象，方便生命周期管理。 * wbuffer 包装成对象，方便生命周期管理。 * typed_array 包装成对象，方便生命周期管理。 * fscript 中的数学函数移到 fscript_math 中，作为可选组件。

2021/01/02 * fscript 支持 break/continue。

2021/01/01 * fscript 支持类似 C 语言的 if/while 语句。 * 完善 fscript 错误处理。

2020/12/31 * 完善串口流 iostream serial。 * 完善《AWTK 是如何保证代码质量的》（感谢忠吉发现问题） * 修复 agge 的裁剪区宽或者高为 0 的时候裁剪区无效的问题（感谢智明提供补丁） * 修复圆角矩形有直角和圆角共存同时圆角半径大于宽度或者高度后画边显示不完整（感谢智明提供补丁） * rich_text 控件在没有设置字体时，修改字体颜色不会生效问题（感谢福明提供补丁） * image_value 控件在设置数值时由于类型转换导致显示的数据不正确的问题（感谢福明提供补丁）

2020/12/30 * 修复 widget_set_as_key_target 导致 tab 控件焦点的问题。 * 修改 edit 设置焦点后没有更新 style 的问题。 * 增加 《编写跨平台的代码》

2020/12/29 * 增加 tk_dl_error * 修复窗口动画百分比大于 1 或者小于 0 时候导致崩溃的问题（感谢智明提供补丁）

2020/12/28 * 增加函数 str_encode_hex。

2020/12/27 * 完善编译脚本，自动生成 idl/def 文件。 * 修改 TK_IM_MAX_CANDIDATE_CHARS 偏小，导致输入法部分汉字无法输入的问题（感谢智明提供补丁）

2020/12/26 * 完善 soft_blend_image，在定义了 LCD_BGR565_LITE 时仍然支持 BGRA8888 格式。

2020/12/25 * 增加 url 解析器 (url_t)。 * 修复 infer 发现的警告（感谢智明提供补丁） * 修复圆角矩形缺失边的时候少了一个像素点（感谢智明提供补丁） * 修复生成 ui 资源时，如果资源名称存在大写，被替换成小写的问题（感谢培煌提供补丁）。 * 修复 scroll_view_set_prop 获取 SCROLL_VIEW_SNAP_TO_PAGE 属性的类型错误（感谢福明提供补丁） 。

2020/12/24 * 完善多点手势识别算法（感谢智明提供补丁） * 修复 data_reader_mem 在 Windows 下编译不过的问题。

2020/12/23 * 完善文档。 * 增加 data_reader_mem。 * 增加 data_writer_wbuffer。 * 增加 conf_ini_create。 * 增加 conf_json_create。 * 增加 conf_ubjson_create。

2020/12/22 * 增加 FLOW 资源类型。 * 增加函数 tk_strncpy_s。 * data_reader_asset 支持除 data 之外的其它资源类型。 * 修复圆角矩形 agge 填充下边的角的时候没有复位的问题（感谢智明提供补丁） * 修复加载 UI 比字库资源要早导致 UI 显示不正常的问题（感谢智明提供补丁） * 修复 text_selector 控件在高度无法整除显示个数后导致偏移不正常的问题（感谢智明提供补丁）

2020/12/21 * 增加 slide_view_set_active_ex 以控制是否启用动画。 * slide_view_set_active 默认启用动画。 * 修复 T9 软键盘错位的问题。

2020/12/18 * 增加函数 fs_get_temp_path、fs_remove_dir_r、fs_create_dir_r 和 fs_change_dir。 * 修改 date_time_get_wday 的 BUG（感谢忠吉发现问题）

2020/12/17 * fscript 字符串支持换行符。 * 完善 text selector 的注释（感谢福明提供补丁） * 修复强制退出的时候释放部分窗口没有释放的问题 （感谢智明提供补丁） * 修复圆角矩形边框类型为上下左右的时候显示不正常（感谢智明提供补丁）

2020/12/16 * 完善 hscroll_label，点击时取消暂停。

2020/12/15 * 修复 slider 的 step 浮点数会退化为整数的问题（感谢智明提供补丁） * 修复 font_manager 增加了消息事件后导致内存泄漏（感谢智明提供补丁） * 移除多点触控消息类型的 touch_id 和 fingers 成员变量（感谢智明提供补丁）

2020/12/14 * overlay 窗口支持 always_on_top 属性。 * 完善多少触摸手势算法注释（感谢智明提供补丁） * how_to_use_multi_gesture 文档（感谢智明提供补丁） * 增加资源管理器的消息机制和修改字库管理器接收资源管理器的消息（感谢智明提供补丁）

2020/12/12 * 在支持 mmap/FileMapping 的系统，优先使用 mmap 加载大资源。

2020/12/11 * 增加 mmap。 * 完善测试（感谢智明提供补丁）。 * 增加多点手势算法（感谢智明提供补丁） * 增加函数 fs_build_user_storage_file_name。 * 水平视图支持按页滚动，请参考 design/default/ui/list_view_h1.xml （感谢智明提供补丁）

2020/12/10 * 完善 fscript，增加函数 seq。 * 增加函数 fs_file_read_line。 * 优化融合算法针对目标位图为非 cache 的情况（感谢智明提供补丁） * 修改窗口设置字体管理器和图片管理器不正常的问题（感谢智明提供补丁） * 修复 slide_indicator 改变大小后无法刷新点的位置和清除点区域列表的问题（感谢智明提供补丁）

2020/12/07 * 增加宏说明文档（感谢智明提供补丁） * 进度条增加 reverse 属性，用于反向显示进度。 * 修复 theme_gen 可能存在没有初始化变量的问题（感谢朝泽提供补丁）。 * 修复 combox 弹出下拉框后改变窗口大小导致显示不正常以及在有下拉框的时候直接关闭对应的窗口导致下拉框没有被释放的问题（感谢智明提供补丁） * 修改 blend_a 函数提高效率（在 1170 板子上面测试，这样的修改会快很多，具体原因可能是内存交替进入 cache，导致速度变慢了）（感谢智明提供补丁）

2020/12/06 * 窗口全部关闭后清屏。 * 完善 draw_rounded_rect（感谢智明提供补丁）

2020/12/05 * 修复 theme_gen 可能存在没有初始化变量的问题（感谢朝泽提供补丁）。 * 增加 EVT_IM_START 和 EVT_IM_STOP 事件。 * 增加函数 window_manager_switch_to。

2020/12/04 * fscript 支持注册全局函数。

2020/12/03 * 完善编译脚本（感谢培煌提供补丁）。 * 修复 image gen 多写 4 字节数据的问题。

2020/12/02 * 完善 fscript。 * 修复 shdlc 内存泄露（感谢朝泽提供补丁）。 * 减小 assets-1m.c 的体积（感谢智明提供补丁） * 修复 slide_menu.xml 的问题（感谢智明提供补丁） * 将 get_time_us64 缺省实现移动 time_now.c，避免部分嵌入式平台编译问题（感谢陈谭提供补丁）

2020/12/01 * 修改 image_manager_get_bitmap 优先使用 assets_manager（感谢福明提供补丁）。 * 复关闭程序销毁 system_bar 时未解绑事件出现野指针导致程序崩溃（感谢雨欣提供补丁）。 * fscript 支持 != 比较。

2020/11/30 * 完善注释（感谢朝泽提供补丁）。 * 完善 combo_box（感谢朝泽提供补丁）。 * 修改部分编译器的问题（感谢陈谭提供补丁）。

2020/11/28
* 增加函数 date_time_add_delta。 * 完善 lcd_set_font_name。

2020/11/27 * 修复 window manager 中的注释（感谢朝泽提供补丁）。 * 修复 switch 中 get prop 没有初始化的问题（感谢俊杰提供补丁）。 * 修复资源大写时程序无法使用资源问题（感谢培煌提供补丁）。 * 修复国家语言为空字符串时图片资源获取不正确的问题（感谢培煌提供补丁）。 * 修复 pc 上面 mono 的桌面应用程序模式改变窗口大小后导致程序崩溃（感谢智明提供补丁）。 * fscript 支持表达式解析，用以替换 expr_eval。

2020/11/26 * 添加 object_has_prop_by_path 接口（感谢朝泽提供补丁）。 * 修正 expr_eval 内存泄漏的问题（感谢朝泽提供补丁）。 * 增加 window_manager_close_all。 * popup 窗口增加 close_when_timeout 属性。

2020/11/25 * 完善 theme gen 支持更长属性（感谢福明提供补丁）。

2020/11/24 * 更新编译脚本。 * 更新文档《如何集成第三方库》 * 修复 opengl 的矩形边框放大后虚边的问题（感谢智明提供补丁）。 * 修复背景色为全透明拷贝前景色透明值出错的问题（感谢智明提供补丁）。 * 修复 progress_circle 的 show_text 属性引起的扩大脏矩形区域的问题（感谢智明提供补丁）。 * 修改支持特定平台的 OpenGL 加速和把 fbo 的 draw arrays 的方法统一和 nanovg 一样（感谢智明提供补丁）。

2020/11/23 * fscript 支持 comment。 * fscript 支持 while 语句。

2020/11/20 * 完善 label（感谢智明提供补丁）。 * 增加 timer_resume/timer_suspend（感谢智明提供补丁）。 * 完善 window_set_fullscreen 支持 native window。

2020/11/19 * 增加函数 tk_ostream_file_create_ex

2020/11/18 * 增加 rlog 用于循环记录 log。

2020/11/15 * 增加函数 object_to_json。 * expr_eval 添加对类似‘$temp.[0].value’格式的变量的支持（感谢朝泽提供补丁） * object 添加 object_set_prop_by_path、object_can_exec_by_path、object_exec_by_path 的接口（感谢朝泽提供补丁） * 完善 fscript（感谢剑超提供补丁）。 * 完善调试信息（感谢 MooYin 提供补丁）。

2020/11/14 * 修复 android 不能熄屏的问题。

2020/11/13 * 修复圆角矩形启用局部圆角导致边无法缺失的问题（感谢智明提供补丁）。 * 完善 slide_indicator（感谢智明提供补丁）。

2020/11/11 * 增加 fscript 的文档。 * 完善 text_selector, 支持设置选中项的风格（感谢智明提供补丁） * 增加 bitmap_lock_buffer_for_write 参数检测（感谢俊杰提供补丁）

2020/11/09 * 增加一个简单的函数式执行引擎 (fscript)。 * 修复不同的控件来回获取焦点导致脏矩形为全屏的问题（感谢智明提供补丁） * 修复在播放 dialog_toast 打开动画的同时点击退出导致 dialog_toast 无法退出的问题（感谢智明提供补丁）

2020/11/08 * 增加函数 tk_vsnprintf

2020/11/07 * 完整 FAQ * 增加函数 timei_now_us

2020/11/06 * 完善资源管理器（感谢智明提供补丁）。

2020/11/05 * 完善 ubjson 保存逻辑（感谢王程提供补丁）。

2020/11/04 * 完善直接加载 file://资源的逻辑（感谢智明提供补丁）。 * 增加文档 自定义控件支持脚本绑定 * 修复测试用例的错误（感谢智明提供补丁）。 * 修复 datai_reader_asset 如果加载资源失败，导致修改计数器失败，从而导致崩溃的问题（感谢智明提供补丁）。

2020/11/03 * 修复资源名字超过 31 个字符导致查找不了，导致内存泄漏的问题，修改对应生成资源工具以及测试用例（感谢智明提供补丁）。

2020/11/02 * 增加支持过滤 UI 文件中属性中包含 <?include 字符串（感谢智明提供补丁）。 * 增加支持 edit 控件可以添加非规定的按键触发事件（感谢智明提供补丁）。 * 修复了 grab_keys 属性和按键事件冲突的问题（感谢智明提供补丁）。 * 修复了 keyboard 对顶部窗口的移动位置不正确的问题（感谢雨欣、智明提供补丁）。 * 修复了使用 global_emitter 后，在窗口退出的时候释放对应的消息同时之前的消息分发返回值为 RET_STOP 会导致无法删除 global_emitter 队列中的对应消息（感谢智明提供补丁）。

2020/11/02 * 修改 system info 中的内存泄露（感谢朝泽提供补丁）。 * image/tab_button 支持 space/return 触发 click 事件。 2020/10/30 * 完善编译脚本（感谢朝泽提供补丁）。 * 增加 main_loop_remove_event_source_by_tag 函数。 * 完善 API 注释。 * 完善 object_default，支持按序号获取属性。

2020/10/29 * 完善 dialog_highlighter_factory_create_highlighter （感谢俊杰提供补丁）。 * 完善 tab button pointer 事件处理（感谢智明提供补丁）。

2020/10/28 * label 控件增加 word_wrap 属性（感谢智明提供补丁）。 * 修复 edit 光标的 bug（感谢智明提供补丁）。

2020/10/27 * 完善 object_array（感谢朝泽提供补丁）。

2020/10/26 * 更新文档。 * 修改英文版中的语法错误（感谢攀峰提供补丁）。

2020/10/25 * 增加 object_clone。 * 窗口切换时，旧窗口按下的键，一直不松开，会持续触发 PRESS，可能会干扰新窗口的用户功能。在窗口切换时，abort 全部已经按下的键，直到按键松开。

2020/10/24 * 增加函数 conf_ini_save_as * 增加函数 conf_json_save_as * 增加函数 conf_ubjson_save_as * 增加工具 json_to_ubjson * 增加工具 ubjson_to_json * 更新 build config 文档

2020/10/23 * 完善 text_selector 控件循环显示功能（感谢智明提供补丁）。 * 修改设置 visible 没有触发 layout 的问题（感谢朝泽提供补丁）。 * 修改ＳＤＬ注释乱码的问题（感谢智明提供补丁）。

2020/10/22 * OpenGL 模式下的图片采样算法由相邻采样改为线性采样，主要为了提高图片旋转缩放效果（感谢智明提供补丁）。 * 修改 darray 的 elms 为 NULL 是内存泄漏的问题（感谢兆坤提供补丁）。

2020/10/21 * awtk-web 修复编译报错问题（感谢智明提供补丁）。 * awtk 修复 web 编译报错的问题（感谢智明提供补丁）。 * 给 awtk 的 text_selector 控件增加循环显示功能（感谢智明提供补丁）。 * awtk 修复在 label 某些条件下调整宽高不正常的问题（感谢智明提供补丁）。

2020/10/20 * 完善单元测试（感谢智明提供补丁）。 * 修改高亮对话框的叠加效果（感谢智明提供补丁）。 * 重构了窗口动画的 begin_frame 的方法（感谢智明提供补丁）。 * 修改 label 的 auto_adust_size 功能的换行效果（感谢智明提供补丁）。 * 修改 rich_text 支持风格文字颜色和字号，字库以及水平对齐（感谢智明提供补丁） * 修改 label 控件支持修改字符串的时候 auto_adust_size 功能（感谢智明提供补丁） * 修复无法触发 label 控件的 auto_adust_size 的问题（感谢智明提供补丁） * 修改了一下自定义控件在 Designer 中的图标的命名规则（感谢朝泽提供补丁）。

2020/10/19 * 修复窗口焦点控件获取不正常的问题（感谢智明提供补丁）。 * 恢复 bitmap_destroy 里的改动（会导致 JS 版本野指针的问题）。 * 修改 auto_adjust_size 缩小功能和注释问题（感谢智明提供补丁）。 * 修复 edit 由长字符串变为短字符串导致不显示的问题（感谢智明提供补丁）。 * 修复 text_selector 控件使用翻译和 tr_text 导致重置显示顺序问题（感谢智明提供补丁）。 * 修改了由于路径问题导致 asset_loader_zip 无法正常加载资源的问题（感谢朝泽提供补丁）。

2020/10/18 * 引入 wm->global_emitter，避免 window manager 按键事件触发两次的问题。 * 修改 valgrind 发现的内存问题。

2020/10/16 * image_animation 支持运行时修改 interval。 * image_animation 支持 WIDGET_PROP_EXEC 控制动画的启动、暂停和停止。

2020/10/15 * 完善脚本，支持同时生成。data/.res（感谢朝泽提供补丁）。 * 修复 mledit 的拉动条不能拖动的问题（感谢智明提供补丁）。 * text_selector 增加 y 轴速度比例和支持本地翻译功能 （感谢智明提供补丁）。 * 修复 dialog_toast 不支持文字长度自适应和修改字号的问题（感谢智明提供补丁）。 * 修改 widget 的 auto_adjust_size 为 true 的时候，也支持 xywh 为绝对值时自动调整（感谢智明提供补丁）。

2020/10/13 * 增加 plugin_manager。 * label 的 line_wrap 属性，缺省改为 FALSE。 * 将 tkc 编译成独立的动态库，给非 GUI 的库使用。 * 完善 label 的 line_wrap 处理（感谢朝泽提供补丁）。 * 增加属性 disallow_children_focusable（感谢智明提供补丁）。

2020/10/12 * 完善 api 注释（感谢朝泽提供补丁）。 * 完善 fragment framebuffer（感谢智明提供补丁）。 * 完善 label 对 line_wrap 的处理。

2020/10/11 * label 增加 line_wrap 属性。 * 完善输入法。如果 keyboard 与 edit 没有重叠，不再上推窗口。

2020/10/10 * window_manager_back 支持 overlay 和 popup。 * 完善 API 注释（感谢兆坤提供补丁）。 * canvas 增加了 clear_rect 的函数，和 fill_rect 函数公用一个颜色（感谢智明提供补丁）。 * 优化了 blend 函数的拷贝判断，当背景色为透明时候，把前景色拷贝到背景上面，不在做混合计算（感谢智明提供补丁）。

2020/10/09 * 把 grab_focus 和 return_key_to_grab_focus 属性移到 title_value 自定义控件。

2020/10/08 * 增加 auto_adjust_size 属性。为 true 时，根据子控件以及文本调整空间自身大小（此时最好不要使用 child_layout，否则可能有冲突）。 * 窗口增加 single_instance 属性。为 true 时，如果窗口已经打开，先关闭旧的，再打开新的。 * 增加 grab_focus 和 return_key_to_grab_focus 属性，用于辅助实现只用方向键和 OK 键的硬件。

2020/10/07 * label 支持自动换行。

2020/10/06 * 完善 README.md，增加 nodejs 和 glob 安装方法。 * 删除 design 目录中临时文件 (.bin)。 * 完善资源目录中的文档。

2020/10/05 * 增加用于生成智能提示数据的工具。

  • 2020/10/03-04
  • 解析时遇到没有注册的控件打印警告，并用 view 代替。

  • 增加 vscode 实时预览插件。

  • 2020/10/02

  • 更新文档。

  • 修复 macos 编译问题（感谢提 suzp1984t pu 供补丁）

  • 2020/10/01

  • mledit 增加 open_im_when_focused 和 close_im_when_blured 属性。
  • 重构 label，把部分函数移动到 line_break 中。
  • 增加 垂直文本控件
  • 2020/09/29
  • 删除了 assets_manager_ref 函数的空字符串的警告信息（感谢智明提供补丁）。
  • 修复 vgcanvas_create 函数返回值的注释（感谢兆坤提供补丁）。
  • 修改 sdl release mouse capture 的时机，缓解 Ubuntun 调试时鼠标僵死的问题（感谢商 YUN 涛提供建议）。

  • 增加函数 tk_run_in_ui_thread，让后台线程在 UI 线程执行指定的函数，它是对 idle_queue 的包装，支持等待调用完成。

  • 2020/09/28

  • 完善自定义控件文档（感谢朝泽提供补丁）。
  • 完善 project.json 和文档（感谢朝泽提供补丁）。

  • 完善离线 canvas 对旋转的处理（感谢智明提供补丁）。

  • 2020/09/25

  • 修改 image dither 工具 mac 编译问题（感谢 suzp1984 提供补丁）。
  • 完善 canvas 换行处理（感谢智明提供补丁）。

  • 修复 slider 刷新的问题（感谢智明提供补丁）。

  • 2020/09/23

  • 完善 dll 导出函数（感谢朝泽提供补丁）。
  • 修复部分事情初始化的问题（感谢俊杰提供补丁）。
  • 修复 assets.c 在 RT1052 上路径的问题（感谢俊杰提供补丁）。

  • 将 contre 改为 center（保留 centre，兼容以前的代码）。

  • 2020/09/22

  • 完善 scroll bar。
  • 修复密码选中不居中的问题。
  • rich text 增加 yslidable 属性。

  • 完善 edit 的 action 事件。

  • 2020/09/21

  • 更新 dll 导出函数列表。
  • 增加 TK_KEY_LONG_PRESS_TIME，让触屏长按和键盘长按可以设置为不同的时间。
  • 修复 demo 资源的问题，方便 designer 打开。
  • 修复部分事情初始化的问题（感谢俊杰提供补丁）。
  • 完善编译脚本（感谢朝泽提供补丁）。

  • 修复 valgrind 发现的内存泄露。

  • 2020/09/18

  • EVT_VALUE_WILL_CHANGE、EVT_VALUE_CHANGING 和 EVT_VALUE_CHANGED 事件结构改为 value_change_event_t，从中可以获得旧值和新值。
  • EVT_VALUE_WILL_CHANGE 事件返回 RET_STOP 可以阻止修改值。
  • event_t 结构体增加 size，避免结构体用错导致内存越界访问。
  • 修改 stm32 编译问题（感谢智明提供补丁）。
  • 完善编译脚本（感谢朝泽提供补丁）。

  • 在 application_init 之前设置默认语言。

  • 2020/09/17

  • 修复一些警告。
  • 将一些参数改成常量指针。
  • 修复快速点击有概率导致 scroll_bar 控件在同一个位置来回滑动（感谢智明提供补丁）。

  • 增加了圆角矩形支持缺失边框的功能，同时修复了背景色为透明的颜色融合算法（感谢智明提供补丁）。

  • 2020/09/16

  • 完善 API 注释。
  • 将一些参数改成常量指针。
  • 修改离线 canvas 的文档（感谢智明提供补丁）。
  • 修复 edit 带格式编辑时，输入没有清除选中内容的 bug。
  • 支持用户外部重载自定义离线 canvas 和统一窗口动画的代码（感谢智明提供补丁）。
  • 统一窗口动画配合修改 awtk-web 的 fbo 和窗口动画的代码（感谢智明提供补丁）。

  • 修复 dialog_toast 在 web 卡主的问题和修复同时插入导致动画异常的问题以及增加注释（感谢智明提供补丁）。

  • 2020/09/15

  • 支持长按键事件

  • edit 增加 close_im_when_blured 属性。

  • 2020/09/11

  • 支持 packed 图片。
  • 增加 如何使用 packed 图
  • 修复 32 位 LCD 窗口动画截图的问题（感谢朝泽提供补丁）。
  • 消除一些不必要的告警；

  • 修正在 key_down 事件销毁 grab_keys 属性为 true 的控件会导致访问 NULL 指针的问题

  • 2020/09/10

  • 重构 widget。

  • 修复使用标准内存分配器同时启用内存泄漏检测时没有加锁的问题。

  • 2020/09/09

  • istream 增加 eos/tell 接口。
  • 增加函数 tk_istream_read_line_str
  • 去掉一些不必要的警告信息（感谢福明提供补丁）。

  • 完善 image_gen（感谢朝泽提供补丁）。

  • 2020/09/06

  • 支持多点手势识别事件（旋转和缩放），目前对接 SDL 的多点手势事件，支持 Android、iOS、windows、linux(desktop) 和 MacOS。其它系统需要自己识别后上报事件。
  • 增加函数 widget_set_child_text_with_int

  • 增加 《利用 app_helper 编写 SConstruct》

  • 2020/09/04

  • 完善 ringbuffer（感谢网友 J, 提供补丁）

  • 完善窗口动画截图（感谢智明提供补丁）。

  • 2020/09/03

  • 完善 toast（感谢智明提供补丁）。

  • 完善 calibration win（感谢俊杰提供补丁）。

  • 2020/09/02

  • 修改了圆角矩形的函数名字和修改了 vg 接口的注释（感谢智明提供补丁）。
  • 按照上星期说的 dialog_toast 问题（感谢智明提供补丁）。
  • 更新主题文档。
  • 完善 demoui，增加指定单个圆角半径的示例。

  • 增加文档 《如何将生成的可执行文件和资源打包》

  • 2020/09/01

  • 增加 FAQ《如何在打开新窗口时关闭当前窗口？》
  • 增加 FAQ《如何设置当前的语言？》
  • 增加 FAQ《如何将板子键盘的键值映射到 AWTK？》
  • 增加 FAQ《如何定制软键盘/候选字的风格？》

  • 完整主题文档，增加颜色格式的说明。

  • 2020/08/30

  • 完善 app helper 脚本，从 project.json 读取 lcd width/height

  • 2020/08/28

  • overlay 增加 click_throgh 属性，允许 overlay 窗口在没点击到子控件时，穿透到底层窗口。

  • 2020/08/27

  • 增加函数 wst_count_char
  • edit 增加对 password/email 长度限制。
  • 修改 edit password 居中的问题。
  • 修复 agge 模式下修改窗口（SDL 窗口）大小后出现报错警告（感谢智明提供补丁）。
  • 增加圆角矩形支持设置不同的圆角半径，不改变原来的函数，新增两个函数 canvas_fill_rounded_rect_ex 和 canvas_stroke_rounded_rect_ex 函数来支持改功能（感谢智明提供补丁）。

  • 修复了离线 canvas 在使用在线 vg 绘图的时候，保存和还原 vg 的数据堆栈信息不正确导致画面异常的问题，给 vg 新增了一个 vgcanvas_reset_curr_state 来清除当前的 vg 状态数据（给 agge 模式下使用，清除 vg 堆栈对离线 canvas 的绘图产生影响）和在 nanovg 中新增了 nvgBeginFrameEx 函数（用于给绑定 fbo 时候使用，以免破坏 vg 的堆栈数据）（感谢智明提供补丁）。

  • 2020/08/25

  • 修复 nanovg 在解析部分字体的是有可能因为顶点过多导致缓冲区不够大产生中断问题（感谢智明提供补丁）。

  • 修复 nanovg 在 win10 或者 win8 的高分屏上有概率出现裁减区虚化的问题（感谢智明提供补丁）。

  • 2020/08/24

  • mledit 支持 cancelable 属性，为 TRUE 时，如果内容有变化，会设置编辑器的状态为 changed，所以此时编辑器需要支持 changed 状态的 style。
  • 完善 windows 时间函数。
  • 完善 edit pattern
  • edit 格式编辑时，获得焦点时，把光标设置到最前面。

  • 修复 serial helper 和测试程序中内存泄漏（感谢智明提供补丁）。

  • 2020/08/23

  • 修复 edit 编辑 ip/date/time 时，cancel 编辑时的问题。
  • 新增 awtk-restful-httpd
  • 新增 自动测试引擎

  • 新增函数 widget_get_text_utf8

  • 2020/08/21

  • 修复 main_loop_simple.c 事件部分成员没有初始化的问题（感谢梦幻櫻花提供补丁）。

  • 2020/08/20

  • 软键盘支持“clear”/”cancel”两个功能按钮。
  • 修复 opengles 截屏的时候反算预乘时候数据溢出问题（感谢智明提供补丁）。
  • 修复离线 canvas 在 agge 下有可能导致原来（感谢智明提供补丁）。

  • edit 支持 cancelable 属性，为 TRUE 时，如果内容有变化，会设置编辑器的状态为 changed，所以此时编辑器需要支持 changed 状态的 style。

  • 2020/08/19

  • 完善 app conf 保存 json 时字符串转义处理。
  • 完整 ui serializer，增加 xml 预处理指令。
  • 增加 字符集编码转换函数。

  • t9ext 输入法引擎支持设置语言（感谢梦幻櫻花提供补丁）。

  • 2020/08/18

  • 修复了一些潜在的内存泄露。
  • button 支持设置长按时间。

  • 完善编译脚本（感谢朝泽提供补丁）

  • 2020/08/17

  • 增加文档《项目描述文件 project.json 介绍》（感谢朝泽提供补丁）

  • 完善 awtk-web 及配置文件和脚本。

  • 2020/08/16

  • 调整资源目录，支持 designer 打开。

  • 2020/08/15

  • 完善 《自定义控件规范》（感谢朝泽提供补丁）
  • 完善 scripts/app_helper_base.py（感谢朝泽提供补丁）

  • 修复 web 版本切换语言时 canvas 重置的问题（感谢智明提供补丁）。

  • 2020/08/14

  • 完善编译脚本和资源更新脚本。

  • 完善 app conf init（感谢俊杰提供补丁）。

  • 2020/08/13

  • 完善 tab button（感谢朝泽提供补丁）。

  • 完善 《自定义控件规范》（感谢朝泽提供补丁）

  • 2020/08/11

  • 完善 conf_node 增加一些 wrapper 函数。

  • 完善 《自定义控件规范》（感谢朝泽提供补丁）。

  • 2020/08/10

  • 完善 conf_node 增加一些 wrapper 函数。

  • 修复 agge 截屏矩形区域原点不为 0 的时候崩毁的问题（感谢智明提供补丁）。

  • 2020/08/08

  • 完善 fontgen，支持生成二进制数据。
  • 增加 自定义字体加载器，实现加载部分字体。

  • 修改输入法中内存临时泄漏（在窗口关闭时会释放）。

  • 2020/08/07

  • 候选字控件 (candidate) 支持设置 margin style。

  • 2020/08/06

  • 完善离线 lcd（感谢智明提供补丁）。
  • 完善 slist （感谢智明提供补丁）。

  • 增加 vgcanvas_clear_cache（感谢智明提供补丁）。

  • 2020/08/04

  • 完善 keyboard 增加 back/back_to_home 按钮的支持。

  • edit/mledit/slider 支持 WIDGET_PROP_INPUTING 属性，用于辅助实现 MVVM。

  • 2020/08/03

  • 完善 emitter 的注释（感谢智明提供补丁）。
  • 完善 fragment lcd framebuffer（感谢智明提供补丁）。

  • 完善文档《避坑指南》

  • 2020/07/31

  • 增加 EVT_RESET

  • 部分文件增加 UTF8-BOM（感谢陈谭提供补丁）。

  • 2020/07/30

  • 如果新窗口的 sensitive 属性为 FALSE，不切换窗口焦点。

  • 完善 text edit, 修复 mledit 在非缺省字体时的问题（感谢俊杰提供补丁）。

  • 2020/07/29

  • 增加文档《如何续期使用 AWTK Designer》（感谢俊杰提供补丁）。

  • 2020/07/28

  • 英文版 README（感谢陈谭提供）。
  • mutable_image 增加注释（感谢智明提供补丁）。

  • 修复 opengl 下截屏的反算预乘时候出现数据溢出问题（感谢智明提供补丁）。

  • 2020/07/25

  • 完善 shift 键的处理。

  • 2020/07/24

  • 增加函数 emitter_exist。

  • 2020/07/24

  • 完善 api 注释（感谢朝泽提供补丁）。
  • 完善 save png（感谢智明提供补丁）。
  • 完善 android 资源加载（感谢智明提供补丁）。
  • asset_loader 接口增加函数 asset_loader_exist。

  • 增加函数 widget_is_parent_of/widget_is_direct_parent_of。

  • 2020/07/23

  • 修复 opengl 下没有考虑 fbo 返回来的数据为预乘数据的问题和让 opengl 支持预乘贴图显示（感谢智明提供补丁）。

  • 2020/07/22

  • 增加 OBJECT_CMD_REMOVE_CHECKED 、OBJECT_PROP_CHECKED 和 OBJECT_PROP_SIZE。
  • 完善 value_double，支持 bool 到 double 转换。

  • 完善 API 注释（感谢俊杰提供补丁）。

  • 2020/07/21

  • 完善文档。
  • 完善 API 文档增加导出函数。
  • 修改 gles 和 agge 的 svg 效果不一致的问题（感谢智明提供补丁）。

  • 给 bitmap 的函数注释，方便动态类库编译的时候调用其函数（感谢智明提供补丁）。

  • 2020/07/20

  • 完善校准窗口。

  • 2020/07/19

  • 完善 API 文档。

  • 增加 表格视图

  • 2020/07/17

  • 完善 scrollbar 支持大范围滚动。

  • 完善 widget animator，使用 double 保存属性，避免精度问题。

  • 2020/07/16

  • 完善 bidi 文档。
  • 修改 mem pool 内存对齐的问题（感谢 imxood 提供补丁）
  • 完善 rtt 的 tk_thread_set_priority（感谢玖玲提供补丁）

  • 优化圆角矩形在脏矩形下的效率和修复警告（感谢智明提供补丁）

  • 2020/07/15

  • 完善 app conf 文档。

  • 2020/07/14

  • 修复 gles 的贴图旋转关闭抗锯齿的后导致效果问题（感谢智明提供补丁）

  • 2020/07/13

  • 完善 API 注释（感谢尧燊提供补丁）

  • 2020/07/12

  • 完善 date_time：增加 date_time_get_month_name 和 date_time_get_wday_name。

  • 增加 日期选择控件。

  • 2020/07/11

  • 完善 bidi，widget 支持 bidi 属性。
  • 完善 hscroll_label 对 bidi 的支持。

  • 完善 slide view indicator（感谢朝泽提供补丁）。

  • 2020/07/10

  • 完善 tokenizer。
  • 完善表达式，增加 iformat/fformat 函数。
  • 完善资源管理器（感谢俊杰提供补丁）。

  • 增加离线 canvas（感谢智明提供补丁）。

  • 2020/07/09

  • 基本控件的文本支持双向排版 (Unicode Bidirectional Algorithm)
  • 完善 font、image 和字符串工具（感谢大恒提供补丁）
  • 完善 native windows 销毁 lcd 对象。

  • 完善 expr 支持浮点数和整数格式化。

  • 2020/07/08

  • 完善软键盘关闭流程。
  • 完善 stb 预乘处理（感谢智明提供补丁）。
  • 完善对无效 bitmap 对处理（感谢智明提供补丁）。
  • 完善字体、主题、字符串和 UI 生成工具（感谢大恒提供补丁）

  • date time 中增加函数 date_time_is_leap、date_time_get_days 和 date_time_get_wday。

  • 2020/07/07

  • 完善资源生成脚本（感谢朝泽提供补丁）。

  • 增加 mvvm 在 stm32 上的移植。

  • 2020/07/06

  • 支持图片预乘功能（感谢智明提供补丁）。
  • 完善 demoui（感谢俊杰提供补丁）。

  • 完善 xml to ui 工具（感谢俊杰提供补丁）。

  • 2020/07/04-06 *增加代码 编辑控件。

  • 2020/07/03

  • 完善 graphic_buffer_default

  • 完善焦点快捷键的处理。支持 shift+tab 向后切换焦点。

  • 2020/07/02

  • 完善 graphic_buffer_default
  • 增加 tk_mem_is_valid_addr
  • 完善 edit 注释（感谢俊杰提供补丁）。
  • gif 隐藏后不再刷新。

  • 完善 ui loader（感谢 dog2nd_Zhao 提供补丁）。

  • 2020/06/30

  • 完善 font gen（感谢智明提供补丁）。
  • 完善 image dither（感谢大恒提供补丁）。

  • add vgcanvas_get_text_metrics.

  • 2020/06/29

  • 完善 listview layout（感谢尧燊提供补丁）
    • 完善 input_type_to_keyboard_name（感谢俊杰提供补丁） ·
  • 2020/06/28
  • 完善 font cache（感谢智明提供补丁）。
  • font_bitmap_index_t 中的偏移量改为 32 位（如果使用位图字体，需要重新生成资源）。

  • 修复位图字体空格字膜宽度的不正确的问题（感谢智明提供补丁）。

  • 2020/06/27

  • 完善 font cache（感谢智明提供补丁）。

  • 窗口切换到前台时，将其为窗口管理的 target/key_arget。

  • 2020/06/26

  • edit 支持 date/time/time_full 输入类型。
  • 增加文档 如何用 edit 控件编辑日期
  • 增加文档 如何用 edit 控件编辑时间

  • 增加文档 如何用 edit 控件编辑 IP 地址

  • 2020/06/25

  • edit 支持 ip v4 输入类型。

  • 2020/06/24

  • 增加函数 tk_thread_self。
  • 增加 mutex_nest 嵌套互斥锁。
  • object_locker 改用嵌套互斥锁实现。
  • 增加事件 cmd_exec_event_t，方便拦截 object exec。
  • 完善 rich text（感谢尧燊提供补丁）

  • 修改 app conf/file browser 中的内存泄露。

  • 2020/06/23

  • 完善 FAQ，增加《如何去掉不需要的控件，以节省 flash 空间》

  • 2020/06/22

  • 完善 conf-io 支持 add 命令，新建一个空的子节点。
  • 修复 Build script 问题（感谢智明/陈谭提供补丁）。
  • 修改 mutable_image 文档（感谢智明提供补丁）。

  • 将部分文件转成 UTF8-BOM 格式（感谢陈谭提供补丁）。

  • 2020/06/21

  • 增加 object_cmd_t 定义对象支持的常见命令。

  • 完善 conf-io 实现常见命令。

  • 2020/06/20

  • 完善 tab_button_group 支持缺省的 active button。

  • 2020/06/19

  • 完善 DLL 导出符号。
  • 完善 conf-io，支持自读模式。
  • 完善 conf-io，支持缺省配置。
  • 完善 conf-io，修改 json 文件不存在的问题。
  • 增加 object_compositor 将两个对象包装成一个对象。
  • 修复特殊情况下软键盘无法关闭的问题（感谢陈谭提供补丁）。

  • 修复控件动画放在窗口上有概率出现显示不正常的问题（感谢智明提供补丁）。

  • 2020/06/18

  • 增加文档《内存分配》
  • 完善 mem allocator pool
  • 完善 API 注释（感谢俊杰提供补丁）。
  • 增加函数 check_button_get_checked_button

  • 增加 tk_mem_init_stage2 用于初始化 pool/oom，否则在嵌入式式平台会死锁。

  • 2020/06/17

  • 保留 xml 属性中的空格。
  • 完善 edit（感谢培煌提供补丁）
  • 修复空格字体的显示问题（感谢智明提供补丁）。
  • 修复圆角矩形在宽高很小的时候出现异常的问题（感谢智明提供补丁）。

  • 重新设计内存管理器架构，新增加锁、调试和防内存碎片功能。

  • 2020/06/15

  • 完善 app conf/object locker
  • 完善 toast （感谢培煌提供补丁）
  • 完善资源生成脚本（感谢朝泽提供补丁）。
  • 完善 window manager simple（感谢智明提供补丁）。

  • 修复旋转后 online_fb 的 line_length 不正确的问题（感谢智明提供补丁）。

  • 2020/06/14

  • 完善 scroll view，增加滚动相关事件。
  • 增加文档《如何实现弹出菜单》

  • 完善 conf-io，支持 reload。

  • 2020/06/13

  • 完善资源生成脚本，兼容 AWTK 和 Designer（感谢朝泽提供补丁）。
  • 完善 str_count_sub_str（感谢朝泽提供补丁）。
  • 完善 《自定义控件规范》（感谢朝泽提供补丁）。
  • 增加 data_reader_asset。

  • 完善 conf_io，支持移动配置项的顺序，增加#index 获得序数。

  • 2020/06/12

  • 增加 app_conf_set_wstr/app_conf_get_wstr
  • 完善 window_manager_back_to_home 对软键盘窗口的处理。
  • 增加 object_locker 对 object 进行装饰，提供互斥的功能。

  • 用 object_locker 重新实现 app_conf。

  • 2020/06/11

  • 完善 conf_io，支持#name/#size
  • 增加 dll 导出函数（感谢俊杰提供补丁）。
  • 修改 canvas_draw_char_impl baseline 的 BUG。

  • 完善文档。

  • 2020/06/10

  • 增加宏 NATIVE_WINDOW_BORDERLESS 控制是否去掉 native window 的标题栏。
  • 增加 FAQ《应用程序在 Windows 的手持设备中运行，如何去掉窗口的标题栏》
  • image value 支持 16 进制格式。
  • 增加一些导出函数（感谢尧燊提供补丁）

  • 增加 AWTK 应用程序的图标。

  • 2020/06/09

  • 增加 dll 导出函数（感谢俊杰提供补丁）。

  • 完善 app_conf 的注释（感谢瑞安提供补丁）。

  • 2020/06/08

  • 优化圆角矩形的抗锯齿效果（感谢智明提供补丁）。

  • 2020/06/07

  • 增加 conf-io 用于存取应用程序的配置信息。

  • 增加文档《如何存取应用程序的配置信息》

  • 2020/06/05

  • 增加文档《如何绘制旋转文字》

  • 2020/06/05

  • 增加 lcd 相关文档。
  • 完善 API 注释，导出一些函数。

  • 完善 switch（感谢俊杰提供补丁）。

  • 2020/06/04

  • 完善 file_chooser 支持初始目录和过滤规则。
  • 完善 widget_dispatch，保证事件处理函数中，e->target 指向当前的 widget。

  • 增加文档《为 512K Flash 优化空间》

  • 2020/06/03

  • 完善 path_normalize 函数。

  • 2020/06/02

  • 完善文档
  • 完善 label
  • 增加 awtk-inter-win-communication 用于演示窗口之间的通讯方式。
  • 完善 image（感谢智明提供补丁）。

  • 完善 file browser（感谢瑞安提供补丁）。

  • 2020/06/01

  • 增加 awtk-widget-generator 用于生成自定义控件。

  • 增加 awtk-widget-qr 二维码控件。

  • 完善 list item

  • 2020/05/31

  • 修改 event id 潜在的问题。

  • 2020/05/30

  • 增加文档《如何使用软键盘上的 action 按钮》

  • 2020/05/29

  • 完善 assets_manager_ref（感谢俊杰提供补丁）。
  • 增加文档《如何使用对话框》

  • 修改无文件系统时输入法无法使用的问题。

  • 2020/05/27

  • 去掉 assets_manager 中的 log。
  • 增加文档《如何访问控件的属性》。

  • 修改了 tk_dl_open 支持中文路径（感谢大恒提供补丁）。

  • 2020/05/27

  • 增加文档《如何定制 combo_box 控件中按钮的风格和大小》
  • 增加文档《如何用 valgrind 查找内存相关问题》
  • 修改 agge 中内存未初始化的 BUG（感谢智明提供补丁）

  • 修改 file browser 在 Linux 下无法回到根目录的 BUG（感谢瑞安提供补丁）

  • 2020/05/26

  • 完善 widget_dispatch。
  • 完善 scroll view 事件处理。
  • 完善 switch 事件处理（感谢俊杰提供补丁）。
  • 完善 draggable 事件处理（感谢俊杰提供补丁）。
  • 完善 list item 事件处理（感谢俊杰提供补丁）。
  • 增加 1.4.1 分支

  • 增加工具 image_dither（感谢智明提供）

  • 2020/05/25

  • 修改切换语言奔溃的问题。
  • 修改 valgrind 发现的内存泄露。

  • 增加一些 DLL 导出函数（感谢尧燊提供补丁）。

  • 2020/05/23

  • 支持控件设置独立的鼠标指针。

  • 更新文档《如何启用鼠标指针》

  • 2020/05/22

  • 修改 list item 快速点击无效的问题（感谢 yeslee 提供补丁）
  • 完善缺省字体处理（感谢俊杰提供补丁）

  • 修改快速圆角矩形支持 mono 模式（感谢智明提供补丁）

  • 2020/05/21

  • 增加文档《自定义控件规范》
  • 修正了 WITH_BITMAP_FONT 模式下 font_manager_unload_all（比如语言切换）后由于字体名称设置错误导致字体加载失败的问题（感谢朝泽提供补丁）。
  • edit 控件增加 action text 属性，用于控制软键盘上 action 按钮的文本。
  • 用 key_code_is_enter 判断是否是回车（感谢大恒提供补丁）。
  • 修复 gtest 的 Pixel 测试问题和优化了 dark 的混合效率（感谢智明提供补丁）。
  • 修复 mingw 编译报错的问题，同时让 mingw 和 32 位 linux 的 float_t 指定为 float 类型（感谢智明提供补丁）。

  • 修改 layout 的执行时机（感谢智明提供补丁）。

  • 2020/05/20

  • 增加 canvas_get_font_height
  • 增加导出一些函数方便自定义控件使用。

  • 完善编译脚本解决 DLL 一些问题。

  • 2020/05/19

  • 增加《事件录制与重放》文档。

  • image 的 draw type 为 ceneter 时支持旋转和缩放。

  • 2020/05/18

  • 增加事件录制与重放功能，辅助手动测试和压力测试。
  • 完善 text edit（感谢大恒提供补丁）。
  • 完善 system settings 和 release 脚本（感谢俊杰提供补丁）。

  • 支持硬件多层合并 (GUI + Camera)（感谢智明提供补丁）。

  • 2020/05/14

  • 修复 clip view 中 type 的问题（感谢尧燊提供补丁）。

  • 修复 file browser up 中的问题（感谢瑞安提供补丁）。

  • 2020/05/13

  • 完善文档。
  • 完善 tr_text 处理（感谢尧燊提供补丁）。
  • 增加状态 WIDGET_STATE_DISABLE_OF_CHECKED/WIDGET_STAT_DISABLE_OF_ACTIVE（感谢尧燊提供补丁）。

  • 完善文件选择器（感谢瑞安提供补丁）

  • 2020/05/11

  • 将 google 拼音数据纳入资源管理，根据有无文件系统决定放到文件系统还是和代码一起编译。

  • 将联想字数据纳入资源管理，根据有无文件系统决定放到文件系统还是和代码一起编译。

  • 2020/05/10

  • 更新文档。

  • 增加 semaphore_null.c

  • 2020/05/09

  • 更新文档（感谢俊杰提供补丁）
  • 更新文档。

  • 增加 semaphore_null.c

  • 2020/05/09

  • 更新文档（感谢俊杰提供补丁）

  • 2020/05/08

  • 增加函数 tk_wstr_dup_utf8
  • 增加函数 fs_os_file_tell
  • 增加函数 fs_os_file_size
  • 增加函数 fs_os_file_stat
  • 增加函数 fs_os_file_sync
  • 增加函数 tk_mutex_try_lock 以及各个平台的实现。
  • 重构 src/platforms/pc/fs_os.c 中的函数。
  • 完善 draggable 控件，enable=false 时，禁止拖动。
  • 修复如果 slide_view 控件其他控件遮挡时候，刷新 slide_view 控件会出现显示异常的问题和修复了 switch 控件对 片段式显存的支持（感谢智明提供补丁）。
  • 修改了片段式显存下 canvas 设置裁减区收到当前脏矩形控制，防止裁减区越界的问题（感谢智明提供补丁）。

  • 修复了 awtk 的警告问题（感谢智明提供补丁）。

  • 2020/05/07

  • 完善 input_method_dispatch_candidates。

  • 完善 widget_set_theme（感谢大恒提供补丁）

  • 2020/05/06

  • 支持从 SD 卡加载资源，做了一些小的改动。

  • 2020/05/04

  • 完善文件系统，函数指针放到 vtable 中，增加测试。

  • 2020/05/03

  • 增加函数 str_append_more。
  • 在 EVT_BLUR 的事件回调中 widget_destroy_children（当前控件的父控件等）, 会导致 widget_dispatch_blur_event() 访问野指针（感谢朝泽提供补丁）。
  • 控件事件的回调被调用时，如果当前控件的 ref_count == 2，且回调中同时执行了 widget_destroy_children（当前控件的父控件等）、widget_destroy（自身），会导致 widget_unref_in_idle() 访问野指针（感谢朝泽提供补丁）。

  • 如果在窗口某控件的 EVT_BLUR 事件回调中调用 widget_set_need_relayout_children()，当焦点在该控件时关闭程序，会导致当前窗口的 destroy 在 widget_destroy_sync(window_manager()) 之后执行，引起 wm_on_destroy_child() 访问野指针（感谢朝泽提供补丁）。

  • 2020/05/02

  • 完善控件动画（感谢朝泽提供补丁）。

  • 2020/05/01

  • 完善 draw_image_repeat（感谢智明提供补丁）。

  • edit/mledit 支持用按键关闭、打开和 toggle 输入法。

  • 2020/04/30

  • 完善 update res 脚本（感谢朝泽提供补丁）。

  • 完善 draw_image_repeat（感谢智明提供补丁）。

  • 2020/04/29

  • 完善 rich text view 滚动条的处理。
  • lcd 增加 draw_image_repeat 函数，方便特定平台优化（感谢智明提供补丁）。

  • 完善 str gen 名称支持引号。

  • 2020/04/28

  • 完善 color picker（感谢尧燊提供补丁）。
  • 修复 guage_pointer 函数设置锚点不正确的问题（感谢智明提供补丁）
  • 修复 nanovg 在高分屏下裁剪区裁剪字体显示不正常的问题（感谢智明提供补丁）
  • 修复 vgcanvas 的着色器精度问题导致显示不正常的 bug（感谢智明提供补丁）
  • 完善 image gen（感谢大恒提供补丁）。
  • Linux/MacOS/Windows 支持编译 awtk 为动态库。
  • 增加文档《静态链接与动态链接》

  • 完善 update res 脚本（感谢朝泽提供补丁）。

  • 2020/04/27

  • edit/mledit 支持翻译提示信息（感谢瑞安提供补丁）。

  • 更新文档。

  • 2020/04/24

  • 增加 rich text view 控件用于协调 rich text 和 scroll bar。
  • 修复在板子上面使用位图资源时候出现内存泄漏的问题（感谢智明提供补丁）
  • 修复圆角矩形画线的 bug 和圆角矩形支持片段式显存（感谢智明提供补丁）。
  • 修复 input method 中注释错误（感谢大恒提供补丁）。

  • 修复 is_dialog_opened 错误（感谢大恒提供补丁）。

  • 2020/04/23

  • 去掉 widget 中不必要的 log。
  • rich text 支持滚动。
  • 完善 t9ext 输入法。
  • 完善 list view（感谢尧燊提供补丁）。

  • 修复 window_manager_animate_done 同时关闭两个窗口，打开一个窗口时的问题。

  • 2020/04/20

  • 完善 tab button，允许兄弟控件中存在非 tab button 控件。
  • 增加触屏版 T9 输入引擎。
  • 增加按键版 T9 输入引擎。

  • 支持 rgb565 格式的图片（感谢智明提供补丁）。

  • 2020/04/19

  • 修改 strgen 中处理注释的 BUG（感谢大恒提供补丁）。
  • 修复 agge 和 agg 的对齐图片资源的支持（感谢智明提供补丁）。
  • 修复 bitmap 的一些警告和统一命名（感谢智明提供补丁）。
  • 修复当月份等于零的时候出错的问题（感谢智明提供补丁）。

  • 修复警告（感谢智明提供补丁）。

  • 2020/04/18

  • 修复在 SDL+gl 状态下旋转后后出现脏矩形不正常的问题（感谢智明提供补丁）。

  • 修复圆角矩形在大圆角+半透明的情况下，会出现重复绘制导致部分区域颜色不一致的问题（感谢智明提供补丁）。

  • 2020/04/17

  • 修改 dialog 弹 dialog 然后两个都关掉的问题（感谢尧燊提供补丁）。
  • 修改 edit 的在 agge 中截图时 c 会被换成临时变量，在 setcustor 时 c 会非法的问题（感谢尧燊提供补丁）。

  • 修改 event_source_manager_default 在 idle 中弹 dialog，manager->dispatching_sources 会被 clear 的问题（感谢尧燊提供补丁）。

  • 2020/04/11

  • 完善文档 lcd.md

  • 2020/04/10

  • 完善 widget_set_need_relayout_children（感谢尧燊提供补丁）。

  • 2020/04/09

  • 完善 main_loop_dispatch_events（感谢陈谭提供补丁）。
  • 完善 widget_set_need_relayout_children（感谢朝泽提供补丁）。

  • 完善编译脚本和工具（感谢大恒提供补丁）。

  • 2020/04/08

  • 完善资源更新脚本（感谢朝泽提供补丁）。

  • 完善 key event cast（感谢大恒提供补丁）。

  • 2020/04/07

  • 完善 slide_view_set_active/pages_set_active
  • 优化 list view paint
  • 优化 widget_set_need_relayout_children

  • 完善 edit （感谢尧燊提供补丁）。

  • 2020/04/05

  • pages 切换时保存和恢复焦点。
  • view 增加属性 default_focused_child

  • 增加文档 《slide_view/pages 各个页面缺省的焦点控件》

  • 2020/04/05

  • list view 增加上下键的处理。

  • slide view 切换时保存和恢复焦点。

  • 2020/04/02

  • 增加 darray_bsearch
  • 完善 ui loader （感谢尧燊提供补丁）。

  • 完善 window base 窗口切换事件对 designer 处理（感谢培煌提供补丁）。

  • 2020/04/02

  • 增加 waitable ring buffer
  • 修改资源的问题 pagespages 提供补丁）。
  • 修改 ti 编译器的问题（感谢陈谭提供补丁）。

  • 完善 image 名称为空的处理。

  • 2020/04/01

  • 修正 overlay 的注释（感谢大恒提供补丁）。
  • 完善 fs 的创建和删除目录的处理（感谢大恒提供补丁）。

  • 增加函数 fs_get_user_storage_path 用于统一 PC 和 android 平台保存数据的目录。

  • 2020/03/31

  • 支持一次关闭多个模态窗口（感谢尧燊提供补丁）。

  • 2020/03/28

  • 修改 progress circle 中的内存泄露。

  • 2020/03/27

  • 完善 window_base（感谢尧燊提供补丁）。

  • 完善 main_loop_sdl2（感谢尧燊提供补丁）。

  • 2020/03/26

  • 完善 edit/mledit 对 enter 键的处理（感谢大恒提供补丁）。
  • 完善窗口切换时焦点恢复的问题。
  • 修复部分 vg 控件有可能看不到的问题（感谢智明提供补丁）。
  • 修改软键盘无法关闭的 BUG。

  • edit/mledit 支持自己指定软键盘名称。

  • 2020/03/25

    • 支持 scroll view 放在 slide view 中。（感谢 yeslee 提供补丁）。

  • 2020/03/24

    • 增加工具 remove_utf8_bom

  • 2020/03/23

  • 增加函数 tk_strlen。
  • 完善圆角矩形（感谢智明提供补丁）。
  • 完善工具支持多主题（感谢大恒提供补丁）。

  • 完善 text edit（感谢尧燊提供补丁）。

  • 2020/03/22

  • 增加函数 widget_set_child_text_utf8
  • 增加函数 widget_set_child_text_with_double
  • keyboard 在 grab_keys 时，keyboard 处理 key 事件后，应用窗口不再处理。

  • 完善 combobox，选择之后重新打开输入法。

  • 2020/03/20

  • 去掉 main_loop_sdl.c 中重复的 quit（感谢尧燊提供补丁）。

  • 2020/03/19

  • 完善资源管理（感谢朝泽提供补丁）。

  • 2020/03/18

  • 增加 cjson。
  • str 中增加了辅助一些 json 打包的函数。
  • 完善资源管理（感谢朝泽提供补丁）。
  • WITH_BITMAP_FONT 时 locale change 后异常的问题；（感谢朝泽提供补丁）。
  • update_res_common.py 添加多主题处理时遗漏的 images/.res、strings/.data，fonts/*.data 等处理（感谢朝泽提供补丁）。
  • 完善圆角矩形（感谢智明提供补丁）。
  • 修改 dragger 放在 scroll view 中的问题（感谢大恒提供补丁）。

  • 完善 wstr_format_date_time（感谢尧燊提供补丁）。

  • 2020/03/17

  • 修复在 ubuntu 编译 fb_gl 模式下出现编译出错的问题（感谢智明提供补丁）。
  • 修复圆角矩形半径为负数时候出现的 bug（感谢智明提供补丁）。
  • progress circle 支持 line cap 属性。
  • 增加 vgcanvas_line_join_t 定义。
  • 增加 vgcanvas_line_cap_t 定义。
  • 更新文档和 idl.json
  • 修改 dragger 放在 list view 中的问题（感谢大恒提供补丁）。
  • 完善 combo_box （感谢尧燊提供补丁）。
  • 完善 edit（感谢尧燊提供补丁）。

  • 完善 slide menu（感谢尧燊提供补丁）。

  • 2020/03/16

  • 无文件系统是支持多主题（感谢朝泽提供补丁）。

请注意，原有项目需要做如下修改： * 重新生成资源。 * 加入 assets_default.ic * 使用 awtk_main.inc 实现 main 函数。

  • 2020/03/15

  • 修改 ios 上运行的一些问题。

  • 2020/03/14

  • 完善文档。

  • 把 socket_helper 放到 tkc 目录。

  • 2020/03/13

  • 修改 mledit tips 颜色不正确的问题。
  • 完善 awtk_main.inc
  • 增加动态链接库的接口 dl.h
  • 完善 demo_desktop
  • 完善 system_info（感谢朝泽提供补丁）。

  • 修复 android back 键黑屏的问题。

  • 2020/03/12

  • 完善 《 特殊平台编译配置》文档
  • 修改 android resume 后界面黑屏的问题。
  • 修复 widget 坐标为负数的时候导致脏矩形变大的问题（感谢智明提供补丁）。

  • 完善函数 str_from_wstr_with_len。

  • 2020/03/11

  • 修改 font manager 中的警告 （感谢智明提供补丁）。

  • 修复 ring buffer peek 中的问题 （感谢 abelbilbil 提供补丁）。

  • 2020/03/10

  • 完善 idle_queue/timer_queue 支持 web

  • 2020/03/09

  • 增加 async.c/.h

  • 2020/03/06

  • 完善 mutable image，支持自定义的图片创建函数。
  • 完善 asset manager 注释（感谢尧燊提供补丁）。

  • 完善 children layout （感谢尧燊提供补丁）。

  • 2020/03/05

  • 增加 path_replace_extname 函数。
  • 完善 path_replace_basename 函数。
  • 完善 path_build 函数。
  • 增加 data_reader_read_all 函数。
  • 完善 clip_view（感谢智明提供补丁）。
  • 完善 hscrollable、scroll_view 和 slide_menu（感谢智明提供补丁）。

  • 完善 font manager 关于 bitmap font 查找算法（感谢智明提供补丁）。

  • 2020/03/04

  • slider 拖动时不允许调用 set value。

  • 2020/03/03

  • 增加 STYLE_ID_HIGHLIGHT 相关定义。
  • 增加 widget_dispatch_recursive 函数。
  • 完善窗口管理器事件分发，窗口相关事件同时分发到控件。
  • 完善 SVG （感谢钟伟提供补丁）。
  • 完善 OpenGL shader（感谢智明提供补丁）。

  • 完善 image value，支持点击时加上一个增量，增加到最大值后回到最小值。

  • 2020/03/02

  • 完善 README 中 Ubuntu 依赖软件包（感谢陈谭提供补丁）。

  • 优化内存使用（感谢智明提供补丁）。

  • 2020/03/01

  • 增加 data writer file
  • 增加 data reader factory
  • 增加 data writer factory
  • 完善 awtk_main.inc（感谢陈谭提供补丁）。

  • 完善 demos（感谢陈谭提供补丁）。

  • 2020/02/29

  • 完善 dialog 的 layout 处理（感谢朝泽提供补丁）。
  • 完善 fs stat 处理（感谢陈谭提供补丁）。

  • 修复 Linux SDL Audio 的问题（感谢智明提供补丁）。

  • 2020/02/28

  • 完善 dialog set prop 对 layout 参数的处理（感谢朝泽提供补丁）。

  • 2020/02/27

  • 完善 style const 和 ui loader（感谢尧燊提供补丁）
  • 增加文档 《AWTK 应用程序的入口》
  • 增加文档 《AWTK 资源打包》

  • 增加脚本 scripts/create_assets_zip.sh

  • 2020/02/26

  • 增加 data reader 接口和 data writer，用于抽象外部 flash 等设备。

  • asset_loadder_zip 支持从 reader 读取数据，以便支持在没有文件系统时，从外部 flash 加载资源。

  • 2020/02/26

  • 删除 slide_view_invalidate（感谢培煌提供补丁）。
  • 完善 edit 控件（感谢尧燊提供补丁）
  • 完善 guage 控件（感谢尧燊提供补丁）
  • 增加 asset_loader 接口和缺省实现。

  • 增加 asset_loader_zip 用于从 zip 文件加载资源。

  • 2020/02/25

  • 修复 canvas 裁剪区域导致测试失败的问题（感谢智明提供补丁）。

  • 2020/02/24

  • 增加 awtk_main.inc，用于标准程序的主函数。
  • 修复 mledit scroll line 无法通过 set_prop/get_prop 访问的问题（感谢尧燊提供补丁）
  • 修改 thread_with_pthread.c 中的编译问题（感谢陈谭提供补丁）

  • 修改 ostream_retry 中内存溢出的问题（感谢培煌提供补丁）。

  • 2020/02/23

  • 用 SDL 重新实现 PC 版本的线程和同步相关函数。

  • 完善 canvas 裁剪区域（感谢智明提供补丁）。

  • 2020/02/21

  • 处理 jpeg 文件扩展名（感谢朝泽提供补丁）。
  • 修改 xml_to_ui 内存问题（感谢培煌提供补丁）。
  • 修改一些警告（感谢培煌提供补丁）。
  • 修复 edit 密码可见性的问题（感谢尧燊提供补丁）
  • 修复 SDL 警告（感谢智明提供补丁）。
  • 完善 systembar 支持动态改变窗口的 title 和 closable 属性。
  • 修复 list_view_h 中 spacing 属性类型的问题（感谢尧燊提供补丁）

  • 修复 widget_animator_time_elapse 中的问题（感谢朝泽提供补丁）。

  • 2020/02/20

  • 增加文档《如何集成第三方库》
  • 完善 slide view 脏矩形（感谢培煌提供补丁）。

  • 修复控件旋转缩放的情况下裁剪区域的问题（感谢智明提供补丁）。

  • 2020/02/19

  • 增加 widget_remove_timer（感谢陈谭提供补丁）。

  • 2020/02/18

  • native window 增加 center/maximize/minimize/restore/fullscreen 等函数。
  • native window 支持脚本化。
  • 增加 widget_get_native_window。

  • 更新 awtk_ecology（感谢陈谭提供补丁）。）

  • 2020/02/17

  • 修改在修复 clip_view 控件在没有 vg 的时候的报错问题（感谢智明提供补丁）。
  • 修改在 idle/timer 中调用 dialog_modal 导致死循环的问题（感谢智明提供补丁）。

  • 完善 value_double（感谢尧燊提供补丁）。

  • 2020/02/15

  • 修改 assets_manager_deinit 中的内存错误（感谢俊杰提供补丁）。

  • 2020/02/14

  • 修复 idle 的队弹出数据后出现超时导致弹出的队无法执行（感谢 sqqdfny 和智明提供补丁）。
  • 完善 edit/mledit 快捷键的处理（感谢大恒提供补丁）。

  • 完善 digit clock 的注释（感谢俊杰提供补丁）。

  • 2020/02/13

  • 修复 list_view 在切换 auto_hide_scroll_bar 属性 scroll_bar 不显示问题（感谢大恒提供补丁）。

  • 修复 error_event_t 的注释（感谢大恒提供补丁）。

  • 2020/02/12

  • 修复在 agge 的状态下圆角矩形不受裁剪区的影响的 bug （感谢智明提供补丁）。

  • 修复 agge 模式下编译错误（感谢培煌提供补丁）。

  • 2020/02/11

  • opengles 支持 snapshot（感谢智明提供补丁）。

  • 修复了 demoui 的 combox 功能的第一个 combox 在点击 edit 弹出输入法后，再点击按钮时候，导致输入法的动画异常的问题（感谢智明提供补丁）。

  • 2020/02/09

  • 增加 action thread pool

  • 2020/02/08

  • 增加 action thread

  • 2020/02/07

  • 增加 waitable_action_queue

  • 2020/02/06

  • 增加 action_queue

  • 修改内存统计错误（感谢培煌提供补丁）。

  • 2020/02/05

  • 增加拼音输入数据更新工具。
  • 完善联想词库工具生成文档。
  • 增加拼音输入数据更新文档。

  • 增加宏 WITHOUT_SUGGEST_WORDS 用于关闭联想字功能。

  • 2020/02/04

  • 片段 lcd 的片段内存大小刚好等于脏矩形大小的问题（感谢智明提供补丁）

  • 2020/01/28

  • 优化 list view paint children

  • 增加 emitter_forward

  • 2020/01/20

  • compare_color 不区分大小写（感谢 Toby 提供补丁）

  • 为移植到 iOS 做了一下改进。

  • 2020/01/17

  • 修复 list view on remove child 的问题（感谢培煌提供补丁）

  • 完善 image animation （感谢大恒提供补丁）

  • 2020/01/16

  • 修复 progressbar 类型问题（感谢尧燊提供补丁）
  • 修复 arm linux 编译问题（感谢俊杰提供补丁）
  • 完善 mledit/edit 文档 （感谢大恒提供补丁）
  • 完善 str_expand_vars（感谢朝泽提供补丁）
  • 修复 edit 和 mledi t 控件不断 invalidate 的问题 （感谢智明提供补丁）

  • 更新生态文件 （感谢陈谭提供补丁）

  • 2020/01/15

  • 点击鼠标右键触发 context menu 事件。
  • 完善 color picker （感谢朝泽提供补丁）
  • 完善 func call parser （感谢俊杰提供补丁）
  • 完善 progress bar 文档 （感谢大恒提供补丁）
  • 修复 edit 和 mledi t 控件不断 invalidate 的问题 （感谢智明提供补丁）
  • 修改 使用 sdl 后屏幕旋转的显示不正常问题（感谢智明提供补丁）

  • 修复不启用脏矩形的时候，设置 vg 脏矩形的不正确的问题（感谢智明提供补丁）

  • 2020/01/14

  • awtk 修复 opengles 下 vg 缩放后填充颜色不正常的问题（感谢智明提供补丁）
  • 完善 paint children（感谢大恒提供补丁）
  • 完善 comments（感谢大恒提供补丁）
  • awtk 修复 opengles 下 vg 缩放后填充颜色不正常的问题（感谢智明提供补丁）
  • 修改了 stbi__shiftsigned()，C 语言中负数按位右移高位补 1 导致触发 assert 的问题（感谢朝泽提供补丁）

  • 完善 direct.inc （感谢尧燊提供补丁）

  • 2020/01/13

  • widget clone 不复制 focused 属性。

  • 2020/01/12

  • 增加函数 date_time_from_time

  • 将格式化日期的函数放到 date_time_format.c 中。

  • 2020/01/11

  • 完善 combobox, readonly 时点击任意位置，弹出 popup 窗口。

  • 2020/01/10

  • 完善 gif image（感谢尧燊提供补丁）
  • 完善 widget 状态 （感谢朝泽提供补丁）
  • 完善 source manager （感谢智明提供补丁）
  • 完善 widget_get_text
  • 完善 README.md（感谢陈谭提供补丁）
  • 修复 svg 初始位置还有一个关于 S 元素贝塞尔曲线算法的补充的 不然压缩包里的示图会显示不正确（感谢钟伟提供补丁）

  • 修复当高分屏的比例为非整数的时候，在改变窗口大小后会导致 fbo 不断的新建，导致 UI 显示不正常的问题（感谢智明提供补丁）

  • 2020/01/09

  • 完善 rich text（感谢尧燊提供补丁）
  • 完善 color picker（感谢尧燊提供补丁）
  • 完善 combo box item（感谢尧燊提供补丁）

  • 完善 popup（感谢朝泽提供补丁）

  • 2020/01/08

  • 修改在 stm32f429 上编译的 BUG。
  • xml 解析器支持不去掉两端的空格。
  • 完善 slide menu （感谢朝泽提供补丁）
  • rich text 支持换行符和水平对齐（感谢尧燊提供补丁）

  • （感谢智明提供下列补丁）

    • darray 部分函数改为 static
    • 修复当裁剪区设置错误时候，会导致绘图的矩形 w 和 h 出现负数导致板子上面硬件加速出现崩毁的情况，所以在判断的时候加多一个负数的判断

  • 2020/01/07

  • 完善 func_call_parser，允许出现”\r\n\t”。
  • 完善 main loop。用户可以为 main loop simple 提供两个函数，以实现在中断里发送事件。

  • （感谢大恒提供下列补丁）

    • text_edit 增加非空判断
    • dragger 增加鼠标弹起时拖动状态判断
    • 修复 gif 缩放时不会动的问题

  • 完善 combo box item（感谢尧燊提供补丁）

  • （感谢智明提供下列补丁）

    • 修复了使用位图资源在 nanovg 显示不正常的问题
    • 修改 agge 模式下，使用 nanovg 绘图中释放 specific 数据的逻辑
    • 修改了删除当画圆角边框类型不为全边框线的断言，改为 log_warn 输出日志和改画直角边框
    • 修改一些警告地方
    • 修改 fill rect 的问题。

  • 2020/01/06

  • 完善 rich text（感谢尧燊提供补丁）

  • （感谢智明提供下列补丁）

    • 修复调用 image_manager_unload_unused 函数释放图片的时候，会导致 agge 中的图片队列不正常的 bug 。
    • 修复窗口动画播放前，会先把新窗口绘画出来，然后再下一帧才播放窗口动画，会导致画面有闪烁一下的问题。（给 window_manager_default_t 类型增加了一个成员变量 ready_animator 用来标记新的窗口已经创建了但是窗口动画在下一帧才会播放，让 paint 函数跳过绘画当前帧，避免当前帧出现新窗口的画面）
    • 在 widget_is_window_opened 函数的判断中加入 WINDOW_STAGE_SUSPEND 状态判断。
    • 修改了 edit 和 mledit 控件在触发 EVT_POINTER_DOWN_ABORT 事件后，导致 focused 属性异常无法触发 EVT_BLUR 事件导致无法正常关闭软键盘。
    • 修复在 agge 状态下切换主题的时候会使用 canvas 的裁减区设置 vg 的裁减区，有概率导致使用 vg 绘制的控件无法正常显示。
    • 降低了画圆角矩形的圆角判断条件要求。

  • 2020/01/05

  • 完善 fs 接口。
  • 修改 widget_is_opened_popup 函数注释（感谢大恒提供补丁）。
  • list_view 增加重复绑定 scroll_view 和 scroll_bar 处理（感谢大恒提供补丁）。

  • 优化 list_view 按键弹起 scroll_bar_m 的隐藏处理（感谢大恒提供补丁）。

  • 2020/01/03

  • 修复了画圆角矩形边框的 BUG。（感谢智明提供下列补丁）
  • 完善 widget.h 注释（感谢大恒提供补丁）。
  • 完善 ui loader xml（感谢大恒提供补丁）。
  • 完善 guage pointer（感谢尧燊提供补丁）
  • 增加 widget_take_snapshot 目前仅在非 OpenGL 下有效。
  • 完善 popup 窗口动画（感谢智明提供补丁）
  • 完善修改 locale 的处理。
  • 修复 clip_view 剪裁区域计算有误的问题（感谢大恒提供补丁）。

  • 修复 scroll_bar_m 在拖动后没有自动隐藏的问题（感谢大恒提供补丁）。

  • 2020/01/02

  • 修改 kb_default.xml 解决中文状态下无法输入空格。
  • 支持软键盘选择候选字。
  • 增加 dirty_rect_tolerance 属性。表示脏矩形超出控件本身大小的最大范围。缺省为 4，一般不用指定。如果 border 太粗或 offset 太大等原因，导致脏矩形超出控件本身大小太多（大于缺省值）时，才需要指定。
  • tab_button 和 combo_box_item 增加类型检查（感谢钟伟提供补丁）。
  • 增加支持图片中间部分平铺绘图方法（解决很小的图片使用 patch3_xxxx 的 draw_type，在启用鼠标后鼠标滑过图片会出现没有办法重画的问题）（感谢智明提供下列补丁）
  • 修复 agge 支持字体透明度（感谢智明提供下列补丁）
  • 新增了 window_manager_resize() 用于调整原生窗口的大小（感谢朝泽提供补丁）
  • 修复了画圆角矩形边框，边框为 1 的情况导致 agge 的 cache 不正常为难题。（感谢智明提供下列补丁）

  • 修改圆角矩形填充前景色和背景色叠加的显示效果（感谢智明提供补丁）

  • 2020/01/01

  • 优化 widget_clone

  • （感谢智明提供下列补丁）

    • 修复对话框再弹出对话框时，前一个窗口的截图的显示问题
    • 修复 agge 的填充颜色半透效果
    • 增加 agge 对 image 支持半透效果
    • 增加 nanovg 查找 nvgFindTextureRaw 函数，用来判断 agge 的时候图片是否在 nanovg 图片数组中（lcd 的 resize 函数释放 nanovg 的图片会把图片数组释放，导致下次调用崩毁）
    • 修复画部分边框并且宽度大于 1 的情况显示问题。
    • 修改一下警告地方

  • 2019/12/31

  • 完善 RichText（感谢尧燊提供补丁）

  • 2019/12/30

  • assset_info 相关函数移到到 tkc/asset_info.c 中。
  • asset manager 支持自定义资源加载。
  • 输入法候选字支持数字选择候选字
  • 输入法候选字支持左右键切换候选字的焦点
  • 修改 calibration 窗口内存泄露问题（感谢培煌提供补丁）。
  • 完善 RichText（感谢尧燊提供补丁）
  • 完善 children layout（感谢尧燊提供补丁）
  • 输入法候选字支持脚本化（感谢大恒提供补丁）。

  • （感谢智明提供下列补丁）

    • 播放窗口动画前查找 prev_win 不正确的问题
    • 修复了 slide_view 控件在 agge 的状态下，无法裁剪使用 vg 绘制的控件问题
    • 修复 asset_info_create 函数在没有开启 WITH_FS_RES 宏下编译出错的问题
    • 修复 window 在切换为后台的时候，保存 save_focus_widget 为自己的时候，就会导致引用计数出错，导致出现一棵无主的窗口树。
    • 修复控件动画在播放的时候退出程序，导致控件动画内存泄漏问题
    • 修复主题切换后，新的主题的引用计数出错，导致内存泄漏问题
    • 修复了弹出输入法中只增加 EVT_WINDOW_CLOSE 事件，却不触发的事件问题，导致消息分发器内存泄漏的问题
    • 修复 opengles 的 fbo 退出程序时候释放内存
    • 修复 gpinying 拼音退出程序时候内存泄漏的问题 *调整了 tk_deinit_internal 函数让 widget 等资源可以顺利通过 idle 来释放。

  • 2019/12/29

  • 使用 event_source_manager 实现主循环。

  • iostream 增加几个包装函数。

  • 2019/12/27

  • 增加 str_from_wstr_with_len
  • 增加 tk_utf8_from_utf16_ex

  • 感谢福明提供以下补丁：

    • hscroll_label 的修改：默认情况下鼠标移入控件时文本停止滚动，鼠标离开控件时开始滚动。
    • 使用 label 控件的文本太长时会出现不显示的情况，主要是因为 lcd_vgcanvas.inc 里面定义的一个文本长度限制。

  • 2019/12/26

  • 完善 mem 中的计数（感谢大恒提供补丁）。
  • 增加 widget_close_window
  • 修改了 lcd 的宽高被修改后脏矩形的宽高不修改导致裁剪去有问题（感谢智明提供补丁）
  • 增加了把一个资源 data 加载到 awtk 的资源管理器的函数（感谢智明提供补丁）

  • 完善 window_base_on_event（感谢尧燊提供补丁）

  • 2019/12/25

  • 完善 line number（感谢大恒提供补丁）。

  • 感谢瑞安提供以下补丁

    • 打包工具对中文路径的支持
    • imagegen.exe 不用断言判断图片尺寸超出范围而是直接返回错误码，避免程序因断言失败而崩溃。
    • 为了与加载 bin 文件时的资源名保持一致，所以路径也将作为资源名的一部分。
    • 在 xml_to_ui.exe 增加第四个传入参数（资源名），在生成、*.data 填入资源名时作为参考。

  • 2019/12/24

  • 完善 SVG（感谢钟伟提供补丁）

  • 2019/12/23

  • 完善 edit（感谢尧燊提供补丁）

  • 2019/12/19

  • 完善 emitter_off_ex（感谢尧燊提供补丁）
  • 修复 clone 的 widget 没有拷贝到 feedback 属性（感谢智明提供补丁）
  • 完善部分控件的事件处理（感谢大恒提供补丁）。

  • calibration win 支持脚本化。

  • 2019/12/18

  • 完善窗口管理器支持 dialog 叠加（感谢尧燊提供补丁）。
  • utf8 中内部函数改为 static。
  • 完善 str_unescape。
  • 修复了 gles 在部分系统上面颜色显示不正常的问题（感谢智明提供补丁）
  • 修复了 svg 工具生成 bsvg 的时候对 svg 的默认颜色取值问题（感谢智明提供补丁）
  • 完善 widget_set_tr_text
  • 完善 color component 事件处理（感谢大恒提供补丁）。
  • 完善 combobox ex 的 style 处理（感谢大恒提供补丁）。
  • 完善 tab button，支持动态加载指定页面（感谢智明提供补丁）
  • 增加函数 window_create_default

  • 完善 emitter_off_ex（感谢尧燊提供补丁）

  • 2019/12/17

  • 完善 dialog_confirm/dialog_info 等函数。
  • 增加 widget_set_focusable 函数。
  • 重命名：utf8_to_utf16 to tk_utf8_to_utf16 （感谢智明提供补丁）

  • 重命名：utf8_from_utf16 to tk_utf8_from_utf16 （感谢智明提供补丁）

  • 2019/12/13

  • 修改窗口切到 FOREGROUND 把焦点设回去会导致如果当前页面有滚动控件时，页面会滚动的问题（感谢大恒提供补丁）。
  • 修改 widget 在 point_down 少发了个 leave 事件的问题（感谢大恒提供补丁）。

  • 完善 set tr text （感谢尧燊提供补丁）

  • 2019/12/12

  • WIDGET LOAD 事件改在子控件加载完成时触发。
  • hscroll label 在文本改变时重置 xoffset。
  • 完善 combobox 使用 hscroll label 的处理。
  • set key target 时触发 focus 事件。
  • 修复圆角巨型在 gles 的时候，设置 vg 的 Scale 显示不正常的问题（感谢智明提供补丁）
  • 修改了 border_width 为 0 还是绘制边框的问题（感谢智明提供补丁）
  • 完善 rich text 控件（感谢尧燊提供补丁）。
  • 完善动画脏矩形（感谢培煌提供补丁）。

  • 增加 clip view 控件（感谢智明提供）

  • 2019/12/11

  • 增加 WIDGET LOAD 事件和状态。
  • 修复 text edit 中一些警告。
  • 入选码云最有价值开源项目，根据要求修改 READMEM 中的链接。
  • 增加文档 如何在主题文件中写控件布局参数
  • 完善窗口切换的处理，窗口切换到前台时，重新设置原来的焦点控件为焦点。
  • combobox 支持 hscroll label 作为子控。
  • 修改 mledit tips 泄露的问题（感谢尧燊提供补丁）。
  • switch 增加对 image name 为空串的检查（感谢尧燊提供补丁）。
  • 修复 scroll_view 拖动时计算有误的问题（感谢大恒提供补丁）。
  • 增加 TK_CLEAR_IMAGE_ALPHA 用于填充 framebuffer 时，同时设置 framebuffer 的 alpha 值。

主题数据格式变化，请使用资源生成脚本，重新生成资源数据！！！

  • 2019/12/10
  • 更新文档（感谢陈谭提供补丁）。
  • 完善 style const （感谢尧燊提供补丁）。
  • 优化主题数据的存储方式，控件减少 30%。
  • 主题支持 self layout/children layout
  • 修复画圆角矩形在画布的 line_lenght != w*bpp 时候打点不正常的 bug（感谢智明提供补丁）
  • 修复 mledit 显示 bug（感谢智明提供补丁）。
  • 修复 fbo 脏矩形和裁减区不重叠的显示不正常 bug（感谢智明提供补丁）。
  • 修改 lcd_men.inc 文件的每次获取 vg 的时候都会设置裁减区为全屏的问题（感谢智明提供补丁）。
  • 更新文档。

主题数据格式变化，请使用资源生成脚本，重新生成资源数据！！！

  • 2019/12/09
  • 完善 dialog ex 的文本翻译。
  • 支持设置 combobox popup 的 style。
  • edit 增加 input type “custom_password”类型。

  • 完善 text selector （感谢大恒提供补丁）。

  • 2019/12/07

  • 修改 widget_set_state 脚本绑定时的问题（感谢大恒提供补丁）。
  • switch 控件：修正 max_xoffset_ratio 属性修改后 xoffset 没有更新的问题；（感谢朝泽提供补丁）。

  • slider 控件：（感谢朝泽提供补丁）。 （1）修正当控件的值比较小时滑块与前景部分之间有空白的问题（修改为始终在滑块的中间）； （2）修改控件的背景和前景没有贴合的问题； （3）修改 dragger_size 属性允许设置，以便修改滑块的宽度或高度； （4）添加 dragger_adapt_to_icon 属性，用于标识滑块大小是否与 icon 适应 *（5）添加 slide_with_bar 属性，用于标识是否允许在轴上滑动来改变滑块位置

  • 2019/12/06

  • 完善脚本绑定。

  • 2019/12/05

  • 修改了 image_animation 控件的 format、sequence 属性设置，为空字符串时设为空，避免显示有误（感谢朝泽提供补丁）。

  • 增加文档 how_to_use_mutable_image.md（感谢智明提供补丁）。

  • 2019/12/04

  • awtk 增加对 lcd 为 rgb888 的支持 （感谢智明提供补丁）。
  • 修改了 bitmap 设置不透明度的标志（感谢智明提供补丁）。
  • awtk 增加图标所在的位置支持垂直水平居中功能 （感谢智明提供补丁）。
  • 完善增加了 scroll_view 控件可以调节控件自动播放的速度比例接口 （感谢智明提供补丁）。
  • 完善 tk_mem_stat （感謝王程提供补丁）。
  • 完善 assset_manager 关于自定义路径的处理（感谢大恒提供补丁）。
  • 完善 scroll view 的注释（感谢大恒提供补丁）。

  • 增加函数 window_manager_back_to 回到指定的窗口。

  • 2019/12/03

  • 完善 widget\_destroy（感谢尧燊提供补丁）。
  • 上次 EVT_POINTER_DOWN_ABORT 触发多次，破坏了 grab_widget 链的问题还是有点问题，改成在 widget_ungrab 时限制；（感谢朝泽提供补丁）。
  • 由于 scroll_view 的 EVT_POINTER_UP 响应没有判断 scroll_view->pressed，导致在外部点击鼠标并拖动到 scroll_view 内部释放时可能引起视图滚动；（感谢朝泽提供补丁）。
  • idle_manager_exist 判断条件有误（感谢朝泽提供补丁）。
  • 完善 widget_create_animator（感谢培煌提供补丁）。
  • 在窗口打开时递归 update style。
  • 完善输入避免 google pinyin 崩溃
  • 更新 stb truetype.h
  • slide_menu 的 children 为空，点击会崩溃的问题（感谢大恒提供补丁）。
  • slide_view 在 set_active 时判断 foused 为 false，不进行焦点的切换 （感谢大恒提供补丁）。
  • 完善 dragger 事件处理（感谢大恒提供补丁）。
  • 完善 text selector 事件处理（感谢大恒提供补丁）。

  • 修改 dialog/window/popup/calibration 里的注释问题。（感谢温宇飞 wenyufei@aliyun.com提供补丁）。

  • 2019/12/02

  • 完整 list item 支持 return/space 激活 （感谢 jianmin zhuang 提供补丁）。
  • 比如一个控件（比如 edit）的父控件响应 EVT_POINTER_DOWN_ABORT 并 widget_ungrab，在 edit 内按下鼠标，拖到控件外后释放鼠标，edit 控件没有收到 EVT_POINTER_UP，导致状态没复位。原因是 EVT_POINTER_DOWN_ABORT 触发多次，破坏了 grab_widget 链；（感谢朝泽提供补丁）。

  • 修正在 scroll_view 外部按下鼠标之后移动到 scroll_view 内，scroll_view 会跟随滚动的问题（感谢朝泽提供补丁）。

  • 2019/11/30

  • 修改 widget_on_attach_parent 为 widget_on_attach_parent_t，widget_on_detach_parent 为 widget_on_detach_parent_t （感谢朝泽提供补丁）。

  • 完善 slide_view：（感谢朝泽提供补丁）。 （1）切换页面过程中由于脏矩形或裁剪区域计算错误导致会有残影的问题，比如内部 view 有背景、内部控件有边框、或者控件超出 slide_view 范围； （2）修改 overlap 方式切换过程中如果拖动距离超出单页的宽或高时，则停留在上一页或下一页

  • 2019/11/29

  • 修改定制软键盘密码不能隐藏的问题。
  • 修改 widget_unref/object_unref 的问题。
  • 修复 nanovg 画举行边框时候边框大小不为 1 的问题（是之前修复高分屏填充问题引起的）（感谢智明提供补丁）。
  • 修改 widget 透明度为 0 的显示问题，如果 widget 的 opacity 低于 8 的时候，就视为不可见，就跳出 widget_paint 函数的执行（感谢智明提供补丁）。
  • 修改 native_window_fb_gl 和 native_window_sdl 在编译 agge 的时候出现的警告（感谢智明提供补丁）。

  • 修复了 mledit 设置 margin 后不会马上刷新界面的问题（感谢智明提供补丁）。

  • 2019/11/28

  • 修复 preview ui 预览 dialog 时，拖动 dialog 出现残影的问题。
  • 引入引用计数协助管理 widget 的生命周期。
  • 完善 combobox 弹出对话框位置的问题。
  • 完善 圆角矩形绘制（感谢智明提供补丁）。
  • 完善 vgcanvas（感谢智明提供补丁）。
  • 完善 scroll view（感谢朝泽提供补丁）。
  • 完善 销毁子控件的处理（感谢培煌提供补丁）。
  • 完善 native_window_sdl_resize （感谢 qianfan-Zhao 提供补丁）。

  • 完善 set need relayout children。

  • 2019/11/27

  • 完善 edit/mledit （感谢智明提供补丁）。

  • 完善 agge （感谢智明提供补丁）。

  • 2019/11/26

  • 完善 log （感谢大恒提供补丁）。
  • 完善 combo_box_ex（感谢大恒提供补丁）。
  • 完善 edit/mledit 在不可见时的事件处理（感谢大恒提供补丁）。
  • 完善 list view（感谢朝泽提供补丁）。
  • 增加 progress event。
  • 增加 dialog_quit_code_t。
  • 增加 file transfer 用于将资源下载到外部 flash（未完成）。

  • window_manager_back/window_manager_back_to_home 允许关闭对话框，DIALOG_QUIT_NONE 退出码表示对话框可能是被强行关闭。

  • 2019/11/24

  • 增加函数 str_append_int。

  • 2019/11/22

  • 完善 log 函数。
  • 完善 list item（感谢朝泽提供补丁）。
  • 完善 emitter（感谢朝泽提供补丁）。
  • edit 增加属性 open_im_when_focused （感谢 qianfan-Zhao 提供补丁）。

  • 完善和优化绘图函数（感谢智明提供补丁）。

  • 2019/11/21

  • 完善 edit 焦点处理。
  • 完善 keyboard 焦点处理。
  • 完善 combobox （感谢大恒提供补丁）。

  • edit 增加属性 select_none_when_focused。

  • 2019/11/20

  • 更新生态文档（感谢陈谭提供补丁）。
  • 更新资源生成脚本文档（感谢俊杰提供补丁）。
  • 完善 控件焦点
  • 完善 keyboard，切换 page 时设置第一个 focusable 控件为焦点。

  • 修改 combobox 焦点问题（感谢大恒提供补丁）。

  • 2019/11/19

  • 完善 darray_sort。
  • 完善 widget_calc_icon_text_rect （感谢大恒提供补丁）。
  • 完善 WIDGET_PROP_TEXT 先从控件获取，控件没有特殊处理，最后才取默认值。
  • 完善 image（感谢朝泽提供补丁）。

  • 完善 list item （感谢朝泽提供补丁）。

  • 2019/11/18

  • 完善 hscroll label，在 only_parent_focus 为 TRUE 时，根据父控件设置自己的 focus 状态。
  • 完善 list item （感谢朝泽提供补丁）。

  • 完善 awtk_ecology.md

  • 2019/11/16

  • 完善文档。

  • 2019/11/15

  • 完善文档。
  • 完善 image 绘制（感谢大恒提供补丁）。

  • hscroll label 支持在父控件获得焦点是滚动。

  • 2019/11/14

  • 完善进度条（感谢朝泽提供补丁）。
  • 修改 edit 注释问题（感谢朝泽提供补丁）。
  • 增加键值 TK_KEY_BACK。
  • 增加 lcd_mem_fragment。
  • 增加 graphic_buffer_attach。
  • 重构 lcd_mem
  • 完善 tkc 的文档（感谢俊杰提供补丁）。
  • 完善 medit（感谢智明提供补丁）。

  • 完善 vgcanvas fill rect（感谢智明提供补丁）。

  • 2019/11/13

  • 把部分变量修改为常量，以减少内存使用。
  • 更新 IDL 修复脚本绑定的问题。
  • 增加 ICON_AT_BOTTOM 的处理（感谢朝泽提供补丁）。
  • 修改 android 编译问题（感谢智明提供补丁）。

  • 完善 medit（感谢智明提供补丁）。

  • 2019/11/12

  • 修复了 vg 旋转显示 bug 和修改了贴图兼容性（感谢智明提供补丁）。
  • digit clock 移到 widgets 目录。

  • 增加 demo_basic 用于在低端平台演示使用 UI 文件。

  • 2019/11/11

  • 完善 list item click 事件处理（感谢培煌提供补丁）。
  • 完善部分控件的类型检查（感谢尧燊提供补丁）。
  • 更新生态文档（感谢陈谭提供补丁）。

  • 简化 tab_button_group 边框处理。

  • 2019/11/10

  • 增加 darray_sort。

  • 2019/11/09

  • 完善 combo_box 按键处理。

  • AWTK_ecology.md（感谢陈谭提供补丁）。

  • 2019/11/08

  • 完善 rich text （感谢大恒提供补丁）。

  • 完善 text edit（感谢尧燊提供补丁）。

  • 2019/11/07

  • 完善 cmsis_os 移植。
  • 支持重新启动已经完成的动画。
  • 完善 event source/event source manager。
  • 修改输入法中，软键盘弹出时，保存窗口位置的问题。
  • OpenGL 模式支持脏矩形（感谢智明提供补丁）。
  • 修改 slider 在 list view 中 grab 的问题（感谢培煌提供补丁）。
  • 增加 WIDGET_PROP_EXEC 方便 MVVM 通过属性来控制动画的状态。
  • 增加 indicator_default_paint_t 枚举类型导出（感谢大恒提供补丁）。
  • 修改动态设置 default_paint 属性为 auto 时没有效果的问题（感谢大恒提供补丁）。
  • slide_view 增加/删除，或者改变位置/大小时，没有同步更新的问题（感谢朝泽提供补丁）。
  • auto_hide 动画时间设置错误，以及 auto_hide 之后设置 visible 不能显示的问题（感谢朝泽提供补丁）。

  • 完善 assets_manager_set_theme（感谢朝泽提供补丁）。

  • 2019/11/06

  • 修改 emitter 中的错误（感谢朝泽提供补丁）。
  • 修改 image manager 对 raw image 的处理，增加 graphic buffer 之后，raw image 也需要由 image manager 管理。
  • 增加 scripts/release.sh 脚本，用于将运行时需要的文件拷贝到 release 目录。

  • 允许在 XML 文件中指定 combobox 按钮的位置大小和样式。

  • 2019/11/05

  • list_view/list_view_h 增加 pageup/pagedown 按键处理。
  • 修复 native window resize 时没有更新 system info 中 lcd 大小的问题（感谢朝泽提供补丁）。
  • 修复文档中的错误（感谢朝泽提供补丁）。
  • 完善旋转的处理（感谢智明提供补丁）。
  • 增加键值映射功能，请参考 map_key.md

  • 优化 lcd_mem（感谢智明提供补丁）。

  • 2019/11/04

  • 完善字体和文字绘制。

  • 2019/11/03

  • 修改 graphic_buffer 改动引入的问题。
  • 完善 close window force 的流程。
  • 完善 back/back_to_home 的处理。
  • 完善 text selector 数据绑定的问题。

  • 增加 date_time_set 函数和初始化函数。请使用 date_time_global_init 初始化时间函数。

  • 2019/10/31

  • 增加 graphic_buffer，用于管理 bitmap 的内存。
  • 完善 vgcanvas，兼容 JZ_GPU。
  • 完善 darray，增加 darray_find_all。
  • lcd nanovg 支持 LCD 旋转（感谢智明提供补丁）。
  • 增加 native_window_fb_gl （感谢智明提供补丁）。
  • 修改 valgrind 发现的问题。

如果有支持访问 bitmap->data 的代码，请使用 bitmap_lock_buffer_for_write/read 函数。

  • 2019/10/30

  • 增加 system_bar_bottom，支持 system_bar 在顶部、底部和两者。

  • 2019/10/29

  • 公开函数 image_animation_next。

  • 修改 SDL 输入按键事件的问题（感谢智明提供补丁）。

  • 2019/10/29

  • 完善 slideview indicator（感谢朝泽提供补丁）。
  • 修改 svg 路径太长的问题（感谢尧燊提供补丁）。
  • 修改 popup 支持点击外部关闭的问题（感谢尧燊提供补丁）。
  • 完善 vgcanvas_nanovg_set_font（感谢俊杰提供补丁）。
  • 修改 semaphore.c 在 im28x 上编译的问题（感谢俊杰提供补丁）。

  • 修改 build_asset_filename_custom 的问题（感谢瑞安提供补丁）。

  • 2019/10/27

  • 增加 ostream_retry。

  • 2019/10/26

  • 完善 ring buffer。

  • 2019/10/25

  • widget_off_by_\ctx/on_detach_parent/on_attach_parent
  • 增加 draggable 控件。
  • 修改文档中的错误（感谢俊杰提供补丁）。

  • 完善主题切换，字体卸载的问题（感谢智明提供补丁）。

  • 2019/10/24

  • 优化 fragment frame buffer，在 STM32F103 等低端平台，内存不足以实现 framebuffer 时，性能大幅提高（感谢智明提供补丁）。
  • 修改文档中的错误（感谢俊杰提供补丁）。
  • 更新 awtk config sample。
  • 修改软键盘弹出时出现屏保的问题。
  • 完善 new.cpp/new.hpp （感谢陈谭提供补丁）。
  • 修改 windows 中文件名的问题（感谢大恒提供补丁）

  • assets_manager_set_custom_build_dir 增加回调函数上下文。

  • 2019/10/23

  • 修改 clone 出来的 edit 的显示问题。
  • 增加 widget_on_with_tag 和 widget_off_by_tag，方便一次注销多个同类事件。
  • 完善 list view 对 wheel 事件的处理。
  • 完善 text selector 处理 up/down 按键和 wheel 事件。
  • 修改 SVG 无效图片崩溃的 BUG。

  • 增加函数 assets_manager_set_custom_build_asset_dir，有时我们需要优先加载用户自定义的资源，加载失败才加载系统缺省的，可用设置一个函数去实现这类功能。

  • 2019/10/19

  • 完善主题切换功能。
  • 增加文档 资源目录变更通知
  • 增加文档 主题实时切换

  • 修改 edit 在 listview 中时，处理 Wheel 事件的问题。

  • 2019/10/18

  • 增加主题切换功能。

  • 2019/10/17

  • 修改文档中的错误（感谢俊杰提供补丁）。

  • 完善 streams。

  • 2019/10/16

  • 更新文档。

  • 修改文档中的错误（感谢俊杰提供补丁）。

  • 2019/10/15

  • 增加 fs_file_eof。
  • 增加 tk_iostream_noisy。
  • 完善窗口管理器（感谢大恒提供补丁）
  • 前一个窗口为 normal window 时才支持窗口动画。

  • glyph 的 x/y/w/h 改为 16 位，以防超大字体溢出问题。

  • 2019/10/14

  • 修改 widget_set_value 把 value 当 uint32 的 BUG.
  • 完善 label 换行（感谢俊杰提供补丁）。
  • edit_set_int/double 后调用 text layout（感谢俊杰提供补丁）。
  • 窗口被切换到后台后更新 grab_widget（感谢尧燊提供补丁）。
  • 完善 combo box（感谢尧燊提供补丁）。
  • 完善 layouters（感谢尧燊提供补丁）。
  • 修改 edit 在 slide view 中的问题（感谢培煌提供补丁）。

  • keyboard 增加 scriptable 属性。

  • 2019/10/13

  • 增加 stream_shdlc 文档。

  • 2019/10/12

  • 增加 stream_shdlc。

  • 2019/10/11

  • 合并君正提供的屏幕旋转补丁（感谢君正提供补丁，感谢智明在各个平台验证）。
  • 合并君正提供的 popup 支持 highlight 补丁（感谢君正提供补丁，感谢智明在各个平台验证）。
  • 合并君正提供的 bitmap 使用 line_length 补丁（感谢君正提供补丁，感谢智明在各个平台验证）。

  • 修改 dialog 上面的 combox 弹出时焦点的问题。

  • 2019/10/10

  • 修改 canvas draw image repeatx/repeaty 的问题（感谢俊杰提供补丁）。
  • canvas 增加 repeat_y_inverse 图片绘制方式。

  • 完善 widget_invalidate（感谢培煌提供补丁）。

  • 2019/10/09

  • slider 的 min/max/value/step 使用浮动数。
  • combo_box 增加 item_height 属性（感谢朝泽提供补丁）。

  • 修改 mledit 软键盘回车的问题（感谢俊杰提供补丁）。

  • 2019/10/08

  • 增加 istream buffered。

  • 2019/10/07

  • 增加 ostream_buffered。

  • 按 issue 241，把 get_time_ms 改名为 get_time_ms64。

  • 2019/10/06

  • 增加 ring buffer。

  • 2019/10/03

  • 完善 stream serial。

  • 2019/10/02

  • 完善 ubjson。

  • 2019/09/30

  • 修改文档的 BUG（感谢俊杰提供补丁）。
  • edit/mledit 的 margin 从 style 中获取，从属性获取仍然保留（但不支持在 IDE 中设置）。
  • 使用 sokol 库中的函数获取时间。

  • 增加 event source。

  • 2019/09/29

  • 修改 combo_box_ex 获取 type 的问题（感谢尧燊提供补丁）。

  • 2019/09/27

  • time clock 支持指针支持锚点（感谢智明提供补丁）。
  • edit/mledit 获得焦点时选中文本。
  • combo_box 增加 localize_options 选项
  • edit min/max/step/type 支持脚本绑定。

  • progress bar 支持 max 属性。

  • 2019/09/26

  • rename stream_socket to stream_tcp。

  • 修改 switch 的 BUG（感谢朝泽提供补丁）。

  • 2019/09/24

  • 合并君正提供的部分补丁。

  • 2019/09/23

  • 完善 ubjson/value

  • 修改前几天修改 widget_update_style 留下的问题。

  • 2019/09/19

  • 修改”color_component” “digit_clock” “mutable_image”的注释，支持 designer 编辑（感谢大恒提供补丁）。
  • 增加 object_array
  • 增加 object_get_prop_by_path
  • 完善 children_layouter_list_view（感谢尧燊提供补丁）。
  • 完善 children_layouter_default（感谢尧燊提供补丁）。

  • 增加 EVT_REQUEST_QUIT_APP 事件，点击原生窗口关闭按钮时，通过窗口管理器触发，注册该事件并返回 RET_STOP，可以阻止窗口关闭。

  • 2019/09/18

  • 增加 iostream_mem。
  • 重构 theme gen。
  • 完善 style_mutable，set value 时和 theme gen 保持一致。

  • edit 输入类型为 email 时允许输入空格（感谢俊杰提供补丁）。

  • 2019/09/17

  • 修改 LinuxCPU 占用高的问题（感谢俊杰提供补丁）。
  • 修改 edit 快捷键在 DESKTOP 模式下无效的问题（感谢朝泽提供补丁）。
  • 增加《如何开启按键音》的 文档。
  • 完善 image_manager_update_specific（感谢尧燊提供补丁）。
  • edit keydown 事件处理后返回 RET_STOP（感谢朝泽提供补丁）。

  • mledit keydown 事件处理后返回 RET_STOP。

  • 2019/09/16

  • 重构 ubjson parser
  • 完善 switch（感谢朝泽提供补丁）。
  • 完善 color component（感谢朝泽提供补丁）。

  • 完善 main loop sdl（感谢朝泽提供补丁）。

  • 2019/09/15

  • ubjson reader

  • ubjson parser

  • 2019/09/14

  • ubjson writer

  • 2019/09/13

  • 窗口切换到后台时自动失去焦点。

  • 2019/09/11

  • 优化 update style 的处理流程。
  • 修改 style 和 state 不一致的 BUG（感谢王程提供补丁）。
  • 修改 window_manager_create_animator，只有一个窗口时不创建动画（感谢王程提供补丁）。
  • 修改 text selector 设置 selected index 的 BUG。

  • 完善 dialog highligher 对 native window resize 事件的处理。

  • 2019/09/10

  • 更新文档。

  • 修改 color picker 控件动态调整大小的问题。

  • 2019/09/05

  • 完善 fontgen（感谢智明提供补丁）。
  • 完善 sdl main loop（感谢朝泽提供补丁）。

  • 增加 socket stream 实现。

  • 2019/09/04

  • 修改 freetype 字体大小的问题（感谢智明提供补丁）。
  • change time to uint64

  • 修改 PC 版本获取系统时间的函数（感谢陈谭提供补丁）。

  • 2019/09/03

  • edit/mledit 失去焦点时，unselect 当前选中的文本。

  • 缺省使用 stb 字体加载器。

  • 2019/09/02

  • merge patch issue #224（感谢陈谭提供补丁）。

  • 2019/09/01

  • children layouter list view 增加 cols 参数。

  • 2019/08/30

  • 修改 windows 下使用单头文件 freetype 的问题（感谢陈谭提供补丁）。
  • 修改 list view children layouter 的 BUG（感谢尧燊提供补丁）。
  • 完善《硬件资源需求评估》（感谢智明提供补丁）。

  • 位图字体比较时，忽略字体大小（感谢智明提供补丁）。

  • 2019/08/29

  • 修改重载 new 的问题（感谢陈谭提供补丁）。
  • 修改 combox 在 dialog 上焦点设置错误的问题。
  • 优化数字时钟，时间没变时不重绘。
  • 修改 widget 焦点切换的 BUG（感谢尧燊提供补丁）。

  • 修改 children layouter 的 BUG（感谢尧燊提供补丁）。

  • 2019/08/28

  • 增加 widget_reset_canvas 用于 designer 打开新工程时清除 vgcanvas 中的资源。
  • hscroll_label 支持右对齐（感谢智明提供补丁）。
  • 修改密码编辑器的 BUG（感谢俊杰提供补丁）。

  • vgcanvas 支持设置 assets manager, 以便从指定的 assets manager 加载字体。

  • 2019/08/27

  • 完善 lcd mono（感谢智明提供补丁）。
  • 完善 wuxiaolin draw line（感谢培煌提供补丁）。

  • 增加 stream 接口，以及基于内存和文件的实现。

  • 2019/08/24

  • 更新文档。

  • 完善 mledit，支持 readonly 属性。

  • 2019/08/23

  • 增加 prop desc 结构。

  • 完善 object/object default

  • 2019/08/22

  • 增加 combo_box_ex 控件（感谢大恒提供）

  • 增加属性 WIDGET_PROP_FOCUSED 表示当前的焦点状态，WIDGET_PROP_FOCUS 属性为过时。

  • 2019/08/20

  • svg 中 float_t 改为 float。
  • 更新 stm32 相关项目。
  • 更新 awtk-mvvm/awtk-nogui/awtk-linux-fb/awtk-iotjs
  • 增加 awtk-lite
  • combobox 处理 resize 事件。

  • combobox 支持自定义打开弹出窗口。

  • 2019/08/19

  • awtk 编译成 tkc/base/widgets/extwidgets/awtk 几个独立的库，并调整部分文件的位置。

  • 2019/08/18

  • 去掉 widget pool。

  • 2019/08/17

  • slider 支持非正方形的 icon（感谢俊杰提供补丁）

  • edit/mledit 处理 resize 事件。

  • 2019/08/16

  • 引入片段帧缓存 (Fragment Frame Buffer)，部分解决 STMF103 上由于没足够内存做 FrameBuffer 导致闪烁的问题。

  • 支持 8bit gray+alpha png

  • 2019/08/15

  • 增加单色 LCD 的文档。
  • 支持 mingw 编译（感谢智明提供补丁）
  • 修改 cairo/pixman config.h 冲突的问题（感谢陈谭提供补丁）

  • 由于生成单色字体需要 freetype，而且 freetype 的效果比 stb 稍微好一点，所以 PC 版本采用 freetype 作为字体引擎。

  • 2019/08/14

  • 完善文档。
  • 增加宏 TK_XML_MAX_ATTRS 用于控制 XML 属性的最大个数（缺省 24)。
  • 通过 widget factory 触发 EVT_WIDGET_CREATED 事件。
  • 修改在 stm32f103 上的问题。

  • 完善 window_animator（感谢智明提供补丁）

  • 2019/08/13

  • 模拟器支持单色屏。

  • 修复 native window 初始化顺序的 BUG（感谢智明提供补丁）

  • 2019/08/12

  • 增加 mono 图片生成工具。

  • 2019/08/11

  • 增加 mono 字体生成工具。

  • 2019/08/10

  • edit/mledit set_text 触发 EVT_VALUE_CHANGED。

  • 增加 lcd mono。

  • 2019/08/09

  • 重构窗口管理器。
  • 完善缺省输入法。
  • 当前窗口为 keyboard 时，不触发 TO_BACKGROUND/TO_FOREGROUND。
  • 修改 slider 资源加载的问题（感谢朝泽提供补丁）
  • 修改 fill rect 坐标的问题（感谢智明提供补丁）

  • 修改 color tile 边框颜色的问题（感谢智明提供补丁）

  • 2019/08/08

  • 重构
  • 完善 mutable image（感谢智明提供补丁）
  • 完善 expr eval，支持十六进制数。
  • mledit 支持 value changing 事件。

  • 完善 slider 拖动效果。

  • 2019/08/07

  • 修改 valgrind 发现的问题。
  • 修改 shortcut 的 BUG。
  • 完善 SDL 事件处理（感谢朝泽提供补丁）
  • 完善 pages 控件（感谢朝泽提供补丁）

  • 修改 event 文档的 BUG（感谢朝泽提供补丁）

  • 2019/08/06

  • 优化 nanovg GL fragment shader(draw text)。
  • 禁用点击 scrollview 中控件时自动滚动到可视区的功能。

  • 完善 slider 拖动效果。

  • 2019/08/05

  • 修改 uiloader/window base/style mutable/layouter 等 BUG（感谢尧燊提供补丁）。

  • 2019/08/04-05

  • 优化 nanovg GL fragment shader。
  • 完善 Android 移植。

  • 完善 slide view 控件（感谢朝泽提供补丁）

  • 2019/08/03

  • 完善 Android 移植。

  • 2019/07/20-8/1

  • window manager 抽象成接口。

  • 引入 native_window 接口。

  • 2019/08/02

  • 禁用 label/button/image/hscroll_label 的缓存。

  • 2019/07/29

  • fix edit clone 的问题。

  • 2019/07/26

  • 完善 text edit（感谢智明提供补丁）

  • 2019/07/24

  • 完善 preview_ui（感谢俊杰提供补丁）

  • 2019/07/20

  • 完善 list_view_h。

  • 2019/07/19

  • Slider 的图标用 ICON 方式绘制。
  • 增加属性 with_focus_state，如果希望控件具有焦点状态，有不希望焦点停留，可以用本属性代替 focusable 属性。

  • 完善控件动画。

  • 2019/07/18

  • gles 的 canvas 画直线和画矩形边框的线宽问题，gles 统一和 agge 一样为 1 线宽（感谢智明提供补丁）。

  • 2019/07/17

  • 完善 switch 控件（感谢朝泽提供补丁）

  • 2019/07/15

  • 完善 agge 后端（感谢智明提供补丁）
  • 完善 cairo 后端（感谢智明提供补丁）

  • 完善 demoui。

  • 2019/07/12

  • 改进 widget_get_type 通过属性获取。

  • 完善 scrollbar 子控件布局。

  • 2019/07/11

  • edit 支持自定义的字符有效性检查函数。
  • tab button group 支持 scrollable 属性。

  • 增加获取全局鼠标状态的函数。tk_get_pointer_x/tk_get_pointer_y/tk_is_pointer_pressed

  • 2019/07/10

  • 修改 wcs 几处编译警告（感谢陈谭提供补丁）。

  • 增加生成控件模板的代码生成器。

  • 2019/07/09

  • 完整弹出窗口动画，支持在不同位置弹出。

  • 支持 bmp（感谢俊杰提供补丁）。

  • 2019/07/08

  • 表达式支持条件运算。

  • 2019/07/07

  • 完善 mledit(awtk-web 支持 mledit)。

  • 修改 valgrind 发现的问题。

  • 2019/07/06

  • 增加 hscroll_label 控件。

  • 修改 mledit 获取 max_lines 的 BUG。

  • 2019/07/05

  • 修改一些编译警告。
  • 修改 MacOS 上双击启动时找不到资源的问题。

  • 修改 scrollbar 隐藏导致 listview relayout 的问题。

  • 2019/07/04

  • 修改多行编辑器鼠标选择文本时的坐标偏差。
  • 增加 TK_GLYPH_CACHE_NR 宏，允许开发者自行定义。
  • 更新文档（感谢俊杰提供补丁）。
  • 修改软件键盘删除键无效的问题。

  • set visible 后设置 relayout 标志。

  • 2019/07/03

  • 更新 demoui
  • mledit 增加 max_lines 属性。
  • mledit 支持 pageup/pagedown
  • 动画停止时 reversed 设置为 FALSE。
  • 修改 svg 图片 fill=”“时的问题。
  • widget 的 pointer/key 事件处理增加 can_not_destroy 保护。

  • 增加行号控件，配合 mledit 控件使用。

  • 2019/07/02

  • 修改 OpenGL 模式下 SVG 无法绘制的问题（感谢智明提供补丁）。

  • mledit 支持垂直滚动条。

  • 2019/07/01

  • 增加 self_layouter_menu 文档和示例。

  • 2019/06/30

  • 增加 self_layouter_menu 方便实现弹出菜单。

  • 2019/06/29

  • 子控件缺省布局方式增加 align_h 的参数，

  • 2019q/06/28

  • 完善 edit。

  • 完善 combobox

  • 2019/06/26

  • 新增内存耗尽处理。

  • 修改 slide menu 的 BUG（感谢朝泽提供补丁）

  • 2019/06/25

  • 完善 slider。dragger 以实际 icon 为准。
  • 让 bitmap 引用 image_manager 以区分 bitmap 是由哪个 image_manager 加载的。

  • 修改 cairo global alpha 的 BUG，目前 draw_image/fill/stroke 支持 global alpha, gradient 暂时不支持。

  • 2019/06/24

  • 用 stb_text_edit 重新实现 edit 控件，支持取消、重做、全选、拷贝、剪切、粘贴和键盘选择等功能。

  • 增加多行编辑控件 (mledit)。

  • 2019/06/22

  • 修改 canvas_set_font/vgcanvas_set_font 脚本绑定的问题（感谢尧燊提供补丁）。

  • 2019/06/21

  • 修改 slide view/fps 脏矩形计算的 BUG（感谢陈潭提供补丁）。

  • 修改 idle 文档的问题（感谢俊杰提供补丁）。

  • 2019/06/18

  • 修改 window_manager_update_cursor 的 BUG（感谢智明提供补丁）

  • 修改 main_loop_post_pointer_event 的 BUG（感谢朝泽提供补丁）

  • 2019/06/17

  • SDL FB 模式启用脏矩形。

  • 增加 lcd_mem_special 用于实现一些特殊的 FB 格式。

  • 2019/06/15

  • 增加 timer_modify

  • 支持动态修改屏保时间。

  • 2019/06/14

  • 增加 app_root 自动检测。

  • 2019/06/13

  • 修改 lcd_sdl2_resize 的 bug（感谢尧燊提供补丁）。

  • image/svg/gif 支持从文件系统中加载图片。

  • 2019/06/12

  • 修改全局字体缩放的问题。

  • 修改 scroll_view_on_layout_children 在特殊情况的 BUG。

  • 2019/06/10

  • 修改 switch 控件，在启用脏矩形而且图片高度大于控件高度时，渲染残留的问题。

  • 2019/06/8

  • 修改 tab_button_group_on_paint_active_button 中的 BUG。

  • 修改 tab_button_set_value 时 pages 还没创建的问题。

  • 2019/06/5

  • 更新 stm32 工程，修改了一些警告。
  • main loop 增加 app_quited 标志，方便 awtk-iotjs 退出程序。

  • 增加 style border_width

  • 2019/06/4

  • 修复 tk_abs 的 bug
  • 修改 guage_pointer_set_anchor 的注释错误
  • 修改 widget_animator_manager_find 的 name 可以为空（默认返回第一个有效元素），主要是为了判断控件是否有动画
  • 添加 slide_indicator 控件，默认作为 slide_view 的指示器
  • 修复 scroll_view 的 bug（scroll_bar_m 不会自动隐藏的问题，比如 list_view 中拖动单位高度后）
  • 修复 scroll_view 的 fix_end_offset 失败的问题（比如在 list_view 中上下拖动直到有空白后，横向移动，松开鼠标 list_view 不会恢复）

    感谢朝泽提供以上补丁。

  • 增加 main_loop_step，方便与 IOTJS 集成。
  • 修改 ui_loader_xml 中的昨天引入的 BUG。

  • 修改 stm32 编译警告。

  • 2019/06/4

  • 修改 widget_clone 支持拷贝 mutable style。
  • windows 平台缺省 BACKEND 使用 GLES2。
  • 修改 hscrollable 适用于没有 widget animator 的情况。

  • 控件的属性支持放到 property 标签中，详情请参考 UI 描述文档。

  • 2019/06/3

  • 修改 add_child/remove_child，窗口管理器特殊处理。

  • 缺省启用 style mutable，具体用法请参考主题文档。

  • 2019/06/2

  • 完善 expr eval 的函数调用支持多个参数。

  • 2019/05/31

  • 修改 cairo 显示图片的问题 (cairo 需要 alpha 预乘的图片）。
  • 修改 cairo SVG 动画的问题 (cairo 不支持 scale 时，xy 为 0 的情况）
  • 增加输入事件处理流程文档。
  • children_layouter_default 增加 keep_disable 和 keep_invisible 参数。

  • children_layouter_list_view 增加 keep_disable 和 keep_invisible 参数。

  • 2019/05/30

  • 增加颜色格式描述文档。
  • FAQ 增加半透明相关的问答。
  • tab button 放在 scrollview 中，激活时自动滚动到可见区域。
  • 候选字支持左右滚动。

  • 资源管理可以设置自己的 system info 和 locale info，方便 IDE 区分自己的窗口和被设计的窗口。

  • 2019/05/29

  • 增加 overlay 窗口
  • 完善 expr_eval

  • 去掉 TK_DEFAULT_FONT 宏定义，提供函数 system_info_set_default_font 设置缺省字体（一般不用调用）。

  • 2019/05/28

  • 修改 enums.c 编译问题（感谢陈潭提供补丁）。
  • 修改 vgcanvas_reinit 的问题（感谢陈潭提供补丁）。
  • 合并 bgfx 补丁（感谢大恒提供补丁）。
  • 完善 shortcut。

  • 完善事件处理流程。

  • 2019/05/27

    • 窗口在切换到前台和后台时分别触发事件 EVT_WINDOW_TO_FOREGROUND 和 EVT_WINDOW_TO_BACKGROUND
    • 窗口被切换到前台时，把窗口管理器的 key_target 设置到当前窗口。
    • pages 切换当前页时，自动切换 key_target 到当前页面。
    • slide view 切换当前页时，自动切换 key_target 到当前页面。
    • 增加 shortcut
    • 完善按键处理

  • 2019/05/25

  • 修改窗口中存在 pages/slideview 时焦点切换的问题。

  • 2019/05/24

  • 部分控件增加 inputable 属性。
  • 修改 progress circle 半径的问题（感谢均权提供补丁）。

  • 完善字符串翻译文，增加数字时钟中星期和月份的处理。

  • 2019/05/23

  • 修改 edit 在 scrollview 中的问题。
  • resize 后设置 need_relayout_children 标志（感谢朝泽提供补丁）。
  • 修改 slide menu 中 find target 的 bug（感谢朝泽提供补丁）。
  • move focus 时跳过不可见和不可用的 widget。
  • 当前没有焦点控件时，窗口收到 tab 键时，让第一个 focusable 控件得到焦点。
  • 修改 guage pointer 在 load widget 时的警告信息。

  • 增加控件焦点相关问题的文档。

  • 2019/05/22

  • 完善事件处理流程，修改 slide menu 放在 slide view 中的问题。
  • 窗口增加 move_focus_next_key/move_focus_prev_key 两个属性，用于设置焦点的键值。具体用法请参考：demos/assets/raw/ui/basic.xml。
  • 将 ListView 的布局策略放到 children_layouter_list_view 中，并支持边距和间距等参数。
  • 2019/05/21
  • button/check_button 在收到回车和空格键时触发 click 事件。
  • 支持用 tab 键切换任意控件的焦点。

  • 支持用 focusable 属性将控件设置可获得焦点，实现 tab stop 类似的效果。focusable 的控件，其 style 必须具有 focused 状态，否则无法显示。

  • 2019/05/20

  • 修改 ui_loader_load_widget 因为无窗口导致 set_tr_text 失败的问题。

  • 2019/05/18

  • 修改 window_manager_open_window 将 key\target 设置为新窗口。
  • 合并 text selector 的补丁（感谢智明提供补丁）。

  • slider 支持上下左右键盘。

  • 2019/05/16

  • 去掉 slist_remove 中一个警告。
  • 完善 slider。垂直 slider 过宽或水平 slider 过高时缩放图标，否则显示有些怪异。
  • image animitioin 的自动播放放到第一次绘制时启动。
  • color picker 的对子控件的 hook 放到第一次绘制时处理。

  • slide view 支持 list view 作为子控件。

  • 2019/05/15

  • 合并 guage pointer 支持锚点的补丁（感谢智明提供补丁）。
  • 完善 color_hex_str（感谢朝泽提供补丁）。
  • 修改 guage pointer 中文档错误（感谢朝泽提供补丁）。

  • 增加 vgcanvas_cairo。cairo 速度快功能全，但代码体积稍大，请酌情使用。

  • 2019/05/14

  • style 增加 margin_left/margin_right/margin_top/margin_bottom 几个参数用于细化之前的 margin 参数。 这个只影响 icon/text，不影响子控件（子控件由布局算法决定）

  • 2019/05/13

  • 增加 widget_add_idle。
  • 完善 window_manager_do_open_window。
  • 子控件布局算法和控件自身算法支持注册自定义算法。

  • 增加函数 widget_find_animator（感谢均权提供补丁）。

  • 2019/05/11

  • guage pointer 支持锚点（感谢智明提供补丁）。
  • 修改在 Ubuntu 18 32bit 上编译的问题（感谢 hardyun 提供补丁）。

  • 增加条件变量 tk_cond_var。

  • 2019/05/10

  • 修改 SDL 输入法位置的 BUG。

  • 增加下列事件，在子控件处理之前触发，让用户注册的事件处理函数，有机会拦截这些事件。

    • EVT_POINTER_DOWN_BEFORE_CHILDREN
    • EVT_POINTER_UP_BEFORE_CHILDREN
    • EVT_KEY_DOWN_BEFORE_CHILDREN
    • EVT_KEY_UP_BEFORE_CHILDREN

  • 2019/05/08

  • 完善 idl gen 工具支持外部项目并编写文档。
  • 完善 doc gen 工具支持外部项目并编写文档。

  • 因为脚本绑定生成工具只接受一个 IDL 文件，所以增加 merge.js 工具用于将多个 IDL 文件合并成一个 IDL 文件。

  • 2019/05/07

  • edit 在焦点状态时，如果文本为空，仍然显示 tips。
  • 重构 pointer/key 事件处理流程，分成三个阶段：子控件处理前、子控件和子控件处理后。
  • 修改 slider 支持放在 slide_view 中。
  • 修改 slide_menu 支持放在 slide_view 中。
  • 重构 image loader 支持自定义的 image loader（使用 imae_loader_register 注册自己的 loader)。

新增 WIDGET_STATE_EMPTY_FOCUS 状态，请参考缺省主题为 edit 控件增加该状态。

  • 2019/05/06
  • rename thread_t to tk_thread_t。

  • 软键盘支持 delete 键。

  • 2019/05/02

  • 支持 AWTK-JS 的开发的应用程序在 WEB 上运行。

  • 2019/05/01

  • 修改 image base 函数名在 jerryscript 中引起的问题。

  • 2019/04/30

  • 修改在 32 位系统上编译的 BUG（感谢文涛提供补丁）。
  • 为 awtk-web 做了些修改，方便 web 版本中动画优化。

  • 修改 canvas_fix_rect 导致 text selector 重影的问题。

  • 2019/04/29

  • 修改 AWTK WEB 脏矩形的 BUG。

  • 修改 SVG 解析器中一个 BUG。

  • 2019/04/28

  • AWTK WEB 版本 GIF 目前在 iPhone 上正常，其它浏览器只显示第一张图片。

  • 2019/04/26

  • 重构 color component.

  • mutable bitmap 支持 web 版本。

  • 2019/04/25

  • 更新文档。
  • theme/fontmanger 支持脚本化（感谢朝泽提供补丁）。
  • widget 处理 RET_STOP 返回值（感谢朝泽提供补丁）。
  • dragger 除 POINTER ABORT 消息（感谢朝泽提供补丁）。
  • 修改窗口管理器取整的问题（感谢朝泽提供补丁）。
  • 修改 slide menu 在 web 上裁剪的问题。

  • 修改 widget_set_as_key_target 导致自定义软键盘焦点的问题。

  • 2019/04/24

  • 修改 AGGE 模式支持 APP_DESKTOP 的问题（感谢尧燊提供补丁）
  • 更新文档。
  • fix toast bug
  • 修改 edit 在 scroll view 中 clip 的 BUG。
  • 修改 slider 在 scroll view 中的 BUG。

  • 准备发布 1.1，用 cppcheck/infer/valgrind 检查。

  • 2019/04/23

  • 修改编译脚本支持 python3。建议大家都使用 python3，python2 很快不被官方支持了。
  • 修改 awtk-web 在 windows 下编译的问题。
  • 修改 edit 在 scrollview 中的问题（感谢朝泽提供补丁）

  • 增强 scrollview 的扩展性（感谢朝泽提供补丁）

  • 2019/04/22

  • input method 支持脚本化，方便在脚本中实现自定义软键盘。

  • key code 支持脚本化。

  • 2019/04/21

  • 为 awtk web 做了些改进。

  • 重构 time clock。

  • 2019/04/20

  • 为 awtk web 做了些改进。

  • 2019/04/19

  • 完善 scale 算法。
  • 优化 scale 窗口动画。
  • 完善 default self layouter，right/center/bottom/middle 支持百分比。
  • 内置对话框启用缺省高亮策略。

  • 完善 widget_get_window，支持 designing window。

  • 2019/04/18

  • 增强 scrollview 的扩展性（感谢朝泽提供补丁）
  • 优化软件渲染 (bgr565 缩放半透明图片快 30%，缩放不透明图片快一倍）。

  • 增加 image_clear 函数。

  • 2019/04/16

  • window manager 支持 paint 事件。

  • 2019/04/15

  • 去掉 widget_is_window_opened 中的警告。

  • 2019/04/14

  • 为 AWTK-WEB 移植做了些修改。

  • 2019/04/13

  • 增加 cppcheck 和 infer 静态检查。

  • 修改 cppcheck 和 infer 发现的警告。

  • 2019/04/12

  • 增加函数 ui_loader_load_widget(ui_loader.h)。

  • 2019/04/10

  • 更新 demo，增加 back_to_home 的 demo。
  • 修改 SDL 的 BUG（感谢大恒和陈谭提供补丁）
  • 增加函数 bitmap_save_png 帮助调试显示相关的 BUG。

  • 修改 widget_destroy_children 的 BUG（感谢朝泽和叶冬提供补丁）

  • 2019/04/09

  • 修改 window_manager_back_to_home。
  • dialog 支持非模态用法（请参考 dialog 的手册）

AWTK 在浏览器中运行时无法支持模态对话框， 如果希望开发的 AWTK 应用程序在浏览器（包括各种小程序）中运行和演示，请不要使用模态对话框。

  • 2019/04/08
  • 重构
  • 修改 valgrind 发现的内存泄露。
  • 增加 assets_manager_preload

  • 合并 optimization 分支，fill_image 半透颜色性能提高 3 倍。

  • 2019/04/07

  • 为适配 AWTK-WEB 做了写小的修改。

  • 修改资源脚本，生成文件列表，用于 awtk-web。

  • 2019/04/05

  • 生成的常量数据增加字节对齐。

  • 2019/04/03

  • 恢复 WITH_MINI_FONT 宏。
  • 修改 widget_destroy_in_idle 中潜在的 BUG（感谢尧燊提供补丁）。
  • 修改 edit 软键盘无法关闭的 BUG。
  • 修改窗口动画因为取整导致的问题。
  • text selector 的 options 属性，指定范围时，支持指定格式。
  • 修改 window_base_load_theme_obj 从自己的 assets_manager 中加载资源（感谢朝泽提供补丁）。

  • 修改 color picker 的 BUG（感谢朝泽提供补丁）。

  • 2019/04/02

  • 软键盘支持 tab 键。
  • 修改窗口动画内存溢出问题（感谢陈谭提供补丁）。
  • 修改 windows 平台编译问题（感谢陈谭提供补丁）。
  • 修改 slideview clip 的 BUG(issue #105)。
  • 顶层窗口为 dialog 时，window_manager_back_to_home 直接返回失败（感谢尧燊提供补丁）。
  • EVT_NONE 移到 tkc 中（感谢尧燊提供补丁）。
  • 修改 widget_destroy_in_idle 中潜在的 BUG（感谢尧燊提供补丁）。
  • 调用 SDL_CaptureMouse 支持鼠标离开 SDL 窗口（感谢尧燊提供补丁）。
  • 增加 style_mutable_get_value
  • 增加 style_mutable_cast

  • 调用 assets_manager_unref 的 BUG（感谢朝泽提供补丁）。

  • 2019/04/01

  • 从 win 获取 locale info。
  • 增加测试。
  • 修改 issue #104

  • 增加 font_manager_unload_font

  • 2019/03/30

  • 修改 back_to_home 的 BUG #102（感谢陈谭提供补丁）。

  • 更新 stm32 相关工程。

  • 2019/03/29

  • 修改 window_manager_back_to_home 的 BUG。

  • 合并 reworkwa 分支：

    • 窗口动画增加 slide_up/slide_down/slide_left/slide_right.
    • 窗口动画支持自定义。
    • 支持对话框高亮策略。
    • 更新文档。
    • 新增 src/dialog_highlighters 目录和一些文件，可能需要更新工程文件和文件拷贝脚本。

  • 2019/03/28

  • 修改 3rd/SDL/SConscript（感谢大恒提供补丁）。
  • 修改 bool_t 在 aworks 上重复定义的问题（感谢陈谭提供补丁）。

  • 修改编辑器的 BUG（感谢俊杰提供补丁）。

  • 2019/03/27

  • 修改 style mutable 的 BUG（感谢朝泽提供补丁）

  • 修改 utils 的 BUG（感谢朝泽提供补丁）

  • 2019/03/25

  • 修改 issue #101（感谢俊杰提供补丁）
  • 修改 issue #100。

  • 更新 STM32 相关工程。

  • 2019/03/22

  • 完善资源生成脚本。
  • widget vtable 增加 inputable 属性。
  • 修改 listview 没有 scrollbar 时的问题（感谢陈谭/俊杰提供补丁）。
  • edit/spinbox 在修改 text 后处理 prop changed 事件，以更新控件状态。

  • 修改参数检查的存在的问题（感谢俊杰提供补丁）

  • 2019/03/21

  • 增加 lcd_profile 用于对绘制函数进行 profile。
  • data 资源支持同文件名，不同扩展名。

  • slider 增加 bar_size 属性。

  • 2019/03/20

  • 支持编译 Windows 32 位版本（感谢陈谭提供补丁）
  • 修改资源生成脚本，对于 data 数据，不限制文件名 (DATA 类型的资源需带扩展名才能访问）。
  • 修改 scrollbar 的 style 配置的 BUG。
  • 修改关闭 system_bar 时没有注销事件的 BUG（感谢朝泽提供补丁）。
  • window 支持 fullscreen 属性。
  • 修改 edit 缺省焦点的 BUG。
  • 支持用 tab/up/down 键切换编辑器焦点。

  • 修改 wheel 事件在 windows 下方向相反的问题。

  • 2019/03/19

  • 增加 window_close_force 函数。
  • 修改 window_manager_close_window 多次关闭同一个窗口的问题。
  • 增加 RET_ITEMS_CHANGED。
  • 修改 EVAL_MAX_NAME_LENGTH 为 32（以前为 16，有些短）。

  • 完善 scroll_bar_set_params。

  • 2019/03/18

  • 增加 color_rgba_str。

  • tk_atof 和 tk_atoi 等函数，使用系统自带实现。

  • 2019/03/15

  • 完善资源脚本，支持 data/xml 格式。

  • 2019/03/14

  • 修改 edit/widget 支持自定义的软键盘。
  • 增加自定义的软键盘的示例和文档。

  • 更新文档。

  • 2019/03/13

  • 增加了 object_get_type 等函数。
  • 修改 widget_use_style 的问题。
  • 修改 emitter_remove_item 的 BUG。
  • 增加 object_default_clone。

  • 修改 widget_clone 没有拷贝自定义属性的问题。

  • 2019/03/12

  • 窗口管理器增加 window_manager_back/window_manager_back_to_home
  • 增加示例。

  • 更新文档。

  • 2019/03/11

  • date time 中增加 wday 表示星期。
  • 数字时钟支持星期和月的英文。
  • 修改事件处理函数返回 RET_REMOVE 时，同时注册事件处理函数的问题。

  • 更新资源。

  • 2019/03/08

  • 支持屏幕密度不敏感的图片，放到 images/xx 中。

  • UI/图片资源名称支持表达式。

  • 2019/03/07

  • 增加 str_expand_vars 函数。
  • 重新实现 system_info。

  • 支持设置字体的全局缩放比例。

  • 2019/03/06

  • slide view 支持设置不同的切换动画。

  • 修改 single fb 的 flush 函数相关问题（感谢陈谭提供补丁）。

  • 2019/03/05

  • 更新文档。
  • slide view 支持循环切换。

  • 修改 canvas_draw_text 和 vgcanvas_fill_text 坐标不一致的问题。

  • 2019/03/04

  • 完善 progressbar/slider 的显示函数。
  • 增加 widget_stroke_border_rect/widget_fill_bg_rect 等函数供子类使用。
  • 合并 issue #97（感谢陈谭提供补丁）
  • 更新 bgfx backend（感谢大恒提供补丁）。

  • 在类的 annotation 中增加 window/widget/design

  • 2019/03/04

  • 更新文档。

  • 修改 progress_bar 显示的 BUG（感谢俊杰提供补丁）。

  • 2019/03/02

  • 增加 dialog_warn/dialog_info/dialog_warn。

  • 2019/03/01

  • 完善 label。
  • 更新文档。

  • 增加 dialog_toast

  • 2019/02/28

  • 增加 mutable image，用于 camem 和 video 显示图像。

  • 2019/02/27

  • 同步 BGFX 最新代码。

  • 2019/02/26

  • 合并 typecheck 分支。
  • 控件支持运行时类型检查（目前支持 Linux/Windows/Macos 和部分嵌入时平台）。
  • 修改 main_loop_sdl_fb_destroy 的问题（感谢大恒提供补丁）。
  • 修改 canvas_t 中注释错误（感谢朝泽提供补丁）。

  • 完善 image_animation，修改#85

  • 2019/02/25

  • 完善 image_animation，修改#85

  • 重构 SConstruct，把公共代码放到 awtk_config.py，可供其它项目使用。

  • 2019/02/22

  • 完善控件文档（感谢俊杰提供补丁）。
  • 更新 IDL。

  • 修改 awtk-js 代码产生器中生成 cast 函数的问题。

  • 2019/02/21

  • 增加 object_copy_prop
  • 修改 value_copy/value_deep_copy 的 BUG。
  • 修改 named_value_set_value 的 BUG。
  • 完善布局文档（感谢俊杰提供补丁）。

  • 支持动态设置屏保时间。

  • 2019/02/20

  • 按钮增加 enable_long_press 属性用于启用长按事件，触发长按事件后不再触发点击事件。
  • 增加 timer_reset 函数。

  • 增加屏保支持。

  • 2019/02/19

  • add darray_tail/darray_head。

  • 2019/02/18

  • 完善 image_animation，支持指定一个范围。

  • 完善 dialog，避免 dialog_model 应用到普通窗口上。

  • 2019/02/15

  • bitmap/color/date_time/rect/named_value/object/object_default/emitter/value js 绑定支持 gc。
  • lua 绑定还不支持 gc(“__gc”被调用多次，而且 udata 居然无法修改，如果哪位朋友熟悉，麻烦指点一下）

  • 更新 stm32f103/427/767 的工程。

  • 2019/02/14

  • 增加 tk_under_score_to_camel

  • 增加 widget_set_prop_pointer/widget_get_prop_pointer

  • 2019/02/13

  • 窗口去掉 script 属性。

  • 2019/02/07

  • 资源支持脚本。

  • 修改 object_has_prop 的 BUG。

  • 2019/02/05

  • 公开函数 str_extend

  • 2019/02/04

  • 增加测试程序。
  • 更新资源。
  • edit 处理属性 value。

  • 完善 str/tokenizer/combobox/checkbutton

  • 2019/02/03

  • 增加 object_notify_changed。

  • 2019/02/02

  • 增加 tk_str_ieq

  • 2019/02/01

  • 增加测试。
  • 合并 mvvm 分支。

  • 将 mvvm 代码移动到独立的项目：awtk-mvvm

  • 2019/01/31

  • 增加 binding context awtk

  • 2019/01/30

  • 增加 binding context

  • 2019/01/29

  • 增加 navigator

  • 2019/01/28

  • 增加 navigator_request

  • 增加 navigator_handler

  • 2019/01/27

  • 增加 view_model

  • 2019/01/26

  • 修改字符串翻译的问题。issue 83/86
  • 增加 value converter factory
  • 增加 value validator factory

  • add expr eval

  • 2019/01/25

  • 增加 model_delegate。

  • 2019/01/24

  • 增加 value_validator/value_validator_delegate

  • 2019/01/23

  • 增加 value_converter/value_converter_delegate

  • 2019/01/22

  • 增加 binding rule parse

  • 2019/01/21

  • 增加 data_binding/command_binding.

  • 增加测试程序。

  • 2019/01/20

  • 完善 object，增加一些包装函数。

  • 增加 binding_rule/binding_rule_data

  • 2019/01/19

  • 修改 valgrind 发些的问题，并增加一些脚本。

  • 增加 MVVM 分支。

  • 2019/01/18

  • 增加文档。

  • 2019/01/17

  • 整理 API 文档：list_view/list_view_h/list_view_item/scroll_view/scroll_bar
  • 整理 API 文档：self_layouter/self_layouter_default/children_layouter/children_layouter_default
  • 去掉 array 类，使用 darray 类代替。

  • 修改 valgrind 发现的泄露内存问题。

  • 2019/01/16

  • 增加 darray 类，逐步替换以前的 array 类。
  • 增加 widget pool 用于控件的缓存和重复利用，可以通过 WITH_WIDGET_POOL 启用。
  • 增加 widget_create 函数，简化子类控件的创建函数，同时让通用控件本身的由 widget pool 集中管理。
  • 使用 array 的地方替换为 darray。

  • 更新 stm32 相关工程。

  • 2019/01/15

  • 整理 API 文档：progress_circle/rich_text/slide_menu/slide_view/svg_image/switch
  • 整理 API 文档：text_selector/time_clock/digit_clock
  • 增加 progress_circle c 语言 demo。
  • 增加 slide_menu c 语言 demo。
  • 增加 slide_view c 语言 demo。
  • 增加 svg_image c 语言 demo。
  • 增加 switch c 语言 demo。
  • 增加 text_selector c 语言 demo。
  • 增加 time_clock c 语言 demo。
  • 增加 digit_clock c 语言 demo。

  • 增加 INPUT_CUSTOM 用于关闭系统缺省软键盘。

  • 2019/01/14

  • 完善脚本绑定（增加函数和注释）。

  • 整理 API 文档：color_picker/gif_image/guage/guage_pointer/image_animation/image_value/keyboard。

  • 2019/01/13

  • 完善脚本绑定（增加函数和注释）。
  • 更新 awtk-js。

  • 更新 awtk-lua。

  • 2019/01/12

  • 重新实现 timer，解决 timer 中打开模态窗口的问题。
  • 重新实现 idle，解决 idle 中打开模态窗口的问题。

  • 完善 object，在修改属性和销毁时触发事件。

  • 2019/01/11

  • 增加 slist_t。

  • 2019/01/10

  • 增加 object_t/object_default_t/named_value_t 等几个类。

  • value_t 支持 object。

  • 2019/01/09

  • 完善 slide menu，增加 mask color，实现两边的按钮淡出的效果。
  • 增加 canavs widget 的 demo

  • 整理 API 文档：canvas_widget

  • 2019/01/08

  • 完善 text_selector，增加 mask color，实现伪 3D 效果。
  • 修改 font size 的类型为 font_size_t。
  • 修改 agge scan line 为负的 BUG（感谢陈谭提供补丁）。

  • 按钮支持长按事件。

  • 2019/01/07

  • 修改”Copyright (c) 2018 - 2018”为”Copyright (c) 2018 - 2019”

  • 整理 API 文档：tab_control/tab_button/tab_button_group。

  • 2019/01/04

  • slide_menu 动态决定可见子控件的个数（由长度与宽度比例和子控件个数决定）。

  • 修改 combobox 的 BUG。

  • 2019/01/03

  • 同步 SDL 代码。
  • 整理 API 文档：timer/idle
  • 用 valgrind 测试内存问题，并修改 progress_circle 中的内存泄露问题。
  • 修改桌面版本窗口 resize 的问题。
  • 密码编辑器增加显示/不显示明文的开关。
  • 键盘增加关闭按钮。
  • 修改把控件状态改成字符串导致的 BUG。

  • 修改处理 capslock 的 BUG。

  • 2019/01/02

  • 整理 API 文档：input_method/input_method_default/input_method_sdl/input_method_null
  • 整理 API 文档：input_engine/input_engine_pinyin/input_engine_null

  • 更新 stm32 相关工程。

  • 2018/12/31

  • 整理 API 文档：ui_loader/ui_builder/ui_xml_writer/ui_binary_writer/ui_builder_default

  • 2018/12/30

  • 整理 API 文档：style/style_const/style_mutable/theme/style_factory

  • move ui_loader.c/.h to base 目录。

  • 2018/12/29

  • 整理 API 文档：bitmap/image_loader/image_manager/image_loader_stb
  • 整理 API 文档：asset_info/assets_manager/locale_info

  • 重构 image 相关的代码

  • 2018/12/28

  • 整理 API 文档：glyph/font/font_loader/font_manager/font_loader_ft/font_loader_stb/font_loader_bitmap

  • 重构 font 相关的代码

  • 2018/12/27

  • 整理控件 API 文档：value/mem/str/wstr/array/wbuffer/rbuffer/rgba/color/color_parser。
  • 修改 SDL 输入法的问题（感谢大恒提供补丁）。
  • 完善 freetype 字体渲染（感谢 zjm09 提供补丁）。
  • 完善 glyph_cache，允许 glyph 有不同的实现。
  • 重构 color_parser 并增加单元测试。

  • 把 events 拆成两部分，基础部分移到 tkc 中。

  • 2018/12/26

  • 为了语义的一致性，把 widget 的虚函数 destroy 改名为 on_destroy。on_destroy 只是通知子类控件即将销毁。
  • 重命名 NAME_LEN 为 TK_NAME_LEN。
  • 增加函数：widget_animate_value_to
  • 修改 widget_animator_time_elapse 计算次数的 BUG。
  • 整理控件 API 文档：color_tile/calibration_win/combo_box_item/button_group
  • 整理控件 API 文档：dialog_title/dialog_client/progress_bar/slider/vgcanvas
  • 支持 freetype 字体渲染（感谢 zjm09 提供补丁）。

  • 完善 value_t。

  • 2018/12/25

  • 整理控件 API 文档：row/column/grid/grid_item/view/group_box/app_bar/system_bar
  • 修改 idle_info_destroy 的 BUG（感谢尧燊提供补丁）。
  • 修改 timer_info_destroy 的 BUG（感谢尧燊提供补丁）。
  • widget 状态由枚举格式改为字符串格式，这样方便第三方控件定义私有的状态。

  • style_id 由枚举格式改为字符串格式，这样方便第三方控件定义私有的 style_id。

  • 2018/12/24

  • 整理控件 API 文档：dialog/popup/window/window_base

  • 2018/12/23

  • 优化。
  • 整理控件 API 文档：spin_box/combo_box

  • 增加 combo_box 的 C 示例代码。

  • 2018/12/22

  • 修改 combobox 事件的 BUG(issue #62)。
  • 增加函数 widgeti_get_prop_default_value。

  • 增加 widget_recycle 函数，支持控件回收，提高运行速度，减少内存碎片。

  • 2018/12/21

  • 整理控件 API 文档：button/label/image/edit

  • 2018/12/20

  • 重新设计 layouter 的架构，把 layouter 分成 self_layouter 和 children_layouter 两个接口，方便扩展支持不同的布局方式（如 css flex)。
  • 更新 layout 的文档，为了保持兼容，旧的 layout 属性仍然支持，新的代码请参考新的文档 layout。
  • 子控件支持浮动布局，不受父控件的 children_layouter 的限制。
  • 支持等宽字体的问题（感谢 zjm1060 提供补丁）。
  • 修改 vgcanvas 中 w/h 为负数时的 BUG（感谢朝泽提供补丁）。
  • 完善 widget_clone/widget_equal/widget_to_xml。
  • widget 增加 sensitive 属性。

  • 完善 main_loop_dispatch_events，支持按键事件（感谢 zjm1060 提供补丁）。

  • 2018/12/19

  • 修改 combobox 弹出窗口位置的 BUG。

  • 修改 widget_animator_manager 中野指针的问题（感谢陈谭提供补丁）。

  • 2018/12/18

  • widget_destroy 自动判断是否需要异步销毁。
  • 修改 issue #61(list item 销毁时，自动移出定时器）（感谢陈谭提供补丁）。
  • 修改 color parser 的 BUG（感谢朝泽提供补丁）。

  • 修改 guage 的 BUG（感谢朝泽提供补丁）。

  • 2018/12/17

  • 抽象 layouter 接口，方便支持不同的 layout 算法（如 CSS 的 flex)。（未完）

  • 2018/12/16

  • 修改 issue #61

  • 主题的背景和边框支持圆角半径 round_radius，仅在定义 WITH_VGCANVAS 时有效。

  • 2018/12/15

  • 调整目录结构。将 base 拆分成 tkc、base 和 widgets 三个目录。
  • awtk.h 包含所有头文件，应用程序只需包含 awtk.h 即可。
    • 好处：一是使用简单，二是避免漏头文件造成的指针被截断的 BUG。
    • 坏处：编译稍慢。对于小型应用程序影响不大。大型应用程序和移植层仍然可以选择只包含需要的头文件。

  • 更新相关工程的代码。

  • 2018/12/14

  • 修改 layout 的 BUG。

  • 2018/12/13

  • 修改 slide menu 的 BUG（感谢尧燊提供补丁）。

  • 2018/12/12

  • 支持任何数值型属性的动画。如 x/y/w/h 等等。
  • 完善 label，支持动态设置显示字符数，形成动画效果。
  • 修改 bgfx 闪烁的问题（感谢大恒提供补丁）。
  • 修改 canvas 的 BUG（感谢朝泽提供补丁）。

  • 更新文档。

  • 2018/12/11

  • gradiant 支持 alpha 渐变。
  • 完善 slide menu 控件，增加测试和 demo。

  • 完善 digit_clock，支持 YY、MM、DD、HH、mm、dd 格式

  • 2018/12/08-10

  • slide menu 控件。

  • 2018/12/07

  • VGCanvas 支持渐变色 (GL 版本 OK，AGGE 版本 OK，AGG 版本暂时不支持）。
  • demoui 增加 vgcanvas 的 demo。
  • draw_vline 高度允许为负。

  • draw_hline 宽度允许为负。

  • 2018/12/06

  • 更新文档。
  • 完善 scroll view 的滚动效果。
  • 修改 label 中换行的 bug。

  • 修改窗口动画时 system bar 闪烁的 BUG。

  • 2018/12/05

  • 修改 scanline_adapter::commit 的 BUG，强制转换导致数据错误覆盖。

  • label 支持多行显示（非自动换行，需自动换行请用 rich_text)。

  • 2018/12/04

  • 更新 stm32 相关工程。
  • 完善 system_bar 控件。
  • 增加 system_bar 控件的使用文档。

  • 窗口管理支持 style。有时通过 style 给窗口管理器设置一张大背景背景，就不需要给窗口和 system_bar 分别设置背景图片了。

  • 2018/12/02-03

  • 增加 system_bar 控件（窗口 vtranslate 动画还需要相应完善）。

  • 2018/12/01

  • 更新 js/lua 脚本绑定。
  • 增加 canvas 控件。

  • 增加 image_value 控件，可以用图片来显示电池电量、WIFI 信号强度和各种数值。

  • 2018/11/30

  • 增加一些测试代码。
  • 增加函数 widget_insert_child/widget_restack。

  • 用户修改系统时间后，更新定时器的启动时间，否则可能导致定时器长时间不会触发。

  • 2018/11/29

  • 修复 scroll view 中脏矩形的问题。
  • awtk-linux-fb 工程支持编译用户的项目。
  • 修改 switch 控件中存在的问题并优化。
  • 修改 layout 参数解析中存在的问题。
  • 修改输入法相关的一些 BUG。

  • 缺省键盘增加中英文切换按钮。

  • 2018/11/28

  • 更新字符串翻译的文档和示例。
  • 键值的前缀有 FKEY 改为 TK_KEY。
  • 把 is_designing_window/is_window 移到 vtable 中。
  • 把 window_manager 中输入设备状态相关的代码移到独立的文件中。
  • 修改 list_item 中的 BUG。
  • 修复 issue #50
  • 修复 issue #51

  • widget_invalidate_force 增加一个参数。

  • 2018/11/27

  • 更新 stm32767/stm429 的工程。
  • 更新资源。

  • 修改编译警告。

  • 2018/11/26

  • 优化不透明的 gif。
  • 修改部分函数 widget_invalidate

  • 增加 grid_item。

  • 2018/11/25

  • 支持 GIF 图片（参考：demos/assets/raw/ui/gif_image.xml)。

  • 2018/11/24

  • svg 支持圆弧路径 (A/a)

  • 2018/11/23

  • 增加 svg_image 控件。SVG 支持的特性请参考 src/svg/README.md。

  • 2018/11/22

  • 完善 button/checkbutton/comboboxitem 对 pointer down abort 事件的处理。
  • 完善 slideview 拖动处理。
  • 完善脏矩形。
  • 完善输入法 (issue #40)。
  • 完善 edit.c，删除字符时触发 changing 事件 (issue #41)。

  • 增加 image_base 类，把图片公共属性放到 image_base 中，方便实现 svg 图片。可能导致接口不兼容，请酌情修改。

  • 2018/11/21

  • 修改一些编译警告。
  • 修改资源生成工具支持 SVG。
  • 修改 slide_view，增加一个拖动阀值，由该阀值和速度共同决定是否切换页面。

  • 增加 clip_board 接口、基于 SDL 和缺省实现。

  • 2018/11/20

  • 合并 BUG #35 的补丁。
  • 合并 BUG #25 的补丁。
  • bsvg_draw（基本功能可用，A/S/T 路径不支持）
  • guage_pointer 支持 bsvg 图片。

  • 修改屏幕旋转时，窗口动画混乱的 BUG。

  • 2018/11/16-19

  • SVG 解析器和 BSVG（二进制格式的 SVG) 解析器。

  • bsvggen/bsvgdump 等工具。

  • 2018/11/16

  • 修改 FPS 的颜色。

  • 2018/11/15

  • 同步 bgfx 的代码。
  • 修改 SConstruct 定义 SDL2。
  • 修改 scroll_view #issues/30
  • 修改 dirty_rect 的 BUG（增加 x_offset/y_offset 引起的）。

  • 完善 guage，支持用颜色绘制指针。

  • 2018/11/14

  • 完善 digit_clock
  • change WITH_NANOVG_GL to WITH_NANOVG_GPU
  • guage 拆成表盘和表针两个控件。
  • 新增加几个 style：selected_text_color、selected_text_color 和 selected_text_color

  • 修改资源生成工具的 BUG。该 BUG 导致资源后面有 4 字节的随机数据（功能不影响正确性）

  • 2018/11/13

  • 修改 agg/agge 为 nanovg 后端时 linecap 的 BUG。

  • 2018/11/12

  • 增加 js demos。

  • 2018/11/11

  • 完善 ProgressCircle 控件。
  • base/time.h 改名为 base/time_now.h，避免和系统 time.h 冲突。

  • 更新文档。

  • 2018/11/10

  • 增加 ProgressCircle 控件。

  • 2018/11/09

  • 重正编译脚本，以便集成 bgfx。

  • 重正 vgcanvas，以便集成 bgfx。

  • 2018/11/08

  • 将 icon_x_offset/icon_y_offset 改名为 x_offset/y_offset，进行整体偏移，效果更好。
  • 修改 dirty_rect 的问题。
  • 注释增加@event 关键字，用来显示当前控件支持的事件。

  • 完善控件的事件，并增加测试程序。

  • 2018/11/07

  • 修改屏幕旋转的 BUG。
  • 修改 get_clip 的 BUG。

  • 更新文档。

  • 2018/11/06

  • 更新动画文档。
  • slideview 支持使用图标作为指示器。

  • style 加了 icon_x_offset/icon_y_offset，方便实现按下效果。

  • 2018/11/04-05

  • 控件动画支持暂停。
  • 控件动画支持时间倍率，让时间变快和变慢。
  • 控件动画支持按名称去开始、暂停、停止和销毁。

  • 更易用的 API。请参考 widget_start_animator/widget_pause_animator。

  • 2018/11/03

  • 增加 date_time 类（嵌入式平台需要调用 date_time_set_impl 获取时间的函数）。

  • 增加数字时钟控件 (ext_widgets/time_clock/digit_clock.c)。

  • 2018/11/02

  • 修改 tools 下的资源生成工具，只在资源变化时才更新资源，以提高开发的效率。
  • update_res.py 增加参数，可以只更新指定类型的资源，以提高开发的效率。
  • update_res.py 放到 scripts 目录下（可在 awtk 目录或 scripts 目录运行）。
  • 增加函数 widget_add_timer，增加的 timer 在控件销毁时，自动销毁。

  • 改进 button，先收到 pointer_down 事件，再收到 pointer_up 事件，才触发 click 事件。

  • 2018/11/01

  • 增加 style_mutable，支持动态修改 style（仅在编辑模式下启用）。
  • 增强 style_factory，支持不同格式的 style。比如想支持 CSS，可以提供一个 CSS 的 style_factory。

  • 更新文档。

  • 2018/10/31

  • 修改 keyboard 崩溃的问题（关闭窗口时自动关闭对应的 keyboard)。
  • 修改 keyboard 刷新的问题（新 keyboard 和旧 keyboard 的高度不一致导致的）。
  • 增加 tk_roundi/tk_clampi。

  • 修 3framebuffer 的 BUG。

  • 2018/10/30

  • edit 的光标颜色从 style(fg_color) 中获取。
  • 修改 canvas 裁剪算法存在的 BUG。
  • 修改 valgrind 查出来的内存泄露问题。

  • demoui 中的仪表增加动画。

  • 2018/10/29

  • assets_manager 支持设置资源路径。
  • font_manager 支持设置 assets_manager。
  • image_manager 支持设置 assets_manager。
  • 提供函数 widget_load_image 用于加载图片，实现新控件时请用本函数加载图片。
  • 控件需要的图片、字体和其它资源均与当前窗口关联，方便在实现 designer 时，designer 本身和被编辑的控件使用不同的资源。
  • Windows 支持多线程编译。
  • 将 UTF8 的源文件转换成 UTF8-BOM。
  • 修改编译警告。

  • nanovg-agge 使用双线性插值算法（感谢攀峰）。

  • 2018/10/28

  • 调整主题的格式：tab_button 处于 active 时的 style，combo_box_item/check_button/radio_button 处于 checked 时的 style，作为不同状态处理，而不是作为不同的 style 处理。如果有用到，请参考 demo 做相应修改。
  • 修改 valgrind 发现的一些内存泄露问题。
  • demoui 增加退出应用程序的按钮。

  • 更新文档。

  • 2018/10/27

  • 引入 style/style_factory 接口，方便实现动态改变 style。
  • 实现 style_const 兼容以前从配置文件获取而 style 数据。

  • 重构。

  • 2018/10/26

  • 为了避免不必要的误解，xml 中不再指定 window 的 name 属性，以 xml 的文件名为准。
  • 修改 edit crash 的 bug。
  • edit 支持右对齐 (style=”number”)。
  • Window 增加 stage 属性，用于标识 Window 的生命周期。

  • Windows 下的 demo 开启一个终端显示 LOG 信息。

  • 2018/10/25

  • 重新实现 take_snapshot，支持特殊的 stride。
  • 自动过滤重复的 pointer_move 事件。
  • 完善 list_item。

  • vgcanvas 支持特殊的 stride。

  • 2018/10/24

  • 重构 blend。

  • framebuffer/bitmap 支持 line_length（即 stride/pitch)

  • 2018/10/23

  • 修改鼠标指针残留的问题。
  • 控件动画支持永久播放，yoyo_times 或 repeat_times 设置为 0 时，视为永久播放。

  • 公开函数 widget_animator_stop，请确保调用了 widget_animator_set_destroy_when_done 禁止播放完成时自动销毁动画对象。

  • 2018/10/22

  • 完善控件动画和 demo。
  • 支持鼠标指针。
  • 引入 window_base，重构 window 相关的组件。

  • 更新文档。

  • 2018/10/21

  • 出于一致性的考虑，将 widget 的属性 style_name 重命名为 style，将 widget 的属性 style 重命名为 style_data。
  • 增加 widget_animator_factory，从而支持在 xml 指定控件的动画。

  • 更新文档。

  • 2018/10/20

  • pages 控件切换页面时触发 EVT_VALUE_CHANGED 事件。
  • slide_view 控件的 indicator 颜色由主题确定。
  • slide_view 控件切换页面时触发 EVT_VALUE_CHANGED 事件。
  • 窗口动画支持指定时长，请参考 窗口动画 文档。

  • 更新文档。

  • 2018/10/19

  • 更新文档。
  • 修改文字渲染的 bug。

  • 重新整理 font_loader 相关代码，无需在初始化时就加载全部字体。

  • 2018/10/18

  • 修改控件状态问题（在特殊情况下，mouse 重新进入控件，状态没有改变）。
  • 修改 MacOS 升级后，打开窗口瞬间出现黑屏的问题。
  • 修改 SDL+FB 模式下刷新的问题。
  • 修改 Windows 下 Mutex 实现的 BUG。
  • 改进 ListView 滑动效果。

  • 增加文档。

  • 2018/10/17

  • 完善和重构 bitmap、图片加载和图片数据生成等代码。

  • calibration 控件支持设置点击事件处理的回调函数。

  • 2018/10/16

  • 完善图片控件。绘制带缩放和旋转的图片时，不用 WTIH_VGCANVS 宏，而根据 get_vgcanvas 是否为空来判断。
  • 同步同事改进的 SDL，Windows10/Linux 支持高清屏。

  • 更新文档。

  • 2018/10/15

  • 用 agg 实现 nanovg 的渲染后端。

  • 更新文档、编译脚本并测试。

  • 2018/10/14

  • 用 agg 实现 nanovg 的渲染后端。

  • 2018/10/13

  • 重新整理第三方库。

  • 集成修改过的 SDL(Linux/Winodws 支持高清屏）。

  • 2018/10/12

  • 增加大字体 demo。

  • 修改文本垂直居中的问题。

  • 2018/10/11

  • 完善 Qt UI 文件转换工具。
  • 更新文档。

  • 优化。

  • 2018/10/9-10

  • 重构 lcd_mem 和 blend，用代码产生器生成各种格式的代码。
  • 增加测试代码。

  • 更新相关工程。

  • 2018/10/8

  • 修改 ui_loader_xml，特殊属性优先设置。

  • 2018/10/7

  • 更新文档。

  • 2018/10/4

  • 完善内存管理，并增加内存泄露跟踪功能。
  • 增加内存需求评估文档。

  • 增加电阻屏校准窗口。

  • 2018/10/2-3

  • 移植到 sylixos

  • 2018/10/1

  • 重构
  • 修改编译警告

  • 更新文档

  • 2018/09/30

  • lcd_reg 支持 RGB565 的图片。

  • 2018/09/28

  • 实现 image_animation 控件并增加 demo。

  • 2018/09/27

  • 实现开关控件并增加 demo。

  • 2018/09/26

  • 完善 text_selector 控件并增加 demo。

  • 完善 vgcanvas，增加 paint 接口。

  • 2018/09/25

  • 完成 text_selector 控件基本��能。

  • 2018/09/24

  • 更新文档。

  • 2018/09/23

  • 更新各个项目的工程。

  • 2018/09/21-22

  • 移植 awtk 到 stm32f767 开发板。

  • 2018/09/20

  • 移植 nanovg-agge 到 stm32 和 aworks。

  • 2018/09/12-19

  • 基于 agge 用纯软件实现 nanovg 的渲染接口，去掉对 cairo/agg/piccaso 的依赖，以最少的代码实现 vgcanvas 的接口。

  • 完善 vgcanvas-nanovg 支持基于 OpenGL 和纯软件两种实现。

  • 2018/09/11

  • awtk-linux-fb 在 IM287A 上测试通过。

  • 2018/09/10

  • awtk-linux-fb 支持 linux fb 设备。
  • 2018/09/09
  • awtk-linux-fb 支持 linux tslib 设备。
  • 2018/09/08
  • awtk-linux-fb 支持 linux input 设备。
  • 2018/09/07

  • 录了一些演示视频，给不方便编译的朋友了解 AWTK。

  • 2018/09/06

  • 移植到 linux framebuffer

  • 2018/09/05

  • 增加 guage 控件。

  • 完善 time_clock 控件。

  • 2018/09/04

  • 修改 cairo 在 arm 平台上图片显示的问题 (stack size 需要 32K)

  • 2018/09/03

  • 移植 cairo 到 arm 平台（基本绘图功能正常，图片和字体还不行）。

  • 2018/09/02

  • 基于 cairo 实现 vgcanvas.

  • 2018/09/01

  • 移植 cairo。

  • 2018/08/31

  • 移植 pixman。

  • 2018/08/30

  • 更新 stm32 相关工程。

  • 2018/08/29

  • 完善 str 类，增加 str_insert/str_remove 等函数。
  • 完善 path 类，增加 path_replace_basename 等函数。

  • ui 描述文件支持 include 指令，方便包含公共组件（请参考：demos/assets/raw/ui/tab_top.xml)。

  • 2018/08/28

  • 完善 demos，运行双击直接运行 demos。
  • 完善 preview_ui，支持在命令行指定宽度和高度。

  • 增加文档。

  • 2018/08/27

  • 增加 skia 的编译脚本。

  • 2018/08/26

  • 增加 path.c/path.h 提供基本的目录操作函数。

  • 2018/08/25

  • 增加文件系统的接口和 posix 的实现。

  • 2018/08/24

  • 整理 awtk 的目录结构，把部分控件移到 ext_widgets 目录下。

  • 修改 stm32 编译的问题。

  • 2018/08/23

  • 完善 Color Picker 控件。
  • 增加 Color Picker 控件 Demos。

  • 支持 mutable 的图片。

  • 2018/08/22

  • 增加 Color Tile 控件。

  • 2018/08/21

  • 增加 Color Picker 控件。

  • 2018/08/20

  • 更新文档。

  • 2018/08/19

  • 增加模板工程：https://github.com/zlgopen/awtk-hello。

  • 2018/08/18

  • 更新 stm32 相关工程。

  • 2018/08/17

  • 修改 AWTK 开发桌面软件的一些问题。

  • 2018/08/16

  • 新增 awtk-c-demos 仓库，存放 c 语言的示例。

  • 2018/08/15

  • javascript 绑定原理文档。

  • 2018/08/14

  • 增加 javascript demos。

  • 2018/08/13

  • 增加 javascript demos。

  • 修改 lua/javascript 回调函数泄露的问题。

  • 2018/08/11

  • awtk.ts 代码产生器。

  • 2018/08/10

  • 完善 jerryscript 绑定代码生成器。

  • 2018/08/09

  • jerryscript 绑定代码生成器。

  • 2018/08/08

  • 为每类控件增加 Cast 函数，方便脚本绑定。

  • 2018/08/07

  • 完善 API docs

  • 完善 awtk-lua。

  • 2018/08/06

  • 完善 API docs

  • lua 绑定放入独立的项目 awtk-lua。

  • 2018/08/05

  • 重写 IDL 生成工具。

  • 2018/08/04

  • 用 valgrind 运行单元测试，并修改发现的 BUG。

  • 2018/08/03

  • 修改 linux 下编译的问题。

  • 2018/08/02

  • 完善 api docs，增加 annotation。

  • 2018/08/01

  • 重构 widget。

  • 2018/07/31

  • 完善 rich_text 控件并增加 DEMO。

  • 2018/07/29

  • 完善 rich_text 控件。

  • 2018/07/28

  • 增加 rich_text 控件（未完成）。

  • 2018/07/27

  • 增加 unicode linebreak。

  • 增加 rich_text_parser。

  • 2018/07/26

  • 增加 combo_box/combo_box_item 控件和 demo。

  • 2018/07/25

  • 增加 popup 窗口。

  • 2018/07/24

    • 完善 tab_control 及 demo。

  • 2018/07/23

    • 增加 tab_control 的 demo。

  • 2018/07/22

    • 实现 tab_button/tab_button_group/tab_control。

  • 2018/07/20

    • 增加 EVT_POINTER_DOWN_ABORT，修改 ScrollView 中 ListItem/CheckButton/Button 在滚动时被误点的问题。

  • 2018/07/19

    • 主题支持设置图标的位置，增加一些 demo。

  • 2018/07/18

    • image 支持可选中和可点击属性。

  • 2018/07/17

    • widget 支持自定义属性。
    • 出于易用性考虑，style_name 改为字符串格式。

  • 2018/07/15

    • 实现 widget_to_xml。

  • 2018/07/14

    • 增加 ui_xml_writer
    • 增加 ui_binary_writer
    • 实现 widget_clone/widget_equal。

  • 2018/07/13

    • 在 widget vtable 中增加 create/properies 方便实现 clone。
    • 重构 widget

  • 2018/07/12

    • 重新整理 grab/ungrab 的流程。
    • 修改关闭窗口的 BUG。

  • 2018/07/11

    • LCD 增加 flush 接口。
    • 完善图片绘制接口，增加相应 demo。
    • 在 Windows 7 上，如果显卡太旧不支持 OpenGL3 时，触发 assert。

  • 2018/07/10

    • 框架支持滚轮事件。
    • ListView 和 SpinBox 支持滚轮事件。

  • 2018/07/09

    • 按钮支持 repeat 触发 click 事件，键盘和滚动条支持 repeat 触发。
    • keyboard 点击 return 时提交之前输入的键值。
    • 滚动条支持禁止滚动效果。
    • ListView 支持自动隐藏滚动条。

  • 2018/07/08

    • 更新文档，修改三个 framebuffer 的旋转时的 BUG。

  • 2018/07/07

    • 支持 online framebuffer, offline framebuffer 和 next framebuffer 三个 framebuffer 的工作方式。

  • 2018/07/06

    • 支持双 framebuffer 交换。

  • 2018/07/05

    • 增加 ListView 和 ListView Demo。

  • 2018/07/04

    • 增加 ScrollView。

  • 2018/07/03

    • 更新 awtk on aworks rt1052，集成硬件加速。

  • 2018/07/02

    • 实现 scrollbar 控件。

  • 2018/07/01

    • 实现 drager 控件。

  • 2018/06/30

    • 实现 spinbox 控件。

  • 2018/06/29

    • 改进 edit。
    • 增加 edit 的 demo。
    • theme 支持 border 的类型。

  • 2018/06/28

    • 修改脏矩形等 BUG。
    • 修改 ubuntu 18 上编译的问题。
    • 重构 widget。

  • 2018/06/27

    • 实现输入法的联想字功能。

  • 2018/06/26

    • 更新 aworks 工程并测试。
    • 增加小工具用于生成输入法联想词库。

  • 2018/06/25

    • 完善候选字控件。
    • 编写输入法文档。

  • 2018/06/24

    • 集成 google 拼音输入法（输入法字体和完整的字体，需要 4M 的 flash 空间）。

  • 2018/06/23

    • 引入输入法引擎接口。
    • 增加候选字控件。

  • 2018/06/22

    • 完善软键盘。
    • 修改一些 BUG。

  • 2018/06/21

    • 输入框被软键盘覆盖时上推窗口。
    • 接入原生输入法（目前没有中文字体，编辑器中显示为空白）。

  • 2018/06/20

    • 更新 lua 绑定及示例。
    • 优化软键盘并增加动画。
    • 更新 stm32f103/f429 的工程。

  • 2018/06/19

    • 实现输入法框架。
    • 实现软键盘基本功能。

  • 2018/06/18

    • 实现软键盘部分功能。
    • 完善现有代码。

  • 2018/06/17

    • 增强 layout 的功能。
    • 修改 XML UI/String 文件中不能处理特殊字符的问题。

  • 2018/06/16

    • demoui 增加预加载资源的窗口。
    • 增加 widget_factory，UI 文件支持自定义的控件。

  • 2018/06/15

    • 每个窗口支持独立的主题文件。
    • 修改 F429 上图片显示不正常的 BUG。

  • 2018/06/14

    • LCD FrameBuffer 模式支持屏幕 90 度旋转。
    • 统一图片操作的硬件和软件实现方式。

  • 2018/06/13

    • 集成 RT1052 PXP 硬件加速到 Aworks。

  • 2018/06/11

    • 增加显示 FPS 的开关。

  • 2018/06/10

    • 优化窗口动画。
    • 完善 lcd 的接口。
    • 完善资源管理。

  • 2018/06/09

    • 修改 stb_image/stb_truetype 在开发板不工作的问题（内存分配/stack 大小）。
    • 图片加载支持 bgra/rgb565 格式。
    • 修 stm32_g2d 中 blend_image 的 BUG。

  • 2018/06/08

    • 修改几个 BUG。
    • 完善 demos。

  • 2018/06/07

    • slide_view 实现基本功能。

  • 2018/06/06

    • 增加 memset/memcpy 速度测试。
    • 增加 widget_animator_scroll 实现滚动的动画。
    • 增加滑动速度计算。

  • 2018/06/05

    • event 结果中增加时间戳。
    • 完善 layout 参数，支持指定子控件的宽度和高度。

  • 2018/06/04

    • 移植到正点原子号令者开发板。

  • 2018/06/03

    • 把 systick 作为公共代码放到 platform/raw 下。
    • 去掉对 stdio 中部分函数的依赖。
    • 修改匿名 union 的问题。

  • 2018/06/02

    • 控件动画文档。
    • misc/new 实现 C++的内存分配。

  • 2018/06/01

    • 修改 STM F103ZE JTAG 无法下载的问题。
    • 优化 lcd_reg.inc
    • STM F103ZE 实现获取时间的函数。

  • 2018/05/31

    • 控件支持缩放动画（目前需要 OpenGL)。
    • 控件支持旋转动画（目前需要 OpenGL)。

  • 2018/05/30

    • 控件支持淡入淡出动画。

  • 2018/05/28

    • aworks 平台上的 memcpy 有问题，暂时使用自定义的 memcpy。

  • 2018/05/27

    • 改进 lcd_mem 的实现，编写部分文档。

  • 2018/05/26

    • 优化图片缩放算法。

  • 2018/05/25

    • 优化填充颜色算法。

  • 2018/05/24

    • 优化 soft_g2d。

  • 2018/05/23

    • 移植到 aworks 平台。

  • 2018/05/18

    • 编写 framebuffer 的文档。

  • 2018/05/17

    • 支持非 GUI 线程添加 idle/timer 到 GUI 线程执行。

  • 2018/05/16

    • 实现控件动画框架。
    • 实现控件移动位置的动画。
    • 实现控件修改值的动画。

  • 2018/05/15

    • 重新实现 timer/idle，支持 timer/idle 处理函数内部操作 timer/idle。

  • 2018/05/14

    • 修改内存管理器的 BUG，完善内存管理器的测试程序。

  • 2018/05/13

    • 编写 stm32f429igtx 移植文档。

  • 2018/05/12

    • lcd 支持 double framebuffer，移植到 stm32429igtx 裸系统。

  • 2018/05/10

    • 为了方便代码管理，把硬件平台相关的代码移到独立的项目中。

  • 2018/05/09

    • 重新整理了基于 framebuffer 的 LCD，并支持硬件加速功能。

  • 2018/05/07

    • 实现 STM32 的 dma2d 加速的矩形填充和图片合成。

  • 2018/05/05

    • lftk 改名为 awtk。

  • 2018/05/03

    • 增加 locale，支持多国语言字符串翻译。

  • 2018/05/01

    • 更新文档。

  • 2018/04/30

    • 窗口动画的 anim_hint 用字符串表示，方便附加参数。

  • 2018/04/29

    • 增加 str_t，widget 的名称用 str_t。

  • 2018/04/28

    • 图片管理器支持缓存。
    • 图片管理器支持根据不同的 DPI 加载不同的图片。

  • 2018/04/27

    • 资源管理器支持从文件中加载资源。

  • 2018/04/26

    • 增加 picasso 实现的 vgcanvas。
    • 增加 system_info

  • 2018/04/21

    • 对话框支持从下往上弹出、从上往下弹出、中心缩放和淡入淡出几种动画。
    • 窗口支持左右平移动画。

  • 2018/04/20

    • 实现窗口动画框架。

  • 2018/04/15

    • 增加 nanovg 实现的 vgcanvas。
    • 增加基于 vgcanvas 实现的 lcd。

  • 2018/04/14

    • PC 环境缺省使用 SDL2+nanovg 渲染，解决在 MacOS 上文字模糊的问题。
    • 调整 lcd 的接口，使之具有更强的适应性。

  • 2018/04/8

    • 重新实现 dialog 的主题。

  • 2018/04/7

    • 增加按键定义。
    • 增加 edit 控件（未完成）

  • 2018/04/5

    • Slider 控件支持 step 和事件。
    • Slider 和 ProgressBar 支持在主题中设置图片。
    • 因为性能原因，agg 中使用 float 代替 double。

  • 2018/04/2

    • 增加 Slider 控件。

  • 2018/04/1

    • 字体管理器支持 TTF 字体。
    • 增加工具 resgen。
    • 增加主题文档。

  • 2018/03/31

    • 重新设计 XML 主题的格式。
    • 重构 window/button/label/check_buton，使用同一个绘制函数。

  • 2018/03/27

    • Luncher 加入 AWTK 核心团队。
    • 完善文档。

  • 2018/03/26

    • 主题支持设置背景图片和背景图片的显示方式。

  • 2018/03/25

    • 增加矢量图绘图函数接口，并用 agg 实现部分功能。

  • 2018/03/24

    • 支持图片居中、缩放、9 宫格和平铺等 10 余种显示方式。

  • 2018/03/18

    • 支持 anti-aliasing 直线。
    • 重新设计资源管理器。

  • 2018/03/17

    • 支持将 Qt 的 UI 文件转成 AWTK 的 UI 文件。
    • 支持将 VC 的 RC 文件转成 AWTK 的 UI 文件。
    • 编写 AWTK UI 界面描述的文档。
    • 增加事件队列，解决在触屏中断中分发事件的问题。
    • 编写 STM32 移植文档。

  • 2018/03/11

    • 增加 XML 界面描述文件预览工具。
    • 支持极速模式（定义 FAST_MODE 启用），只绘制顶层的窗口中变化的控件，绘制效率非常高，但不支持透明背景。
    • 支持基本的 layout 功能。

  • 2018/03/10

    • lua 绑定及相关示例完成。
    • 支持从 UI 描述文件创建界面。


缺省子控件的布局器

一、语法

子控件布局器统一使用 children_layout 属性指定，其语法为：

缺省子控件布局器 => default '(' PARAM_LIST ')'
PARAM_LIST => PARAM | PARAM ',' PARAM_LIST

示例：

<view x="0" y="0" w="100%" h="100%" children_layout="default(c=2,r=8,m=5,s=5)">

二、参数

缺省子控件的布局器提供了下列参数：

参数 | 简写 | 说明
rows | r | 行数
cols | c | 列数
width | w | 子控件的宽度，可以用来计算列数，与 cols 互斥
height | h | 子控件的高度，可以用来计算行数，与 rows 互斥
x_margin | xm | 水平方向的边距
y_margin | ym | 垂直方向的边距
spacing | s | 子控件之间的间距
flexible | f | 一行或一列放不下时，是否再另起一行或一列（缺省否）
keep_invisible | ki | 是否给不可见的控件留位置（缺省否）
keep_disable | kd | 是否给不用的控件留位置（缺省是）
align_h | a | 用于 hbox 的情况 (col=0,row=1), 子控件整体水平对齐的方式。

在代码中，可以通过 widget_set_children_layout 函数启用子控件布局器：

/**
 * @method widget_set_children_layout
 * 设置子控件的布局参数。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} params 布局参数。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_children_layout(widget_t* widget, const char* params);

示例：

widget_set_children_layout(w, "default(r=2,c=2)");

在 XML 中，可以通过 children_layout 属性设置：

  <column x="20" y="160" w="50%" h="60" children_layout="default(r=2,c=1,ym=2,s=10)" >
    <check_button name="c1" text="Book"/>
    <check_button name="c2" text="Food"/>
  </column>

三、使用方法

下面我们看看，如何调整 rows/cols 两个参数，来实现不同的布局方式。

0. 缺省

在没有设置子控件布局参数时，采用缺省的布局方式，父控件啥事也不做，完全由子控件自己的布局参数决定。

1. hbox 水平布局

当 rows=1,cols=0 时，所有子控件在水平方向排成一行，可以实现水平布局功能。子控件的参数：

  • x 从左到右排列，由布局参数计算而出。
  • y 为 y_margin
  • w 由子控件自己决定。
  • h 为父控件的高度-2*y_margin

子控件需要自己决定宽度。 aligh_h 参数可以控制整体对齐方式。

示例：

<window>
  <view x="c" y="m" w="300" h="30" children_layout="default(r=1,c=0,s=5)">
      <button text="1" w="20%"/>
      <button text="2" w="30%"/>
      <button text="3" w="30%"/>
      <button text="4" w="20%"/>
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

 bin\preview_ui.exe t.xml

2. vbox 垂直布局

当 cols=1,rows=0 时，所有子控件在垂直方向排成一列，可以实现垂直布局功能。子控件的参数：

  • x 为 x_margin
  • y 从上到下排列，由布局参数计算而出。
  • w 为父控件的宽度-2*x_margin
  • h 由子控件自己决定。

子控件需要自己决定高度。

示例：

<window>
  <view x="c" y="m" w="80" h="200" children_layout="default(r=0,c=1,s=5)">
      <button text="1" h="20%"/>
      <button text="2" h="30%"/>
      <button text="3" h="30%"/>
      <button text="4" h="20%"/>
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

bin\preview_ui.exe t.xml

3. listbox 列表布局

当 cols=1,rows=N 时，所有子控件在垂直方向排成一列，可以实现列表布局功能。子控件的参数：

  • x 为 x_margin
  • y 从上到下排列，由布局参数计算而出。
  • w 为父控件的宽度-2*x_margin
  • h 为父控件的高度（减去边距和间距）分成成 N 等分。

子控件无需指定 x/y/w/h 等参数

示例：

<window>
  <view x="c" y="m" w="200" h="200" children_layout="default(r=4,c=1,s=5)">
      <button text="1" />
      <button text="2" />
      <button text="3" />
      <button text="4" />
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

 bin\preview_ui.exe t.xml

4. grid 网格布局

当 cols=M,rows=N 时，所有子控件放在 MxN 的网格中，可以实现网格布局功能。

子控件无需指定 x/y/w/h 等参数

示例：

<window>
  <view x="c" y="m" w="200" h="200" children_layout="default(r=2,c=2,s=5)">
      <button text="1" />
      <button text="2" />
      <button text="3" />
      <button text="4" />
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

 bin\preview_ui.exe t.xml

5. floating 浮动布局

如果子控件的 floating 属性设置为 true，其不受 children_layout 的限制：

示例：

<window>
  <view x="c" y="m" w="200" h="200" children_layout="default(r=2,c=2,s=5)">
      <label text="1" />
      <label text="2" />
      <label text="3" />
      <label text="4" />

      <button text="floating" floating="true" x="c" y="m" w="80" h="30"/>
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

 bin\preview_ui.exe t.xml

四、高级用法

1. 子控件布局器和子控件自身的布局参数结合。

为了更大的灵活性，缺省子控件布局器可以和子控件自身的参数结合起来。

示例：

<window>
  <view x="c" y="m" w="200" h="200" children_layout="default(r=2,c=2,s=5)">
      <button text="1" x="0" y="0" w="50%" h="50%"/>
      <button text="2" x="r" y="m" w="60%" h="60%"/>
      <button text="3" x="c" y="m" w="70%" h="70%"/>
      <button text="4" x="c" y="m" w="80%" h="80%"/>
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

 bin\preview_ui.exe t.xml

2. 子控件自身的布局参数 x/y/w/h 均为像素方式时，需要用 self_layout 参数指定。

示例：

<window>
  <view x="c" y="m" w="200" h="200" children_layout="default(r=2,c=2,s=5)">
      <button text="1" self_layout="default(x=0,y=0,w=50,h=50)" />
      <button text="2" x="r" y="m" w="60%" h="60%"/>
      <button text="3" x="c" y="m" w="70%" h="70%"/>
      <button text="4" x="c" y="m" w="80%" h="80%"/>
  </view>
</window>

例如，将文件保存当前目录的 t.xml 文件，可用 preview_ui（在 awtk\bin 目录下）预览效果如下图，命令如下：

 bin\preview_ui.exe t.xml

五、示例

demos/assets/raw/ui/中有演示各种布局参数的示例。

以上在运行预览命令时，假定 awtk 的根目录为当前目录。

在不同平台下，命令运行方式有细微差别，请自行调整。


ListView 子控件的布局器

一、语法

子控件布局器统一使用 children_layout 属性指定，其语法为：

ListView 子控件布局器 => list_view '(' PARAM_LIST ')'
PARAM_LIST => PARAM | PARAM ',' PARAM_LIST

ListView 子控件布局器只适用于 ListView 下的 ScrollView 控件，除非需要指定边距、间距或删除item的动画时间，否则一般无需指定该参数。

示例：

<list_view x="0"  y="30" w="100%" h="-80" item_height="60">
  <scroll_view name="view" x="0"  y="0" w="100%" h="100%" children_layout="list_view(m=10,s=15)">

二、参数

ListView 子控件的布局器提供了下列参数：

参数 | 简写 | 说明
item_height | i | 行高（作用与 listview 的 item_height 属性相同）
default_item_height | d | 缺省行高（作用与 listview 的 default_item_height 属性相同）
margin | m | 边距
x_margin | xm | 水平方向的边距
y_margin | ym | 垂直方向的边距
spacing | s | 子控件之间的间距
keep_invisible | ki | 是否给不可见的控件留位置(缺省否)
keep_disable | kd | 是否给不用的控件留位置(缺省是)
animating_time | a | 添加和删除item时附带动画的播放时间(缺省为0，单位为毫秒)，仅仅适用于单列的情况

注意事项：设置 animating_time 属性后，添加 item 后动画效果会让这个 item 从原来的坐标缓动到 layout 后的坐标，所以在添加 item 之前请确保其坐标是我们所期望的。比如，想在 itemA 和 itemB 之间插入一个 itemC，那么添加前 itemC 坐标应该与 itemA 一致，让 itemC 从 itemA 的位置缓动到中间。

在代码中，可以通过 widget_set_children_layout 函数启用子控件布局器：

/**
 * @method widget_set_children_layout
 * 设置子控件的布局参数。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} params 布局参数。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_children_layout(widget_t* widget, const char* params);

示例：

widget_set_children_layout(w, "list_view(m=10,s=15)");

在 XML 中，可以通过 children_layout 属性设置：

<list_view x="0"  y="30" w="100%" h="-80" item_height="60">
  <scroll_view name="view" x="0"  y="0" w="100%" h="100%" children_layout="list_view(m=10,s=15)">


如何加入中文输入法

在示例项目中，没有加入输入法，主要是开发板的 flash 不够。如果 flash 够大（不小于 4M 时），可以自行加入：

  • 加入 3rd/gpinyin/src 中的代码。
  • 加入 src/input_engines/input_engine_pinyin.cpp。
  • 去掉 src/input_engines/input_engine_null.cpp。
  • include 路径加入 3rd/gpinyin/include。
  • 把 default_full.ttf 拷贝到 default.tff，重新生成资源并编译 (defualt.ttf 中没有汉字，default_full.ttf 里才有，所以需要切换字体，否则输入的字符无法显示）。


Code Style

每个人都有自己喜欢的代码风格，AWTK 采用的代码风格不可能让所有人喜欢，所以 AWTK 提供了一个配置文件。clang-format，借助 clang-format 工具可以瞬间将 AWTK 的代码风格变成你喜欢的代码风格。

具体做法如下：

安装 clang-format 工具

请参考：http://releases.llvm.org/download.html#7.0.0

修改 .clang-format

请参考：http://clang.llvm.org/docs/index.html

更新

支持 bash 的平台运行。/format.sh 即可。Windows 平台可以在 git bash 里运行。


颜色格式

AWTK 目前支持以下颜色格式：

  • 十六机制格式。

RGB 三个通道分别用两个十六进制的字符表示，alpha 通道为 0xff（即不透明）。如：

#ffeedd 表示 R、G、B 分别为 0xff、0xee、0xdd
  • rgb(R,G,B) 格式。

括号中的 R、G、B 为 0 到 255 之间的十进制数，alpha 通道为 0xff（即不透明）。如：

rgb(100, 150, 200) 表示 R、G、B 分别为 100、150、200
  • rgba(R,G,B,A) 格式。

这是唯一支持半透明颜色的方式。

括号中的 R、G、B 为 0 到 255 之间的十进制数，A 的为 0 到 1 之间的小数。如：

rgba(100, 150, 200, 0.5) 表示 R、G、B, A 分别为 100、150、200、0.5

注意：半透明颜色填充相对于不透明颜色填充，要慢很多，请谨慎使用。

  • 英文名称。目前支持的颜色名称有：
名称 | 颜色值
aliceblue | #f0f8ff
antiquewhite | #faebd7
aqua | #00ffff
aquamarine | #7fffd4
azure | #f0ffff
beige | #f5f5dc
bisque | #ffe4c4
black | #000000
blanchedalmond | #ffebcd
blue | #0000ff
blueviolet | #8a2be2
brown | #a52a2a
burlywood | #deb887
cadetblue | #5f9ea0
chartreuse | #7fff00
chocolate | #d2691e
coral | #ff7f50
cornflowerblue | #6495ed
cornsilk | #fff8dc
crimson | #dc143c
cyan | #00ffff
darkblue | #00008b
darkcyan | #008b8b
darkgoldenrod | #b8860b
darkgray | #a9a9a9
darkgreen | #006400
darkkhaki | #bdb76b
darkmagenta | #8b008b
darkolivegreen | #556b2f
darkorange | #ff8c00
darkorchid | #9932cc
darkred | #8b0000
darksalmon | #e9967a
darkseagreen | #8fbc8f
darkslateblue | #483d8b
darkslategray | #2f4f4f
darkturquoise | #00ced1
darkviolet | #9400d3
deeppink | #ff1493
deepskyblue | #00bfff
dimgray | #696969
dodgerblue | #1e90ff
firebrick | #b22222
floralwhite | #fffaf0
forestgreen | #228b22
fuchsia | #ff00ff
gainsboro | #dcdcdc
ghostwhite | #f8f8ff
gold | #ffd700
goldenrod | #daa520
gray | #bebebe
green | #008000
greenyellow | #adff2f
honeydew | #f0fff0
hotpink | #ff69b4
indianred | #cd5c5c
indigo | #4b0082
ivory | #fffff0
khaki | #f0d58c
lavender | #e6e6fa
lavenderblush | #fff0f5
lawngreen | #7cfc00
lemonchiffon | #fffacd
lightblue | #add8e6
lightcoral | #f08080
lightcyan | #e0ffff
lightgoldenrodyellow | #fafad2
lightgreen | #90ee90
lightgrey | #d3d3d3
lightpink | #ffb6c1
lightsalmon | #ffa07a
lightseagreen | #20b2aa
lightskyblue | #87cefa
lightslategray | #778899
lightsteelblue | #b0c4de
lightyellow | #ffffe0
lime | #00ff00
limegreen | #32cd32
linen | #faf0e6
magenta | #ff00ff
maroon | #800000
mediumaquamarine | #66cdaa
mediumblue | #0000cd
mediumorchid | #ba55d3
mediumpurple | #9370db
mediumseagreen | #3cb371
mediumslateblue | #7b68ee
mediumspringgreen | #00fa9a
mediumturquoise | #48d1cc
mediumvioletred | #c71585
midnightblue | #191970
mintcream | #f5fffa
mistyrose | #ffe4e1
moccasin | #ffe4b5
navajowhite | #ffdead
navy | #000080
oldlace | #fdf5e6
olive | #808000
olivedrab | #6b8e23
orange | #ffa500
orangered | #ff4500
orchid | #da70d6
palegoldenrod | #eee8aa
palegreen | #98fb98
paleturquoise | #afeeee
palevioletred | #db7093
papayawhip | #ffefd5
peachpuff | #ffdab9
peru | #cd853f
pink | #ffc0cb
plum | #dda0dd
powderblue | #b0e0e6
purple | #800080
red | #ff0000
rosybrown | #bc8f8f
royalblue | #4169e1
saddlebrown | #8b4513
salmon | #fa8072
sandybrown | #f4a460
seagreen | #2e8b57
seashell | #fff5ee
sienna | #a0522d
silver | #c0c0c0
skyblue | #87ceeb
slateblue | #6a5acd
slategray | #708090
snow | #fffafa
springgreen | #00ff7f
steelblue | #4682b4
tan | #d2b48c
teal | #008080
thistle | #d8bfd8
tomato | #ff6347
turquoise | #40e0d0
violet | #ee82ee
wheat | #f5deb3
white | #ffffff
whitesmoke | #f5f5f5
yellow | #ffff00
yellowgreen | #9acd32


读写 XML/JSON/INI 和 UBJSON 等格式的数据文件

将抽象放进代码，细节放进元数据。

开发应用程序，会经常使用各种数据文件（如配置数据和元数据），常见的数据文件格式有 INI、XML、JSON 和 UBJSON，对一个复杂的应用程序，其中可能会同时使用多种不同格式的数据文件。

通常，操作这些数据文件的函数各不相同，对于程序员来说即是学习负担，也是记忆负担。AWTK 提供了一套统一的接口函数，同一套接口函数，可以操作不同的格式的数据文件。

1. 基本用法

加载数据文件成功后得到一个 object 的实例，可以用 object 的函数对其进行增加、修改、删除和查询。如果熟悉 object 的用法，那就非常简单了。

1.1 读取数据

下面的函数可以读取任意基本类型的数据。

/**
 * @method tk_object_get_prop
 * 获取指定属性的值。
 *
 * @annotation ["scriptable"]
 * @param {tk_object_t*} obj object 对象。
 * @param {const char*} name 属性的名称。
 * @param {value_t*} v 返回属性的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t tk_object_get_prop(tk_object_t* obj, const char* name, value_t* v);

为了方便使用，也提供了常见数据类型的包装函数。如：

/**
 * @method tk_object_get_prop_str
 * 获取指定属性的字符串类型的值。
 *
 * @annotation ["scriptable"]
 * @param {tk_object_t*} obj object 对象。
 * @param {const char*} name 属性的名称。
 *
 * @return {const char*} 返回指定属性的字符串类型的值。
 */
const char* tk_object_get_prop_str(tk_object_t* obj, const char* name);

1.2 增加/修改数据

下面的函数可以增加/修改任意基本类型的数据。

/**
 * @method tk_object_set_prop
 * 设置指定属性的值。
 *
 * @annotation ["scriptable"]
 * @param {tk_object_t*} obj object 对象。
 * @param {const char*} name 属性的名称。
 * @param {value_t*} value 属性的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t tk_object_set_prop(tk_object_t* obj, const char* name, const value_t* value);

为了方便使用，也提供了常见数据类型的包装函数。如：

/**
 * @method tk_object_set_prop_str
 * 设置指定属性的字符串类型的值。
 *
 * @annotation ["scriptable"]
 * @param {tk_object_t*} obj object 对象。
 * @param {const char*} name 属性的名称。
 * @param {const char*} value 属性的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t tk_object_set_prop_str(tk_object_t* obj, const char* name, const char* value);

1.3 删除数据

/**
 * @method tk_object_remove_prop
 * 删除指定属性。
 *
 * @annotation ["scriptable"]
 * @param {tk_object_t*} obj object 对象。
 * @param {const char*} name 属性的名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t tk_object_remove_prop(tk_object_t* obj, const char* name);

1.4 path 的基本格式

  • 配置信息通常都是层次结构的，为了能访问所有数据，path 也必须是多级的，各级的名称之间用“.”分隔。

“.”不能作为名称的一部分，如果出现，需要用其它字符代替。

{
    "network" : {
        "eth0" : {
            "ip" : "192.169.0.100",
            "gateway" : "192.169.0.1",
            "mask" : "255.255.255.0"
        }
    }
}

在这个例子中，要访问 ip 的这个配置，可以用”network.eth0.ip”:

  • 按索引访问

在访问时，每一级的名称，可以用索引代替，格式为：[+索引+]，比如 [0] 表示第一项，[2] 表示第三项。这对于不清楚名称的情况，或遍历 全部配置，很有帮助。

  • 用 #size 获取子节点个数

示例：

[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

在上面的例子中，”#size”获取分组的个数为 2，”wifi.#size”获取 wifi 下的子项数为 2。

  • 用 #name 获取项的名称。

示例：

[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

在上面的例子中，”[0].#name” 获取第一个分组的名称为”wifi”，”wifi.[0].#name” 获取 wifi 下第一项的名称为 “on”。

  • 用 #index 获取配置项在兄弟节点中的序数。
[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

在上面的例子中，”wifi.#index” 获取 wifi 的序数为 0，”server.#index” 获取 server 的序数为 1。

2. 高级用法

上面的函数使用简单，但是在数据量大的时候，不如直接去操作 node 效率更高，如果有此需求可以查看 src/conf_io/conf_node.h 中函数，以及单元测试中的用法，这里不再赘述。

3. 打开和保存

此时需要使用具体格式的函数

3.1 JSON 格式

  • 打开
/**
 * @method conf_json_load
 * 从指定 URL 加载 JSON 对象。
 * @annotation ["constructor"]
 *
 * @param {const char*} url 路径（通常是文件路径）。
 * @param {bool_t} create_if_not_exist 如果不存在是否创建。
 *
 * @return {tk_object_t*} 返回配置对象。
 */
tk_object_t* conf_json_load(const char* url, bool_t create_if_not_exist);
  • 保存
/**
 * @method conf_json_save_as
 * 将 doc 对象保存到指定 URL。
 * @annotation ["static"]
 *
 * @param {tk_object_t*} obj doc 对象。
 * @param {const char*} url 保存的位置。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败
 */
ret_t conf_json_save_as(tk_object_t* obj, const char* url);

3.2 XML 格式

  • 打开
/**
 * @method conf_xml_load
 * 从指定 URL 加载 XML 对象。
 *
 * @annotation ["constructor"]
 *
 * @param {const char*} url 路径（通常是文件路径）。
 * @param {bool_t} create_if_not_exist 如果不存在是否创建。
 *
 * @return {tk_object_t*} 返回配置对象。
 */
tk_object_t* conf_xml_load(const char* url, bool_t create_if_not_exist);
  • 保存
/**
 * @method conf_xml_save_as
 * 将 doc 对象保存到指定 URL。
 * @annotation ["static"]
 *
 * @param {tk_object_t*} obj doc 对象。
 * @param {const char*} url 保存的位置。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败
 */
ret_t conf_xml_save_as(tk_object_t* obj, const char* url);

3.3 INI 格式

  • 打开
/**
 * @method conf_ini_load
 * 从指定 URL 加载 INI 对象。
 *
 * @annotation ["constructor"]
 *
 * @param {const char*} url 路径（通常是文件路径）。
 * @param {bool_t} create_if_not_exist 如果不存在是否创建。
 *
 * @return {tk_object_t*} 返回配置对象。
 */
tk_object_t* conf_ini_load(const char* url, bool_t create_if_not_exist);
  • 保存
/**
 * @method conf_ini_save_as
 * 将 doc 对象保存到指定 URL。
 * @annotation ["static"]
 *
 * @param {tk_object_t*} obj doc 对象。
 * @param {const char*} url 保存的位置。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败
 */
ret_t conf_ini_save_as(tk_object_t* obj, const char* url);

3.4 UBJSON 格式

  • 打开
/**
 * @method conf_ubjson_load
 * 从指定 URL 加载 UBJSON 对象。
 *
 * @annotation ["constructor"]
 *
 * @param {const char*} url 路径（通常是文件路径）。
 * @param {bool_t} create_if_not_exist 如果不存在是否创建。
 *
 * @return {tk_object_t*} 返回配置对象。
 */
tk_object_t* conf_ubjson_load(const char* url, bool_t create_if_not_exist);

* 保存

```c
/**
 * @method conf_ubjson_save_as
 * 将 doc 对象保存到指定 URL。
 * @annotation ["static"]
 *
 * @param {tk_object_t*} obj doc 对象。
 * @param {const char*} url 保存的位置。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败
 */
ret_t conf_ubjson_save_as(tk_object_t* obj, const char* url);

完整示例

  • 文件读写
#include "conf_io/conf_json.h"

void demo_conf_json(c) {
  tk_object_t* doc = conf_json_load("./test.json", TRUE);
  tk_object_set_prop_str(doc, "name", "awtk");
  tk_object_set_prop_int(doc, "age", 100);
  conf_json_save_as(doc, "./test.json");
  TK_OBJECT_UNREF(doc);

  doc = conf_json_load("./test.json", TRUE);

  log_debug("name:%s\n", tk_object_get_prop_str(doc, "name"));
  log_debug("age:%d\n", tk_object_get_prop_int(doc, "age", 0));
  TK_OBJECT_UNREF(doc);
}

对应的数据文件为：

{
    "name" : "awtk",
    "age" : 100
}
  • 内存数据读写
  wbuffer_t wb;
  tk_object_t* conf = conf_xml_create();
  ASSERT_NE(conf, (tk_object_t*)NULL);
  ASSERT_EQ(tk_object_set_prop_int(conf, "awtk.value", 123), RET_OK);
  ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);

  ASSERT_EQ(conf_xml_save_to_buff(conf, &wb), RET_OK);
  TK_OBJECT_UNREF(conf);

  conf = conf_xml_load_from_buff(wb.data, wb.cursor, FALSE);
  ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
  TK_OBJECT_UNREF(conf);

  wbuffer_deinit(&wb);


AWTK 中的一些惯例

1.pixel 格式：以各个通道在内存中存放的顺序，从低地址到高地址递增的方式命名。

如：

RGBA8888：表示内存地址从低到高依次为 RGBA，每个通道各占一字节 (8 位）。

BGR565：表示内存地址从低到高依次为 BGR，BGR 三个通道分别占 5 位，6 位和 5 位。

2. 所有类的公开属性都是只读的，不要直接去修改它们。

3. 所有类的公开属性都可以直接读取，不提供 get 函数。

4.widget 及其子类的公开属性，如果在 annotation 中标明支持 set_prop，那么可以在界面描述文件中，用同名属性为其指定的初始值。

5. 除非特别说明，时间单位为毫秒。

6. 除非特别说明，控件都是容器。你可以在按钮中放图片，也可以在图片中放按钮，通过组合形成更强大控件。


编写跨平台的代码

1. 尽量使用 tkc 中的函数

tkc 中提供了编码、时间、网络、串口、线程、互斥和文件系统等各种需要跨平台接口的封装，这些接口在各个平台都有实现。

2. 针对接口编程

如果需要的某个功能，在各个平台都有不同的实现，先研究各个平台提供的功能，再抽象一个统一的接口，针对各个平台实现一个适配器。应用程序使用统一的接口去访问这些功能，应用程序不但能够跨平台运行，代码也更具可读性。

3. 指定特定平台的库、头文件、预处理参数和链接参数

helper 提供了一组函数来处理不同平台的参数。平台名称的取值有：

  • “Windows” Windows 平台
  • “Linux” Linux 平台
  • “Darwin” MacOS 平台

Android 和 IOS 不使用 scons 编译，故不使用这种方式。

  • 添加平台特有的库

示例：

helper.add_platform_libs("Windows", ["ws2_32"])
helper.add_platform_libs("Linux", ["pthread", "dl", "readline", "m"])
helper.add_platform_libs("Darwin", ["pthread", "dl", "readline", "m"])
  • 添加平台特有的库的搜索路径
 add_platform_libpath(self, platform_name, APP_LIBPATH)

示例：

helper.add_platform_libpath("Linux", ["/usr/local/lib"])

注意这里的 APP_LIBPATH 是数组类型。

  • 添加平台特有的头文件的搜索路径
  add_platform_cpppath(self, platform_name, APP_CPPPATH)

示例：

helper.add_platform_libpath("Linux", ["/usr/local/include"])

注意这里的 APP_CPPPATH 是数组类型

  • 添加平台特有的宏定义预处理参数
 add_platform_ccflags(self, platform_name, APP_CCFLAGS)

示例:

helper.add_platform_ccflags("Linux", " -DSOME_MACRO=1 ")

ccflags 是字符串格式不是数组

  • 添加平台特有的C++文件的预处理参数
 add_platform_cxxflags(self, platform_name, APP_CXXFLAGS)

示例:

helper.add_platform_cxxflags("Linux", " -DSOME_MACRO=1 ")

cxxflags 是字符串格式不是数组

  • 添加平台特有的链接参数
 add_platform_linkflags(self, platform_name, APP_LINKFLAGS)

linkflags 是字符串格式不是数组

4. 区分各个平台的宏

  • WIN32 或 WINDOWS Windows 平台
  • MINGW Windows 平台的 MinGW 编译。
  • LINUX Linux 平台
  • MACOS 或__APPLE__ Macos 平台
  • ANDROID Android 平台
  • IOS iOS 平台

这些宏虽然可以区分不同的平台，但是如果将这些宏分散在应用程序中，代码将会变得丑陋难读。建议先定义接口，在适配器中使用这些宏。

示例：

#ifdef ANDROID
#include "SDL.h"
#endif /*ANDROID*/

#if defined(__APPLE__) || defined(LINUX)
#include <unistd.h>
#include <dirent.h>
#include <sys/types.h>
#include <pwd.h>
#elif defined(WIN32)
#include <stdio.h>
#include <windows.h>
#include <io.h>
#include <direct.h>
#include <Shlobj.h>
#include <fileapi.h>
#define unlink _unlink
#define rename MoveFileA
#define ftruncate _chsize
#include "./dirent.inc"
#include "tkc/utf8.h"
#include "tkc/mem.h"
#endif

#if defined(__APPLE__)
#include <mach-o/dyld.h>
#endif /*__APPLE__*/

5. 添加平台特有的文件

有些文件是特定平台才需要的，可以根据平台的名称，来决定添加哪些文件。

示例：

import platform;

OS_NAME=platform.system()
if OS_NAME == 'Windows':
  sources=Glob('src/windows/*.c')
elif OS_NAME == 'Linux':
  sources=Glob('src/linux/*.c')


自定义控件规范

为了自定义控件可以在 Designer 中使用，需要将自定义控件编译成动态库。

编译脚本请参考：https://github.com/zlgopen/awtk-widget-number-label/blob/master/src/SConscript

1. 目录结构

  • design 存放示例代码的原始资源，用 Designer 打开后可进行编辑。

  • res 存放示例代码运行时需要的资源，由 Designer 打包 或者 scripts/update_res.py 脚本生成。

  • bin 存放动态库和可执行文件。

  • lib 存放静态库文件。

  • demos 存放示例代码。

  • idl 存放生成的 IDL 文件。

  • scripts 存放资源生成的脚本文件。

  • src 存放控件源码，每个控件放在独立的目录。

  • tests 用于存放测试代码。

示例：

├─design
│  └─default
├─res
│  └─assets
│       └─default
├─bin
├─lib
├─demos
├─docs
├─idl
├─scripts
├─src
│  └─number_label
└─tests

完整示例参考 number-label

2. 命名规范

2.1 控件类型名

控件类型名使用小写的英文单词，多个单词之间用下划线连接。

如：

#define WIDGET_TYPE_NUMBER_LABEL "number_label"

控件类型名用于注册控件，以便在 XML UI 文件中使用。

控件名要求能展示控件的功能。

2.2 子目录名

在 src 下的子目录名与控件类型名保持一致。

2.3 源文件名

  • 头文件名：控件类型名 + “.h”
  • 源文件名：控件类型名 + “.c”

2.4 类名

控件类型名 + “_t”

如：

typedef struct _number_label_t {
  widget_t widget;
  ...
} number_label_t;

自定义控件只能以 widget_t 作为父类。

2.2 函数名

成员函数以控件类型名为前缀，以下划线连接，全部使用小写单词。

如：

/**
 * @method number_label_set_format
 * 设置格式字符串（用于将浮点数转换为字符串）。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} format 格式字符串。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t number_label_set_format(widget_t* widget, const char* format);

2.3 属性名

属性名使用小写的英文单词，多个单词之间用下划线连接。

属性名必须与 XML UI 文件中的属性名保持一致。

示例

  /**
   * @property {char*} format
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   *
   * 格式字符串。
   *
   */
  char* format;

如果修改某个属性会 EVT_VALUE_CHANGED 事件，请支持通过 WIDGET_PROP_VALUE 访问该属性。

比如，手势密码控件的 password 属性，是用户可以输入的，修改 password 触发 EVT_VALUE_CHANGED 事件，那么在 get_prop/set_prop 里要允许通过 WIDGET_PROP_VALUE 访问 password 属性。

static ret_t gesture_lock_get_prop(widget_t* widget, const char* name, value_t* v) {
  gesture_lock_t* gesture_lock = GESTURE_LOCK(widget);
  return_value_if_fail(gesture_lock != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
  ret_t ret = RET_NOT_FOUND;

  if (tk_str_eq(name, GESTURE_LOCK_PROP_PASSWORD) || tk_str_eq(name, WIDGET_PROP_VALUE)) {
    value_set_str(v, gesture_lock->password);
    ret = RET_OK;
  }

  return ret;
}

2.4 事件名

如果控件有自定义的事件，事件名以”EVT”为前缀，使用大写的英文单词，单词之间用下划线连接。

如：

/**
 * @event {pointer_event_t} EVT_LONG_PRESS
 * 长按事件。
 */

2.5 动态库名

如果动态库中只有一个控件，动态库的名称使用控件类型名。如果动态库中有多个控件，可以自行考虑名称。

2.6 控件注册函数名

控件注册函数负责注册动态库中的控件。

控件注册函数名必须以动态库名为前缀，加上”_register”。注册函数无参数，并返回 ret_t。

如：

/**
 * @method number_label_register
 * 注册数值文本控件。
 *
 * @annotation ["global"]
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t number_label_register(void);

2.7 获取支持的渲染模式的函数名

目前可选的渲染模式有 OpenGL、AGGE-BGR565、AGGE-BGRA8888、AGGE-MONO；默认支持全部模式，模式之间以“|”间隔，可根据实际情况修改。

获取支持的渲染模式的函数名必须以动态库名为前缀，加上”_supported_render_mode”。该函数无参数，并返回 const char*。

如：

/**
 * @method number_label_supported_render_mode
 * 获取支持的渲染模式。
 *
 * @annotation ["global"]
 *
 * @return {const char*} 返回 RET_OK 表示成功，否则表示失败。
 */
const char* number_label_supported_render_mode(void);

3. 注释格式

自定义控件需要使用 AWTK 标准注释。请参考 API 注释格式

4. 辅助工具

awtk 提供了一些工具用于生成 IDL 和动态库导出符号表。

  • awtk/tools/idl_gen/index.js 用于生成 IDL。

如：

node ../awtk/tools/idl_gen/index.js idl/idl.json src/
  • awtk/tools/dll_def_gen/index.js 用于生成动态库导出符号表。

如：

node ../awtk/tools/dll_def_gen/index.js idl/idl.json src/number_label.def

使用这些工具需要安装 nodejs

5. 依赖的 AWTK 版本

可以在自定义控件项目的 project.json 文件中设置该动态库依赖的 AWTK 版本。

如：

{
  ...
  "usesSdk": {
    "awtk:minSdkVersion": "20070",
    "awtk:maxSdkVersion": "20090",
    "awtk:targetSdkVersion": "20090"
  }
  ...
}

  • 参数 awtk:minSdkVersion 是可选的，表示兼容的最低版本。

  • 参数 awtk:maxSdkVersion 是可选的，表示兼容的最高版本。

  • 参数 awtk:targetSdkVersion 是可选的，表示最佳版本。

上述版本号对应发布的 AWTK 中 component.json 文件中的 “release_id” 注意：如果没有显式设置，则认为兼容所有版本。

6. Designer 新建控件的初始状态

默认情况下，从 Designer 的控件列表的自定义分组中拖出一个控件，其属性为控件 create 时的初值，样式为全透明。

如果需要指定新建控件的初始状态，可以在控件的 class 注释上补充如下格式的注释。

/**
...
 *```xml
 * <!-- ui -->
 * 控件初始属性的 xml 描述（如果描述中包含子控件，会同时创建）
 *```
...
 *```xml
 * <!-- style -->
 * 控件默认样式的 xml 描述（如果描述中包含其它控件的样式，会同时添加到 default.xml 样式文件）
 *```
...
 */

如：

/**
 * @class number_label_t
 * @parent widget_t
 * @annotation ["scriptable","design","widget"]
 * 数值文本控件。
 *
 * 在 xml 中使用"number\_label"标签创建数值文本控件。如：
 *
 *```xml
 * <!-- ui -->
 * <number_label x="c" y="50" w="24" h="100" value="40" format="%.4lf" decimal_font_size_scale="0.5"/>
 *```
 *
 * 可用通过 style 来设置控件的显示风格，如字体的大小和颜色等等。如：
 *
 *```xml
 * <!-- style -->
 * <number_label>
 *   <style name="default" font_size="32">
 *     <normal text_color="black" />
 *   </style>
 *   <style name="green" font_name="led" font_size="32">
 *     <normal text_color="green" />
 *   </style>
 * </number_label>
 *```
 */

Designer 新建控件时会根据上述描述初始化控件的属性及样式，但会忽略 x、y 属性。

7. Designer 中的图标

如果需要修改自定义控件在 Designer 中的图标，请将图标存放到指定位置。

7.1 库的图标

库的图标指在 Designer 的“选择模板”或者“模板管理”页面上用于标识自定义控件库或者描述其功能的图标，大小为 60*60 像素。

默认为自定义控件库的 docs/images/widget_preview.png。

如果不指定，则显示为空。

7.2 控件列表上的图标

控件列表上的图标指在 Designer 的控件列表上该控件的图标，大小为 48*48 像素。

默认为自定义控件库的 docs/images/widget_list.png。

如果不指定，则显示默认图标。 如果自定义控件库包含多个控件，可以用“widget_list_”前缀 + 控件类型名的形式，为控件单独指定图标，比如“widget_list_number_label.png”。

7.3 对象浏览器上的图标

对象浏览器上的图标指在 Designer 的对象浏览器上该控件类型的对象左侧显示的图标，大小为 16*16 像素。

默认为自定义控件库的 docs/images/widget_obj.png。

如果不指定，则显示默认图标。 如果自定义控件库包含多个控件，可以用“widget_obj_”前缀 + 控件类型名的形式，为控件单独指定图标，比如“widget_obj_number_label.png”。

8. src 目录中的源代码使用相对路径的方式 include 头文件

为了避免使用自定义控件库时需设置一遍编译时的 include 目录，提高用户体验，要求在源代码中 include 头文件时使用相对路径的形式。

比如，number_label.h、number_label.c 在同一个目录，则在 number_label.c 中按如下方式 include：

...
#include "number_label.h"
...

如果不使用相对路径的方式，则请在自定义控件库的 README.md 文件中注明该库需要 include 的目录。


AWTK 调试技巧

这里收集一些调试技巧，各种疑难杂症的解决方案。请大家把遇到的问题（包括已经解决的）发到 issues 上，我来收集整理。谢谢

一、输入设备相关问题

1.1 指针设备问题的检查列表：

  • 设备名称是否正确。
  • 电阻屏是否校准。
  • x/y 是否需要对调或其它变换。

二、显示相关问题

2.1 图片颜色不正常的检查列表：

  • LCD 的格式是否正确。
  • 图片格式是否正确。

三、资源相关问题

四、内存问题

    1. 内存出现莫名其妙的错误

通常是堆栈溢出，把栈空间修改大点试试。如果支持 jpg/png，栈至少 32K，如果支持 gif 栈至少 48K。

    2. 内存泄露

如果定义宏了 ENABLE_MEM_LEAK_CHECK，每次内存分配都会记录分配的位置、大小和时间，并在窗口打开和关闭时，通过 log_debug 显示当前未释放的内存块。根据块数的变化可以看出是否有内存泄露，并根据分配的位置可以定位泄露的位置。

五、性能问题

性能问题的检查列表：

    1. 硬件加速是否启用。
  • 2.memcpy 的速度是否正常。
    3. 在 window_manager_paint_normal 函数中查看 last_paint_cost 是否在合理的范围。


对话框高亮策略

一、介绍

在弹出除对话框时，通常希望让背景窗口变暗或者变模糊，以突显当前的对话框的重要性。我们把让背景窗口变暗或者变模糊的方法称为对话框高亮策略。并把对话框高亮策略抽象成接口，开发者可以自己实现特殊效果的高亮策略，也可以使用缺省的高亮策略。

缺省的对话框高亮策略是让背景窗口变暗，可以是静态的（固定 alpha)，也可以是动态的。动态的高亮策略在对话框打开的动画过程中，背景窗口逐渐变暗，这有更好的视觉效果，但也需要更多的计算开销，开发者可以根据实际情况选用静态还是动态效果。

二、使用方法

通过对话框的 hightlight 属性来指定对话框的高亮策略，”default”表示缺省的对话框的高亮策略。如：

使用静态效果：

<dialog anim_hint="popdown" highlight="default(alpha=40)"
  x="0" y="0" w="100%" h="160">

使用动态效果：

<dialog anim_hint="popup" highlight="default(start_alpha=0, end_alpha=80)"
  x="0" y="bottom" w="100%" h="160">

三、参数说明

参数其格式为 类似函数调用的参数格式。 缺省的对话框高亮策略支持以下几个参数：

  • start_alpha 起始 alpha 值 (0-255)。
  • end_alpha 结束 alpha 值 (0-255)。
  • alpha 相当于将 start_alpha 和 end_alpha 设置为同一个值。
  • update_background 是否刷新底层窗口的截图，默认为 false，设置为 true 则每帧都会刷新高亮对话框的底层窗口。
  1. 当 alpha=0 时，显示效果没有变化，但相当于缓存了背景窗口的截图，从而提高显示效率，在特殊情况下可以酌情使用。
  2. 当 update_background=true 时，每一帧都会重新缓存背景窗口的截图，会降低效率，非必要情况不建议使用。

四、自定义对话框高亮策略

开发者可以自定义高亮策略，自定义的高亮策略可以像内置高亮策略一样，可以用以上方法在 XML 文件中启用。

  1. 实现 dialog_highlighter_t 接口。如：
static const dialog_highlighter_vtable_t s_dialog_highlighter_default_vt = {
    .type = "dialog_highlighter_default_t",
    .desc = "dialog_highlighter_default_t",
    .size = sizeof(dialog_highlighter_default_t),
    .prepare = dialog_highlighter_default_prepare,
    .draw = dialog_highlighter_default_draw};

dialog_highlighter_t* dialog_highlighter_default_create(object_t* args) {
  value_t v;
  dialog_highlighter_t* h = dialog_highlighter_create(&s_dialog_highlighter_default_vt);
  dialog_highlighter_default_t* dh = (dialog_highlighter_default_t*)h;
  return_value_if_fail(h != NULL, NULL);

  dh->end_alpha = 0;
  dh->start_alpha = 0;

...

  return h;
}
  2. 注册到 dialog_highlighter_factory 工厂。如：
  dialog_highlighter_factory_register(f, DIALOG_HIGHLIGHTER_DEFAULT,
                                      dialog_highlighter_default_create);

完整示例请参考：https://github.com/zlgopen/awtk/tree/master/src/dialog_highlighters


插值算法名称(easing)

  • linear
  • quadratic_in
  • quadratic_out
  • quadratic_inout
  • cubic_in
  • cubic_out
  • sin_in
  • sin_out
  • sin_inout
  • pow_in
  • pow_out
  • pow_inout
  • circular_in
  • circular_out
  • circular_inout
  • elastic_in
  • elastic_out
  • elastic_inout
  • back_in
  • back_out
  • back_inout
  • bounce_in
  • bounce_out
  • bounce_inout

具体效果，请参考：tween.js


AWTK 中的事件处理函数

emitter 实现了通用的事件注册、注销和分发功能，widget 对此做了进一步包装，使用起来非常方便。

一、注册控件事件的处理函数

使用 widget_on 来注册事件处理函数：

/**
 * @method widget_on
 * 注册指定事件的处理函数。
 * @scriptable custom
 * @param {widget_t*} widget 控件对象。
 * @param {event_type_t} type 事件类型。
 * @param {event_func_t} on_event 事件处理函数。
 * @param {void*} ctx 事件处理函数上下文。
 *
 * @return {uint32_t} 返回 id，用于 widget_off。
 */
uint32_t widget_on(widget_t* widget, event_type_t type, event_func_t on_event, void* ctx);

示例：

static ret_t on_inc(void* ctx, event_t* e) {
  widget_t* progress_bar = (widget_t*)ctx;
  uint8_t value = (PROGRESS_BAR(progress_bar)->value + 10) % 100;
  progress_bar_set_value(progress_bar, value);
  (void)e;
  return RET_OK;
}

...

progress_bar = progress_bar_create(win, 10, 80, 168, 30);
widget_set_value(progress_bar, 40);

ok = button_create(win, 10, 5, 80, 30);
widget_set_text(ok, L"Inc");
widget_on(ok, EVT_CLICK, on_inc, progress_bar);
...

在上面这个例子中，我们创建了一个进度条和一个按钮，并为按钮的『点击』事件注册一个处理函数，当按钮被点击时，增加进度条的值。

二、注销控件事件的处理函数

由于窗口关闭时会销毁其中所有控件，所以一般不需要手工去注销。如果确实需要，可以使用 widget_off:

/**
 * @method widget_off
 * 注销指定事件的处理函数。
 * @scriptable custom
 * @param {widget_t*} widget 控件对象。
 * @param {uint32_t} id widget_on 返回的 ID。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_off(widget_t* widget, uint32_t id);

三、控件分发事件

一般只有在控件内部实现中，或者需要向控件注入事件时，才需要调用事件分发函数。如果需要分发事件，可以调用 widget_dispatch：

/**
 * @method widget_dispatch
 * 分发一个事件。
 * @private
 * @param {widget_t*} widget 控件对象。
 * @param {event_t*} e 事件。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_dispatch(widget_t* widget, event_t* e);


输入事件记录与重放

1. 用途

输入事件记录与重放的常见用途有：

  • 自动演示功能。
  • 长时间运行进行压力测试。
  • 辅助手工测试。有时出现崩溃的 BUG 时，往往忘记之前是如何操作的了，输入事件记录与重放可以精确重现问题。同时也可以减轻手工测试的工作量。

2. API

/**
 * @method event_recorder_player_start_record
 * 开始事件记录。
 * @annotation ["static"]
 * @param {const char*} filename 用于保存事件的文件名。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t event_recorder_player_start_record(const char* filename);

/**
 * @method event_recorder_player_start_play
 * 开始事件重放。
 * @annotation ["static"]
 * @param {const char*} filename 存放事件的文件名。
 * @param {uint32_t} times 循环播放的次数。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t event_recorder_player_start_play(const char* filename, uint32_t times);

/**
 * @method event_recorder_player_stop_record
 * 停止事件记录。
 * @annotation ["static"]
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t event_recorder_player_stop_record(void);

/**
 * @method event_recorder_player_stop_play
 * 停止事件重放。
 * @annotation ["static"]
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t event_recorder_player_stop_play(void);

3. 用法

一般有两种方式启用输入事件记录与重放：

  • 通过命令行参数启动记录或重放功能（目前没有提供示例）。

  • 通过快捷键启动记录和重放功能。这种方法更为灵活，可以随时启用和停止，可以随时记录和播放。

要定义宏 WITH|_EVENT_RECORDER_PLAYER 才能启用事件记录与重放功能，PC 版本缺省是定义了该宏的。

demoui 中演示了通过快捷键启动记录和重放功能：

#include "base/event_recorder_player.h"
...

static ret_t on_key_record_play_events(void* ctx, event_t* e) {
  key_event_t* evt = (key_event_t*)e;

#ifdef WITH_EVENT_RECORDER_PLAYER
  if (evt->key == TK_KEY_F5) {
    event_recorder_player_start_record("event_log.bin");
    return RET_STOP;
  } else if (evt->key == TK_KEY_F6) {
    event_recorder_player_stop_record();
    return RET_STOP;
  } else if (evt->key == TK_KEY_F7) {
    event_recorder_player_start_play("event_log.bin", 0xffff);
    return RET_STOP;
  } else if (evt->key == TK_KEY_F8) {
    event_recorder_player_stop_play();
    return RET_STOP;
  }
#endif /*WITH_EVENT_RECORDER_PLAYER*/

  return RET_OK;
}

...

widget_on(wm, EVT_KEY_UP, on_key_record_play_events, wm);

在以上代码中：

  • F5 键开始记录。
  • F6 键停止记录。
  • F7 键开始播放。
  • F8 键停止播放。

4. 已知问题

  • 如果想重复播放记录的事件，确保记录事件时，回到初始界面后才停止记录。
  • 目前平台原生输入法的输入事件没有记录。


FAQ

1.return_value_if_fail 作为 AWTK 中使用率排第一的宏，它的功能、优点和注意事项都有哪些？

功能

  • 主要用于对函数的参数或函数的返回值进行检查（这是防御性编程的手段之一）。

return_value_if_fail 这个宏并非是 AWTK 原创，而是从 GTK+（或者说 glib) 里拿来的。

优点

  • 以简洁的方式对函数的参数或函数的返回值进行检查。

  • Release 模式和 Debug 模式可以做不同的处理。

在参数出现错误时，悄无声息的返回一个错误码，其实是对调用者的纵容，很容易把错误隐藏起来。所以在 Debug 模式我们可以打出一条警告信息，甚至直接 assert 掉，这对于定位 BUG 非常有效。

注意事项

  • 内部函数 (static) 一般不需要对参数进行检查。
  • 只对异常的情况进行判断，对于正常的失败或无效参数，请不要使用本宏。
  • 如果在返回之前，有资源需要释放，请不要用本宏。可以用 goto_error_if_fail 跳到 error 出，释放资源后再返回。

2. 每次在绘制图片前，都要调用 image_manager_load 去加载图片，这样做会不会很慢？有什么优点？

  • 不会慢。因为 image_manager 中有缓存，不会每次都去解码。

优点

  • 缓存有助于多个控件共享同一张图片。

  • 外面不保存对 bitmap 的引用，缓存管理更加灵活。比如，可以清除最近没有被渲染的图片（即使某个隐藏的窗口还在使用该图片）。

3. 使用矢量字体，速度会慢吗？

  • 几乎没有影响。因为有缓存，所以只需要渲染一次，之后和位图字体的并无不同。

4. 在 16 位 LCD 上显示 PNG 图片效果很差，有什么办法吗？

  • 如果是不透明的图片，可以将 PNG 转换成 JPG 文件，转换过程中启用 dithering 算法做平滑处理。

可以用 imagemagic 转换：

convert bg.png  -ordered-dither o8x8,32,64,32 bg.jpg

参考：http://www.imagemagick.org/Usage/quantize/

5. 如何获取控件值？

获取控件的值有以下几种方式：

  • 用 widget_get_value 函数获取（仅支持整数类型）。

  • 用 wiget_get_prop 函数获取。

  • 直接访问控件的属性。控件的属性如果标记为 readable，均可直接访问。如：

widget_t* slider = widget_lookup(win, "slider", TRUE);
double value = SLIDER(slider)->value;

直接访问控件属性时，需要用对应的宏（如上面的 SLIDER) 进行类型转换。

6.Ubuntu 14 上无法启动，有什么办法吗？

Ubuntu 14 上的 OpenGL 有问题，请使用 AGGE 软件渲染。修改 awtk_config.py：

NANOVG_BACKEND='AGGE'

7. 如何实现半透明效果

  • 在 style 中，使用 rgba 格式可以指定半透明填充颜色。如：
<normal     bg_color="rgba(200,200,200,0.1)" />

  • 图片半透明。在制作图片时，使用 PNG 格式，保留 alpha 通道。

  • 整个控件（包括子控件）半透明。可以使用函数 widget_set_opacity 设置不透明度。

/**
 * @method widget_set_opacity
 * 设置控件的不透明度。
 *
 *>在嵌入式平台，半透明效果会使性能大幅下降，请谨慎使用。
 *
 * @param {widget_t*} widget 控件对象。
 * @param {uint8_t} opacity 不透明度（取值 0-255，0 表示完全透明，255 表示完全不透明）。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_opacity(widget_t* widget, uint8_t opacity);

opacity 会影响包括字体在内的全部元素，通常只适用于实现淡入淡出的动态效果。

8. 如何定制缺省软键盘界面？

软键盘可以根据自己的情况进行调整，可以修改 design/default/ui/kb_default.xml。

  • 修改 active 的值可以改变初始页面。
 <pages x="0" y="bottom" w="100%" h="-28" active="4">
  • 修改 s 的值可以调正按钮之间的间距，嵌入式系统 s=1 就好了。
children_layout="default(r=4,c=1,s=2,m=2)"
  • 修改 h 的值可以调整键盘的高度
<keyboard theme="keyboard" x="0" y="bottom" w="100%" h="40%">
  • 中英文按钮切换的图片最好自己设计一个。

修改之后，需要更新资源的脚本：

python scripts/update_res.py ui

9. 如何查看应用程序占用了多少内存？

tk_mem_stat 函数可以获取内存的使用情况，也可以直接调用 tk_mem_dump 显示内存使用情况。

tk_mem_dump 函数的实现如下：

void tk_mem_dump(void) {
  mem_stat_t s = tk_mem_stat();
  log_debug("used: %d bytes %d blocks\n", s.used_bytes, s.used_block_nr);
}

10. 如何确定是否是内存不够导致运行速度变慢？

内存不够时系统确实有可能变慢，内存不够时会清除部分或全部解码的图片缓存，下次使用这些图片时会重新解码。

可以在 mem.c 中的函数 tk_mem_on_out_of_memory 里设置断点，内存耗尽时会调用这个函数释放缓存。如果这个函数被调用，说明内存不够。

11. 如何降低内存开销？

  • 减少同时打开窗口的个数。

  • 根据实际情况 (lcd 的格式） 定义 WITH_BITMAP_BGR565/WITH_BITMAP_RGB565 把不透明的图片解码成 16 位。

12. 如何关闭 log_debug 打印的调试信息。

log_set_log_level 函数可设置 log 的级别，用它可以关闭低级别的 log 信息。

/**
 * @method log_set_log_level
 *
 * 设置 log 的级别。
 *
 * @param {log_level_t} log_level log 的级别。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t log_set_log_level(log_level_t log_level);

在 awtk_main.inc 中有如下代码：

#ifdef NDEBUG
  log_set_log_level(LOG_LEVEL_INFO);
#else
  log_set_log_level(LOG_LEVEL_DEBUG);
#endif /*NDEBUG*/

如果使用 awtk_main.inc 作为应用程序的入口，定义 NDEBUG 也关闭 debug 级别的调试信息。

13. 应用程序在 Windows 的手持设备中运行，如何去掉窗口的标题栏？

在 awtk_config.py 中定义宏 NATIVE_WINDOW_BORDERLESS，重新编译即可：

COMMON_CCFLAGS=COMMON_CCFLAGS+' -DNATIVE_WINDOW_BORDERLESS=1 '

14. 子控件处理了事件，不希望父控件继续处理，怎么处理呢？

让事件处理函数返回 RET_STOP，AWTK 不再调用后续事件处理函数。

15. 如何去掉不需要的控件，以节省 flash 空间

因为控件注册了，即使没有使用，编译器也会把相关代码编译进去。所以只有去掉控件的注册代码，才能优化掉不必要的代码。

  • 去掉不必要的基本控件，可以编辑 src/widgets/widgets.c

比如去掉 overlay 窗口，可以注释掉下面的这行代码：

  widget_factory_register(f, WIDGET_TYPE_OVERLAY, overlay_create);

  • 去掉不必要的扩展控件，可以编辑 src/ext_widgets/ext_widgets.c

  • 从 assets/default/raw/styles/default.xml 中去掉不必要的。

  • 去掉不必要的图片。一些控件去掉了，相应的图片也没有必要了。

16. 内存不够，内部 flash 不够，如何加载大字体文件？

请参考：自定义字体加载器：加载部分字体

17. 如何在打开新窗口时关闭当前窗口？

使用下面的函数即可：

/**
 * @method window_open_and_close
 * @annotation ["constructor", "scriptable"]
 * 从资源文件中加载并创建 window 对象。本函数在 ui_loader/ui_builder_default 里实现。
 * @param {const char*} name window 的名称。
 * @param {widget_t*} to_close 关闭该窗口。
 *
 * @return {widget_t*} 对象。
 */
widget_t* window_open_and_close(const char* name, widget_t* to_close);

18. 如何设置当前的语言？

使用下面的函数即可：

/**
 * @method locale_info_change
 * 设置当前的国家和语言。
 * @annotation ["scriptable"]
 * @param {locale_info_t*} locale_info locale_info 对象。
 * @param {char*} language 语言。
 * @param {char*} country 国家或地区。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t locale_info_change(locale_info_t* locale_info, const char* language, const char* country)

19. 如何将板子键盘的键值映射到 AWTK？

请参考：

  • Linux 系统
  • 嵌入式系统 的 11 节。

20. 如何定制软键盘/候选字的风格？

请修改下面的文件，并重新生成资源：

design/default/styles/keyboard.xml

21. 如何处理：Cannot find module ‘glob’

一般来说，执行下面的命令即可：

npm install -g glob

在 Linux/MacOS 上，有时仍然出现错误，可以通过下面的命令，设置 NODE_PATH 环境变量：

export NODE_PATH="$(npm root -g)"

22. 如何处理 ImportError: No module named PIL

这个需要安装 Pillow 模块 (python)，运行下面的命令可以安装：

pip3 install Pillow

如果系统同时安装了 python2，可以加个 alias。

alias python=python3

23. 如何让用户不可以调整 desktop 应用程序的窗口大小。

在 awtk_config.py 中定义宏 NATIVE_WINDOW_NOT_RESIZABLE，重新编译即可：

COMMON_CCFLAGS=COMMON_CCFLAGS+' -DNATIVE_WINDOW_NOT_RESIZABLE=1 '

24. 为什么定义了 AWTK_LITE，还是会占用很大内存？

AWTK_LITE 主要是用来在低端平台裁剪代码的，内存占用主要于图片缓存有关。可以通过图片管理器的接口设置缓存大小：

/**
 * @method image_manager_set_max_mem_size_of_cached_images
 * 设置图片缓存占用的最大内存。
 * @param {image_manager_t*} imm 图片管理器对象。
 * @param {uint32_t} max_mem_size 最大缓存内存。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t image_manager_set_max_mem_size_of_cached_images(image_manager_t* imm, uint32_t max_mem_size);

25. 如何在命令行重新生成资源？

使用下列命令：

python scripts/update_res.py all

26. idle_queue/timer_queue 失败是什么原因？

通常是消息队列满了。解决方法如下：

  • 优化：比如同一类的消息，可以用一个 idle，而不是每个消息都弄一个 idle，在 idle 函数里再去读取消息。

  • 如果内存允许，可以直接增加队列大小。

#define MAIN_LOOP_QUEUE_SIZE 200

可以放到 awtk_config.h 中。

27. 树莓派上编译 AWTK 出现找不到 glibconfig.h 应该如果处理？

出现错误：

In file included from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /usr/include/gtk-3.0/gdk/gdkconfig.h:13,
                 from /usr/include/gtk-3.0/gdk/gdk.h:30,
                 from /usr/include/gtk-3.0/gtk/gtk.h:30,
                 from 3rd/SDL/src/video/x11/SDL_x11window.c:36:
/usr/include/glib-2.0/glib/gtypes.h:32:10: fatal error: glibconfig.h: No such file or directory
   32 | #include <glibconfig.h>

解决方法如下：

sudo ln -s /usr/lib/arm-linux-gnueabihf/glib-2.0/include/glibconfig.h /usr/include/glib-2.0/glibconfig.h

28. 支持加载 xml 格式的主题样式文件吗？

支持。如：原来的 style 文件为 button.bin，删除 button.bin，放一个 button.xml 文件即可。

29. 设置控件的 value 时，能不触发 value change 事件吗

可以。使用 emitter_disable/emitter_enable 可以关闭和开启控件的事件。

示例：

static ret_t widget_set_value_without_notify(widget_t* widget, uint32_t value) {
  if (widget->emitter != NULL) {
    emitter_disable(widget->emitter);
    widget_set_value(widget, value);
    emitter_enable(widget->emitter);
  } else {
    widget_set_value(widget, value);
  }

  return RET_OK;
}


FrameBuffer 的几种使用方式

一、单 framebuffer

系统中只有一个 framebuffer，LCD 使用该 framebuffer 进行显示，GUI 使用该 framebuffer 进行绘制。

优点：

  • 只有一个 framebuffer，内存需求减半。
  • 无需额外内存拷贝，而且只需画变化的部分，所以性能很高耗电低。

缺点

  • GUI 绘制的同时 LCD 在显示，这很容易出现屏幕闪烁。为了避免闪烁，可以在 GUI 绘制前禁用 LCD 同步数据（需等待 LCD 刷完后再禁用），等绘制完成时再启用 LCD 同步数据。我在 stm32f429igtx 上测试，发现确实不闪烁了，但是在窗口动画时，颜色有些不正常。不知是不是 LCD 频繁启用/禁用，LCD 时钟来不及稳定导致的。

如果硬件能够解决动画颜色不正常的问题或者不需要动画，这种方式是最好的选择。

二、双 framebuffer（Swap）

系统有两个 framebuffer，一个 online 一个 offline，轮流切换显示

  • 1.GUI 在 offline 的 framebuffer 上绘制。
  • 2.LCD 显示 online 的 framebuffer。
  • 3.GUI 绘制完成后，交换两个 framebuffer，online 变 offline，offline 变 online。

优点：

  • 无需内存拷贝，切换 LCD 的 framebuffer 地址即可。

缺点

  • GUI 每次都需要进行完整的绘制，不能只绘制变化的部分。

三、双 framebuffer（Flush）

系统有两个 framebuffer，一个固定 online 供 LCD 显示，一个固定 offline 供 GUI 绘制。

优点：

  • 只需绘制变化的部分，绘制完成后，把变化的部分从 offline 的 framebuffer 拷贝到 online 的 framebuffer 即可。

缺点：

  • 窗口动画时，可能整个屏幕都在变化，所以拷贝的量比较大。优化方法：对于平移的动画，可以让 GUI 直接往 online 的 framebuffer 上绘制，减少一次内存拷贝，而且不会出现闪烁。

四、三个 framebuffer

系统有三个 framebuffer，一个 online 供 LCD 显示，一个 offline 供 GUI 绘制，一个为下一个要显示的 framebuffer。

第二种方式的双缓冲切换方法有一个重要的性能问题：因为并不是在任意时刻都可以切换切换缓冲区，而是只有在当前帧显示完成后才能切换，否则就会出现刚显示一部分就切换到下一帧的情况，这会导致闪烁。所以每次切换都需要等待显示完成，按每秒刷新 60 帧算，这需要等待 16ms 左右，如果绘制本身需要 16ms，那帧率就只有 30FPS 了。如果使三个 framebuffer，就不用等待切换完成了，帧率一下可以到达 60FPS 了。

  • 1.GUI 选取不是 online 和 next 的 framebuffer 作为 offline 的 framebuffer，在 offline 的 framebuffer 上绘制。
  • 2.GUI 绘制完成后，把 offline 设置为 next 作为即将显示的 framebuffer。
  • 3.LCD 在显示完成中断里，将 next 设置为 online 的 framebuffer，并将 next 设置为空闲。

优点：

  • 显示速度大幅提升。

缺点：

  • 多一些内存开销。

以上方式各有优缺点，请根据具体情况进行选择，建议使用最后两种方式。


FScript 脚本引擎

1. 介绍

FScript 是一个极简的脚本引擎，借鉴了函数语言中一些思路，主要用于低端嵌入式系统，让用户轻松扩展现有系统，而不需要重新编译和下载固件。

  • 特色：

  • 小内存。最低开销小于 400 字节。

  • 小巧。核心代码 1500 行，基本扩展函数 1000 行。
  • 灵活。支持多条语句、函数嵌套调用和变量定义。
  • 简单。熟悉任何一种编程语言的人，5 分钟内即可学会。
  • 强大。超过 60 个内置函数，支持类似 C 语言的条件语句、循环语句和注释方式，支持复杂的表达式，支持用 C 语言扩展函数。

keil -O1 编译结果：

      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Object Name
     10380       1580       1909          4          0      86893   fscript.o

实际内存使用与场景有关，请参考 内存需求评估

2. 示例

print("hello fscript")
  • 在 PC 上测试运行：

如：

./bin/runFScript 'print("hello fscript")'
  • 在 PC 上测试运行指定文件：

第一个命令行参数以 @ 开头表示它是一个脚本文件，读取其内容执行。

如：

./bin/runFScript @tests/fscripts/demo_while1.fs

3. 语法

3.1 数据类型

  • 浮点数类型 (double)。
  • 整数类型 (int32)。支持十进制、二进制和十六进制。
  • 字符串类型 (string)。UTF-8 字符串，用英文双引号扩起来。
  • 布尔类型 (bool)。标准取值为：true 和 false，非 0 的数值视为 true。
  • 可以通过扩展实现混合数据类型的数组、固定类型的数组和 map。
  • 可以通过类型转换函数得到各种基本类型。如 int8/int16/int32/int64/uint8/uint16/uint32/uintg64/float/double。

3.2 注释

  • 格式：
//line comment
/*block comment*/
  • 示例：
//this is line comment
/*this is block comment*/

3.3 函数调用

print(0xff)
print(100)
print(0b1010)
print("hello fscript")
print("hello", 123)

函数之间可以用空格、换行和英文分号分隔。

3.4 定义变量

  • 通过 set 函数设置

如：

/* 系统变量：一个 AWTK 应用程序只有一个 global 对象，在程序初始化时创建，程序退出时销毁 */
set(global.a, 123)

/* 全局变量：保存在脚本执行的上下文对象中，通常由外部控制生命周期 */
set(a, 123)
  • 通过=赋值

如：

/* 系统变量：一个 AWTK 应用程序只有一个 global 对象，在程序初始化时创建，程序退出时销毁 */
global.a = 123
global.b = "abc"
global.c = true

/* 全局变量：保存在脚本执行的上下文对象中，通常由外部控制生命周期 */
a = 123
b = "abc"
c = true

/* 局部变量：又称临时变量，在脚本执行完毕或函数调用完成就销毁 */
var a = 123
var b = "abc"
var c = true

备注：

  1. global. 开头的变量为系统变量，可以在同一进程的多个脚本中共享数据（这并非是好的做法，尽量避免使用）
  2. 在 FScript 脚本中定义的系统变量和全局变量在执行完一段脚本后通常不会被清空，因此使用这些变量前需要初始化。

3.4.1 变量名命名规则：

  • 以字母开头，后面可用数字、英文下划线和英文点。

如：

age=123
name="fscript"
file_name="test.txt"
  • 英文点”.”可以用来访问对象的成员，如果对应的对象不存在则当作普通变量。

如：

msg.payload = "hello"

在这里，如果对象 msg 存在，msg.payload 为 msg 对象的 payload 成员，否则 msg.payload 则是一个普通变量。

3.5 获取变量

abc
get(abc)
  • 获取变量时，如果变量不存在，自动当成字符串处理，并打印获取变量失败的警告。
  • 如果不希望变量被当成字符串，可以加上$前缀，或者使用 get 函数。
  • FScript 不支持将函数返回值当做变量名使用并通过英文点”.”访问子变量，比如 array_create().size，此时会将 .size 当做字符串处理。

注意：FScript 不提倡直接使用变量名当做字符串，如需要如果使用字符串常量，请用双引号包起来。

如：

./bin/runFScript 'print($abc)'

get var abc failed
(null)
result:true
cost: 112 us

./bin/runFScript 'print(abc)'

get var abc failed
abc
result:true
cost: 112 us

判断一个变量是否有效，需要使用 get 函数：

注意：如果不使用 get 函数获取变量，那么当变量不存在时，FScript 会自动将其当成字符串处理，此时 value_is_valid 函数一定返回 true。

print("abc is valid? ", value_is_valid(get(abc)))
var abc=123
print("abc is valid? ", value_is_valid(get(abc)))
print(get(abc) + 321)

3.6 函数嵌套调用

print(join(",", 1, 2, 3))
print(join(",",1,2,3,4), join(";",5,6,7,8))

3.7 提前返回 (return)

var a = 1;
if(a == 1) {
  print("return");
  return;
} else {
  print("end");
}

3.8 条件执行

  • 语句方式
/* if else */
var a=random(1, 100)
var b=random(1, 100)

print("a is ", a);
print("b is ", b);

if(a < b) {
  print(a, "<", b)
} else {
  print(a, ">=", b)
}

/* else if */
var a=random(1, 6);
var b = "";

if(a == 1) {
  b = "a"
} else if(a == 2) {
  b = "b"
} else if(a == 3) {
  b = "c"
} else if(a == 4) {
  b = "d"
} else {
  b = "other"
}

代码块需要用 {} 扩起来，else 语句可以省略。

  • 函数方式
if(true, print("a"), print("b"))

3.9 while 循环

  • 语法
while （条件） {
}
  • 示例
var a=0
var b=0

while(a < 100) {
  a=a+1
  b=b+a
  print(a, b)
}

3.10 until 循环

重复执行直到条件成立

  • 语法
until（条件） {
}
  • 示例
var a=0
var b=0

until(a >= 100) {
  a=a+1
  b=b+a
  print(a, b)
}

3.11 for 循环

  • 语法
for（初始化表达式；结束条件；迭代表达式） {
}
  • 示例
for(var a = 0; a < 100; a = a + 1) {
  print(a)
}

3.12 for_in 循环

用于遍历数组对象

  • 语法
for_in（迭代变量，数组对象） {
}
  • 示例
var sum = 0;
var a = array_create(11, 22, 33, 44, 55)
for_in(i, a) {
  sum = sum + i
  print(i)
}
print(sum)

3.13 repeat 循环

  • 语法
repeat（迭代变量，开始值，结束值，增量） {
}
  • 示例
repeat(i, 0, 10, 1) {
  print(i)
}

var times = 10
repeat(i, 0, times, 2) {
  print(i)
}

var times = 10
repeat(i, 20, times, -2) {
  print(i)
}

3.14 repeat_times 循环

  • 语法
repeat_times（重复次数） {
}
  • 示例
repeat_times(100) {
  print("hello")
}

3.15 表达式

为了确保优先级正确，尽量用括号明确优先级。

3.15.1 支持的操作符

  • 四则运算：+ - * / %
  • 逻辑运算：|| && !
  • 位运算：| & ~
  • 比较运算：< <= > >= ==
  • 条件运算：(p) ? a : b

对于加法运算 (+)，参数中有字符串时，进行字符串连接。

3.15.2 示例

var a = 10
var b = 20

a<b
1+2
1-2
1*2
1/2
3%2
a||b
a&&b
a|b
a&b
!a
~a
a<b
a<=b
a>b
a>=b
(1+2)*(2+3)
sin(a) + sin(b)
a<b ? print(a) : print(b)
set(a, a+1)
set(a, a+b)
"abc" + "123"

4. 函数

4.1 基本函数

4.1.1 assert

> 断言

原型
assert(condition, crash_if_fail) => void
  • crash_if_fail 可选。为 true 时，调用系统的 assert，否则只是打印警告。
示例
assert(1<2)

4.1.2 eval

> 执行另外一段脚本。

原型
eval(condition) => value
示例
eval("1+2")

4.1.3 has_error

> 检查是否之前遇到错误

原型
has_error() => bool
示例
print(has_error())

4.1.4 get_last_error

> 获取前一个错误

原型
get_last_error() => object | null

如果有错，返回对象，其成员如下：

  • message 错误消息
  • code 错误码
  • line 出错的行
  • col 出错的列

没有错误，返回无效值。

示例
print(len())
var error = get_last_error();
print("XXX:", error.message, error.code, error.line, error.col);

4.1.5 clear_error

> 清除之前遇到错误

原型
clear_error() => void
示例
clear_error()

4.1.6 print

> 打印调试信息到控制台。

原型
print(str,...) => void
示例
print("hello fscript")
print("hello", "fscript")
print(1)
print(true)

var a=100
var b=200
print(a+b)
print(join(",", a, b))

4.1.7 sleep_ms

> 睡眠指定时间长（毫秒）

原型
sleep_ms(time) => bool
示例
sleep_ms(100);

4.1.8 set

设置变量的值。建议使用=赋值。

原型
set(var, value) => bool
示例
var a=1
set(a, 1)

4.1.9 unset

清除变量。

对于不再使用的变量，特别是对象和字符串，请调用本函数清除掉。

当一个变量重复赋值时，会自动清除之前的数据。

原型
unset(var) => void
示例
var a = 10;
unset(a)

4.1.10 int

转换为整数类型。

原型
int(var) => int32_t
示例
int("123")

4.1.11 i8

转换为 int8_t 类型。

原型
i8(var) => int8_t
示例
i8("123")

4.1.12 i16

转换为 int16_t 类型。

原型
i16(var) => int16_t
示例
i16("123")

4.1.13 i32

转换为 int32_t 类型。

原型
i32(var) => int32_t
示例
i32("123")

4.1.14 i64

转换为 int64_t 类型。

原型
i64(var) => int64_t
示例
i64("123")

4.1.15 u8

转换为 unt8_t 类型。

原型
u8(var) => uint8_t
示例
u8("123")

4.1.16 u16

转换为 unt16_t 类型。

原型
u16(var) => value(uint16)
示例
u16("123")

4.1.17 u32

转换为 unt32_t 类型。

原型
u32(var) => uint32_t
示例
u32("123")

4.1.18 u64

转换为 unt64_t 类型。

原型
u64(var) => uint64_t
示例
u64("123")

4.1.19 f32

转换为单精度类型。

原型
f32(var) => float
示例
f32("123")

4.1.20 f64

> 转换为双精度类型。

原型
f64(var) => double
示例
f64("123")

4.1.21 str

> 转换为字符串类型。

原型
str(var [,force_pointer_as_str]) => str

force_pointer_as_str 如果输入参数是 POINTER 类型，是否将强制转换成字符串。

示例
str(int(123))
str(msg.payload, true)

4.1.22 binary

转换为 binary_data_t 类型。

原型
binary(var) => binary_data_t
binary(var, size) => binary_data_t
binary(var, size, clone) => binary_data_t
  • var 是常见类型的变量。如：i8/i16/i32/i64/u8/u16/u32/u64/float/double/string/wstring/pointer 等。
  • size 如果类型为 pointer 时，size 必须指定，其它类型可以不指定，此时用默认长度。
  • clone 是否拷贝数据。基本数据类型 i8/i16/i32/i64/u8/u16/u32/u64/float/double 始终拷贝。string/wstring/pointer 由本参数决定是否拷贝。

如果不拷贝，请确保引用的变量的生命周期大于新的变量。

示例
binary(100)
binary("123")
binary("123", 2)
binary("123", 2, true)
binary(data, 4)
binary(data, 8, true)

4.1.23 iformat

> 对整数进行格式化（生成的字符串长度不超过 63）

原型
iformat(format, value) => str
示例
iformat("hello:%d", 123)

4.1.24 fformat

> 对浮点数进行格式化（生成的字符串长度不超过 63）

原型
fformat(format, value) => str
示例
fformat("hello:%lf", 123)

4.1.25 exec

> 执行 object 里的一个命令。

原型
exec(cmd, arg) => bool
示例
exec("clear", "all")

具体功能与 object 的实现有关。

4.2 字符串函数

4.2.1 join

将多个变量用指定的分隔符拼接起来，形成一个字符串。

原型
join(seperator, s1, s2, s3...) => str
示例
join(",", 1, 2, 3, "abc")

4.2.2 one_of

从字符串数组中取出第 N 个字符串

原型
one_of(str_array, index, sep) => str

sep 为分隔符，默认为英文分号 (;)。

示例
one_of("aa;bb;cc", 0) // => aa
one_of("aa;bb;cc", 1) // => bb
one_of("aa;bb;cc", 2) // => cc
one_of("aa.bb.cc", 0, ".") // ==> aa

4.2.3 len

取字符串/数组的长度。

原型
len(str) => uint32_t
示例
len("abc")

4.2.4 toupper

将字符串转换成大写。

原型
toupper(str) => str
示例
toupper("abc")

4.2.5 tolower

将字符串转换成小写。

原型
tolower(str) => str
示例
tolower("ABC")

4.2.6 trim

> 去掉字符串两端的空白字符串。

原型
trim(str) => str
示例
trim("  abc  ")

4.2.7 substr

> 取子字符串。

原型
substr(str, from, len) => str
示例
substr("abcd", 1, 2)

4.2.8 replace

> 替换子字符串。

原型
replace(str, old, new) => str
示例
replace("ab cd", "ab", "hello")

4.2.9 contains

> 检查是否包含指定的子字符串。

原型
contains(str, substr) => bool
示例
contains("ab cd", "ab")

4.3 运算函数

4.3.1 sum

> 对多个数值类型的参数求和。

原型
sum(n1,n2...)
+(n1,n2...)
n1+n2
示例
print(sum(1, 2, 3))

4.3.2 sub

> 计算两个数之差。

原型
sub(n1,n2)
或
n1-n2
示例
print(sub(2, 1))
print(2 - 1)

4.3.3 mul

> 计算两个数之积。

原型
mul(n1,n2)
或
n1*n2
示例
print(mul(2, 1))
print(2 * 1)

4.3.4 div

> 计算两个数之商。

原型
div(n1,n2)
或
n1/n2
示例
print(div(2, 1))
print(2/1)

4.3.5 %

> 计算两个数的模。

原型
n1%n2
示例
print(23%7)

4.3.6 and

> 逻辑与运算。

原型
and(n1,n2)
n1 && n2
示例
print(true && false)
print(true && true)

4.3.7 or

> 逻辑或运算。

原型
or(n1,n2)
n1 || n2
示例
print(a || b)

4.3.8 not

> 逻辑非运算。

原型
not(n1)
!(n1)
示例
print(not(true))
print(!(false))

4.4 比较函数

支持字符串比较。

4.4.1 <

> 小于。

原型
<(a,b)
less(a,b)
a<b

4.4.2 <=

> 小于等于。

原型
<=(a,b)
le(a,b)
a<=b

4.4.3 >

> 大于。

原型
>(a,b)
great(a,b)
a>b

4.4.4 >=

> 大于等于。

原型
>=(a,b)
ge(a,b)
a>=b

4.4.5 ==

> 等于。

原型
==(a,b)
eq(a,b)
a==b

4.4.5 !=

> 不等于。

原型
!=(a,b)
a != b

4.5 数学函数

4.5.1 random

> 产生随机数。

原型
random() => int
random(min, max) => int
示例
a = random();

4.5.2 round

> 四舍五入。

原型
round(v) => double
示例
round(4.5)

4.5.3 floor

> 返回小于等于指定数值的最大整数。

原型
floor(v) => double
示例
floor(4.5)

4.5.4 ceil

> 返回大于等于指定数值的最小整数。

原型
ceil(v) => double
示例
ceil(4.5)

4.5.5 abs

> abs 函数。

原型
abs(a) => double
示例
abs(1)

4.5.6 min

> min 函数。

原型
min(a, b) => double
示例
min(1, 2)

4.5.6 max

> max 函数。

原型
max(a, b) => double
示例
max(1, 2)

4.5.7 clamp

> clamp 函数。

原型
clamp(a, min, max) => double
示例
clamp(2, 1, 3)

4.6 时间函数

已经移动到扩展模块。

5. 自定义函数

5.1 定义函数

static ret_t func_foo(object_t* obj, fscript_args_t* args, value_t* v) {
  value_set_int(v, 123);

  return RET_OK;
}

5.2 注册和使用私有函数

  value_t v;
  object_t* obj = object_default_create();
  object_set_prop_pointer(obj, "function.foo", (void*)func_foo);

  fscript_eval(obj, "foo()", &v);
  value_reset(&v);

  OBJECT_UNREF(obj);

5.3 注册全局函数

  • 初始化时调用
fscript_register_func("foo", func_foo);

5.4 定义脚本函数

  • 函数定义
function foo1(v1, v2) {
  return v1 + v2;
}
assert(foo1(100, 200) == 300)
  • 使用 var 定义局部变量。
function foo2(v1, v2) {
  var v3 = v1 + v2;
  return v3
}
assert(foo2(100, 200) == 300)

function foo3(v1, v2) {
  var v3 = v1 + v2;
  if(v3 < 100) {
    return true
  } else {
    return false
  }
}
assert(foo3(10, 20))
assert(!foo3(100, 200))

函数内的临时变量，无论在哪里定义，一旦定义，在该函数内都可以使用。

function foo4 (v1, v2) {
  var v3 = v1 + v2;
  if(v3 < 100) {
    var name = "awtk";
  } else {
    var name = "react-awtk";
  }

  return name;
}

assert(foo4(10, 20) == 'awtk')
assert(foo4(100, 200) == 'react-awtk')

6. 性能测量与优化

runFScript 的第二个参数可以指定运行次数，方便测量某个函数的运行时间。

比如：

./bin/runFScript '123+234' 100000

7. 内置常量

名称 | 说明
RET_OK | 成功。
RET_OOM | Out of memory。
RET_FAIL | 失败。
RET_NOT_IMPL | 没有实现/不支持。
RET_QUIT | 退出。通常用于主循环。
RET_FOUND | 找到。
RET_BUSY | 对象忙。
RET_REMOVE | 移出。通常用于定时器。
RET_REPEAT | 重复。通常用于定时器。
RET_NOT_FOUND | 没找到。
RET_DONE | 操作完成。
RET_STOP | 停止后续操作。
RET_SKIP | 跳过当前项。
RET_CONTINUE | 继续后续操作。
RET_OBJECT_CHANGED | 对象属性变化。
RET_ITEMS_CHANGED | 集合数目变化。
RET_BAD_PARAMS | 无效参数。
RET_TIMEOUT | 超时。
RET_CRC | CRC 错误。
RET_IO | IO 错误。
RET_EOS | End of Stream
RET_NOT_MODIFIED | 没有改变。

示例：

return RET_OK;

8. 注册常量

fscript 本身只是一个胶水语言，它负责把各个原生扩展模块组合起来。扩展模块中往往有一些常量，有些常量是了方便记忆（比如 PI)，有的常量是降低变化带来的影响（比如 TK_NAME_LEN) ，有的常量用于表示特定的意义（比如一些枚举）。为了保持这些常量在 fscript 和原生代码中的一致性，和函数一样，fscript 提供了一种注册机制，让原生模块可以注册常量，这些常量在 fscript 中就可以访问了。

  • 注册常量
/**
 * @method fscript_register_const_value
 * 注册常量。
 * @param {const char*} name 常量名。
 * @param {const value_t*} value 数据。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t fscript_register_const_value(const char* name, const value_t* value);
  • 注册整数常量(只是为了使用方便而提供的包装函数)
/**
 * @method fscript_register_const_int
 * 注册整数常量。
 * @param {const char*} name 常量名。
 * @param {int} value 数据。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t fscript_register_const_int(const char* name, int value);
  • 注册浮点数常量(只是为了使用方便而提供的包装函数)
/**
 * @method fscript_register_const_double
 * 注册浮点数常量。
 * @param {const char*} name 常量名。
 * @param {double} value 数据。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t fscript_register_const_double(const char* name, double value);

示例：

fscript_register_const_double("PI", 3.1415926);
  • 在 fscript 中引用常量。引用常量时需要加 fconsts. 前缀。

示例：

print(fconsts.PI)

9. 扩展模块

  • 字符串扩展模块
  • 位操作扩展模块
  • 数学扩展模块
  • CRC 扩展模块
  • value 扩展模块
  • widget 扩展模块
  • object 扩展模块
  • 文件系统扩展模块
  • app_conf 扩展模块
  • 日期和时间扩展模块
  • JSON 扩展模块
  • 大端小端扩展模块
  • istream 扩展模块
  • ostream 扩展模块
  • iostream 扩展模块
  • TCP/UDP 流扩展模块
  • 文件流扩展模块
  • 串口流扩展模块
  • 动态数组扩展模块
  • 单一类型的动态数组扩展模块
  • 写缓冲区扩展模块
  • 读缓冲区扩展模块
  • module 扩展模块

9. 更多示例

请参考 tests/fscripts 目录。


app_conf 扩展函数

获取 app_conf 对象后，可以直接用 object 的接口访问 app_conf。

1. app_conf

> 获取 app_conf 对象

原型

app_conf() => object

示例

assert(object_set(app_conf(), "timeout", 100))

2. app_conf_save

> 保存修改。

原型

app_conf_save() => bool

示例

assert(app_conf_save())

完整示例

assert(object_set(app_conf(), "timeout", 100))
assert(object_set(app_conf(), "serial.device", "/dev/tty01"))
assert(object_set(app_conf(), "serial.baudrate", 115200))
assert(app_conf_save())

assert(object_get(app_conf(), "timeout") == 100)
assert(object_get(app_conf(), "serial.device") == "/dev/tty01")
assert(object_get(app_conf(), "serial.baudrate") == 115200)

assert(object_remove(app_conf(), "timeout"))
assert(object_remove(app_conf(), "serial"))

assert(object_get(app_conf(), "timeout", 10) == 10)
assert(object_get(app_conf(), "serial.device", "a") == "a")
assert(object_get(app_conf(), "serial.baudrate", 1000) == 1000)
assert(object_set(app_conf(), "timeout", 100))

assert(app_conf_save())


array 扩展函数

array 是一个通用的数组，里面可以放混合数据类型的数据。

array 有以下属性：

  • size 元素的个数
  • capacity 元素的最大个数

1.array_create

> 创建 array 对象。

原型

array_create() => object
array_create(elem1, elem2, elem3, ...) => object

示例

var a = array_create();
var b = array_create(123, 456, 789);

2.array_create_with_str

> 创建 array 对象。以指定的分隔符把字符串拆开，并转换为指定类型的数据，放入数组中。

原型

array_create_with_str(str, sep, type) => object

type 为可选参数，可选取值为：

  • int 表示整数。
  • double 表示浮点数。
  • 其它或默认为字符串。

示例

var a = array_create_with_str("a2,a1,a3", ",");
a = array_create_with_str("2,1,3", ",", "int");
a = array_create_with_str("2,1,3", ",", "double");

3.array_create_repeated

> 创建 array 对象。

原型

array_create_repeated(value, nr) => object
  • value 为初始化的值。
  • nr 为值的个数。

示例

var a = array_create_repeated(123, 3);

4.array_dup

> 创建 array 对象。

原型

array_dup(arr, start, end) => object
  1. start 为开始的位置，默认为 0。
  2. end 为结束的位置（不包含）

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_dup(a);
var c = array_dup(a, 1);
var d = array_dup(a, 1, 2);

5.array_push

> 追加一个或多个数据，并返回写入数据的个数。

原型

array_push(array, v, ...) => uint32_t

示例

var a = array_create();
array_push(a, "123");
array_push(a, "456", "789");

6.array_pop

> 弹出最后一个元素

原型

array_pop(array) => value

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_pop(a);

7.array_shift

> 弹出第一个元素

原型

array_shift(array) => value

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_shift(a);

8.array_get

> 获取指定位置的元素

原型

array_get(array, index) => value

index 为负数时，从后往前取。比如-1 表示最后一个元素。

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_get(a, 0);
var c = array_get(a, -1);

9.array_set

> 修改指定位置的元素

原型

array_set(array, index, value) => bool

index 为负数时，从后往前取。比如-1 表示最后一个元素。

示例

var a = array_create_with_str("2,1,3", ",", "int");
array_set(a, 0, 4);
array_set(a, -1, 5);

10.array_insert

> 插入元素到指定位置

原型

array_insert(array, index, value) => bool

index 为负数时，从后往前取。比如-1 表示最后一个元素。

示例

var a = array_create_with_str("2,1,3", ",", "int");
array_insert(a, 0, 4);
array_insert(a, -1, 5);

11.array_index_of

> 获取元素首次出现的位置。

原型

array_index_of(array, value) => index

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_index_of(a, 1);

12.array_last_index_of

> 获取元素最后出现的位置。

原型

array_last_index_of(array, value) => index

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_last_index_of(a, 1);

13.array_remove

> 删除指定位置的元素

原型

array_remove(array, index) => bool

index 为负数时，从后往前取。比如-1 表示最后一个元素。

示例

var a = array_create_with_str("2,1,3", ",", "int");
array_remove(a, 0);
array_remove(a, -1);

14.array_get_and_remove

> 删除指定位置的元素，并返回该元素。

原型

array_get_and_remove(array, index) => value

index 为负数时，从后往前取。比如-1 表示最后一个元素。

示例

var a = array_create_with_str("2,1,3", ",", "int");
array_get_and_remove(a, 0);
array_get_and_remove(a, -1);

15.array_clear

> 删除全部元素

原型

array_clear(array) => bool

示例

var a = array_create_with_str("2,1,3", ",", "int");
array_clear(a);

16.array_join

> 连接全部元素成一个字符串。

原型

array_join(array, sep) => str

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_join(a, ",");

17.array_sort

> 根据当前的数据类型排序，以第一个元素类型为准。

原型

array_sort(array, ascending, ignore_case) => bool
  1. ascending 是否为升序，默认是。
  2. ignore_case 是否忽略大小写，仅用于字符串，默认为否。

示例

var a = array_create_with_str("2,1,3", ",", "int");
assert(array_sort(a));
var d = array_join(a, ":");
assert(d == "1:2:3")

assert(array_sort(a, false));
d = array_join(a, ":");
assert(d == "3:2:1")

18.array_min

> 获取最小值。

原型

array_min(array) => double

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_min(a);

19.array_max

> 获取最大值。

原型

array_max(array) => double

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_max(a);

20.array_avg

> 求平均值。

原型

array_avg(array) => double

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_avg(a);

21.array_sum

> 求和。

原型

array_sum(array) => double

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_sum(a);

22.array_clone_and_sort

> clone一份数据，根据当前的数据类型排序，以第一个元素类型为准。

原型

array_clone_and_sort(array, ascending, ignore_case) => array
  1. ascending 是否为升序，默认是。
  2. ignore_case 是否忽略大小写，仅用于字符串，默认为否。

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_clone_and_sort(a);
var c = array_join(b, ":");
assert(c == "1:2:3")

23.array_reverse

> 反向。

原型

array_reverse(array) => bool

示例

var a = array_create_with_str("2,1,3", ",", "int");
array_reverse(a);

24.array_is_empty

> 判断数组是否为空。

原型

array_is_empty(array) => bool

示例

var a = array_create();
assert(array_is_empty(a));

25.array_size

> 获取数组中属性的个数。

原型

array_size(array) => size

示例

var a = array_create_with_str("2,1,3", ",", "int");
var b = array_size(a);

更多示例

var a = array_create()
assert(array_push(a,1,2,3) == 3)
assert(array_push(a,"a","b","c") == 3)
assert(array_pop(a), "c")
assert(array_pop(a), "b")
assert(array_pop(a), "a")
assert(array_pop(a), "3")
assert(array_pop(a), "2")
assert(array_pop(a), "1")
assert(value_is_valid(array_pop(a)))
assert(array_clear(a))
assert(a.size == 0)

assert(array_insert(a, 0, 'a'))
assert(array_insert(a, 1, 'b'))
assert(array_insert(a, 2, 'c'))
assert(array_insert(a, 3, 'd'))
assert(a.size == 4)
assert(array_remove(a, 0))

assert(array_get(a, 0) == 'b')
assert(array_set(a, 0, 'bbb'))
assert(array_get(a, 0) == 'bbb')
assert(array_set(a, 0, 'b'))

assert(array_get(a, 1) == 'c')
assert(array_set(a, 1, 'ccc'))
assert(array_get(a, 1) == 'ccc')
assert(array_set(a, 1, 'c'))
assert(array_join(a, ',') == 'b,c,d')
print(a.size, a.capacity)


awflow 扩展函数

awflow 相关的辅助函数。

1. flow_get

> 获取流图中变量。

原型

flow_get(type, subname) => v

示例

print(flow_get("global", "value"));
print(flow_get("msg", "payload"));

2. flow_set

> 修改流图中的变量。

原型

flow_set(type, subname, value) => bool

示例

flow_set('global', 'value', 3);
flow_set('msg', 'payload', 4);


﻿## 位操作扩展函数

1. &

> 位与运算。

原型

n1 & n2

示例

print(1 & 1)

2. |

> 位或运算。

原型

n1 | n2

示例

print(|(1, 2))

3.~

> 按位取反运算。

原型

~(n1)

示例

print(~1)

4.^

> 异或运算。

原型

n1^n2

示例

print(n1^n2)

5. <<

> 左移

原型

n1<<n2

示例

print(n1<<n2)

6. >>

> 右移

原型

n1>>n2

示例

print(n1>>n2)

7. bit_get

> 获取指定的位

原型

bit_get(n1, n2) => bool

示例

print(bit_get(0b1010, 1))

8. bit_set

> 设置指定的位

原型

bit_set(n1, n2) => value

示例

print(bit_set(0b1010, 0))

9. bit_clear

> 清除指定的位

原型

bit_clear(n1, n2) => value

示例

print(bit_clear(0b1010, 1))

10. bit_toggle

> 取反指定的位

原型

bit_toggle(n1, n2) => value

示例

print(bit_toggle(0b1010, 1))

更多示例

assert(bit_clear(0b0111, 1) == 0b0101)
assert(bit_clear(0b0111, 0) == 0b0110)

assert(bit_set(0b0, 0) == 0b1)
assert(bit_set(0b0, 1) == 0b10)
assert(bit_set(0b0, 2) == 0b100)

assert(bit_toggle(0b000, 0) == 0b1)
assert(bit_toggle(0b111, 1) == 0b101)
assert(bit_toggle(0b101, 2) == 0b1)

assert(bit_get(0b0111, 0))
assert(bit_get(0b0111, 1))
assert(!bit_get(0b0011, 2))

assert((1<<1) == 2)
assert((1<<2) == 4)
assert((1<<8) == 256)
assert(((0xf0112233 >> 24) & 0xff)  == 0xf0)


CRC 函数

Cyclic redundancy check

1.crc16

> crc16 函数。

原型

crc16(str) => uint16_t
crc16(data, size) => uint16_t
crc16(binary) => uint16_t

示例

crc16("hello")

2.crc32

> crc32 函数。

原型

crc32(str) => uint32_t
crc32(data, size) => uint32_t
crc32(binary) => uint32_t

示例

crc32("hello")

3.cksum

> cksum 函数。

原型

cksum(str) => uint16_t
cksum(data, size) => uint16_t
cksum(binary) => uint16_t

示例

cksum("hello")

更多示例

//test string
assert(crc16("123") == 40116)
assert(crc32("123") == u32(2286445522))
assert(cksum("123") == u16(65385))

//test binary
var a = typed_array_create("i8", 10)
assert(typed_array_push(a, 1,2,3) == 3)
print(crc16(a.data, a.size))
print(crc32(a.data, a.size))
print(cksum(a.data, a.size))
unset(a);

//test binary
assert(file_write("test.bin", "hello", 5))
assert(file_exist("test.bin"))
a = file_read_binary("test.bin")
assert(crc16(a) == 13501)
assert(crc32(a) == 907060870)
assert(cksum(a)==65003)
assert(file_remove("test.bin"))
unset(a)


日期时间扩展函数

1.date_time_create

> 创建日期对象。

原型

date_time_create() => object

日期对象有下列属性：

  • year 年 （可读写）
  • month 月 （可读写）
  • day 日 （可读写）
  • hour 时 （可读写）
  • minute 分 （可读写）
  • second 秒 （可读写）
  • wday 周几 （可只读）

示例

var dt = date_time_create();
print(dt.year, "-", dt.month, "-", dt.day, " ", dt.hour, ":", dt.minute, ":", dt.second, "(", dt.wday, ")");

2.date_time_to_time

> 转成相对于 00:00:00 UTC on 1 January 1970 的秒数。

原型

date_time_to_time(dt) => uint64_t

示例

var dt = date_time_create();
var time = date_time_to_time(dt);

3.date_time_from_time

> 将相对于 00:00:00 UTC on 1 January 1970 的秒数转成成 date time。

原型

date_time_from_time(dt, time) => bool

示例

var dt = date_time_create();
var time = date_time_to_time(dt);
assert(date_time_from_time(dt, time));

4.date_time_set

> 把 date time 中的时间设置为系统时间。

原型

date_time_set(dt) => bool

需要有设置系统时间的权限。

示例

var dt = date_time_create();
dt.year = 2022;
dt.month = 10;
dt.day = 1;
dt.hour = 2;
dt.minute = 3;
dt.second = 4;
assert(date_time_set(dt));

5.time_now/time_now_s

> 获取当前时间戳函数 (s)。

原型

time_now()  => uint64_t
time_now_s()  => uint64_t

示例

var a = time_now();
var b = time_now_s();

6.time_now_ms

> 获取当前时间戳函数 (ms)。

原型

time_now_ms()  => uint64_t

示例

var a = time_now_ms();

7.time_now_us

> 获取当前时间戳函数 (us)。

原型

time_now_us() => uint64_t

示例

var a = time_now_us();

8.is_leap_year

> 判断指定年份是否是闰年。

原型

is_leap_year(year) => bool

示例

var dt = date_time_create();
print(is_leap_year(dt.year));

9.get_days_of_month

> 获取指定年月的天数。

原型

get_days_of_month(year, month) => uint32_t

示例

var dt = date_time_create();
print(get_days_of_month(dt.year, dt.month));

10.date_time_set_prop

> 设置日期对象中的属性。

原型

date_time_set_prop(dt, name, value) => bool

示例

var dt = date_time_create();
date_time_set_prop(dt, "year", 2012);

11.date_time_get_prop

> 获取日期对象中的属性。

原型

date_time_get_prop(dt, name) => value

示例

var dt = date_time_create();
var year = date_time_get_prop(dt, "year");

更多示例

var dt = date_time_create()
print(dt.year, "-", dt.month, "-", dt.day, " ", dt.hour, ":", dt.minute, ":", dt.second, "(", dt.wday, ")")

dt.year = 2022
dt.month = 10
dt.day = 1
dt.hour = 2
dt.minute = 3
dt.second = 4
assert(dt.year == 2022)
assert(dt.month == 10)
assert(dt.day == 1)
assert(dt.hour == 2)
assert(dt.minute == 3)
assert(dt.second == 4)
print(dt.year, "-", dt.month, "-", dt.day, " ", dt.hour, ":", dt.minute, ":", dt.second, "(", dt.wday, ")")

assert(date_time_to_time(dt) == 1664560984)
assert(date_time_from_time(dt, 1664560985))

assert(dt.year == 2022)
assert(dt.month == 10)
assert(dt.day == 1)
assert(dt.hour == 2)
assert(dt.minute == 3)
assert(dt.second == 5)

print(time_now_us())
print(time_now_ms())
print(time_now_s())


大端小端扩展函数

1.is_little

> 判断当前 CPU 是否是小端。

原型

is_little() => bool

示例

print(is_little());

2.htonl

> 将类型为 uint32_t 的整数，从主机字节顺序转成网络字节顺序。

原型

htonl(uint32_t) => uint32_t

示例

print(htonl(1));

3.ntohl

> 将类型为 uint32_t 的整数，从网络字节顺序转成主机字节顺序。

原型

ntohl(uint32_t) => uint32_t

示例

print(ntohl(2));

4.htons

> 将类型为 uint16_t 的整数，从主机字节顺序转成网络字节顺序。

原型

htons(uint16_t) => uint16_t

示例

print(htons(3));

5.ntohs

> 将类型为 uint16_t 的整数，从网络字节顺序转成主机字节顺序。

原型

ntohs(uint16_t) => uint16_t

示例

print(ntohs(4));

6.htonf

> 将类型为单精度的浮点数，从主机字节顺序转成网络字节顺序。

原型

htonf(float) => float

示例

print(htonf(5));

7.ntohf

> 将类型为单精度的浮点数，从网络字节顺序转成主机字节顺序。

原型

ntohf(float) => float

示例

print(ntohf(7));

8.htonll

> 将类型为 uint64_t 的整数，从主机字节顺序转成网络字节顺序。

原型

htonll(uint64_t) => uint64_t

示例

print(htonll(5));

9.ntohll

> 将类型为 uint64_t 的整数，从网络字节顺序转成主机字节顺序。

原型

ntohll(uint64_t) => uint64_t

示例

print(ntohll(1));

更多示例

assert(is_little())
assert(htonl(0x11223344) == 0x44332211)
assert(ntohl(0x11223344) == 0x44332211)
assert(htons(0x1122) == 0x2211)
assert(ntohs(0x1122) == 0x2211)
assert(htonll(0x1122334455667788)==0x8877665544332211)
assert(ntohll(0x1122334455667788)==0x8877665544332211)


文件系统扩展函数

1.file_read_text

> 读取文本文件。

原型

file_read_text(filename) => str

示例

file_read_text("test.txt");

2.file_read_binary

> 读取二进制文件。

原型

file_read_binary(filename) => binary

示例

var a = file_read_binary("test.bin");

3.file_write

> 写入文件。

原型

file_write(filename, str) => bool
file_write(filename, binary) => bool
file_write(filename, data, size) => bool

示例

file_write("test.txt", "write str");

4.file_write_append

> 写入文件尾部（追加内容）。

原型

file_write_append(filename, str) => bool
file_write_append(filename, binary) => bool
file_write_append(filename, data, size) => bool

示例

file_write_append("test.txt", "append str");

5.file_exist

> 检查文件是否存在。

原型

file_exist(filename) => bool

示例

print(file_exist("test.txt"));

6.file_get_size

> 获取文件大小。

原型

file_get_size(filename) => int32_t

示例

print(file_get_size("test.txt"));

7.file_remove

> 删除指定的文件。

原型

file_remove(filename) => bool

示例

file_remove("test.txt");

8.file_rename

> 文件重命名。

原型

file_rename(filename, new_name) => bool

示例

file_rename("test.txt","rename.txt");

9.file_copy

> 文件拷贝。

原型

file_copy(filename, dst_name) => bool

示例

file_copy("rename.txt","copy.txt");

10.file_stat

> 获取文件信息。

原型

file_stat(filename) => object

返回的文件信息对象包含以下属性：

属性名称 | 属性类型 | 说明
dev | uint32_t | 文件系统设备
ino | uint16_t | 文件序列号
mode | uint16_t | 文件类型和权限信息
nlink | int16_t | 文件的符号链接数量
uid | int16_t | 用户id
gid | int16_t | 组id
rdev | uint32_t | 设备id
size | uint64_t | 文件大小（单位：字节）
atime | uint64_t | 最后访问时间
mtime | uint64_t | 最后修改时间
ctime | uint64_t | 创建时间
is_dir | bool_t | 是否为目录
is_link | bool_t | 是否为链接
is_reg_file | bool_t | 是否为普通文件

示例

var a = file_stat("rename.txt");
print(join(": ","dev",a.dev));
print(join(": ","ino",a.ino));
print(join(": ","mode",a.mode));
print(join(": ","nlink",a.nlink));
print(join(": ","uid",a.uid));
print(join(": ","rdev",a.rdev));
print(join(": ","size",a.size));
print(join(": ","atime",a.atime));
print(join(": ","mtime",a.mtime));
print(join(": ","ctime",a.ctime));
print(join(": ","is_dir",a.is_dir));
print(join(": ","is_link",a.is_link));
print(join(": ","is_reg_file",a.is_reg_file));

11.path_create

> 创建目录(递归创建不存在的父目录)。

原型

path_create(path) => bool

示例

path_create("a/b/c");

12.path_remove

> 删除目录(递归创建子目录和文件)。

原型

path_remove(path) => bool

示例

path_remove("a/b/c");

13.path_exist

> 检查指定的目录是否存在。

原型

path_exist(path) => bool

示例

print(path_exist("a/b/c"));

14.path_rename

> 目录重命名。

原型

path_rename(path, new_path) => bool

示例

path_rename("a/b","a/bbb");

15.path_list

> 获取指定目录下的子目录/文件列表。

原型

path_list(path) => array

返回的列表数组中每个元素都是一个 object 对象，每个 object 对象中包含以下属性：

属性名称 | 属性类型 | 说明
is_dir | bool_t | 是否是目录
is_link | bool_t | 是否是符号链接
is_reg_file | bool_t | 是否是普通文件
name | str | 文件名称

示例

var a = path_list("a/b");
var b = array_get(a,0);
print(object_get(b.is_dir));
print(object_get(b.is_link));
print(object_get(b.is_reg_file));
print(object_get(b.name));

16.path_get_exe

> 获取可执行文件所在目录。

原型

path_get_exe() => str

示例

print(path_get_exe());

17.path_get_cwd

> 获取当前所在目录。

原型

path_get_cwd() => str

示例

print(path_get_cwd());

18.path_get_temp

> 获取临时目录的路径。

原型

path_get_temp() => str

示例

print(path_get_temp());

19.path_get_app_root

> 获取应用程序根目录的路径。

原型

path_get_app_root() => str

示例

print(path_get_app_root());

20.path_get_user_storage_root

> 获取用户目录或用户可以存储数据的目录的路径。

原型

path_get_user_storage_root() => str

示例

print(path_get_user_storage_root());

21.fs_get_disk_info

> 获取文件系统信息。

原型

fs_get_disk_info(path) => object

返回的文件系统信息对象包含以下属性：

属性名称 | 属性类型 | 说明
free_kb | int32_t | 空闲空间大小(KB)
total_kb | int32_t | 总共空间大小(KB)

备注：该功能需适配 AWTK 通用文件系统（fs.h）中的 fs_get_disk_info 接口，目前 PC 上暂不支持。

var a = fs_get_disk_info("/sd");
print(join(": ","free_kb",a.free_kb));
print(join(": ","total_kb",a.total_kb));

更多示例

assert(file_write("test.txt", "hello"))
assert(file_exist("test.txt"))
assert(file_get_size("test.txt")==5)
assert(file_read_text("test.txt") == "hello")
assert(file_write_append("test.txt","world"))
assert(file_read_text("test.txt") == "helloworld")
assert(file_rename("test.txt","rename.txt"))
assert(!file_exist("test.txt"))
assert(file_read_text("rename.txt") == "helloworld")
assert(file_copy("rename.txt","copy.txt"))
assert(file_read_text("copy.txt") == "helloworld")
assert(file_remove("copy.txt"))
assert(!file_exist("copy.txt"))

var a = file_stat("rename.txt")
print(join(": ","dev",a.dev))
print(join(": ","ino",a.ino))
print(join(": ","mode",a.mode))
print(join(": ","nlink",a.nlink))
print(join(": ","uid",a.uid))
print(join(": ","rdev",a.rdev))
print(join(": ","size",a.size))
print(join(": ","atime",a.atime))
print(join(": ","mtime",a.mtime))
print(join(": ","ctime",a.ctime))
print(join(": ","is_dir",a.is_dir))
print(join(": ","is_link",a.is_link))
print(join(": ","is_reg_file",a.is_reg_file))
assert(file_remove("rename.txt"))
assert(!file_exist("rename.txt"))

assert(file_write("test.bin", "hello", 5))
assert(file_exist("test.bin"))
assert(file_get_size("test.bin")==5)
a = file_read_binary("test.bin")
assert(value_get_binary_size(a) == 5)
assert(file_remove("test.bin"))
assert(!file_exist("test.bin"))

assert(file_write("test.bin", a))
assert(file_exist("test.bin"))
assert(file_get_size("test.bin")==5)
assert(file_remove("test.bin"))

assert(path_create("a/b/c"))
assert(path_exist("a/b/c"))
assert(path_remove("a/b/c"))
assert(!path_exist("a/b/c"))
assert(path_rename("a/b","a/bbb"))
assert(!path_exist("a/b"))
assert(path_exist("a/bbb"))
assert(file_write("a/test.txt", "hello"))
a = path_list("a")
assert(a.size==2)
var b = array_get(a,0)
var c = array_get(a,1)
assert(b.name=="bbb")
assert(c.name=="test.txt")
assert(path_remove("a"))
assert(!path_exist("a"))

print(path_get_exe())
print(path_get_cwd())
print(path_get_temp())
print(path_get_app_root())
print(path_get_user_storage_root())

unset(a)
unset(b)
unset(c)


iostream 扩展函数

1.iostream_get_istream

> 获取输入流对象。

原型

iostream_get_istream(iostream) => object

示例

var a = iostream_serial_create("COM4");
var b = iostream_get_istream(a);

2.iostream_get_ostream

> 获取输出流对象。

原型

iostream_get_ostream(iostream) => object

示例

var a = iostream_serial_create("COM4");
var b = iostream_get_ostream(a);

更多示例

//
// start serial echo server first
// ./bin/serial_recv 4000
//

var a = iostream_serial_create("/dev/ttys001", 0)
var b = iostream_get_ostream(a)
var c = iostream_get_istream(a)

assert(ostream_write_uint32(b, 6) == 4)
assert(ostream_write_string(b, "hello\n") == 6)

assert(istream_read_uint32(c, 3000) == 6)
assert(istream_read_string(c, 6, 3000) == "hello\n")


文件流扩展函数

1.istream_file_create

> 创建文件输入流对象。

原型

istream_file_create(filename, mode) => object

示例

var a = istream_file_create("test.bin", "rb");

2.ostream_file_create

> 创建文件输出流对象。

原型

ostream_file_create(filename, mode) => object

示例

var a = ostream_file_create("test.bin", "wb+");

完整示例

var a = ostream_file_create("test.bin", "wb+")
assert(ostream_write_uint8(a, 1) == 1)
assert(ostream_write_int8(a, -1) == 1)
assert(ostream_tell(a), 2)

assert(ostream_write_uint16(a, 2) == 2)
assert(ostream_write_int16(a, -2) == 2)
assert(ostream_tell(a), 6)

assert(ostream_write_uint32(a, 3) == 4)
assert(ostream_write_int32(a, -3) == 4)
assert(ostream_tell(a), 14)

assert(ostream_write_uint64(a, 4) == 8)
assert(ostream_write_int64(a, -4) == 8)
assert(ostream_tell(a), 30)

assert(ostream_write_float(a, 5) == 4)
assert(ostream_write_double(a, -5) == 8)
assert(ostream_tell(a), 42)

assert(ostream_write_string(a, "hello") == 5)
assert(ostream_write_binary(a, "world", 5) == 5)
assert(ostream_tell(a), 52)

assert(ostream_flush(a))

a = istream_file_create("test.bin", "rb")
assert(istream_read_uint8(a)==1)
assert(istream_read_int8(a)==-1)
assert(istream_tell(a), 2)

assert(istream_read_uint16(a)==2)
assert(istream_read_int16(a)==-2)
assert(istream_tell(a), 6)

assert(istream_read_uint32(a)==3)
assert(istream_read_int32(a)==-3)
assert(istream_tell(a), 14)

assert(istream_read_uint64(a)==4)
assert(istream_read_int64(a)==-4)
assert(istream_tell(a), 30)

assert(istream_read_float(a)==5)
assert(istream_read_double(a)==-5)
assert(istream_tell(a), 42)

assert(istream_read_string(a, 5)=="hello")
assert(istream_tell(a), 47)

istream_read_binary(a, 5)
assert(istream_tell(a), 52)
assert(istream_seek(a, 0))
assert(istream_read_uint8(a)==1)
assert(istream_read_int8(a)==-1)
assert(istream_tell(a) == 2)

unset(a)


TCP/UDP 客户端扩展函数

1.iostream_tcp_create

> 创建 TCP 客户端输入输出流对象。

原型

iostream_tcp_create(host, port) => object

示例

var a = iostream_tcp_create("localhost", 1234);

2.iostream_udp_create

> 创建 UDP 客户端输入输出流对象。

原型

iostream_udp_create(host, port) => object

示例

var a = iostream_udp_create("localhost", 4000);

完整示例

//
//start tcp echo server first
//socat -v tcp-l:1234,fork exec:'/bin/cat'
//

var a = iostream_tcp_create("localhost", 1234)
var b = iostream_get_ostream(a)
var c = iostream_get_istream(a)

assert(ostream_write_uint8(b, 1) == 1)
assert(ostream_write_uint16(b, 2)== 2)
assert(ostream_write_uint32(b, 3) == 4)
assert(ostream_write_uint64(b, 4) == 8)
assert(ostream_write_float(b, 5) == 4)
assert(ostream_write_double(b, 6) == 8)
assert(ostream_write_string(b, "hello\n") == 6)

assert(istream_read_uint8(c) == 1)
assert(istream_read_uint16(c) == 2)
assert(istream_read_uint32(c) == 3)
assert(istream_read_uint64(c) == 4)
assert(istream_read_float(c) == 5)
assert(istream_read_double(c) == 6)
assert(istream_read_string(c, 6) == "hello\n")

//
// start udp echo server first
// ./bin/udp_recv 4000
//

var a = iostream_udp_create("localhost", 4000)
var b = iostream_get_ostream(a)
var c = iostream_get_istream(a)

assert(ostream_write_uint8(b, 1) == 1)
assert(ostream_write_uint16(b, 2)== 2)
assert(ostream_write_uint32(b, 3) == 4)
assert(ostream_write_uint64(b, 4) == 8)
assert(ostream_write_float(b, 5) == 4)
assert(ostream_write_double(b, 6) == 8)
assert(ostream_write_string(b, "hello\n") == 6)

assert(istream_read_uint8(c) == 1)
assert(istream_read_uint16(c) == 2)
assert(istream_read_uint32(c) == 3)
assert(istream_read_uint64(c) == 4)
assert(istream_read_float(c) == 5)
assert(istream_read_double(c) == 6)
assert(istream_read_string(c, 6) == "hello\n")


串口扩展函数

1.iostream_serial_create

> 创建串口输入输出流对象。

原型

iostream_serial_create(device) => object
iostream_serial_create(device, baudrate, bytesize, parity, stopbits, flowcontrol) => object
  • device 为串口名称。
  • baudrate 为波特率，缺省为115200。
  • bytesize 为字节位数，缺省为8。
  • parity 为奇偶校验，缺省为none。
  • stopbits 为停止位，缺省为1。
  • flowcontrol 为流控，缺省为none。

备注：其中 device 为必填参数，其他均为可选参数。

示例

var a = iostream_serial_create("COM4");
var b = iostream_serial_create("COM5", 115200, 8, "none", 1, "none");

完整示例

//
// start serial echo server first
// ./bin/serial_recv 4000
//

var a = iostream_serial_create("/dev/ttys001", 0)
var b = iostream_get_ostream(a)
var c = iostream_get_istream(a)

assert(ostream_write_uint32(b, 6) == 4)
assert(ostream_write_string(b, "hello\n") == 6)

assert(istream_read_uint32(c, 3000) == 6)
assert(istream_read_string(c, 6, 3000) == "hello\n")


istream 扩展函数

1.istream_seek

> 定位到指定的偏移量。

原型

istream_seek(istream, offset) => bool

仅当输入流支持 seek 才能调用本函数。

示例

var a = istream_file_create("test.bin", "rb");
istream_seek(a, 10);

2.istream_tell

> 获取当前的偏移量。

原型

istream_tell(istream) => uint32_t

仅当输入流支持 tell 才能调用本函数。

示例

var a = istream_file_create("test.bin", "rb");
istream_seek(a, 10);
print(istream_tell(a));

3.istream_read_uint8

> 读取 uint8_t 类型的数据。

原型

istream_read_uint8(istream, timeout) => uint8_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_uint8(a));

4.istream_read_uint16

> 读取 uint16_t 类型的数据。

原型

istream_read_uint16(istream, timeout) => uint16_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_uint16(a));

5.istream_read_uint32

> 读取 uint32_t 类型的数据。

原型

istream_read_uint32(istream, timeout) => uint32_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_uint32(a));

6.istream_read_uint64

> 读取 uint64_t 类型的数据。

原型

istream_read_uint64(istream, timeout) => uint64_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_uint64(a));

7.istream_read_int8

> 读取 int8_t 类型的数据。

原型

istream_read_int8(istream, timeout) => int8_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_int8(a));

8.istream_read_int16

> 读取 int16_t 类型的数据。

原型

istream_read_int16(istream, timeout) => int16_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_int16(a));

9.istream_read_int32

> 读取 int32_t 类型的数据。

原型

istream_read_int32(istream, timeout) => int32_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_int32(a));

10.istream_read_int64

> 读取 int64_t 类型的数据。

原型

istream_read_int64(istream, timeout) => int64_t

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_int64(a));

11.istream_read_float

> 读取 float 类型的数据。

原型

istream_read_float(istream, timeout) => float

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_float(a));

12.istream_read_double

> 读取 double 类型的数据。

原型

istream_read_double(istream, timeout) => double

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_double(a));

13.istream_read_string

> 读取指定长度的字符串。

原型

istream_read_string(istream, size, timeout) => str

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_string(a, 10));

14.istream_read_binary

> 读取指定长度的二进制数据。

原型

istream_read_binary(istream, size, timeout) => binary

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_binary(a, 10));

15.istream_read_line

> 读取一行的字符串。

原型

istream_read_line(istream, size, timeout) => str

timeout 为选填参数。

示例

var a = istream_file_create("test.bin", "rb");
print(istream_read_line(a, 10));

16.istream_is_eos

> 判读数据是否读完。

原型

istream_is_eos(istream) => bool

示例

var a = istream_file_create("test.bin", "rb");
print(istream_is_eos(a));

更多示例

var a = istream_file_create("test.bin", "rb")
assert(istream_read_uint8(a)==1)
assert(istream_read_int8(a)==-1)
assert(istream_tell(a), 2)

assert(istream_read_uint16(a)==2)
assert(istream_read_int16(a)==-2)
assert(istream_tell(a), 6)

assert(istream_read_uint32(a)==3)
assert(istream_read_int32(a)==-3)
assert(istream_tell(a), 14)

assert(istream_read_uint64(a)==4)
assert(istream_read_int64(a)==-4)
assert(istream_tell(a), 30)

assert(istream_read_float(a)==5)
assert(istream_read_double(a)==-5)
assert(istream_tell(a), 42)

assert(istream_read_string(a, 5)=="hello")
assert(istream_tell(a), 47)

istream_read_binary(a, 5)
assert(istream_tell(a), 52)
assert(istream_seek(a, 0))
assert(istream_read_uint8(a)==1)
assert(istream_read_int8(a)==-1)
assert(istream_tell(a) == 2)

unset(a)


JSON 扩展函数

1.json_load

> 加载 json 数据。

原型

json_load(str) => object
json_load(binary) => object
json_load(data, size) => object

示例

var a = json_load('{"name": "fscript", "age": 100}');

2.json_save

> 将对象保存为 json 数据。

原型

json_save(obj) => binary

示例

var a = json_load('{"name": "fscript", "age": 100}');
json_save(a);

3.json_save_to_string

> 将对象保存为字符串数据。

原型

json_save_to_string(obj) => string

示例

var a = json_load('{"name": "fscript", "age": 100}');
print(json_save_to_string(a));

4.ubjson_load

> 加载 ubjson 数据。

原型

ubjson_load(binary) => object
ubjson_load(data, size) => object

示例

var a = ubjson_load(file_read_binary("test.ubjson"));

5.ubjson_save

> 将对象保存为 ubjson 数据。

原型

ubjson_save(obj) => binary

示例

var a = json_load('{"name": "fscript", "age": 100}');
var b = ubjson_save(a);

完整示例

//load from string
var str='{
    "results": [
        {
            "location": {
                "id": "WS0E9D8WN298",
                "name": "GuangZhou"
            },
            "now": {
                "code": "9",
                "temperature": "30"
            },
            "last_update": "2022-04-28T14:50:00+08:00"
        }
    ],
    "name": "fscript",
    "age": 100
}'
var a = json_load(str)

assert(object_get(a, "results.[0].location.id")=="WS0E9D8WN298");
assert(object_get(a, "results.[0].location.name")=="GuangZhou");
assert(object_get(a, "results.[0].now.code")=="9");
assert(object_get(a, "results.[0].now.temperature")=="30");
assert(object_get(a, "results.[0].last_update")=="2022-04-28T14:50:00+08:00");
assert(object_get(a, "name")=="fscript");
assert(object_get(a, "age")==100);

// 获取数组类型节点的子元素个数
assert(object_get(a, "results.#size")==1);

//save to file
var b=json_save(a)
assert(file_write("test.json", b))

//json obj to string
var c=json_save_to_string(a)
print(c)

//load from file as text
a = json_load(file_read_text("test.json"))

assert(object_get(a, "name")=="fscript");
assert(object_get(a, "age")==100);

//load from file as binary
a = json_load(file_read_binary("test.json"))
assert(file_remove("test.json"))

assert(object_get(a, "name")=="fscript");
assert(object_get(a, "age")==100);

assert(file_remove("test.json"))
unset(a)
unset(b)
unset(c)
unset(str)


扩展数学函数

1.d2r

> 将角度转换成弧度，传入参数单位是角度。

原型

d2r(a) => double

示例

print(d2r(7));

2.r2d

> 将弧度转换成角度，传入参数单位是弧度。

原型

r2d(a) => double

示例

r2d(7)

3.sin

> sin 函数，传入参数单位是弧度。

原型

sin(a) => double

示例

print(sin(0));

4.cos

> cos 函数，传入参数单位是弧度。

原型

cos(a) => double

示例

print(cos(0));

5.tan

> tan 函数，传入参数单位是弧度。

原型

tan(a) => double

示例

print(tan(1));

6.asin

> asin 函数，传入参数单位是弧度。

原型

asin(a) => double

示例

print(asin(1));

7.acos

> acos 函数，传入参数单位是弧度。

原型

acos(a) => double

示例

print(acos(1));

8.atan

> atan 函数，传入参数单位是弧度。

原型

atan(a) => double

示例

print(atan(1));

9.atan2

> atan2 函数，传入参数单位是弧度。

原型

atan2(a, b) => double

示例

print(atan2(2, 3));

10.sin_deg

> sin_deg 函数，传入参数单位是角度。

原型

sin_deg(a) => double

示例

print(sin_deg(45));

11.cos_deg

> cos_deg 函数，传入参数单位是角度。

原型

cos_deg(a) => double

示例

print(cos_deg(45));

12.tan_deg

> tan_deg 函数，传入参数单位是角度。

原型

tan_deg(a) => double

示例

print(tan_deg(30));

13.asin_deg

> asin_deg 函数，传入参数单位是角度。

原型

asin_deg(a) => double

示例

print(asin_deg(45));

14.acos_deg

> acos_deg 函数，传入参数单位是角度。

原型

acos_deg(a) => double

示例

print(acos_deg(45));

15.atan_deg

> atan_deg 函数，传入参数单位是角度。

原型

atan_deg(a) => double

示例

print(atan_deg(30));

16.atan2_deg

> atan2_deg 函数，传入参数单位是弧度。

原型

atan2_deg(a, b) => double

示例

print(atan2_deg(20, 30));

17.exp

> exp 函数

原型

exp(a) => double

示例

print(exp(7));

18.sqrt

> sqrt 函数。

原型

sqrt(a) => double

示例

print(sqrt(2));

19.pow

> pow 函数。

原型

pow(a, b) => double

示例

print(pow(2, 3));

20.log10

> log10 函数。

原型

log10(a) => double

示例

print(log10(9));

21.logf

> logf 函数。

原型

logf(a) => double

示例

print(logf(0));

22.pow10

> pow10 函数。

原型

pow10(a) => double

示例

print(pow10(2));

23.is_prime

> 是否为质数。

原型

is_prime(a) => bool

示例

print(is_prime(7));

24.is_int

> 是否为整数。

原型

is_int(a) => bool

示例

print(is_int(7));

25.is_odd

> 是否为奇数。

原型

is_odd(a) => bool

示例

print(is_odd(7));

26.is_even

> 是否为偶数。

原型

is_even(a) => bool

示例

print(is_even(7));

27.is_negative

> 是否为负数。

原型

is_negative(a) => bool

示例

print(is_negative(7));

28.is_positive

> 是否为正数。

原型

is_positive(a) => bool

示例

print(is_positive(7));

29.random0to1

> 生成一个0到1之间的随机数。

原型

random0to1() => bool

示例

print(random0to1());


module 扩展函数

加载外部模块。

注意： * 不要在模块中定义全局变量，目前无法访问模块内的全局变量。 * 不要在模块函数中使用成员变量，模块函数和当前运行共享同一个对象，避免产生访问冲突。

1.require_str

> 从字符串加载模块。

原型

require_str(str) => object

示例

var code = '
function foo(a, b) {
  return a + b
}
function bar(a, b) {
  return a - b
}
'
var m = require_str(code)
print(m.foo(100, 99))
print(m.bar(100, 99))

2.require

> 从指定URL/文件加载模块。

原型

require(url) => object

示例

  • 模块文件：foobar.fs
function foo(a, b) {
  return a + b
}

function bar(a, b) {
  return a - b
}
  • 主程序：main.fs
var m = require('foobar.fs')
print(m.foo(100, 99))
print(m.bar(100, 99))


object 扩展函数

object 适用于 app_conf、typed_array 和 array 等各种对象。

1. object_create

> 创建缺省的 object 对象，可以当一个 map 使用。

原型

object_create() => object

示例

var a = object_create()

2. object_get

> 获取对象的属性。

可以通过 value_is_valid 来判断返回值是否有效。

原型

object_get(o, key) => value
object_get(o, key, defval) => value

也可以直接访问对象的属性：

print(o.key)

示例

print(object_get(a, "age"))
print(a.age)

3. object_set

> 设置对象的属性。

原型

object_set(obj, key, value) => bool

示例

object_set(a, "age", 123);

4. object_remove

> 删除对象的属性。

原型

object_remove(obj, key) => bool

示例

object_remove(a, "age")

5. object_ref

> 引用计数加1。

原型

object_ref(obj) => object

示例

object_ref(a)

5. object_unref

> 引用计数减1。引用计数为0时，销毁对象。

原型

object_unref(obj)

示例

object_ref(a)

6. object_forward_events

> 将源对象的事件转发目标对象。

目前支持以下事件的转发：

  • EVT_PROP_CHANGED：对象中的属性改变事件。
  • EVT_PROPS_CHANGED：对象中的属性改变事件。
  • EVT_ITEMS_CHANGED：集合对象中的项目改变事件

原型

object_forward_events(src_obj, dst_obj)

示例

global = object_create()
global.arr = array_create()
object_forward_events(global.arr, global)

完整示例

var a = object_create()
assert(!value_is_null(a))
assert(object_set(a, "age", 123))
assert(a.age ==  123)

assert(object_set(a, "name", "awtk"))
assert(a.name == "awtk")

assert(object_get(a, "age") == 123)
print(object_get(a, "age"))
assert(object_remove(a, "age"))
assert(!value_is_valid(object_get(a, "age")))
unset(a)

var person = object_create()
assert(!value_is_null(person))

assert(object_set(person, "age", 123))
assert(person.age ==  123)

assert(object_set(person, "name", "awtk"))
assert(person.name == "awtk")

var g = object_create()
g.arr = array_create()
object_forward_events(g.arr, g)


ostream 扩展函数

1.ostream_seek

> 定位到指定的偏移量。

原型

ostream_seek(ostream, offset) => bool

示例

var a = ostream_file_create("test.bin", "wb+")
ostream_seek(a, 10);

2.ostream_tell

> 获取当前的偏移量。

原型

ostream_tell(ostream) => bool

仅当输入流支持 tell 才能调用本函数。

示例

var a = ostream_file_create("test.bin", "wb+")
ostream_seek(a, 10);
print(ostream_tell(a));

3.ostream_flush

> 刷新缓冲区。

原型

ostream_flush(ostream) => bool

示例

var a = ostream_file_create("test.bin", "wb+")
ostream_flush(a);

4.ostream_write_uint8

> 写入 uint8_t 类型的数据。

原型

ostream_write_uint8(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_uint8(a, 1));

5.ostream_write_uint16

> 写入 uint16_t 类型的数据。

原型

ostream_write_uint16(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_uint16(a, 2));

6.ostream_write_uint32

> 写入 uint32_t 类型的数据。

原型

ostream_write_uint32(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_uint32(a, 3));

7.ostream_write_uint64

> 写入 uint64_t 类型的数据。

原型

ostream_write_uint64(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_uint32(a, 4));

8.ostream_write_int8

> 写入 int8_t 类型的数据。

原型

ostream_write_int8(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_int8(a, 1));

9.ostream_write_int16

> 写入 int16_t 类型的数据。

原型

ostream_write_int16(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_int16(a, 2));

10.ostream_write_int32

> 写入 int32_t 类型的数据。

原型

ostream_write_int32(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_int32(a, 3));

11.ostream_write_int64

> 写入 int64_t 类型的数据。

原型

ostream_write_int64(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_int64(a, 4));

12.ostream_write_float

> 写入 float 类型的数据。

原型

ostream_write_float(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_float(a, 5));

13.ostream_write_double

> 写入 double 类型的数据。

原型

ostream_write_double(ostream, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_double(a, 6));

14.ostream_write_string

> 写入 字符串 类型的数据。

原型

ostream_write_string(ostream, v, [size]) => int32_t
  • size为长度(可选)，超过字符串长度时取字符串的长度。
  • 返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_string(a, 'str'));
print(ostream_write_string(a, 'hello', 5));

15.ostream_write_binary

> 写入 二进制 类型的数据。

原型

ostream_write_binary(ostream, v, [size]) => int32_t
  • size为长度，在v是binary时可选，为POINTER时则是必选。
  • 返回写入数据的长度（字节数）。

示例

var a = ostream_file_create("test.bin", "wb+")
print(ostream_write_binary(a, 'str'));
print(ostream_write_binary(a, 'hello', 5));

更多示例

var a = ostream_file_create("test.bin", "wb+")

assert(ostream_write_uint8(a, 1) == 1)
assert(ostream_write_int8(a, -1) == 1)
assert(ostream_tell(a), 2)

assert(ostream_write_uint16(a, 2) == 2)
assert(ostream_write_int16(a, -2) == 2)
assert(ostream_tell(a), 6)

assert(ostream_write_uint32(a, 3) == 4)
assert(ostream_write_int32(a, -3) == 4)
assert(ostream_tell(a), 14)

assert(ostream_write_uint64(a, 4) == 8)
assert(ostream_write_int64(a, -4) == 8)
assert(ostream_tell(a), 30)

assert(ostream_write_float(a, 5) == 4)
assert(ostream_write_double(a, -5) == 8)
assert(ostream_tell(a), 42)

assert(ostream_write_string(a, "hello") == 5)
assert(ostream_write_binary(a, "world", 5) == 5)
assert(ostream_tell(a), 52)

assert(ostream_flush(a))


FScript 内存需求评估

1. 测试环境

测试使用的 AWTK 版本：AWTKv1.7，SHA-1: 5f570df4fc42a5a0050bae1d2fe8f99d6aa42532。

测试所需栈大小的环境如下：

  • 平台：RT1052。
  • 编译器：Eclipse_neon_2016q3_x86。
  • 有无调试信息：有。
  • 优化等级：-O0。

测试所需堆大小的环境如下：

  • 平台：Windows7 x64。
  • 编译器：Visual Studio C++ 2015。
  • 有无调试信息：有。
  • 优化等级：-O0。

备注：以下测试均为无 GUI 界面的结果，即只跑 fscript 脚本。

2. 推荐的栈堆大小

FScript 最低的栈（Stack）需求为 1.5 KB，最低的堆需求为 4 KB，以上内存仅够初始化 FScript 基础模块和扩展模块，脚本代码只能做简单的运算以及打印信息。

使用 FScript 各个模块时建议栈堆大小详见下表，AWTK 内置了许多 FScript 的示例程序，它们放在 awtk/tests/fscripts 中，如果想要将下表中的示例程序全部跑起来，建议栈（Stack）给到 5 KB，堆（Heap）给到 30 KB。

FScript 模块 | 相关宏定义 | 建议 Stack 大小 | 建议 Heap 大小 | 示例脚本
基础模块 | 默认开启，定义宏 WITHOUT_FSCRIPT 关闭 | 1.75 KB | 6 KB | demo_comments.fs
扩展模块 | WITH_FSCRIPT_EXT | ---- | ---- | ----
value 扩展模块 | WITH_FSCRIPT_EXT | ---- | ---- | 该模块主要用于验证变量是否有效，开销极低
字符串扩展模块 | WITH_FSCRIPT_EXT | 2 KB | 8KB | demo_str.fs
object 扩展模块 | WITH_FSCRIPT_EXT | 2.5 KB | 10.25 KB | demo_object.fs
位操作扩展模块 | FSCRIPT_WITH_BITS | 1.75 KB | 9 KB | demo_bits.fs
数学扩展模块 | FSCRIPT_WITH_MATH | 2 KB | 11 KB | demo_expr.fs
动态数组扩展模块 | FSCRIPT_WITH_ARRAY | 2.25 KB | 13 KB | demo_array.fs
单一类型动态数组扩展模块 | FSCRIPT_WITH_TYPED_ARRAY | 2.25 KB | 12 KB | demo_typed_array.fs
日期和时间扩展模块 | FSCRIPT_WITH_DATE_TIME | 2.25 KB | 11 KB | demo_date_time.fs
CRC 扩展模块 | FSCRIPT_WITH_CRC | 1.75 KB | 9 KB | demo_crc.fs
大端小端扩展模块 | FSCRIPT_WITH_ENDIAN | 1.75 KB | 6 KB | demo_endian.fs
JSON 扩展模块 | FSCRIPT_WITH_JSON | 2.75 KB | 11 KB | demo_json.fs
写缓冲区扩展模块 | FSCRIPT_WITH_BUFFER | 1.75 KB | 15 KB | demo_wbuffer.fs
读缓冲区扩展模块 | FSCRIPT_WITH_BUFFER | 1.75 KB | 15 KB | demo_wbuffer.fs
app_conf 扩展模块 | FSCRIPT_WITH_APP_CONF | 1.75 KB | 10.5 KB | demo_app_conf.fs
文件系统扩展模块 | FSCRIPT_WITH_FS | 2.5 KB | 27.5 KB | demo_fs.fs
输入输出流扩展模块 | FSCRIPT_WITH_STREAM | ---- | ---- | 与文件流、串口流、TCP/UDP 流配合使用
文件流扩展模块 | FSCRIPT_WITH_STREAM_FILE | 3 KB | 17.25 KB | demo_stream_file.fs
串口流扩展模块 | FSCRIPT_WITH_STREAM_SERIAL | ---- | ---- | demo_serial.fs
TCP/UDP 流扩展模块 | FSCRIPT_WITH_STREAM_INET | ---- | ---- | demo_tcp.fs、demo_udp.fs
widget 扩展模块 | FSCRIPT_WITH_WIDGET | ---- | ---- | ----

一些特殊用法建议栈堆大小详见下表：

FScript 模块 | 特殊用法 | 建议 Stack 大小 | 建议 Heap 大小 | 示例脚本
基础模块 | 大量 if else 判断 | 3 KB | 18.5 KB | demo_else_if.fs
基础模块 | 自定义函数 + 局部变量 + if else | 5 KB | 14.25 KB | demo_function1.fs
基础模块 | 自定义函数 + 局部变量 | 3.25 KB | 9 KB | demo_function2.fs
基础模块 | while 循环 | 2.5 KB | 6 KB | demo_while1.fs

需要注意的是：

  1. 以上表格中建议的 Heap 大小均为示例脚本运行时所需的内存峰值，具体请根据实际情况调整；
  2. 在使用多个功能模块时，不需要将建议的 Stack 大小进行累加，取最大值即可，比如，同时使用了字符串扩展模块和 object 扩展模块，那么 Stack 大小取 object 扩展模块建议的 2.5 KB 即可。
  3. 使用 if else 条件判断或 while 循环时，堆栈大小请根据条件分支数量以及循环次数适当调整；
  4. 函数嵌套调用时，会消耗较多的堆栈空间，请尽量避免使用。

3. 堆空间的计算

3.1 FScript 本身所需的 Heap

FScript 初始化所需的 Heap 详见下表：

FScript 模块 | Heap 需求 | 备注
基础模块 fscript | 0 | 注册 fscript 基础模块函数的数组为静态全局变量，因此不占用 Heap
扩展模块 fscript_ext | 约 2.4 KB | 注册 fscript 扩展模块函数的工厂和动态数组占 2 KB左右；注册 data_writer/data_reader 相关函数占 0.4 KB 左右
执行 fscript 脚本所需的上下文（object_default_t 对象） | 144 字节 | 此处指 object 上下文对象为空，即不保存任何 fscript 变量时的情况

备注：在 fscript 脚本中定义的全局变量都会保存到 object 上下文对象中，局部变量则会保存到 fscript 对象的 locale 属性中。

3.2 FScript 定义数据所需的 Heap

在 FScript 脚本中定义变量所需的 Heap 详见下表：

数据类型 | Heap 需求（定义单个该类型的数据） | 备注
Number | 约 40 字节 | 执行脚本时峰值增长约 180 字节
String | 最低约 56 字节 | 与字符长度有关，每增加一个字符多占用 1 字节，执行脚本时峰值增长约 192 字节
Array | 最低约 264 字节 | 执行脚本时峰值增长约 488 字节
Object | 最低约 208 字节 | 执行脚本时峰值增长约 432 字节

备注：以上描述中的”最低”表示该数据类型为空时所占用的字节数；”峰值”表示在 fscript 脚本执行过程中每定义一个该类型的数据就会导致此时的内存峰值增长，定义完成后这些内存会被释放。

3.3 FScript 函数所需的 Heap

3.3.1 调用内置函数

在 FScript 脚本中调用内置函数内存（Heap）峰值会增加 600 字节左右。函数嵌套调用时，每嵌套多一层，内存峰值会增加 170 字节左右，建议在调用函数时尽量避免多层嵌套。

3.3.2 自定义函数

在 FScript 脚本中自定义函数（无参数、无返回值、无执行代码）内存（Heap）峰值会增加 350 字节左右。如果有传入参数以及返回值，请参考 3.2 章节计算内存。调用自定义函数与嵌套调用时消耗的内存与 FScript 内置函数一样。

4. 堆栈计算示例

比如，我们需要计算以下 FScript 脚本所需的堆栈空间，步骤如下：

obj = object_create()
object_set(obj, "age", 123)
object_set(obj, "name", "awtk")

print(object_get(obj, "age"))
print(object_get(obj, "name"))
print(len(obj.name))

object_remove(a, "age")
assert(!value_is_valid(object_get(a, "age")))

unset(obj)

首先计算 Stack，以上脚本中使用了 FScript 的基础模块、value 扩展模块、字符串扩展模块以及 Object 扩展模块，根据上文中推荐的 Stack 大小，取这四个模块中的最大值，即 2.5 KB。

接着来计算所需的 Heap，参考 3.1 中的表格，初始化 FScript 需要约 2.5 KB，以上脚本中定义的数据详见下表：

变量名称 | 变量类型 | 占用 Heap | Heap 峰值
obj | Object | 208 字节 | 增长约 432 字节
“age” | Number | 40 字节 | 增长约 180 字节
“name” | String | 56 + 4 字节 | 增长约 192 字节
静态字符串 “age” | String | 56 + 3 字节 | 增长约 192 字节
静态字符串 “name” | String | 56 + 4 字节 | 增长约 192 字节
object_get 函数返回 “age” 属性 | Number | 40 字节 | 增长约 180 字节
object_get 函数返回 “name” 属性 | String | 56 + 4 字节 | 增长约 192 字节

根据上表可知，变量储存需要约 0.6 KB，定义变量时的内存峰值要达到 1.5 KB，并且脚本中调用了内置函数，且最多嵌套了四层，因此内存峰值需要再加 600 + 170 * 4 字节（约 1.25 KB），即脚本所需的 Heap 为：

2.5 + 0.6 + 1.5 + 1.25 = 5.85 KB

最后，计算好 Heap 之后，考虑到程序运行过程中可能会出现内存碎片，再乘以系数 1.2 到 2，即可得到项目大概需要的内存。


读缓冲区扩展函数

rbuffer 有以下属性：

  • data 缓冲区的指针
  • cursor 当前读的位置
  • capacity 最大容量

1.rbuffer_create

> 创建 rbuffer 对象。

原型

rbuffer_create(str) => object
rbuffer_create(binary) => object
rbuffer_create(data, size) => object

示例

var a = rbuffer_create("hello");

2.rbuffer_skip

> 跳过指定长度的数据。

原型

rbuffer_skip(rbuffer, size) => bool

示例

var a = rbuffer_create("hello");
print(rbuffer_skip(a, 2));

3.rbuffer_rewind

> 重置读取指针到 0。

原型

rbuffer_rewind(rbuffer) => bool

示例

var a = rbuffer_create("hello");
print(rbuffer_skip(a, 2));
print(rbuffer_rewind(a));

4.rbuffer_read_uint8

> 读取 uint8_t 类型的数据。

原型

rbuffer_read_uint8(rbuffer) => uint8_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_uint8(a));

5.rbuffer_read_uint16

> 读取 uint16_t 类型的数据。

原型

rbuffer_read_uint16(rbuffer) => uint16_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_uint16(a));

6.rbuffer_read_uint32

> 读取 uint32_t 类型的数据。

原型

rbuffer_read_uint32(rbuffer) => uint32_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_uint32(a));

7.rbuffer_read_uint64

> 读取 uint64_t 类型的数据。

原型

rbuffer_read_uint64(rbuffer) => uint64_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_uint64(a));

8.rbuffer_read_int8

> 读取 int8_t 类型的数据。

原型

rbuffer_read_int8(rbuffer) => int8_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_int8(a));

9.rbuffer_read_int16

> 读取 int16_t 类型的数据。

原型

rbuffer_read_int16(rbuffer) => int16_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_int16(a));

10.rbuffer_read_int32

> 读取 int32_t 类型的数据。

原型

rbuffer_read_int32(rbuffer) => int32_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_int32(a));

11.rbuffer_read_int64

> 读取 int64_t 类型的数据。

原型

rbuffer_read_int64(rbuffer) => int64_t

示例

var a = rbuffer_create("hello");
print(rbuffer_read_int64(a));

12.rbuffer_read_float

> 读取 float 类型的数据。

原型

rbuffer_read_float(rbuffer) => float

示例

var a = rbuffer_create("hello");
print(rbuffer_read_float(a));

13.rbuffer_read_double

> 读取 double 类型的数据。

原型

rbuffer_read_double(rbuffer) => double

示例

var a = rbuffer_create("hello");
print(rbuffer_read_double(a));

14.rbuffer_read_string

> 读取字符串。

原型

rbuffer_read_string(rbuffer) => str

示例

var a = rbuffer_create("hello");
print(rbuffer_read_string(a));

15.rbuffer_read_binary

> 读取指定长度的二进制数据。

原型

rbuffer_read_binary(rbuffer, size) => binary

示例

var a = rbuffer_create("hello");
print(rbuffer_read_binary(a, 5));

16.rbuffer_get_data

> 获取 buffer 的指针。

原型

rbuffer_get_data(rbuffer) => pointer

示例

var a = rbuffer_create("hello");
var b = rbuffer_get_data(a);

17.rbuffer_get_cursor

> 获取 buffer 当前的读取位置。

原型

rbuffer_get_cursor(rbuffer) => uint32_t

示例

var a = rbuffer_create("hello");
print(rbuffer_get_cursor(a));

18.rbuffer_get_capacity

> 获取 buffer 的容量。

原型

rbuffer_get_capacity(rbuffer) => uint32_t

示例

var a = rbuffer_create("hello");
print(rbuffer_get_capacity(a));

更多示例

...

var b=rbuffer_create(wbuffer_get_data(a), wbuffer_get_cursor(a))

assert(rbuffer_get_cursor(b)==0)
assert(rbuffer_read_int8(b)== -10)

assert(rbuffer_get_cursor(b)==1)
assert(rbuffer_read_int16(b)==-1122)

assert(rbuffer_get_cursor(b)==3)
assert(rbuffer_read_int32(b)==-11223344)

assert(rbuffer_get_cursor(b)==7)
assert(rbuffer_read_int64(b)==-1122334455667788)

assert(rbuffer_get_cursor(b)==15)
assert(rbuffer_read_string(b)=="hello")
assert(rbuffer_get_cursor(b)==21)
var c = rbuffer_read_binary(b, 6)
assert(rbuffer_get_cursor(b)==27)

wbuffer_rewind(a)
assert(wbuffer_get_cursor(a)==0)
wbuffer_write_binary(a, c)
assert(wbuffer_get_cursor(a)==6)

unset(a)
unset(b)
unset(c)


字符串扩展函数

1.ulen

> 获取 unicode 字符个数。

原型

ulen(str) => int

示例

print(ulen('致远电子'))

2.char_at

> 获取指定位置的字符。

原型

char_at(str, index) => str

index 为负数时，从后往前取。比如-1 表示最后一个元素。

示例

print(char_at('致远电子', 1))
print(char_at('ZLG', 1))

3.index_of

> 查找指定子串的位置，如果没有找到返回-1。

原型

index_of(str, substr) => int

示例

print(index_of('hello AWTK and AWTK', 'AWTK'))

4.last_index_of

> 反向查找指定子串的位置，如果没有找到返回-1。

原型

last_index_of(str, substr) => int

示例

print(last_index_of('hello AWTK and AWTK', 'AWTK'))

5.trim_left

> 去掉字符串左边的空白字符。

原型

trim_left(str) => str

示例

print(trim_left('   AWTK  '))

6.trim_right

> 去掉字符串右边的空白字符。

原型

trim_right(str) => str

示例

print(trim_right('   AWTK  ') + "1234")

7.totitle

将字符串中单词的首字母转换成大写。

原型

totitle(str) => str

示例

print(totitle("it is ok!"))

8.prompt

> 在控制台提示用户输入字符串（仅当定义了 HAS_STIOD 时有效）。

原型

prompt(tips) => str

示例

var a = prompt('input a number:');
print(int(a)+100);

9.usubstr

> 取子字符串(unicode)。

原型

usubstr(str, start, end) => str
  • 不包括end
  • start 为负数时，从后往前取。比如-1 表示最后一个元素。
  • end 为负数时，从后往前取。比如-1 表示最后一个元素。
  • end 省略表示到最后全部元素。

示例

var a="致远电子"
assert(usubstr(a) == '致远电子');
assert(usubstr(a,0) == '致远电子');
assert(usubstr(a,0,1) == '致');
assert(usubstr(a,0,-1) == '致远电');
assert(usubstr(a,-2,-1) == '电');
assert(usubstr(a, -3) == '远电子');

10.text_reverse

> 字符串反向

原型

text_reverse(str) => str

示例

print(text_reverse("hello"));

11.text_count

> 统计子串出现的次数。

原型

text_count(str, substr) => int

示例

print(text_count("hello zlg!", "zlg"));

12.str_len

> 计算字符串的长度。

原型

str_len(str) => uint32

示例

print(str_len("hello"));

13.str_is_empty

> 判断字符串是否为空。

原型

str_is_empty(str) => bool

示例

print(str_is_empty(""));
print(str_is_empty("zlg"));

14.str_append

> 追加字符串。

原型

str_append(str, append_str) => str

示例

print(str_append("hello ", "zlg"));

15.char_at_first

> 获取首字符。

原型

char_at_first(str) => str

示例

print(char_at_first("hello"));

16.char_at_last

> 获取尾字符。

原型

char_at_last(str) => str

示例

print(char_at_last("hello"));

17.char_at_random

> 获取随机位置的字符。

原型

char_at_random(str) => str

示例

print(char_at_random("hello"));


typed array 扩展函数

typed_array是一个单一类型的动态数组，里面只能放相同类型的元素。

typed_array 有以下属性：

  • data 缓冲区的指针
  • size 元素的个数
  • capacity 元素的最大个数
  • size_in_bytes 元素的个数 * 元素的大小
  • capacity_in_bytes 元素的最大个数 * 元素的大小

1.typed_array_create

> 创建 typed_array 对象。

原型

typed_array_create(type, capacity) => object

type 参数为字符串，可选取值如下：

  • i8 表示 int8。
  • i16 表示 int16。
  • i32 表示 int32。
  • i64 表示 int64。
  • u8 表示 uint8。
  • u16 表示 uint16。
  • u32 表示 uint32。
  • u64 表示 uint64。
  • f32 表示 float32。
  • float 表示 double。
  • 其它或默认为int32。

示例

var a = typed_array_create("i8", s10);

2.typed_array_push

> 追加一个或多个数据。

原型

typed_array_push(array, v, ...) => uint32_t

返回写入数据的个数

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);

3.typed_array_pop

> 弹出最后一个元素

原型

typed_array_pop(array) => value

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
print(typed_array_pop(a));

4.typed_array_get

> 获取指定位置的元素

原型

typed_array_get(array, index) => value

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
print(typed_array_get(a, 1));

5.typed_array_set

> 修改指定位置的元素

原型

typed_array_set(array, index, value) => bool

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
typed_array_set(a, 1, 4);

6.typed_array_insert

> 插入元素到指定位置

原型

typed_array_insert(array, index, value) => bool

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
typed_array_insert(a, 1, 4);

7.typed_array_remove

> 删除指定位置的元素

原型

typed_array_remove(array, index) => bool

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
typed_array_remove(a, 1);

8.typed_array_clear

> 删除全部元素

原型

typed_array_clear(array) => bool

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
typed_array_clear(a);

9.typed_array_join

> 连接全部元素成一个字符串。

原型

typed_array_join(array, sep) => str

示例

var a = typed_array_create("i32", 3);
typed_array_push(a, 1, 2, 3);
print(typed_array_join(a, ","));

更多示例

var a=typed_array_create("i32", 10)

assert(typed_array_push(a, 1) == 1)
assert(a.size, 1);
assert(a.bytes, 4);

assert(typed_array_push(a, 2, 3) == 2)
assert(a.size, 3);
assert(a.bytes, 12);
assert(typed_array_get(a, 0)==1)
assert(typed_array_get(a, 1)==2)
assert(typed_array_get(a, 2)==3)

assert(typed_array_set(a, 0, 11))
assert(typed_array_set(a, 1, 22))
assert(typed_array_set(a, 2, 33))

assert(typed_array_get(a, 0)==11)
assert(typed_array_get(a, 1)==22)
assert(typed_array_get(a, 2)==33)

assert(typed_array_pop(a), 33);
assert(typed_array_pop(a), 22);
assert(typed_array_pop(a), 11);
assert(a.size == 0);

assert(typed_array_push(a,1, 2, 3) == 3)
assert(typed_array_remove(a, 0))
assert(a.size == 2);
assert(typed_array_remove(a, 1))
assert(typed_array_remove(a, 0))
assert(a.size == 0);

assert(typed_array_push(a,1, 2, 3) == 3)
print(typed_array_join(a, ',') == '1,2,3')
unset(a);


value 扩展函数

value 相关的辅助函数。

1. value_is_valid

> 判断 value 是否有效。

原型

value_is_valid(v) => bool

示例

var a = object_create()
print(value_is_valid(a))

2. value_is_null

> 判断 value 是否为 null。

原型

value_is_null(v) => bool

示例

var a = object_create()
print(value_is_null(a))

3. value_get_binary_data

> 获取 binary 的数据指针。

原型

value_get_binary_data(v) => pointer_t

示例

print(value_get_binary_data(a))

4. value_get_binary_size

> 获取 binary 的数据长度。

原型

value_get_binary_size(v) => uint32_t

示例

var a = file_read_binary("test.bin")
assert(value_get_binary_size(a) == 5)


写缓冲扩展函数

wbuffer 有以下属性：

  • data 缓冲区的指针
  • cursor 当前写的位置
  • capacity 最大容量

1.wbuffer_create

> 创建 wbuffer 对象。

原型

wbuffer_create() => object

示例

var a = wbuffer_create();

2.wbuffer_attach

> 创建 wbuffer 对象，并附加到指定的数据上。

原型

wbuffer_attach(str) => object
wbuffer_attach(binary) => object
wbuffer_attach(data, size) => object

示例

var a = wbuffer_attach("hello");

3.wbuffer_skip

> 跳过指定长度的数据。

原型

wbuffer_skip(wbuffer, size) => bool

示例

var a = wbuffer_attach("hello");
print(wbuffer_skip(a, 2));

4.wbuffer_rewind

> 重置写入指针到 0。

原型

wbuffer_rewind(wbuffer) => bool

示例

var a = wbuffer_attach("hello");
print(wbuffer_skip(a, 2));
print(wbuffer_rewind(a));

5.wbuffer_write_uint8

> 写入 uint8_t 类型的数据。

原型

wbuffer_write_uint8(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_uint8(a, 0x10)

6.wbuffer_write_uint16

> 写入 uint16_t 类型的数据。

原型

wbuffer_write_uint16(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_uint16(a, 0x1122)

7.wbuffer_write_uint32

> 写入 uint32_t 类型的数据。

原型

wbuffer_write_uint32(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_uint32(a, 0x11223344)

8.wbuffer_write_uint64

> 写入 uint64_t 类型的数据。

原型

wbuffer_write_uint64(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_uint64(a, 0x1122334455667788)

9.wbuffer_write_int8

> 写入 int8_t 类型的数据。

原型

wbuffer_write_int8(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_int8(a, -10)

10.wbuffer_write_int16

> 写入 int16_t 类型的数据。

原型

wbuffer_write_int16(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_int16(a, -1122)

11.wbuffer_write_int32

> 写入 int32_t 类型的数据。

原型

wbuffer_write_int32(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_int32(a, -11223344)

12.wbuffer_write_int64

> 写入 int64_t 类型的数据。

原型

wbuffer_write_int64(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_int64(a, -1122334455667788)

13.wbuffer_write_float

> 写入 float 类型的数据。

原型

wbuffer_write_float(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_float(a, -10, -20);

14.wbuffer_write_double

> 写入 double 类型的数据。

原型

wbuffer_write_double(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_double(a, 10, 20)

15.wbuffer_write_string

> 写入 字符串 类型的数据。

原型

wbuffer_write_string(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_string(a, "ab", "cd")

16.wbuffer_write_binary

> 写入 二进制 类型的数据。

原型

wbuffer_write_binary(wbuffer, v, ...) => int32_t

返回写入数据的长度（字节数）。

示例

var a = wbuffer_create()
wbuffer_write_binary(a, "1234", 4)

17.wbuffer_get_data

> 获取 buffer 的指针。

原型

wbuffer_get_data(wbuffer) => pointer

示例

var a = wbuffer_create()
var b = wbuffer_get_data(a)

18.wbuffer_get_cursor

> 获取 buffer 当前的读取位置。

原型

wbuffer_get_cursor(wbuffer) => uint32_t

示例

var a = wbuffer_create()
print(wbuffer_get_cursor(a))

19.wbuffer_get_capacity

> 获取 buffer 的容量。

原型

wbuffer_get_capacity(wbuffer) => uint32_t

示例

var a = wbuffer_create()
print(wbuffer_get_capacity(a))

更多示例

var a = wbuffer_create()
wbuffer_write_int8(a, -10)
assert(wbuffer_get_cursor(a)==1)
wbuffer_write_int16(a, -1122)
assert(wbuffer_get_cursor(a)==3)
wbuffer_write_int32(a, -11223344)
assert(wbuffer_get_cursor(a)==7)
wbuffer_write_int64(a, -1122334455667788)
assert(wbuffer_get_cursor(a)==15)

wbuffer_write_string(a, "hello")
assert(wbuffer_get_cursor(a)==21)

wbuffer_write_binary(a, "wolrd", 6)
assert(wbuffer_get_cursor(a)==27)


FScript 的 widget 扩展函数

1. 介绍

FScript 的 widget 扩展函数只能在 widget 的事件处理函数中使用，包括传统的 AWTK 应用程序和 AWTK-MVVM 应用程序的事件处理函数。

FScript 和其它主流脚本 (lua/js) 相比，最大的优势就是体积小巧，而且 AWTK 本身依赖于 fscript，所以使用 fscript 增加额外代码可以忽略不计数。

FScript 并不是要取代 C 或 JS 来开发 AWTK 应用程序，而是一个有益的补充，加快应用程序的开发，在 AWTK 的 UI 文件中直接嵌入 FScript, 有如下优势：

    1. 在特定情况下，可以极大简化程序的实现。

比如下面的代码，点击按钮时打开指定的窗口就非常简洁。

<button focusable="true" focused="true" on:click="open('basic')" text="Basic" />

比如下面的代码，点击按钮时关闭当前的窗口也非常简洁。

<button focusable="true" on:click="close()" text="Close" />
    2. 方便工具（如 AWTK Designer）生成向导代码。

一般的 IDE 都有简单的代码生成功能，比如按钮的事件处理函数可以选择打开或关闭窗口等简单的功能。不排除 AWTK Designer 以后增加类似的功能。

    3. 让 MVVM 应用程序有机会去操作界面。

理论上，模型是不能操作界面的，但在特殊情况下，确实有操作界面的需求。在保持视图和模型独立的前提下，FScript 让操作界面成为可能。

    4. 方便生成自定义的组件。很多情况下，需要对现有的控件进行改进和组合，生成新的控件。

比如，我们需要用 text selector 生成一个日期选择控件，用三个 text selector 控件组合成日期选择控件，分别选择年月日。但是 text selector 之间是独立的，而年月和日则是有依赖关系，比如 1 月的天数是 31 天，2 月的天数与年份有关。当然我们可以用 C 代码来建立三者的关系，而用 FScript，不但实现要简单一些，而且由于 xml 和代码在一起，发布和重用也非常方便。

<row x="10" y="30" w="100%" h="150" children_layout="default(row=1,col=3)">
  <text_selector name="year" options="2000-2050" selected_index="9">
    <property name="on:value_changed">
      <![CDATA[
      var a = get_days_of_month(widget_get('parent.year', 'value'), widget_get('parent.month', 'value'))
      widget_set('parent.day', 'options', iformat( '1-%d', a) + '%02d')
       ]]>
    </property>
  </text_selector>
  <text_selector name="month" options="1-12-%02d" selected_index="8" loop_options="true">
    <property name="on:value_changed">
      <![CDATA[
      var a = get_days_of_month(widget_get('parent.year', 'value'), widget_get('parent.month', 'value'))
      widget_set('parent.day', 'options', iformat( '1-%d', a) + '%02d')
      ]]>
    </property>
  </text_selector>
  <text_selector name="day" options="1-31-%02d" selected_index="9" />
</row>
    5. 不需要重新编译代码。如果资源文件是在文件系统中，直接更新资源即可，而无需编译和下载固件。

2. 事件处理函数

添加事件处理函数，实际上是增加一些自定义的属性，属性名以 on: 开头，紧跟事件名称。如：

<button focusable="true" on:click="close()" text="Close" />

为了方便编辑和阅读，对于比较复杂的脚本，可以把事件处理函数独立出来，放到 property 里，并用 CDATA 包装起来。

<button name="timer" focusable="true" on:click="start_timer(100)" text="Start Timer">
<property name="on:timer"><![CDATA[
        var a = widget_lookup('window', 'bar', true)
        var b = widget_get(a, 'value')
        if(b < 100) {
          widget_set(a, 'value', b + 1)
        } else {
          widget_set(a, 'value', 0)
          stop_timer()
        }
]]></property>
</button>

如果处理逻辑太复杂，请不要用 FScript 实现，否则不好调试。要善用 FScript 的优点而回避它的缺点。

3. 目前支持的事件

  • global_key_up
  • global_key_down
  • global_key_long_press
  • key_up
  • key_down
  • key_long_press
  • key_down_before_children
  • key_up_before_children

按键事件处理函数可以从 key 变量获取当前的键值。可以从 alt, ctrl, cmd 和 menu 变量中获取相应控制键的状态。如：

<property name="on:global_key_down">
  print("global keydown:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:global_key_up">
  print("global keyup:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:global_key_long_press">
  print("global key_long_press:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:key_down">
  print("keydown:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:key_up">
  print("keyup:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:key_long_press">
  print("keyup:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
  • pointer_up
  • pointer_down
  • pointer_move
  • click

指针事件处理函数可以从 x/y 变量获取当前指针的位置。可以从 alt, ctrl, cmd 和 menu 变量中获取相应控制键的状态。如：

<property name="on:pointer_down">
  print("pointerdown:", x, y, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:pointer_up">
  print("pointerup:", x, y, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
<property name="on:click">
  print("click:", x, y, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu);
</property>
  • timer

定时器，示例：

<button name="timer" focusable="true" on:click="start_timer(100)" text="Start Timer">
<property name="on:timer"><![CDATA[
  var a = widget_lookup('window', 'bar', true)
  var b = widget_get(a, 'value')
    if(b < 100) {
    widget_set(a, 'value', b + 1)
  } else {
    widget_set(a, 'value', 0)
    stop_timer()
  }
]]></property>
</button>
  • widget_animator_end
  • widget_animator_start
  • widget_animator_once

获取控件动画触发事件，animator_name 为触发的动画名字，动画名字有可能为空，例子：

<property name="on:widget_animator_end">
  print("animator_name:", animator_name);
</property>
<property name="on:widget_animator_start">
  print("animator_name:", animator_name);
</property>
<property name="on:widget_animator_once">
  print("animator_name:", animator_name);
</property>
  • window_close
  • window_open
  • window_will_open

窗口事件只适用于窗口。

<property name="on:window_open">
  print("window_open")
</property>
<property name="on:window_will_open">
  print("window_will_open")
</property>
<property name="on:window_close">
  print("window_close")
</property>
  • value_changed

控件的值变化事件。

<progress_bar name="bar" text="" value="10" on:value_changed="print(widget_get('self', 'value'))"/>
  • focus
  • blur

控件得到焦点与失去焦点事件，示例：

<edit name="edit" tips="text edit" on:focus="print(focus)" on:blur="print('blur', widget_get('self', 'value'))"/>
  • value_changed_by_ui （仅 MVVM 支持）

在 MVVM 中，除了支持以上方式编写 FScript，也可以通过 v-on: 和 v-data: 的方式使用 FScript，请参考 MVVM 的文档。

4. 事件的返回值

通过 return 返回 RET_XXX 常量，示例:

return RET_OK;
return RET_FAIL;
return RET_STOP;
return RET_REMOVE;

5. widget 相关的扩展函数

5.1 open

打开窗口。 相关函数：window_open、window_close_and_open。

原型

open(name, close_current, switch_to_if_exist) => obj_widget
window_open(name, close_current, switch_to_if_exist) => obj_widget
window_close_and_open(name, close_current) => obj_widget;
  • name 窗口的资源名称(字符串)
  • close_current 可选。为 true 时关闭当前窗口。
  • switch_to_if_exist 可选。为 true 时，如果同名窗口存在，直接切换到指定窗口。
  • 返回打开的窗口对象。

示例

<button text="Open" focusable="true" focus="true" on:click="open('test_fscript')"/>
<button text="Close" focusable="true" on:click="open('test_fscript', true)"/>
<button text="Switch TO" focusable="true" on:click="open('test_fscript', false, true)"/>

5.2 close

关闭窗口。 相关函数：window_close。

原型

close(name) => bool
window_close(name)=> bool
  • name 窗口的名称(字符串)，可选。缺省关闭当前窗口。

示例

<button focusable="true" on:click="close()" text="Close" />

5.3 back

退到前一个窗口 相关函数：window_back。

原型

back()
window_back()

示例

<button focusable="true" on:click="back()" text="back" />

5.4 back_to_home

退到主窗口 相关函数：window_back_to_home。

原型

back_to_home()
window_back_to_home()

示例

<button focusable="true" on:click="back_to_home()" text="home" />

5.5 quit

退出应用程序 相关函数：window_quit。

原型

quit()
window_quit()

示例

<button focusable="true" on:click="quit()" text="quit" />

5.6 tr

翻译指定字符串 相关函数：widget_tr。

原型

tr(widget, before_tr_str) => after_tr_str
widget_tr(widget, before_tr_str) => after_tr_str
tr(before_tr_str) => after_tr_str
widget_tr(before_tr_str) => after_tr_str
  • widget 用作锚点，后面的路径相对于该 widget。’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • 若不传入 widget，则默认为 ‘self’。
  • 返回翻译后的字符串。

示例

<button focusable="true" on:click="print(tr('OK'))" text="tr" />

5.7 widget_lookup

> 查找指定的控件

原型

widget_lookup(widget, path) => obj_widget
widget_lookup(widget, name, recursive) => obj_widget
  • widget 用作锚点，后面的路径相对于该 widget。’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • 返回查找到的控件对象。

示例

查找窗口下名为 view 控件下的名为 bar 的控件。

var a = widget_lookup('window', 'view.bar')

递归查找窗口下名为 bar 的控件。

var a = widget_lookup('window', 'bar', true)

递归查找当前控件下名为 bar 的控件。

var a = widget_lookup('self', 'bar', true)

递归查找当前控件的父控件下名为 bar 的控件。

var a = widget_lookup('self', 'bar', true)

5.8 widget_layout

> 控件马上布局

原型

widget_layout(widget) => bool
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

var a = widget_lookup('window', 'foobar', true)
if(!value_is_null(a)) {
  widget_layout(a)
} else {
  print('not found foobar');
}s

widget_layout('self.bar')
widget_layout('window.view.bar')

5.9 widget_request_relayout

> 控件下一帧布局

原型

widget_request_relayout(widget) => bool
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

var a = widget_lookup('window', 'foobar', true)
if(!value_is_null(a)) {
  widget_request_relayout(a)
} else {
  print('not found foobar');
}s

widget_request_relayout('self.bar')
widget_request_relayout('window.view.bar')

5.10 widget_get

> 获取控件的属性

原型

widget_get(widget, prop) => v
widget_get(widget, path.prop) => v
  • widget 用作锚点，后面的路径相对于该 widget。’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • prop 可以是简单的属性命名，也可以是 widget 路径+属性名。
  • 支持 widget.prop 方式访问控件属性。
  • 返回获取的控件属性值。

示例

获取当前控件的 value

var a = widget_get('self', 'value')

获取当前控件下名为 bar 控件的 value

var a = widget_get('self', 'bar.value')

获取当前控件的父控件下名为 bar 控件的 value

var a = widget_get('self', 'bar.value')

获取当前控件的父控件下名为 bar 控件的 value

var a = widget_get('parent', 'bar.value')

获取当前窗口下名为 bar 控件的 value

var a = widget_get('window', 'bar.value')

获取当前窗口下名为 view 控件下名为 bar 控件的 value

var a = widget_get('window', 'view.bar.value')

对于控件对象，可以直接访问其属性

var a = widget_lookup('window', 'bar', true)
if(a.value <= 90) {
  a.value = a.value + 10
}

5.11 widget_set

> 设置控件的属性

原型

widget_set(widget, prop, value) => bool
widget_set(widget, path.prop, value) => bool
  • widget 用作锚点，后面的路径相对于该 widget。’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • prop 可以是简单的属性命名，也可以是 widget 路径+属性名。
  • 支持 widget.prop 方式设置控件属性。

示例

设置当前控件的 value

widget_set('self', 'value', 12)

设置当前控件下名为 bar 控件的 value

widget_set('self', 'bar.value', 12)

设置当前控件的父控件下名为 bar 控件的 value

widget_set('parent', 'bar.value', 1.2)

设置当前窗口下名为 bar 控件的 value

widget_set('window', 'bar.value', 'hello')

设置当前窗口下名为 view 控件下名为 bar 控件的 value

widget_set('window', 'view.bar.value', 12)

对于控件对象，可以直接访问其属性

var a = widget_lookup('window', 'bar', true)
if(a.value <= 90) {
  a.value = a.value + 10
}

5.12 widget_create

> 创建控件

原型

widget_create(type, parent, x, y, w, h) => obj_widget
  • type 为控件的字符串名称。
  • parent 为父控件。可以是 widget 对象，也可以是 widget 的路径。
  • 返回创建的控件对象。

示例

var a = widget_lookup('window', 'foobar', true)
if(value_is_null(a)) {
  a = widget_create('label', 'window.view', 0, 0, 0, 0)
  assert(!value_is_null(a))

  widget_set(a, 'text', 'Dynamic created')
  assert(widget_get(a, 'text') == 'Dynamic created')
  widget_set(a, 'name', 'foobar')
  assert(widget_get(a, 'name') == 'foobar')
} else {
  print("foobar exist");
}

5.13 widget_destroy

> 销毁控件

原型

widget_destroy(widget) => bool
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

var a = widget_lookup('window', 'foobar', true)
if(!value_is_null(a)) {
  widget_destroy(a)
} else {
  print('not found foobar');
}s

widget_destroy('self.bar')
widget_destroy('window.view.bar')

5.14 start_timer

> 开启一个定时器

原型

start_timer(duration) => uint32_t
start_timer(widget, duration) => uint32_t
  • 不指定 widget 是启动当前控件的定时器。
  • widget 可以是 widget 对象，也可以是 widget 的路径。
  • duration 为定时器时间间隔。
  • 一个控件只能开启一个定时器，如果定时器存在，自动先移除之前的定时器。
  • 定时器时间到了之后，会触发控件的 timer 事件，所以对应的控件需要处理 timer 事件。
  • 返回定时器ID。

示例

<button name="timer" focusable="true" on:click="start_timer(100)" text="Start Timer">
  <property name="on:timer">
<![CDATA[
  var a = widget_lookup('window', 'bar', true)
  var b = widget_get(a, 'value')
  if(b < 100) {
    widget_set(a, 'value', b + 1)
  } else {
    widget_set(a, 'value', 0)
    stop_timer()
  }
]]>
  </property>
</button>

5.15 stop_timer

> 停止指定控件的定时器

原型

stop_timer() => bool
stop_timer(widget) => bool
  • 不指定 widget 是停止当前控件的定时。
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

stop_timer('parent.timer')

5.16 reset_timer

> 重置指定的timer，重置之后定时器重新开始计时。

原型

reset_timer() => bool
reset_timer(widget) => bool
  • 不指定 widget 是重置当前控件的定时。
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

reset_timer('parent.timer')

5.17 modify_timer

> 修改指定的timer的duration，修改之后定时器重新开始计时。

原型

modify_timer(duration) => bool
modify_timer(widget, duration) => bool
  • 不指定 widget 是设置当前控件的定时器。
  • widget 可以是 widget 对象，也可以是 widget 的路径。
  • duration 为定时器时间间隔。

示例

modify_timer('parent.timer')

5.18 suspend_timer

> 挂起指定的timer，一般用于不断循环触发的计时器。

原型

suspend_timer() => bool
suspend_timer(widget) => bool
  • 不指定 widget 是挂起当前控件的定时。
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

suspend_timer('parent.timer')

5.19 resume_timer

> 唤醒挂起指定的timer，并且重置定时器重新开始计时。

原型

resume_timer() => bool
resume_timer(widget) => bool
  • 不指定 widget 是唤醒当前控件的定时。
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

resume_timer('parent.timer')

5.20 send_key

向指定控件发生按键事件 相关函数：widget_send_key。

原型

send_key(widget, key_name) => bool
widget_send_key(widget, key_name) => bool
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

 <button text="Backspace" on:click="send_key('window.edit', 'backspace')"/>
 <button text="Char" on:click="send_key('window.edit', 'a')"/>

5.21 widget_eval

> 有时，几个事件处理函数的代码是重复的，我们可以把代码放到控件的属性中，通过widget_eval来执行。

原型

widget_eval(path.prop)
widget_eval(widget, prop)
widget_eval(widget, path.prop)
  • widget 用作锚点，后面的路径相对于该 widget。’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • prop 可以是简单的属性命名，也可以是 widget 路径+属性名。

示例

下面两个事件处理函数的代码是相同。

<row x="10" y="30" w="100%" h="150" children_layout="default(row=1,col=3)">
  <text_selector name="year" options="2000-2050" selected_index="9">
    <property name="on:value_changed">
      <![CDATA[
      var a = get_days_of_month(widget_get('parent.year', 'value'), widget_get('parent.month', 'value'))
      widget_set('parent.day', 'options', iformat( '1-%d', a) + '%02d')
       ]]>
    </property>
  </text_selector>
  <text_selector name="month" options="1-12-%02d" selected_index="8" loop_options="true">
    <property name="on:value_changed">
      <![CDATA[
      var a = get_days_of_month(widget_get('parent.year', 'value'), widget_get('parent.month', 'value'))
      widget_set('parent.day', 'options', iformat( '1-%d', a) + '%02d')
      ]]>
    </property>
  </text_selector>
  <text_selector name="day" options="1-31-%02d" selected_index="9" />
</row>

我们可以改造成这样：

<row x="10" y="bottom" w="100%" h="150" children_layout="default(row=1,col=3)">
  <property name="handle_value_changed">
    <![CDATA[
    var a = get_days_of_month(widget_get('parent.year', 'value'), widget_get('parent.month', 'value'))
    widget_set('parent.day', 'options', iformat( '1-%d', a) + '%02d')
     ]]>
  </property>
  <text_selector name="year" options="2000-2050" selected_index="9"
    on:value_changed="widget_eval('parent.handle_value_changed')" />
  <text_selector name="month" options="1-12-%02d" selected_index="8" loop_options="true"
    on:value_changed="widget_eval('parent.handle_value_changed')" />
  <text_selector name="day" options="1-31-%02d" selected_index="9" />
</row>

5.22 locale_get

获取本地化信息(国家和语言) 相关函数：widget_locale_get。

原型

locale_get() => object
locale_get(widget) => object
widget_locale_get() => object
widget_locale_get(widget) => object
  • widget 参数：’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • 不传入 widget 参数时，默认使用 ‘self’ 当前控件。

返回的本地化信息对象包含以下属性：

属性名称 | 属性类型 | 说明
language | string | 语言。如：zh
country | string | 国家或地区。如：CN

示例

获取当前控件的本地化信息

obj = locale_get()
print(object_get(obj, 'country'))
print(object_get(obj, 'language'))

获取窗口管理器的本地化信息

obj = locale_get('window_manager')
print(object_get(obj, 'country'))
print(object_get(obj, 'language'))

获取当前控件的父控件或当前窗口的本地化信息用法类似，此处不多赘述。

5.23 locale_set

设置本地化信息(国家和语言) 相关函数：widget_locale_set。

原型

locale_set(language, country) => bool
locale_set(widget, language, country) => bool
widget_locale_set(language, country) => bool
widget_locale_set(widget, language, country) => bool
  • widget 参数：’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • 不传入 widget 参数时，默认使用 ‘self’ 当前控件。

示例

设置当前控件使用 “zh_CN” 语言

locale_set('zh', 'CN')

设置窗口管理器使用 “en_US” 语言

locale_set('window_manager', 'en', 'US')

设置当前控件的父控件或当前窗口的本地化信息用法类似，此处不多赘述。

5.24 theme_get

获取当前主题 相关函数：widget_theme_get。

原型

theme_get() => string
theme_get(widget) => string
widget_theme_get() => string
widget_theme_get(widget) => string
  • widget 参数：’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • 不传入 widget 参数时，默认使用 ‘self’ 当前控件。

示例

获取当前控件的主题

print(theme_get())

获取窗口管理器的主题

print(theme_get('window_manager'))

获取当前控件的父控件或当前窗口的主题用法类似，此处不多赘述。

5.25 theme_set

设置本地化信息(国家和语言) 相关函数：widget_theme_set。

原型

theme_set(theme_name) => bool
theme_set(widget, theme_name) => bool
widget_theme_set(theme_name) => bool
widget_theme_set(widget, theme_name) => bool
  • widget 参数：’self’ 表示当前控件，’parent’ 表示当前控件的父控件，’window’ 表示当前的窗口，’window_manager’ 表示窗口管理器。
  • 不传入 widget 参数时，默认使用 ‘self’ 当前控件。

示例

设置当前控件使用 “dark” 主题

theme_set('dark')

设置窗口管理器使用 “dark” 主题

theme_set('window_manager', 'dark')

设置当前控件的父控件或当前窗口的主题用法类似，此处不多赘述。

5.26 dialog_info

> 显示info提示对话框。

原型

dialog_info(title, content) => bool
  • title 标题
  • content 内容

示例

dialog_info('info', 'Done');

5.27 dialog_warn

> 显示warn提示对话框。

原型

dialog_warn(title, content) => bool
  • title 标题
  • content 内容

示例

dialog_warn('info', 'Done');

5.28 dialog_confirm

> 显示confirm提示对话框。

原型

dialog_confirm(title, content) => bool
  • title 标题
  • content 内容

示例

dialog_confirm('info', 'Are you sure?');

5.29 dialog_toast

> 显示toast提示对话框。

原型

dialog_toast(content, time) => bool
  • title 标题
  • content 内容

示例

dialog_toast('done', 3000);

5.30 choose_files

> 显示选择文件对话框。

原型

choose_files(filters, init_dir) => array
  • filters 过滤条件(文件扩展名，如：.png.jpg.gif)
  • init_dir 初始目录。
  • 返回文件列表，列表项为文件名字符串。

示例

var files = choose_files('.png.jpg.gif', './')
print(files.size)

5.31 choose_file

> 显示选择文件对话框。

原型

choose_file(filters, init_dir) => str
  • filters 过滤条件(文件扩展名，如：.png.jpg.gif)
  • init_dir 初始目录。
  • 返回文件名字符串。

示例

var filename = choose_files('.png.jpg.gif', './')
print(filename)

5.32 choose_folder

> 显示选择目录对话框。

原型

choose_folder(init_dir) => str
  • init_dir 初始目录。
  • 返回目录名称字符串。

示例

var foldername = choose_folder('./')
print(foldername)

5.33 choose_file_for_save

> 选择保存文件对话框。

原型

choose_file_for_save(filters, init_dir) => str
  • filters 过滤条件(文件扩展名，如：.png.jpg.gif)
  • init_dir 初始目录。
  • 返回文件名称字符串。

示例

var filename = choose_file_for_save('.png.jpg.gif', './')
print(filename)

5.34 widget_clone

> 克隆控件

原型

widget_clone(widget) => obj_widget
  • widget 可以是 widget 对象，也可以是 widget 的路径。
  • 返回克隆的控件对象。

示例

var a = widget_lookup('window', 'foobar', true)
if(!value_is_null(a)) {
  widget_clone(a)
} else {
  print('not found foobar');
}

var a = widget_clone('self.bar')
var b = widget_clone('window.view.bar')

5.35 widget_destroy_children

> 销毁控件的全部子控件。

原型

widget_destroy_children(widget) => bool
  • widget 可以是 widget 对象，也可以是 widget 的路径。

示例

var a = widget_lookup('window', 'foobar', true)
if(!value_is_null(a)) {
  widget_destroy_children(a)
} else {
  print('not found foobar');
}

widget_destroy_children('self.bar')
widget_destroy_children('window.view.bar')

5.36 widget_add_value

> 增加控件的值。

原型

widget_add_value(widget, value) => bool
  • widget 可以是 widget 对象，也可以是 widget 的路径。
  • value 是控件值的增量。

示例

widget_add_value('self', 30)

5.37 notify_model_changed

> 通知模型改变。

原型

notify_model_changed(name, change_type, model) => bool
  • name 是模型名称。
  • change_type 是变化类型（update/add/remove）。
  • model 可以是模型对象（object），也可以是字符串（用于查找对应的模型对象）。

示例

notify_model_changed("model_name", "update", obj_model)
notify_model_changed("model_name", "update", "global")

5.38 show_fps

> 设置是否显示FPS。

原型

show_fps(is_show_fps) => bool

示例

show_fps(true)
show_fps(false)

示例参考

  • https://github.com/zlgopen/awtk/blob/master/design/default/ui/main_fscript.xml
  • https://github.com/zlgopen/awtk/blob/master/design/default/ui/text_selector_fscript.xml
  • https://github.com/zlgopen/awtk/blob/master/design/default/ui/button_fscript.xml
  • https://github.com/zlgopen/awtk/blob/master/design/default/ui/test_fscript.xml
  • https://github.com/zlgopen/awtk/blob/master/design/default/ui/basic_fscript.xml

可以用 preview_ui 直接运行。如：

./bin/preview_ui.exe ui=design/default/ui/main_fscript.xml


类似函数调用的参数格式

在AWTK的XML UI中，不少地方使用了类似函数调用的参数格式，常见用途有：

  • 控件动画。如：
  <progress_bar name="value" x="center" y="middle" w="90%" h="40"
    animation="value(from=50, to=100, yoyo_times=1000, duration=1000, delay=4000)"/>
  • 窗口动画。如：
<dialog anim_hint="popup" highlight="default(start_alpha=0, end_alpha=80)"
  • 布局参数。如：
<row  x="10" y="bottom:30" w="100%" h="90" children_layout="default(row=1,col=3)">

基本格式为：

函数名后跟一对括号，括号中有一个或多个参数，参数之间用英文’,’分隔，参数名和参数值之间用’=’分隔。如果没有参数可以只写函数名。

用不太正规的语法描述为：

func_call => func_name  '('  params_list  ')' | func_name
params_list => params_list  ','  param | param
param => name  '='  value


渐变色

渐变色在设计漂亮美观的界面时十分实用，相较于纯色，渐变色看起来更有质感，也更新潮一些。目前，AWTK 中支持将控件的背景色和前景色设置为渐变色。

一、主要限制

AWTK 的渐变色设置格式参考了 HTML CSS 的格式，但是目前只实现了它的一个子集。主要有以下限制：

  1. 只支持 180 度的 linear-gradient，也就是垂直从上到下的线性渐变。
  2. 只支持两种颜色的渐变，也就是从某一种颜色渐变到另一种颜色。

需要注意的是，目前 AWTK 只支持将控件风格（样式）中的 bg_color 属性和 fg_color 属性设置为渐变色，即只允许控件背景色和前景色为渐变色。

备注：AWTK 中已实现渐变色的填充，后续会不断优化完善，支持更多的渐变色设置格式并让更多控件风格支持设置渐变色。

二、示例用法

2.1 窗体样式文件中设置渐变色

例如，此处在窗体样式文件中创建名为 gradient_button 的按钮样式，设置其不同状态下的背景色为渐变色：

<button>
  ...
  <style name="gradient_button" border_color="#a0a0a0"  text_color="black" >
    <normal bg_color="linear-gradient(180deg, red 60%, cyan);" />
    <over bg_color="linear-gradient(180deg, orange 60%, red);" />
    <pressed bg_color="linear-gradient(180deg, orange 60%, blue);" />
    <focused bg_color="linear-gradient(180deg, orange 60%, green);" />
  </style>
</button>

上面按钮样式中 normal 状态的 bg_color 属性设置表示如下：

  • linear-gradient: 表示线性渐变；
  • 180deg: 表示垂直从上到下的渐变；
  • red 60%, cyan: 表示从高度为 60% 的位置开始红色渐变最后以为蓝绿色结束。

不填写开始高度，则默认从 0% 的位置开始，例如直接从红色垂直渐变为蓝色，代码如下：

    <normal bg_color="linear-gradient(180deg, red, cyan);" />

并且，开始和结束的颜色可通过颜色编码表示，代码如下：

    <normal bg_color="linear-gradient(180deg, #FF0000, #0000FF);" />

2.2 代码中设置渐变色

在 C 代码中设置控件背景色为渐变色只需调用 widget_set_style_str 接口即可，代码如下：

widget_set_style_str(button, "normal:bg_color", "linear-gradient(180deg, red, blue);");

备注：调用 widget_set_style_xxx 接口在代码中设置的样式为 inline style，会占用额外的内存，具体详见 theme.md。


Grid 控件用法

在很长一段时间内，grid 都只是起到语义上的作用，在功能上和 view 没有不同。最近我们对它做了以下改成，在不少地方可以提高开发效率。

  • 可以指定不同列的宽度。这个在默认子控件布局中是没法实现的。
  • 可以绘制网格线。按传统方法去做，虽然不是不可能，也是非常麻烦的。
  • 奇偶行可以指定不同的背景颜色。按传统方法去做，也是非常麻烦的。

有了上述这些特性，我们就可以非常方便的实现表格效果。

由于 grid 本身不具有滚动效果，不适合显示大量数据。

1. 用法

1.1 指定行数

通过属性 rows 指定行数。

1.2 指定各列的参数

通过属性 columns_definition 指定各列的参数

  /**
   * @property {char*} columns_definition
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 各列的参数。
   * 各列的参数之间用英文的分号 (;) 分隔，每列参数的格式为：
   *
   * col(w=?,left_margin=?,right_margin=?,top_maorgin=?,bottom_margin=?)
   *
   * * w 为列的宽度（必须存在）。取值在 (0-1] 区间时，视为 grid 控件宽度的比例，否则为像素宽度。
   * * left_margin（可选，可缩写为 l) 该列左边的边距。
   * * right_margin（可选，可缩写为 r) 该列右边的边距。
   * * top_margin（可选，可缩写为 t) 该列顶部的边距。
   * * bottom_margin（可选，可缩写为 b) 该列底部的边距。
   * * margin（可选，可缩写为 m) 同时指定上面 4 个边距。
   * * fill_available(可选，可缩写为f) 填充剩余宽度(只有一列可以指定)。
   *
   */
  char* columns_definition;

1.3 显示网格

  • 属性 show_grid 设置为 true。
  • 在 style 中指定 grid_color 的颜色
  • 在 style 中指定 border_color 的颜色

1.4 奇偶行不同背景颜色

  • 在 style 中通过 even_bg_color 指定偶数行的背景颜色
  • 在 style 中通过 odd_bg_color 指定奇数行的背景颜色

1.5 完整示例

<window>
  <grid x="10" y="10" w="-20" h="30" columns_definition="col(w=0.4,m=5);col(w=0.3,m=5);col(w=0.3,m=5);" rows="1"
    style.normal.grid_color="gray" style.normal.border_color="black" show_grid="true"
    style.normal.bg_color="#a0a0a0">
    <label text="姓名" />
    <label text="语文" />
    <label text="数学" />
  </grid>

  <grid x="10" y="40" w="-20" h="180" columns_definition="col(w=0.4,m=5);col(w=0.3,m=5);col(w=0.3,m=5);" rows="5"
    style.normal.grid_color="gray" style.normal.border_color="black"
    style.normal.odd_bg_color="#f5f5f5" style.normal.even_bg_color="#eeeeee" show_grid="true">
    <label text="张三" />
    <label text="98" />
    <label text="97" />

    <label text="李四" />
    <label text="98" />
    <label text="97" />

    <label text="王五" />
    <label text="98" />
    <label text="97" />

    <label text="孙六" />
    <label text="98" />
    <label text="97" />

    <label text="赵七" />
    <label text="98" />
    <label text="97" />
  </grid>
</window>


AWTK 硬件资源需求评估

一、CPU

CPU 的要求与 LCD 的尺寸关系很大，如果不启用动画，对于320x240x16的 LCD，52M的32位CPU应该够用。

目前我们测试过的最低硬件配置是：STM32F103(Cortex-M3内核 CPU 72 MH)，更低的CPU只能支持更低尺寸的LCD了。

二、Flash 的需求

AWTK 基本代码(包括常用控件)，在 STM32上编译之后大概 150K。字体、图片和输入法要看具体的应用了。

一般来说，至少要 256K FLASH（不包括裸系统和输入法以及图片字体等资源）。

下列模块为 AWTK 可增加模块（STM32F103等低端平台会禁止下列模块，故无此FLASH开销）：

模块名称 | FLASH大小 | 备注
PNG，JPG 和 GIF 图片解码器 | 大约57.64KB |
Truetype 字体解码器 | 大约27.3KB |
标准的 UNICODE 换行算法 | 大约49.4KB |
Google 拼音输入法 | 大约1.15MB |
加载文件系统资源模块 | 大约7.1KB |
启用 AGGE 作为矢量画布 | 大约21KB |
窗口动画 | 大约9.42KB | 窗口动画需要矢量画布功能支持

三、内存需求评估指南

假设:

  • LCD的宽度为：LCD_W
  • LCD的高度为：LCD_H
  • LCD的每像素占用的字节数为：BPP

1.Framebuffer

  • 单 framebuffer 需要：LCD_W * LCD_H * BPP

  • 双 framebuffer 需要：2 * LCD_W * LCD_H * BPP

  • 三 framebuffer 需要：3 * LCD_W * LCD_H * BPP

STM32F103等低端平台，无需Framebuffer，故无此内存开销。

2.窗口动画

  • 如果启用窗口动画，需要两个 framebuffer 大小的内存，即：2 * LCD_W * LCD_H * BPP
  • 窗口动画需要开启矢量画布功能

STM32F103等低端平台，禁用窗口动画，故无此内存开销。

3.图片解码

  • 图片解码器解码的时候大约占用 （2 * 图片宽* 图片高 * BPP） 的内存。
  • 一般带 alpha 通道的图片解码后，每像素占用4字节。
  • 不带 alpha 通道的图片解码后，如果定义 WITH_BITMAP_BGR565，每像素占用2字节，否则占用4字节。

STM32F103等低端平台，直接使用位图，编译到常量中，故无此内存开销。

4.输入法

  • 配套的控件
  • Google 拼音输入大约占用700KB。

STM32F103等低端平台，不启用输入法，故无此内存开销。

5.字体

  • 字体文件本身大小。
  • 字体解码器大约200B
  • 长度为256的字体图片缓冲区的大约占用4.2KB。
  • 字体图片缓存大小（字体图片的大小会根据字号和字体形状来决定一个字体图片的内存大小）。

STM32F103等低端平台，直接使用位图字体，编译到常量中，故无此内存开销。

6.控件

一般控件占用100B左右(64位系统会多一些)，一般复杂度的应用程序，控件占用内存的峰值小余100K。

对于低端平台，可以简化界面，关闭后台窗口，以减少内存的需求。

7.AGGE矢量画布

  • nanovg 作为前端大约占用18.3KB左右的缓冲区(64位系统会多一些)。
  • AGGE 作为后端大约占用300B左右。
  • AGGE 在计算时候会根据不同的效果会创建一些大小不等的缓冲区和临时变量，具体需要看效果来决定（一般效果峰值小于10K）。

STM32F103等低端平台，不启用矢量画布，故无此内存开销。

四、附录

1. AWTK 对应模块内存表：

功能名称 | 宏 | ROM | RAM | 说明
PNG ，JPG 和 GIF 图片解码器 | WITH_STB_IMAGE | 大约57.64KB | 大于（2 * 255KB + 16KB） | 一张16位色分辨率为480 * 272的图片内存为255KB
Truetype 字体解码器 | WITH_STB_FONT | 大约27.3KB | 4.2KB+18.5KB | 100个方正水云的18号字的内存大约为18.5KB，长度为256的字体图片缓冲区的大约占用4.2KB
标准的 UNICODE 换行算法 | WITH_UNICODE_BREAK | 大约49.4KB | 大于1.39KB |
Google 拼音输入法 | 取消定义 WITHOUT_INPUT_METHOD 或者取消定义 WITH_NULL_IM | 大约1.15MB | 大于700KB |
加载文件系统资源模块 | WITH_FS_RES | 大约7.1KB | 0B |
启用 AGGE 作为矢量画布 | WITH_NANOVG_AGGE | 大约21KB | 大于（18.4KB + 10KB） | AGGE 计算时候开辟内存保守估计峰值为10KB
窗口动画 | WITHOUT_WINDOW_ANIMATORS | 大约9.42KB | 大于（2 * 255KB） | 一块16位色分辨率为480 * 272的 framebuffer 为255KB
裁剪布局算法 | WITHOUT_LAYOUT | 大约3.64KB | 0B |
裁剪控件动画 | WITHOUT_WIDGET_ANIMATORS | 大约1.3KB | 0B |
裁剪剪切板算法 | WITHOUT_CLIPBOARD | 472B | 0B |
裁剪对话框高亮策略代码 | WITHOUT_DIALOG_HIGHLIGHTER | 大约1.46KB | 0B |


如何设置应用程序的图标

1. Windows

1.1 将应用程序的资源放到应用程序目录下的下列位置：

win32_res/awtk.res

1.2 资源的生成方法

可以在awtk/win32_res基础之上修改，也可以完全自己制作。

1.3 参考

  • 如何修改 Windows 下应用程序的图标


如何访问控件的属性

1.修改控件的属性

控件所有的公开属性，都提供了相应的 set 函数，用它可以修改对应的属性。如：

/**
 * @method check_button_set_value
 * 设置控件的值。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget check_button 对象。
 * @param {bool_t}  value 值
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t check_button_set_value(widget_t* widget, bool_t value);

2.读取控件的属性

控件都提供了一个宏，将其由 widget 类型转换成实际的类型，然后可以直接读取它的属性。如：

bool_t checked = CHECK_BUTTON(button)->value;

3.通过 widget 的函数访问控件的属性

widget 提供了 widget_get_prop/widget_set_prop 系列函数，也可以用来访问控件的属性。

/**
 * @method widget_get_prop
 * 获取控件指定属性的值。
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} name 属性的名称。
 * @param {value_t*} v 返回属性的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_get_prop(widget_t* widget, const char* name, value_t* v);

/**
 * @method widget_set_prop
 * 设置控件指定属性的值。
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} name 属性的名称。
 * @param {value_t*} v 属性的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_prop(widget_t* widget, const char* name, const value_t* v);

4.访问 text 属性

/**
 * @method widget_get_text
 * 获取控件的文本。
 * 只是对 widget\_get\_prop 的包装，文本的意义由子类控件决定。
 *
 * 如果希望获取 UTF8 格式的文本，可以参考下面的代码：
 *
 *```c
 *  str_t str;
 *  str_init(&str, 0);
 *  str_from_wstr(&str, widget_get_text(target));
 *  log_debug("%s: %s\n", target->name, str.str);
 *  str_reset(&str);
 *```
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 *
 * @return {const wchar_t*} 返回文本。
 */
const wchar_t* widget_get_text(widget_t* widget);

/**
 * @method widget_set_text
 * 设置控件的文本。
 * 只是对 widget\_set\_prop 的包装，文本的意义由子类控件决定。
 * @param {widget_t*} widget 控件对象。
 * @param {const wchar_t*}  text 文本。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_text(widget_t* widget, const wchar_t* text)

/**
 * @method widget_set_text_utf8
 * 设置控件的文本。
 * 只是对 widget\_set\_prop 的包装，文本的意义由子类控件决定。
 * @annotation ["scriptable"]
 * @alias set_text
 * @param {widget_t*} widget 控件对象。
 * @param {const char*}  text 文本。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_text_utf8(widget_t* widget, const char* text);

5.访问 value 属性

仅使用与 int/bool 类型的属性

/**
 * @method widget_set_value
 * 设置控件的值。
 * 只是对 widget\_set\_prop 的包装，值的意义由子类控件决定。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {int32_t}  value 值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_value(widget_t* widget, int32_t value)

/**
 * @method widget_get_value
 * 获取控件的值。只是对 widget\_get\_prop 的包装，值的意义由子类控件决定。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 *
 * @return {int32_t} 返回值。
 */
int32_t widget_get_value(widget_t* widget);


如何根据实际分辨率自动调整窗口中子控件的位置大小

1. 介绍

一般来说，我们希望设计的界面在不同分辨率的设备上都能正常显示，此时应该使用 layout 参数，而不要使用固定坐标和大小。

在有的情况下，设计时的分辨率与运行时的分辨率差不大，或者宽高之比的比例相近。比如手机，用 AWTK 开发的应用程序在手机上运行时，可以使用一种简便的方法，让 AWTK 自动调整子控件的坐标和大小（或者辅以 layout 参数进行微调）。

通过指定窗口下面这些属性，可以实现自动调整控件的坐标和大小。

/**
   * @property {uint16_t} design_w
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 设计时宽度。
   */
  uint16_t design_w;
  /**
   * @property {uint16_t} design_h
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 设计时高度。
   */
  uint16_t design_h;
  /**
   * @property {bool_t} auto_scale_children_x
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 窗口大小与设计时大小不同时，是否自动调整子控件的 x 坐标。
   */
  uint16_t auto_scale_children_x : 1;
  /**
   * @property {bool_t} auto_scale_children_y
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 窗口大小与设计时大小不同时，是否自动调整子控件的 y 坐标。
   */
  uint16_t auto_scale_children_y : 1;
  /**
   * @property {bool_t} auto_scale_children_w
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 窗口大小与设计时大小不同时，是否自动调整子控件的宽度。
   */
  uint16_t auto_scale_children_w : 1;
  /**
   * @property {bool_t} auto_scale_children_h
   * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
   * 窗口大小与设计时大小不同时，是否自动调整子控件的高度。
   */
  uint16_t auto_scale_children_h : 1;

如果子控件具有 self_layout 参数或者所在容器具有 children_layout 参数，则不使用自动调整功能。

2. 通过 XML 指定参数

示例：

<window
  design_w="320" design_h="480"
  auto_scale_children_x="true" auto_scale_children_y="true"
  auto_scale_children_w="true" auto_scale_children_h="true" >
  <button text="Hello" x="120" w="80" y="220" h="40" />
</window>

3. 通过代码指定参数

在代码中，可以使用下面这个函数自动调整控件的坐标和大小：

/**
 * @method window_set_auto_scale_children
 * 当设计分辨率和实际分辨率不一致时，自动调整子控件的位置和大小。
 *
 * > 当子控件有 self_layout 参数或者子控件的父控件有 children_layout 参数时，不会自动调整。
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget window 对象。
 * @param {uint32_t} design_w 设计时宽度。
 * @param {uint32_t} design_h 设计时高度。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t window_set_auto_scale_children(widget_t* widget, uint32_t design_w, uint32_t design_h);

示例：

widget_t* win = window_open("foobar");
window_set_auto_scale_children(win, 320, 480);


如何编译Windows 32位版本

  • 1.在文件awtk_config.py中设置TARGET_ARCH为’x86’：

将：

#TARGET_ARCH='x86'

修改为：

TARGET_ARCH='x86'
  • 2.对于XP，如果OpenGL渲染不正常。可以使用AGGE(或BGFX)试试。

将：

#NANOVG_BACKEND='AGGE'

修改为：

NANOVG_BACKEND='AGGE'
  • 3.编译32位版本需要重新生成资源。
scripts/update_res.py clean
scripts/update_res.py all


如何使用keil的AC6工具链编译

有些平台必须使用AC6工具链编译，但是使用AC6编译会有些问题，请先做下列修改：

  1. 在C/C++(AC6)设置中，指定Language C为gnu99
  2. 在C/C++(AC6)设置中，从Misc Controls中去掉 –gnu
  3. 选中.cpp的文件，右键打开”Options for file xxx.cpp”菜单，File Type选择“C++ Source file”
  4. 在AC6中有些语法变化，比如__attribute__((at(0x08041000)))是无效的，请改成 attribute((section(“.ARM.__AT_0x08041000”)))。


如何在改变控件属性时附带动画

控件在修改属性时，如果这个属性是会体现在界面上的（如进度条的 value），这个属性值发生跳变时就会显得特别突兀，因此，AWTK 增加了改变控件属性时附带动画的功能。

如何使用该功能

在属性名前增加前缀 animate: 即可，如：想改变 value 值附带动画，将属性名从value改为animate:value。

  • 在界面描述文件设置：
<window theme="main" name="main">
  <slider name="slider" x="c" y="m" w="200" h="16" animate:value="40"/>
</window>
  • 或在代码中设置：
widget_t* win = window_open("main");
widget_t* slider = widget_lookup(win, "slider", TRUE);
widget_set_prop_double(slider, "animate:value", 40.0);

修改动画播放时间

附带动画的默认播放时间是 500 ms，可以通过设置控件的 animate:animating_time 属性修改动画播放时间，该属性单位为毫秒。

注意：在设置 animate:prop_name 属性添加附加动画之前，设置控件的 animate:animating_time 属性才能生效。

  • 在界面描述文件设置：
<window theme="main" name="main">
  <!-- 先设置控件的 animate:animating_time 属性，让其生效 -->
  <slider name="slider" x="c" y="m" w="200" h="16" animate:animating_time="200" animate:value="40"/>
</window>
  • 或在代码中设置：
widget_t* win = window_open("main");
widget_t* slider = widget_lookup(win, "slider", TRUE);
/* 先设置控件的 animate:animating_time 属性，让其生效 */
widget_set_prop_int(slider, "animate:animating_time", 200);
widget_set_prop_double(slider, "animate:value", 40.0);

demo 演示

请打开 demoui 中 Slider 页面或 demouiold 中 Animate Widget/Value Change Animate 页面查看演示。


如何将资源编译到应用程序并使用它们

1 将所有资源编译到应用中

在不支持文件系统的嵌入式平台上，我们可以将应用程序使用的所有资源文件（比如UI、样式、图片、字库等）编译到应用程序中，即应用直接从 ROM 中加载资源，方法如下：

1.1 打包常量资源

在 AWTK Designer 的”项目设置”中指定”资源的打包方式”为”文件+常量”，并打包资源，或者直接在项目目录终端中执行以下命令打包所有资源：

python scripts/update_res.py all

1.2 取消宏定义 WITH_FS_RES

取消 AWTK 的宏定义 WITH_FS_RES，表示不支持文件系统，然后重新编译 AWTK 和应用程序，此时所有资源文件都会编译到应用程序中，程序运行时，资源初始化函数 assets_init() 会调用 assets_manager_add() 接口将这些资源添加到内存中，具体代码详见项目目录下的 res/assets_default.inc 文件。

注：如果是嵌入式 Linux 平台，使用 awtk-linux-fb 移植程序，那么还需要额外取消 awtk-linux-fb/awtk_config.py 中宏定义 LOAD_ASSET_WITH_MMAP，重新编译 AWTK。

2 将部分资源编译到应用中

如果平台支持文件系统，只是想手动将部分资源编译到应用中，那么可以先参考 1.1 章节打包常量资源，再将打包好的常量资源加入资源管理器，后续正常使用即可。

在程序初始化时，调用 assets_manager_add() 接口将打包好的常量资源加入资源管理器，代码如下：

// app/src/application.c

// 包含 home_page 页面的 UI 常量资源数组
#include "../res/assets/default/inc/ui/home_page.data"

ret_t application_init(void) {
  // 将 home_page 页面的 UI 常量资源数组添加到资源管理器
  assets_manager_t* am = assets_manager();
  assets_manager_add(am, ui_home_page);

  ...
  return RET_OK;
}

注：如果是嵌入式 Linux 平台，使用 awtk-linux-fb 移植程序，那么还需要额外取消 awtk-linux-fb/awtk_config.py 中宏定义 LOAD_ASSET_WITH_MMAP，重新编译 AWTK。


如何定制 combo_box 控件中按钮的风格和大小

定制 combo_box 控件中按钮的风格

打开 style 文件，找到按钮的 style，修改名为 combobox_down 的 style 即可。

<button>
  <style name="combobox_down" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_down_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_down_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_down_o"/>
  </style>
</button>

定制 combo_box 控件中按钮的大小

此时需要在 combo_box 控件中，增加一个按钮子控件，可以设置它的大小、位置和 style 的名称。

  <combo_box left_margin="6" x="10" y="5" w="200" h="30" text="left" options="left;center;right;">
    <button style="combobox_down" x="right:5" y="middle" w="20" h="20"/>
  </combo_box>


如何绘制旋转文字

要旋转文字只能用 vgcanvas 绘制文字。在不同的情况下，AWTK 底层采用不同的 vgcanvas 引擎，遗憾的是部分 vgcanvas 引擎并不支持绘制文字。事实上只能在用 OpenGL 的情况下，才支持绘制文字。

不过没有关系，毕竟在嵌入式平台，旋转文字的需求不多，如果确实需要，也是有解决方案的。本文介绍一种跨平台的绘制旋转的文字方法。

字体引擎（比如 stb/freetype) 会把矢量字体转换成一种特殊位图，这个位图只有透明通道 (alpha) 信息，在 AWTK 中用 glyph_t 表示。vgcanvas 引擎都支持贴图功能，只要把 glyph_t 转换成正常 bitmap_t 对象，就可以利用 vgcanvas 各种变换效果了。

下面这个函数可以把字符串对应的 glyph 转换成位图对象（拿去用就好了）：

static bitmap_t* bitmap_from_str(canvas_t* canvas, wchar_t* str, color_t tc) {
  glyph_t g;
  uint32_t x = 0;
  uint32_t y = 0;
  uint32_t i = 0;
  uint32_t w = 0;
  uint32_t h = 0;
  uint32_t ox = 0;
  font_vmetrics_t vm;
  uint32_t* p = NULL;
  uint32_t baseline = 0;
  bitmap_t* bitmap = NULL;
  uint32_t font_size = canvas->font_size;
  font_manager_t* fm = canvas->font_manager;
  font_t* font = font_manager_get_font(fm, canvas->font_name, font_size);
  return_value_if_fail(font != NULL, NULL);

  vm = font_get_vmetrics(font, font_size);
  h = vm.ascent - vm.descent;
  return_value_if_fail(h > 0, NULL);

  baseline = vm.ascent;
  for (i = 0; str[i]; i++) {
    return_value_if_fail(font_get_glyph(font, str[i], font_size, &g) == RET_OK, NULL);
    w += g.advance + 1;
  }

  bitmap = bitmap_create_ex(w, h, 0, BITMAP_FMT_RGBA8888);
  return_value_if_fail(bitmap != NULL, NULL);

  p = (uint32_t*)bitmap_lock_buffer_for_write(bitmap);

  memset(p, 0x00, w * h * 4);

  for (i = 0; str[i]; i++) {
    return_value_if_fail(font_get_glyph(font, str[i], font_size, &g) == RET_OK, NULL);

    for (y = 0; y < g.h; y++) {
      for (x = 0; x < g.w; x++) {
        int32_t dx = ox + g.x + x;
        int32_t dy = baseline + g.y + y;

        uint32_t* d = p +  dy * w + dx;
        const uint8_t* s = g.data + y * g.w + x;

        tc.rgba.a = *s;
        *d = tc.color;
      }
    }
    ox += g.advance + 1;
  }
  bitmap_unlock_buffer(bitmap);
  bitmap->flags |= BITMAP_FLAG_CHANGED;

  return bitmap;
}

然后？然后就和画图一样了：

```c vgcanvas_save(vg); vgcanvas_translate(vg, c->ox, c->oy);

vgcanvas_translate(vg, cx, cy);
  vgcanvas_rotate(vg, info->rotation);
  vgcanvas_scale(vg, info->scale, info->scale);
  vgcanvas_translate(vg, -cx, -cy);

canvas_widget_draw_image_center(widget, vg, text_img);

vgcanvas_restore(vg); ```

完整代码请参考：vgcanvas_draw_text

vgcanvas 的 API 基本上是参考 HTML5 Canvas API 定义的，这个 API 是我见过最好的 2D 绘图 API。不过，vgcanvas 在没有 GPU 的情况下，性能远远不如 canvas，除非有旋转之类的特殊需求，尽量使用 canvas 的 API。


如何用 edit 控件编辑日期

用 edit 控件编辑日期，将 edit 的 input_type 指定为”date”即可。

  • 基本用法

示例：

 <edit w="70%" text="2020/10/10"   tips="date" input_type="date"/
  • 启用自动修正功能

示例：

<edit w="70%" text="" tips="date autofix"  input_type="date" auto_fix="true"/>

参考：input type


如何用 edit 控件编辑 IP 地址

用 edit 控件编辑 IP 地址，将 edit 的 input_type 指定为”ipv4”即可。

  • 基本用法

示例：

 <edit w="70%" text="192.168.1.1" tips="ipv4" input_type="ipv4"/>
  • 启用自动修正功能

示例：

<edit w="70%" text="192.168.1.1" tips="ipv4 autofix" input_type="ipv4" auto_fix="true"/>

参考：input type


如何用 edit 控件编辑时间

用 edit 控件编辑时间，将 edit 的 input_type 指定为”time”即可。

  • 基本用法

示例：

 <edit w="70%" text="12:16"  tips="time"  input_type="time"/>
  • 启用自动修正功能

示例：

<edit w="70%" text="" tips="time autofix"   input_type="time" auto_fix="true"/>

time 只能输入时分，要输入时分秒请用 time_full。

参考：input type


如何启用文本双向排版 (Unicode Bidirectional Algorithm)

1. 启用文本双向排版算法

定义宏 WITH_TEXT_BIDI 即可，嵌入式版本请修改 awtk_config.h:

/**
 * 如果希望支持文字双向排版算法（如阿拉伯语言），请定义本宏。
 *
 * #define WITH_TEXT_BIDI 1
 *
 */

PC　版本默认已经定义。

## 2. 加入相关文件

3rd/fribidi/fribidi-arabic.c
3rd/fribidi/fribidi-bidi-types.c
3rd/fribidi/fribidi-bidi.c
3rd/fribidi/fribidi-brackets.c
3rd/fribidi/fribidi-deprecated.c
3rd/fribidi/fribidi-joining-types.c
3rd/fribidi/fribidi-joining.c
3rd/fribidi/fribidi-mirroring.c
3rd/fribidi/fribidi-run.c
3rd/fribidi/fribidi-shape.c
3rd/fribidi/fribidi.c
src/base/bidi.c

PC　版本默认已经加。

3. 控件的 bidi 属性

默认情况下，文字的方向自动确定，如果在某些情况下，需要自己指定，可以通过 bidi 属性来实现。

示例：

  <label text="1. جامعة كولومبيا عام." style:font_size="30" style:font_name="trado" bidi="lro"/>

bidi 的可选值有：

  • rtl Right-To-Left letter。
  • ltr Left-To-Right letter。
  • auto Auto Detection
  • wrtl Weak Right To Left paragraph。
  • wltr Weak Left To Right paragraph。
  • lro Left-To-Right letter Override。
  • rlo Right-To-Left letter Override。


如何启用编辑器的上下文菜单？

目前只支持右键激活，不支持长按。

创建菜单界面资源

  • 文件名必须为 edit_menu.xml

  • 目前支持的菜单项有：

    • 拷贝。控件名必须为 copy。
    • 剪切。控件名必须为 cut。
    • 粘贴。控件名必须为 paste。
    • 全选。控件名必须为 select_all。

界面的风格和布局可以自行修改，控件名称满足上述要求即可。

示例：

<popup w="128" h="120" close_when_click="true" children_layout="default(c=1,r=4,m=3,s=2)">
   <button tr_text="Copy" focusable="true" name="copy"/>
   <button tr_text="Cut" focusable="true" name="cut"/>
   <button tr_text="Paste" focusable="true" name="paste"/>
   <button tr_text="Select All" focusable="true" name="select_all"/>
</popup>


软键盘支持按键预览

一、介绍

在嵌入式系统中，通常屏幕很小。如果使用电容触摸屏，手指按下时会挡住其下的按钮，让人不确定是否按在了正确的位置，特别是在软键盘这种按钮按钮很密集的界面，更容易让人产生焦虑。

AWTK 支持了按钮预览的功能，可以大幅缓解这种焦虑。当按下按钮时，在上方显示一个放大的按钮，这种方法在 Android/iOS 中早已广泛使用，效果如下所示：

二、使用方法

1. 基本方法

指定按钮的 enable_preview 属性为 true 即可，如：

<button name="Q" enable_preview="true" text="Q"/>

2. 在软键盘的候选字中使用

候选字按钮是动态创建的，没有办法在 XML 中为按钮指定，为此我们为 candidates 也增加了 enable_preview 属性：

<candidates x="0" y="0" w="100%" h="30" enable_preview="true"/>


如何开启按键音

在有的应用程序中，按键和触屏时，需要给用户提供某种反馈：

  • 反馈的方式通常是声音或震动。
  • 声音的类型可能与当前的按键有关。比如拨号界面，按下不同的数字会播放不同的声音。
  • 在同一个应用，不同场景的需求也可能不一样，所以需要全局开启或关闭反馈。

由于 AWTK 本身没有提供震动和声音的接口，所以 AWTK 提供了一个 ui_feedback 接口，开发者可以设置回调函数，去播放声音或震动。

1 反馈回调函数

反馈回调函数的原型和初始化函数如下：

/**
 * @method ui_on_feedback_t
 * 反馈回调函数。
 *
 * @param {void*} ctx 回调函数的上下文，即ui_feedback_init中传递的ctx。
 * @param {widget_t*} widget 设置feedback属性的控件对象。
 * @param {event_t*} evt 事件对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
typedef ret_t (*ui_on_feedback_t)(void* ctx, widget_t* widget, event_t* evt);

/**
 * @method ui_feedback_init
 * 初始化。
 * 设置实际的处理函数。
 *
 * @annotation ["static"]
 * @param {ui_on_feedback_t} on_feedback 实际的处理函数。
 * @param {void*} ctx 回调函数的上下文。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t ui_feedback_init(ui_on_feedback_t on_feedback, void* ctx);

通常只是部分控件需要提供反馈，因此控件缺省情况下不提供反馈功能。需要把控件的 feedback 属性设置为 TRUE，当有按键(按下和弹起)和触屏事件(按下和弹起)发生在该控件上时，才会调用开发者设置的回调函数。

在回调函数中，开发者可以根据事件的类型、当前设置和控件的其它属性，来决定如何反馈。

2 示例

由于 AWTK 没有提供震动和播放声音的接口，所以这里通过修改文本的方式展现该功能，要实现上面的功能点很简单，其步骤如下：

(1) 在 UI 文件中设置控件的”feedback”属性为 true，在这里需要设置”button”按钮的 feedback=”true”，代码如下：

<window>
  <button name="button" x="60%" y="60%" w="20%" h="40" text="inc" feedback="true"/>
  <label name="label" x="c" y="60%" w="20%" h="40" text=""/>
</window>

(2) 在C代码中调用 ui_feedback_init 接口初始化，代码如下：

static ret_t ui_on_btn_feedback(void* ctx, widget_t* widget, event_t* evt) {
  widget_t* win = (widget_t*)ctx;
  widget_t* label = widget_lookup(win, "label", TRUE);
  const char* name = widget_get_prop_str(widget, WIDGET_PROP_NAME, "");

  if (tk_str_eq(name, "button")) {
    if (evt->type == EVT_POINTER_DOWN) {
      widget_set_text_utf8(label, "point down");
    } else if (evt->type == EVT_POINTER_UP) {
      widget_set_text_utf8(label, "point up");
    }
  }
  return RET_OK;
}

/* 初始化 */
ret_t home_page_init(widget_t* win, void* ctx) {
  (void)ctx;
  return_value_if_fail(win != NULL, RET_BAD_PARAMS);

  widget_foreach(win, visit_init_child, win);
  ui_feedback_init(ui_on_btn_feedback, win);

  return RET_OK;
}


如何启用鼠标指针

1 启用鼠标指针

启用鼠标指针，需要定义宏 ENABLE_CURSOR。

2 在应用程序启用鼠标指针

如果要在自己的应用程序中启用鼠标指针，可以按下面步骤：

(1) 添加鼠标指针图片，如”cursor.png”，将其放到类似design/default/images/xx的目录下。

(2) 调用 window_manager_set_cursor 设置鼠标指针，如：

window_manager_set_cursor(window_manager(), "cursor");

上面函数中的”cursor”，对应鼠标图片的名称，两者名称需要一致

3 指针图片的要求

指针的形状有多种，比如普通指针、十字、文本选择和等待等等。为了简化处理，在绘制指针时，AWTK会把图片的中心定位到鼠标的当前位置，在制作指针图片时，请考虑这一点。

4 控件的缺省鼠标指针

控件的缺省鼠标指针由 vtable 的 pointer_cursor 属性指定。如 edit 的鼠标指针：

TK_DECL_VTABLE(edit) = {.size = sizeof(edit_t),
                        .type = WIDGET_TYPE_EDIT,
                        .focusable = TRUE,
                        .inputable = TRUE,
                        .pointer_cursor = WIDGET_CURSOR_EDIT,
                        .clone_properties = s_edit_properties,
                        .persistent_properties = s_edit_properties,
                        .get_parent_vt = TK_GET_PARENT_VTABLE(widget),
                        .create = edit_create,
                        .on_re_translate = edit_on_re_translate,
                        .on_paint_self = edit_on_paint_self,
                        .set_prop = edit_set_prop,
                        .get_prop = edit_get_prop,
                        .on_destroy = edit_on_destroy,
                        .on_copy = edit_on_copy,
                        .on_event = edit_on_event}

控件的缺省鼠标指针在 AWTK 内部写定了，开发者可以换图片来改变鼠标指针的形状。

5 为单个控件指定鼠标指针

为单个控件指定鼠标指针，只需要指定控件的 pointer_cursor 属性即可。如：

 <label x="0" y="0" w="100%" h="100%" text="up/down key change focus" pointer_cursor="cursor_hand"/>

6 等待状态的鼠标指针

下列两个函数用于开始和结束等待鼠标指针。

开始等待鼠标指针后：

  • 如果 ignore_user_input 为 TRUE，窗口忽略所有输入事件。
  • 鼠标移动时不再自动切换鼠标指针。
/**
 * @method widget_begin_wait_pointer_cursor
 * 开始等待鼠标指针。
 * @param {widget_t*} widget 控件对象。
 * @param {bool_t} ignore_user_input 是否忽略用户输入。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_begin_wait_pointer_cursor(widget_t* widget, bool_t ignore_user_input);

/**
 * @method widget_end_wait_pointer_cursor
 * 结束等待鼠标指针。
 * @param {widget_t*} widget 控件对象。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_begin_end_pointer_cursor(widget_t* widget);

完整实例


如何处理将文件拖入到窗口的事件。

在 PC 上，如果将系统文件浏览器中的文件拖入到 AWTK 的窗口上，会触发 EVT_DROP_FILE 事件。该事件会分发到窗口管理器对象和当前窗口对象上，可以根据需要选择注册事件的目标。

使用方法

  • 注册事件。
widget_on(win, EVT_DROP_FILE, window_on_drop_file, win);
  • 实现事件处理函数。
static ret_t window_on_drop_file(void* ctx, event_t* e) {
  widget_t* win = WIDGET(ctx);
  widget_t* label = widget_lookup(win, "filename", TRUE);
  drop_file_event_t* drop = drop_file_event_cast(e);

  widget_set_text_utf8(label, drop->filename);

  return RET_OK;
}

可以从 drop_file_event_t 事件的 filename 中获取文件名，如果拖入的是多个文件，该事件会触发多次。

完整使用方法请参考: demos/demo_ui_old_app.c


如何隐藏滚动条的上下按钮

在 design/default/styles/default.xml 中，去掉 scroll_down/scroll_up 按钮的 style 即可：

  <style name="scroll_down" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_down_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_down_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_down_o"/>
  </style>

  <style name="scroll_up" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_up_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_up_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_up_o"/>
  </style>


如何实现”back”键和”home”键

  • back 键 关闭当前窗口，回到上一级窗口。
  • home 键 回到第一个主窗口，并关闭之上的全部窗口。
  1. 编写事件处理函数。
static ret_t on_key_back_or_back_to_home(void* ctx, event_t* e) {
  key_event_t* evt = (key_event_t*)e;
  if (evt->key == TK_KEY_F2) {
    window_manager_back(WIDGET(ctx));
  } else if (evt->key == TK_KEY_F3) {
    window_manager_back_to_home(WIDGET(ctx));
  }

  return RET_OK;
}
  2. 注册窗口管理器的按键事件处理函数：
  widget_t* wm = window_manager();
  widget_on(wm, EVT_KEY_DOWN, on_key_back_or_back_to_home, wm);
  3. 把主窗口设置为不可关闭：
widget_set_prop_str(win, WIDGET_PROP_CLOSABLE, "no");

请参考完整示例：multi_windows.c

如果在关闭窗口前，需要用户确认，请参考：system_bar.md


如何实现自定义的软键盘

有时需要把软键盘嵌入到窗口内部（比如计算器和密码输入等），这时可以使用自定义软键盘。

一、编辑器设置 input_type 为”custom”（它会禁止内置的软键盘）。

<edit x="c" y="10" w="90%" h="30" focused="true" input_type="custom" text="" />

如果希望初始化时编辑器自动获的焦点，可以设置 focused 为 true。

二、软键盘的按钮放入一个 view（任何容器控件均可）中，并将 view 的 is_keyboard 设置为 true。

  <view y="60" x="c" w="90%" h="-60" is_keyboard="true"
    children_layout="default(r=4,c=4,m=5,s=5)" >
    <button name="key" text="0" />
    <button name="key" text="1" />
    <button name="key" text="2" />
    <button name="key" text="3" />
    <button name="key" text="4" />
    <button name="key" text="5" />
    <button name="key" text="6" />
    <button name="key" text="7" />
    <button name="key" text="8" />
    <button name="key" text="9" />
    <button name="key" text="#" />
    <button name="backspace" text="<=" />
  </view>

三、处理按钮事件

1. 处理正常按键

static ret_t on_send_key(void* ctx, event_t* e) {
  widget_t* button = WIDGET(e->target);
  char text[2];
  text[0] = (char)button->text.str[0];
  text[1] = '\0';

  input_method_commit_text(input_method(), text);

  return RET_OK;
}

2. 处理删除键

static ret_t on_backspace(void* ctx, event_t* e) {
  input_method_dispatch_key(input_method(), TK_KEY_BACKSPACE);

  return RET_OK;
}

如果你不希望出现编辑器的光标，可以使用 label 控件代替 edit 控件，输入和删除时直接操作 label 的 text。

参考：

  • demo_ui_app.c
  • soft_keyboard.xml


如何实现弹出菜单

弹出菜单就是一个 popup 窗口，只是需要用 menu 自身布局器 指定窗口弹出的位置。

完整示例请参考：popup_menu


如何加载外部图片和字库

在嵌入式平台下，有些开发板的 Flash 空间比较紧张，运行 AWTK 应用程序的时候，可能会出现 Flash 不够用的情况。此时可以将占用空间比较大的图片和字体资源，放到其他存储介质上（如：SD卡）。

在 AWTK 中，存放图片或者字体都有默认的目录结构，如：图片存放在 default/images/xx 目录下，字体存放在 default/fonts 目录下。如果需要加载其他目录的图片或者字体，AWTK 也提供了相应的方法，下面介绍如何在有文件系统和无文件系统时，加载外部图片和字体。

1 有文件系统

有文件系统时，如果需要加载非 AWTK 默认目录结构中的图片或字体，可采用”file:// + 图片或字体所在路径”的形式，具体内容请看下文。

1.1 加载外部图片

例如，要在 home_page 页面显示 E:/designer.png 和 awtk.png（目录结构如下）两张图片。

Demo
  |-- design/
  |-- res/
  |-- my-res/awtk.png

有下面两种实现方式：

（1）XML文件方式，修改XML文件内容如下：

<window name="home_page ">
  <image name="image1" x="0" y="0" w="50" h="50" draw_type="default" image="file://E:/designer.png"/>
  <image name="image" x="0" y="60" w="50" h="50" draw_type="default" image="file://my-res/awtk.png"/>
</window>

（2）C代码方式，在C代码中可通过调用 image_set_image() 函数实现，代码如下：

widget_t* image = widget_lookup(win, "image1", TRUE);
image_set_image(image, "file://my-res/awtk.png");

1.2 加载外部字体

要实现加载外部字体 E:/default.ttf，步骤如下：

步骤一：修改 res/assets/__assets_default.inc 资源文件，将：

assets_manager_preload(am, ASSET_TYPE_FONT, "default");

修改为：

assets_manager_preload(am, ASSET_TYPE_FONT, "file://E:/default.ttf");

步骤二：调用 system_info_set_default_font 函数设置缺省字体，代码如下：

system_info_set_default_font(system_info(), "file://E:/default.ttf");

2 无文件系统

在无文件系统中，如果需要加载非 AWTK 默认目录结构中的图片或字体，可以将图片或字体数据作为参数传给 assets_manager_add_data() 函数，该函数将这些数据添加到 AWTK 资源管理器中，然后就可以通过文件名的方式使用图片或字体了。

2.1 相关函数

assets_manager_add_data() 函数说明：

  • 函数原型：
/**
 * @method assets_manager_add_data
 * 向资源管理器中增加一个资源data。
 * 备注：同一份资源多次调用会出现缓存叠加的问题，导致内存泄露
 * @param {assets_manager_t*} am asset manager对象。
 * @param {const char*} name 待增加的资源的名字。
 * @param {uint16_t} type 待增加的资源的主类型枚举。
 * @param {uint16_t} subtype 待增加的资源的子类型枚举。
 * @param {uint8_t*} buff 待增加的资源的data数据。
 * @param {uint32_t} size 待增加的资源的data数据长度。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t assets_manager_add_data(assets_manager_t* am, const char* name, uint16_t type,
                              uint16_t subtype, uint8_t* buff, uint32_t size);

type参数资源主类型取值详见下表：

资源主类型 | 说明
ASSET_TYPE_NONE | 无效资源
ASSET_TYPE_FONT | 字体资源
ASSET_TYPE_IMAGE | 图片资源
ASSET_TYPE_STYLE | 窗体样式资源
ASSET_TYPE_UI | UI数据资源
ASSET_TYPE_XML | XML数据资源
ASSET_TYPE_STRINGS | 字符串数据资源
ASSET_TYPE_SCRIPT | JS等脚本资源
ASSET_TYPE_DATA | 其它数据资源

subtype 参数字体资源子类型详见下表：

资源的主类型枚举 | 说明
ASSET_TYPE_FONT_NONE | 无效字体
ASSET_TYPE_FONT_TTF | TTF字体
ASSET_TYPE_FONT_BMP | 位图字体

subtype参数图片资源子类型详见下表：

图片资源子类型 | 说明
ASSET_TYPE_IMAGE_NONE | 未知图片类型
ASSET_TYPE_IMAGE_RAW | Raw图片类型
ASSET_TYPE_IMAGE_BMP | 位图图片类型
ASSET_TYPE_IMAGE_PNG | PNG图片类型
ASSET_TYPE_IMAGE_JPG | JPG图片类型
ASSET_TYPE_IMAGE_BSVG | BSVG图片类型
ASSET_TYPE_IMAGE_GIF | GIF图片类型
ASSET_TYPE_IMAGE_WEBP | WEBP图片类型
ASSET_TYPE_IMAGE_LZ4 | LZ4压缩的图片类型
ASSET_TYPE_IMAGE_OTHER | 其它图片类型

2.2 加载外部图片

例如，要在 home_page 页面显示 E:/awtk.png 这张图片，实现步骤如下：

（1）添加图片。调用函数 assets_manager_add_data() 向资源管理中添加图片资源，代码如下：

注：由于此处是在 PC 上演示，所以调用了 file_read() 函数读取图片数据，在实际的嵌入式应用场景中，需要通过其他方式读取图片数据。

uint32_t size = 0;
uint8_t* data = (uint8_t*)file_read("E:/awtk.png", &size);
assets_manager_add_data(assets_manager(), "awtk",
                            ASSET_TYPE_IMAGE,ASSET_TYPE_IMAGE_PNG, data, size);

（2）使用图片。在上面的步骤（1）中，已经向 AWTK 资源管理器中添加好了 awtk.png 图片，在 XML 文件或者 C 代码中可以通过指定图片文件名的方式使用图片。

例如，要在 XML 文件中使用 awtk.png 这张图，代码如下：

<window name="home_page ">
  <image name="image" x="0" y="60" w="50" h="50" draw_type="default" image="awtk"/>
</window>

2.3 加载外部字体

例如，要将 E:/default_full.ttf 字体加载到应用程序中，代码如下，实现步骤如下：

步骤一：获取字体数据。（此处为了方便演示调用 file_read() 函数读取字体，也可以用其他方式读取字体）。

步骤二：调用函数 assets_manager_add_data() 函数向资源管理中添加字体资源。

步骤三：调用 font_manager_add_font() 函数向字体管理器中添加字体。

步骤四：使用字体。调用 system_info_set_default_font() 函数设置默认字体为 default_full，应用程序将使用该字体。

#include "font_loader/font_loader_truetype.h"

uint32_t size = 0;
uint8_t* data = (uint8_t*)file_read("E:/default_full.ttf", &size);
assets_manager_add_data(assets_manager(), "default_full", ASSET_TYPE_FONT,
                        ASSET_TYPE_FONT_TTF,data, size);
uint32_t i = 0;
uint32_t nr = assets_manager()->assets.size;
const asset_info_t** all = (const asset_info_t**)(assets_manager()->assets.elms);

for (i = 0; i < nr; i++) {
  const asset_info_t* res = all[i];
  if (res->subtype == ASSET_TYPE_FONT_TTF && tk_str_eq(res->name, "default_full")) {
    font_manager_add_font(font_manager(),
                          font_truetype_create(res->name, res->data, res->size));
    system_info_set_default_font(system_info(), "default_full");
  }
}


如何修改 stb_truetype 获取字模时申请的缓冲区大小

stb_truetype 是一个用来解析 ttf 字体文件的开源库，功能强大，体积小巧。

在 AWTK 中，使用 AGGE 渲染模式时，默认采用 stb_truetype 解析 ttf 字体文件（实际上由宏 WITH_STB_FONT 决定）。

stb_truetype 在获取字模时，会 malloc 一块缓冲区保存字模位图中每行像素的变化信息，生成字模后，该缓冲区被释放，由于频繁申请释放内存容易产生内存碎片，因此，AWTK 默认设置该缓冲区大小约为 11 KB。

若由于内存不足 stb_truetype 获取字模失败，则会打印以下提示信息：

STBTT get glyph failed : Cannot allocate memory!

此时，用户可通过定义宏 STBTT_MAX_SCANLINE_EDGES 来设置缓冲区大小，该宏表示字模位图中每行像素的变化信息的最大数量，比如一个宽为 1000 像素的字模，如果它的某一行每个像素点都在变化，那么最大值则为 1000，此时可设置该宏为 1000，代码如下：

#define STBTT_MAX_SCANLINE_EDGES 1000  //缓冲区大小约为 1000 * 28 字节（约 27KB）

当设置宏 STBTT_MAX_SCANLINE_EDGES 为 0 时，stb_truetype 的缓冲区将动态扩张，但容易产生内存碎片，代码如下：

#define STBTT_MAX_SCANLINE_EDGES 0   //缓冲区将动态扩张


如何在非 GUI 线程操作 GUI 控件

GUI 控件只能在 GUI 线程进行操作，非 GUI 线程想操作 GUI 控件，必须用以下函数进行串行化。

1. idle_queue

idle_queue 向主循环的事件队列提交一个增加 idle 的请求，GUI 线程的主循环在处理事件队列时，会把该 idle 函数放到 idle 管理器中，在分发 idle 时，该 idle 函数在 GUI 线程执行。

/**
 * @method idle_queue
 * 用于非 GUI 线程增加一个 idle，本函数向主循环的事件队列中发送一个增加 idle 的请求。
 * @annotation ["static"]
 * @param {idle_func_t} on_idle idle 回调函数。
 * @param {void*} ctx idle 回调函数的上下文。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t idle_queue(idle_func_t on_idle, void* ctx);

on_idle 函数返回 RET_REPEAT 时，将重复执行。

2. timer_queue

timer_queue 向主循环的事件队列提交一个增加 timer 的请求，GUI 线程的主循环在处理事件队列时，会把该 timer 函数放到 timer 管理器中，在分发 timer 时，该 timer 函数在 GUI 线程执行。

/**
 * @method timer_queue
 * 用于非 GUI 线程增加一个 timer，本函数向主循环的事件队列中发送一个增加 timer 的请求。
 * @annotation ["static"]
 * @param {timer_func_t} on_timer
 * timer 回调函数，回调函数返回 RET_REPEAT，则下次继续执行，否则自动移出。
 * @param {void*} ctx timer 回调函数的上下文。
 * @param {uint32_t} duration 时间。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t timer_queue(timer_func_t on_timer, void* ctx, uint32_t duration);

on_timer 函数返回 RET_REPEAT 时，将重复执行。

3. tk_run_in_ui_thread

tk_run_in_ui_thread 让后台线程在 UI 线程执行指定的函数，它是对 idle_queue 的包装，支持等待调用完成。

/**
 * @method tk_run_in_ui_thread
 * 后台线程在 UI 线程执行指定的函数。
 *
 * @param {tk_callback_t} func 函数。
 * @param {void*} ctx  回调函数的上下文。
 * @param {bool_t} wait_until_done 是否等待完成。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t tk_run_in_ui_thread(tk_callback_t func, void* ctx, bool_t wait_until_done)

如果 wait_until_done 为 FALSE，func 函数返回 RET_REPEAT 时，将重复执行。

注意：以上是少数几个可以在非 GUI 线程安全调用的函数，请不要在非 GUI 线程调用其它 widget 相关的函数。

示例：

void* test_thread1(void* args) {
  int nr = 500000;
  while ((nr-- > 0) && (!s_app_quit)) {
    tk_run_in_ui_thread((tk_callback_t)update_progress_bar, args, TRUE);
    sleep_ms(30);
  }

  return NULL;
}

void* test_thread2(void* args) {
  int nr = 500000;
  while ((nr-- > 0) && (!s_app_quit)) {
    tk_run_in_ui_thread((tk_callback_t)update_progress_bar, args, FALSE);
    sleep_ms(30);
  }

  return NULL;
}

static ret_t on_idle(const idle_info_t* idle) {
  return update_progress_bar(WIDGET(idle->ctx));
}

void* test_thread3(void* args) {
  int nr = 500000;
  while ((nr-- > 0) && (!s_app_quit)) {
    idle_queue(on_idle, args);
    sleep_ms(30);
  }

  return NULL;
}

static ret_t on_timer(const timer_info_t* timer) {
  return update_progress_bar(WIDGET(timer->ctx));
}

void* test_thread4(void* args) {
  int nr = 500000;
  while ((nr-- > 0) && (!s_app_quit)) {
    timer_queue(on_timer, args, 30);
    sleep_ms(30);
  }

  return NULL;
}

参考

demos/demo_thread_app.c

注意事项

  • 在 idle 函数执行的时候，窗口可能已经被关闭，控件已经处于无效状态。为了避免出现也指针的问题，在 idle 函数中，应该检查目标窗口和控件是否存在。


为 512K Flash 优化空间

背景

  • 缺省情况下，demo1 在 STMF103 上的空间占用情况如下。
Program Size: Code=222780 RO-data=232212 RW-data=720 ZI-data=53440

对于只用 512K Flash 的平台来说，给应用程序留下的空间就比较少了，这里介绍一下进一步优化空间方法：

AWTK 优化

    1. 将编译器的优化级别提高一级 (O1):

可以优化掉 30K 左右的空间：

Program Size: Code=193658 RO-data=232214 RW-data=720 ZI-data=53440
    2. 去掉 Unicode 换行算法的支持。

修改 awtk_config.h 文件，去掉 WITH_UNICODE_BREAK 的定义。

//#define WITH_UNICODE_BREAK 1

可以优化掉 50K 左右的空间：

Program Size: Code=190338 RO-data=186674 RW-data=400 ZI-data=53440
    3. 去掉不必要的 bitmap 格式

对于 BGR565 格式的 LCD，修改 awtk_config.h 文件，增加下面的宏定义

/**
 * 对于只有 512K flash 的平台，而且 LCD 格式是 BGR565。如果希望进一步优化空间，去掉多余的 bitmap 格式支持代码。请定义本宏。
 * 其它 LCD 格式，可以自行修改：src/blend/soft_g2d.c 保留需要的格式即可。
 *
 */
#define LCD_BGR565_LITE 1

可以优化掉 30K 左右的空间：

Program Size: Code=163602 RO-data=186498 RW-data=400 ZI-data=53440
    4. 将编译器的优化级别提高一级 (O2):

可以优化掉 10K 左右的空间：

Program Size: Code=149510 RO-data=186494 RW-data=400 ZI-data=53440
    5. 去掉不需要的控件：

最多可以优化掉 20K 左右的空间

APP 优化

  • 设计界面时不要使用 inline 样式。使用共享样式，可以减少 RAM 和 Flash 的空间。


如何打包并发布项目

在开发完成后，通常需要将可执行文件和运行时需要的资源拷贝出来，发给客户或放到板子上运行。AWTK 提供了一个脚本 scripts/release.py，将可执行文件和运行时需要的资源拷贝出来，放到当前目录的 release 子目录下。用法如下：

假如当前项目是 awtk-hello，在 awtk-hello 目录中运行下面的命令：

python ./scripts/release.py

本脚本适用于 Linux、Windows、MacOS、Linux_FB，不适用于其它嵌入式系统。对于其它嵌入式系统，本脚本可以将运行时需要的资源拷贝出来，放到开发板的 T 卡上，自己删除 release/bin 目录即可。


如何续期使用 AWTK Designer

因 AWTK Designer 许可证有使用期限，如果许可证到期了，将无法继续使用 AWTK Designer。如需继续使用 AWTK Designer，可按下面步骤，完成许可证续期：

1、登录 AWTK 云平台： https://awtk.zlg.cn 。
2、完善个人信息。

在 AWTK 云平台的 “个人信息” 页面绑定好邮箱，并完整填写真实有效的公司信息，通过管理员审核后将有机会定期获赠 Designer 续期卡券，获得卡券后可以对 Designer 进行许可证续期。

3、点击 “许可管理” 页面中的 “续期” 按钮，完成续期。

欲了解更多信息，请参阅：AWTK Designer 安装目录、Docs 文件夹下的文档：

  • 《AWTK Designer 快速安装指南。pdf》
  • 《AWTK Designer 快速使用指南。pdf》
  • 《AWTK Designer 用户手册。pdf》


如何设置字体的全局缩放比例

有时需要支持 Accessibility，要求对字体进行全局缩放，以便实现”大字体”和”小字体”的选项。在 AWTK 中，可以调用函数 system_info_set_font_scale 来实现。

system_info_set_font_scale(system_info(), font_scale);

font_scale 的取值：

  • 1 表示正常大小。
  • 大于 1 表示放大。
  • 小于 1 表示缩小。


如何让文本滚动起来

在很多时候，特别是在小屏幕的硬件上，控件比较小而要显示的文本比较长。

此时，我们需要在控件获得焦点时/或点击时，让文本滚动起来，以便让用户看到完整的信息。

AWTK 提供了 hscroll_label_t 控件，可以轻松满足文本滚动的需求。

一、基本用法

示例：

<window anim_hint="htranslate" text="hscroll_label" children_layout="default(c=1,h=30,xm=10,s=5)">
  <hscroll_label text="炫酷的 GUI 引擎。" />
  <hscroll_label text="炫酷的 GUI 引擎。" style="right"/>

  <hscroll_label
    lull="1000"
    loop="true"
    yoyo="true"
    ellipses="true"
    focusable="true"
    text="(always ellipses loop yoyo) 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />

  <hscroll_label
    focusable="true"
    only_focus="true"
    text="(only_focus noloop) 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />

  <hscroll_label
    loop="true"
    ellipses="true"
    focusable="true"
    only_focus="true"
    text="(only_focus ellipses loop) 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />

  <hscroll_label
    style="green"
    loop="true"
    yoyo="true"
    ellipses="true"
    focusable="true"
    only_focus="true"
    text="(only_focus ellipses loop yoyo) 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />

</window>

二、扩展用法

但有时用的不是单纯的文本控件，而是列表项、多选按钮、单选按钮或其它功能的控件，那该怎么办呢？

其实也很简单，把 hscroll_label 作为该控件的子控件，并指定 only_parent_focus 属性为 true 即可。

示例：

<window anim_hint="htranslate" move_focus_prev_key="up" move_focus_next_key="down" text="Basic Controls">
  <row x="0" y="180" w="-50" h="90" children_layout="default(r=1,c=2,m=2)">
    <column children_layout="default(r=3,c=1,ym=2,s=10)" >
      <check_button name="r1" focusable="true" >
        <hscroll_label style="green" only_parent_focus="true" x="right" y="middle" w="-30" h="100%"
          text="1.AWTK 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />
      </check_button>

      <check_button name="r2" focusable="true">
        <hscroll_label style="green" only_parent_focus="true" x="right" y="middle" w="-30" h="100%"
          text="2.AWTK 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />
      </check_button>

      <check_button name="r3" value="true" focusable="true">
        <hscroll_label style="green" only_parent_focus="true" x="right" y="middle" w="-30" h="100%"
          text="3.AWTK 为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。" />
      </check_button>
    </column>
  </row>
</window>


如何设置自定义键值

在实际的开发中，产品通常会有自身特有的按钮，而这些按钮的键值也不尽相同，为了用户更方便使用，故增加了设置自定义键值的功能。

一、设置方法

  1. 在应用中的 main.c 定义开启自定义键值配置功能的宏 ENABLE_CUSTOM_KEYS：
#include "awtk.h"
#include "mvvm_app.inc"

#define GLOBAL_INIT() mvvm_app_init()
#define GLOBAL_EXIT() mvvm_app_deinit()

BEGIN_C_DECLS
#ifdef AWTK_WEB
#include "assets.inc"
#else /*AWTK_WEB*/
#include "../res/assets.inc"
#endif /*AWTK_WEB*/
END_C_DECLS

extern ret_t application_init(void);

extern ret_t application_exit(void);

#define APP_LCD_ORIENTATION LCD_ORIENTATION_0

#define ENABLE_CUSTOM_KEYS TRUE /* 启动自定义键值配置功能 */

#include "awtk_main.inc"
  2. 在应用项目文件夹下的 design\default\data 文件夹（没有data文件夹请自行创建）增加自定义键值配置文件 custom_keys.json。也可以在项目中的 main.c 定义 CUSTOM_KEYS_FILEPATH 宏指定配置文件的路径和名称，示例如下：
#include "awtk.h"
#include "mvvm_app.inc"

#define GLOBAL_INIT() mvvm_app_init()
#define GLOBAL_EXIT() mvvm_app_deinit()

BEGIN_C_DECLS
#ifdef AWTK_WEB
#include "assets.inc"
#else /*AWTK_WEB*/
#include "../res/assets.inc"
#endif /*AWTK_WEB*/
END_C_DECLS

extern ret_t application_init(void);

extern ret_t application_exit(void);

#define APP_LCD_ORIENTATION LCD_ORIENTATION_0

#define ENABLE_CUSTOM_KEYS TRUE                           /* 启动自定义键值配置功能 */
#define CUSTOM_KEYS_FILEPATH "file://D:/custom_keys.json" /* 自定义键值配置文件路径 */

#include "awtk_main.inc"
  3. 编辑自定义键值配置文件，如以下示例：
{
  "ENABLE" : {
      "value" : 248
  },
  "START" : {
      "value" : 31
  },
  "STOP" : {
      "value" : 8
  }
}

第一个键值对的键名为 ENABLE，键值为248，后面的键值对同理，不再赘述。

  4. 打包资源。

执行以上步骤后，自定义键值就设置完成了。

二、简单使用示例

在 MVVM 工程中，实现点击 CLOSE 按钮关闭 home_page 窗口。

  1. 使用 AWTK Designer 新建 MVVM 工程。
  2. 根据上文步骤编写自定义键值配置文件：
{
  "CLOSE" : {
      "value" : 4
  }
}
  3. 绑定命令，实现点击 CLOSE 按钮关闭 home_page 窗口。
<window v-model="home_page_view_model" name="home_page" v-on:key_down:CLOSE="{nothing, CloseWindow=true}"/>>
  4. 打包资源，编译运行。

关于 MVVM 命令参数的更多资料请参阅 AWTK-MVVM 命令绑定 。

三、其它

  • awtk-linux-fb，请在 awtk_config.py 中定义下面的宏。
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DENABLE_CUSTOM_KEYS=1 ' # 启动自定义键值配置功能
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DCUSTOM_KEYS_FILEPATH=\"file://D:/custom_keys.json\" ' # 与项目中 main.c 定义的一致，若 main.c 没定义，这里也不要定义。


如何自定义资源加载方式？

1 介绍

如果 AWTK 默认的资源加载方式无法满足需求，例如在无文件系统的嵌入式平台上使用外扩 flash 用来存储资源，可以自定义资源的加载方式，只需调用 assets_manager_set_custom_load_asset() 并注册资源加载回调函数即可，AWTK 加载资源时会优先调用用户自定义的加载方式，接口声明如下：

typedef asset_info_t* (*assets_manager_load_asset_t)(assets_manager_t* am,
                                                     asset_type_t type,
                                                     uint16_t subtype,
                                                     const char* name);

/**
 * @method assets_manager_set_custom_load_asset
 * 设置一个函数，该函数用于实现自定义加载资源。
 *
 * > 如果不支持文件系统，开发者可以设置一个加载资源的回调函数，从flash或其它地方读取资源。
 *
 * @param {assets_manager_t*} am asset manager对象。
 * @param {assets_manager_load_asset_t} custom_load_asset 回调函数。
 * @param {void*} ctx 回调函数的上下文。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t assets_manager_set_custom_load_asset(assets_manager_t* am,
                                           assets_manager_load_asset_t custom_load_asset,
                                           void* ctx);

2 示例

此处以 STM32F429 平台为例，上面外扩了一块 32MB 的 SPI Flash，在本例子中会使用平台封装好的 W25QXX 库函数对这块 Flash 进行读写。

2.1 打包资源

在使用 AWTK Designer 进行界面设计时，修改”项目设置”里”资源打包方式”为”文件+常量”，打包完成后可以在res/assets/default/inc 中看到打包完成的常量文件，文件一般为 .res 或者 .data 后缀，.res 后缀的文件一般为未解码的图片或者字体资源。

2.2 写入资源

在运行 AWTK 程序之前，需要先将数据写入外扩 Flash，示例代码如下：

/*
 * 此处以 home_page 界面的 UI 文件为例，将数据写入Flash。
 * 写入协议：前256个字节为名称，中间4个字节为资源大小，最后为资源数组。
*/

#include "res/assets/default/inc/ui/home_page.data"

char *ui_name = "home_page";
u32 ui_size = sizeof(ui_home_page) /* 此处的ui_home_page为home_page.data文件中的资源数组*/

W25QXX_Write((u8*)ui_name,0,sizeof(ui_name));      /* 写入资源名称作为资源的唯一标识符 */
W25QXX_Write((u8*)(&ui_size),0 + 256,sizeof(u32)); /* 写入资源大小用来计算下一资源的偏移量*/
W25QXX_Write((u8*)ui_home_page,0 + 260,ui_size);   /* 写入资源数组 */

2.3 注册自定义资源加载函数

接下来实现自定义资源加载函数，该函数需要在用户的 AWTK 应用程序中实现，示例代码如下：

#define NAME_MAX_LEN 256
#define U32_SIZE 4
/* 自定义资源加载函数 */
asset_info_t* load_assets_from_flash(assets_manager_t* am, asset_type_t type,
                                     uint16_t subtype, const char* name) {
  u32 assets_size;
  u32 start_position;
  u8 assets_size_char[U32_SIZE];
  u8 assets_name[NAME_MAX_LEN];
  asset_info_t* info = NULL;

  start_position = 0;
  /* 该Flash中未写入数据的地方读取后的值为0xFF，以此判断是否已经读取完毕 */
  while (*assets_name != 0xFF) {
     /* 读取资源名称 */
    W25QXX_Read(assets_name, start_position, NAME_MAX_LEN);
    /* 读取资源大小 */
    W25QXX_Read(assets_size_char, start_position + NAME_MAX_LEN, U32_SIZE);
    /* 将资源大小从数组转换为uint32类型 */
    assets_size = assets_size_char[3] << 24 | assets_size_char[2] << 16 |
                  assets_size_char[1] << 8 | assets_size_char[0];
    if (tk_str_eq(assets_name, name)) {
      info = (asset_info_t*)malloc(assets_size);
      memset(info, 0, assets_size);
      /* 读取资源数组，该数组的类型就为asset_info_t类型 */
      W25QXX_Read((u8*)info, start_position + NAME_MAX_LEN + U32_SIZE, assets_size);
      return info;
    } else {
      start_position = start_position + NAME_MAX_LEN + U32_SIZE + assets_size;
    }
  }

  return info;
}


如何设置下拉选择框 (combo box) 弹出窗口/列表项的样式？

点击下拉选择框的按钮弹出下拉选择框，它是一个独立的 popup 窗口，所以设置样式与普通控件有所不同，之前很多朋友遇到过麻烦。本文详细介绍一下其样式的设置方法。

1. 样式

  • 弹出窗口本身的样式。style 的名称为”combobox_popup”，如：
<popup>
  <style name="combobox_popup">
    <normal bg_color="#808080"/>
  </style>
</popup>
  • 列表项的样式。style 的名称为”default”，如：
<combo_box_item>
  <style name="default" icon_at="left" text_color="black" bg_color="#f0f0f0">
    <normal  icon="empty" text_color="green"/>
    <focused icon="empty" bg_color="#1296db" text_color="gold" />
    <pressed icon="empty" bg_color="#1296db" text_color="white" />
    <over    icon="empty" bg_color="#1296db" text_color="white" />
    <normal_of_checked  icon="check"/>
    <focused_of_checked  icon="check" bg_color="#1296db" text_color="gold"/>
    <pressed_of_checked icon="check" bg_color="#1296db" text_color="white" />
    <over_of_checked    icon="check" bg_color="#1296db" text_color="white" />
  </style>
</combo_box_item>
  • 扩展下拉选择框中的列表视图和滚动条，使用默认的样式。

2. 样式文件的查找顺序

2.1 普通下拉选择框

  1. styles/combobox_popup

  2. styles/default

2.2 扩展下拉选择框

  1. styles/combobox_ex_popup

  2. styles/default

3. 高级用法

在上面的用法中，所有的下拉选择框，使用相同的样式。在特殊情况下，可能需要为不同的下拉选择框指定不同的样式。此时可以使用下拉选择框的 theme_of_popup 属性，为其指定特别样式文件。如：

<combo_box_ex x="10" y="100" w="200" h="30" options="1;2;3;4;5;6;7;8;9;0;11;22;33;44;55" theme_of_popup="number"/>

也可以调用 API 去设置。如：

combo_box_set_theme_of_popup(combo_box, "number")

在上面的例子中，就会到 styles/number 这个文件中去读取样式数据。

也可以使用当前窗口的样式，将 theme_of_popup 设置为当前窗口的样式（或者名称）。


如何显示上下文菜单（俗称右键菜单）

如果需要实现鼠标右键弹出菜单，可以使用 popup 窗口设计菜单 UI 界面，并且通过 AWTK 提供 EVT_CONTEXT_MENU 事件实现该功能，具体步骤如下：

（1）使用 popup 窗口完成界面设计，作为弹出的菜单。在 popup 窗口的UI文件中，设置 self_layout 属性为”menu”类型，然后设置 close_when_click_outside 属性为”true”，表示点击到菜单外时关闭菜单，代码如下：

<!-- awtk/design/default/ui/menu_point.xml -->
<popup style="dark" self_layout="menu(w=128,h=90)" close_when_click_outside="true">
  ...
</popup>

（2）完成菜单的界面设计后，在源代码中注册对应控件的 EVT_CONTEXT_MENU 事件，例如此处为”open:menu_point”按钮注册该事件，在事件的回调函数中打开步骤（1）中设计好的菜单 UI 文件，代码如下：

/* awtk/demos/demo_ui_app.c */
static ret_t on_context_menu(void* ctx, event_t* e) {
  open_window("menu_point", NULL);

  return RET_OK;
}

static ret_t install_one(void* ctx, const void* iter) {
  widget_t* widget = WIDGET(iter);
  widget_t* win = widget_get_window(widget);

  if (widget->name != NULL) {
    const char* name = widget->name;
    if (strstr(name, "open:") != NULL) {
      widget_on(widget, EVT_CLICK, on_open_window, (void*)(name + 5));
      widget_on(widget, EVT_LONG_PRESS, on_open_window, (void*)(name + 5));
      if (tk_str_eq(name, "open:menu_point")) {
        widget_on(widget, EVT_CONTEXT_MENU, on_context_menu, win);
      }
...
  return RET_OK;
}

（3）运行 awtk/bin/demoui，打开”ContextMenu”页面，鼠标右键点击”Point”按钮，效果如下图所示。


如何支持极简键盘 (3 键键盘、5 键键盘和旋转按钮）

背景

在有的硬件上，没有触摸/鼠标等指针设备，只有极简的键盘，典型情况如下

  • 3 键键盘（回车键+上下键），旋转按钮也可以归为此类，左右旋转映射成上下键。有些变种带有数字键和功能键也归于此类。

  • 5 键键盘（回车键+上下左右键）。有些变种带有数字键和功能键也归于此类。

对于上面的情况，方向键既要用于导航（切换焦点），又要用于控件输入数据，所以需要引入一种状态（或称为模式）：

  • 在移动焦点的状态：方向键用于切换焦点。

  • 在非移动焦点的状态：方向键用于修改控件的值。

回车的作用：

  • 在按钮等支持用回车键激活的控件上，用于激活按钮，相当于点击事件。

  • 在编辑器等控件上，用于切换状态，用于改变方向键的作用。

旋转按钮处理方法：左旋触发方向左键，右旋触发方向右键，按下触发回车键。

用法

AWTK 对此做了内置的支持，在初始化时指定键盘的类型，代码如下：

ret_t application_init() {
  system_info_set_keyboard_type(system_info(), KEYBOARD_5KEYS);

  return RET_OK;
}

键盘类型的定义：

/**
 * @enum keyboard_type_t
 * 键盘的类型
 */
typedef enum _keyboard_type_t {
  /**
   * @const KEYBOARD_NONE
   * 无键盘。
   */
  KEYBOARD_NONE = 0,
  /**
   * @const KEYBOARD_NORMAL
   * 正常键盘。
   */
  KEYBOARD_NORMAL,
  /**
   * @const KEYBOARD_3KEYS
   * 3 键 (RETURN+上下键，附加数字键等）。
   * > RETURN 键用于切换模式：焦点模式下，上下键用于切换焦点，非焦点模式下，上下键用于切修改控件的值。
   */
  KEYBOARD_3KEYS,
  /**
   * @const KEYBOARD_5KEYS
   * 5 键 (RETURN+上下左右键，附加数字键等）。
   * > RETURN 键用于切换模式：焦点模式下，上下键用于切换焦点，非焦点模式下，上下键用于切修改控件的值。
   */
  KEYBOARD_5KEYS
} keyboard_type_t;

此外，对想要使用按键切换焦点的控件，需要将控件的 focusable 属性设置为 true，支持焦点停留：

<button name="button" text="button" focusable="true"/>

备注：edit及其组合控件（比如：combo_box、combo_box_ex等）默认支持焦点停留，无需设置 focusable 属性。

如果希望软键盘也支持按键切换焦点，步骤如下：

步骤一：设置软键盘的 grab_keys 属性为 true，代码如下：

<keyboard theme="keyboard" x="0" y="bottom" w="100%" h="40%" grab_keys="true" name="kb_default">
  ...
</keyboard>

步骤二：将软键盘上按钮的 focusable 属性设置为 true，支持焦点停留，代码如下：

<keyboard theme="keyboard" x="0" y="bottom" w="100%" h="40%" grab_keys="true" name="kb_default">
  ...
      <view x="0" w="100%" h="25%" children_layout="default(r=1,c=10)">
        <button repeat="300" name="q" focusable="true" text="q"/>
        <button repeat="300" name="w" focusable="true" text="w"/>
        ...
      </view>
      ...
</keyboard>

示例

  • 5keys

其他

如果希望在激活时，控件呈现不同的外观效果，请定义宏 WITH_STATE_ACTIVATED。同时在 style 文件中编写 activated状态的参数。如：

<slider>
  <style>
    <normal bg_color="#a0a0a0" fg_color="blue" border_color="#ffd700"/>
    <pressed bg_color="#a0a0a0" fg_color="blue" border_color="#ffa700"/>
    <over bg_color="#a0a0a0" fg_color="blue" border_color="#ffe700"/>
    <focused bg_color="#a0a0a0" fg_color="blue" border_color="#ffff00"/>
    <activated bg_color="#a0a0a0" fg_color="blue" border_color="#ff0000"/>
  </style>
</slider>

请参考：https://github.com/zlgopen/awtk-c-demos/blob/master/design/default/styles/5keys.xml


支持单色 LCD

lcd_mono 实现

src/lcd/lcd_mono.c 提供单色 LCD 的 framebuffer（每个像素占用一个比特），实现了 LCD 的基本绘制函数，在使用时调用者需要提供 flush 函数，负责把脏矩形内的像素提交到 LCD 硬件。

模拟器

在 awtk_config.py 中可以打开单色 LCD 的配置。

LCD='SDL_FB_MONO'

单色字体生成

字体生成工具 fontgen 支持生成单色字体，加上可选参数 mono 即可。

fontgen.exe ttf_filename str_filename out_filename font_size [mono]

单色图片生成

图片生成工具 imagegen 支持生成单色图片，加上可选参数 mono 即可。

imagegen.exe in_filename out_filename (bgra|bgr565|mono)

由于单色图片只有两种颜色，所以在设计图片上只能使用白色 (#ffffff) 和黑色 (#000000)，否则转换出来的效果不是期望的。

窗体样式配置

窗体样式中只能使用白色 (#ffffff) 和黑色 (#000000) 两种颜色。

资源生成

生成资源时需要加上 mono 参数，该参数会被传递给 fontgen 和 imagegen。

python scripts/update_res.py all x1 mono

应用程序

应用程序 UI 设计请考虑单色 LCD 的特殊性。

demoui 没有考虑单色 LCD，在单色 LCD 上运行效果不佳。

预览 mono test 查看运行效果

./bin/preview_ui design/default/ui/mono_test.xml

其它

  • 嵌入式系统，请在 awtk_config.h 中定义下面的宏。
#define WITH_LCD_MONO 1
  • awtk-linux-fb，请在 awtk_config.py 中定义下面的宏。
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_LCD_MONO=1 '

参考：

  • 免费像素字体

  • Unifont 点阵黑：一款超大字符集免费商用像素字体


AWTK 内存分配器支持多块不连续的内存。

在嵌入式系统中，可能有多块不连续的内存。AWTK 最新版本支持管理多个不连续的内存块。使用方法如下：

  • 定义内存块数目

在 awtk_config.h 中定义：

#define TK_MAX_MEM_BLOCK_NR 3
  • 初始化内存

需要使用 tk_mem_init_ex 代替 tk_mem_init 初始化内存。一般将大块放到前面，小块放到后面。也可以将速度快的内存放到前面，将速度慢的放到后面。

/**
 * @method tk_mem_init_ex
 * @export none
 * 初始化内存，支持多块不连续的内存。
 * >最后一个参数必须为NULL。
 *
 * 示例：
 *```c
 * tk_mem_init_ex(mem1, sizeof(mem1), mem2, sizeof(mem2), mem3, sizeof(mem3), NULL);
 *```
 *
 * @param {void*} buffer 内存地址。
 * @param {uint32_t} size 内存长度。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t tk_mem_init_ex(void* buffer, uint32_t size, ...);

示例：

 tk_mem_init_ex(mem1, sizeof(mem1), mem2, sizeof(mem2), mem3, sizeof(mem3), NULL);


如何更新拼音输入法字典和联想字库

有的情况下，可能需要自己更新拼音输入法字典和联想词库。比如：

  • 使用更好的字典数据。
  • 去掉一些不需要的汉字。
  • 使用更完善的联想字库。

1.更新拼音输入法字典

1.1 根据自己的需要编辑下列文件：

  • 3rd/gpinyin/data/rawdict_utf16_65105_freq.txt

  • 3rd/gpinyin/data/valid_utf16.txt

1.2 重新生成数据

./bin/gpinyingen

1.3 拷贝3rd/gpinyin/data/gpinyin.dat到资源目录的data目录。

cp 3rd/gpinyin/data/gpinyin.dat design/default/data/gpinyin.dat

2.更新联想词库

联想词库是抓取网页，通过分词工具自动生成的。请参考：tools/word_gen/README.md


如何引用第三方库

本文基于 AWTK 模板工程介绍如何在 SCons 编译脚本中引用第三方库。

注：这里所说的 AWTK 模板工程指 AWTK Designer 创建的常规工程，工程目录下有一个 SConstruct 文件，它是 SCons 编译脚本，遵顼 Python 语法，下文中的操作基本都通过编辑该文件实现。

1 引用第三方库的源码文件

如果第三方库提供的是源码文件，那么通常我们需要做以下两件事：

  1. 将第三方库源码的头文件路径添加到工程中，方便编译时能找到库中的函数声明。
  2. 把源码文件加入工程编译，方便链接时能找到库中的函数定义。

假设此处有一个名为 xxx 的第三方库，它提供了 xxx.h 和 xxx.c 两个文件，按照约定的规则，我们将它放在 AWTK 工程的 3rd/xxx 目录中，结构如下：

3rd
  xxx
    xxx.h
    xxx.c
...
SConstruct

1.1 添加头文件路径

在工程的 SConstruct 脚本文件中调用 helper.add_cpppath 函数添加库的头文件路径，传入参数为数组，此处的路径为：工程目录/3rd/xxx，如果有其他路径也可以在数组中添加新的元素，代码如下：

# SConstruct
import os
import scripts.app_helper as app

...

# 构建 xxx 库的头文件路径：工程目录/3rd/xxx
XXX_PATH = [os.path.join(helper.APP_ROOT, '3rd', 'xxx')]
# 添加头文件路径，并链式调用 call 函数同步数据
helper.add_cpppath(XXX_PATH).call(DefaultEnvironment)

SConscriptFiles = ['src/SConscript', 'tests/SConscript']
helper.SConscript(SConscriptFiles)

注：在调用 helper.add_cpppath 函数后，需要调用 call 函数同步这些数据，call 函数支持链式调用，需要放到最后，且只需调用一次，更多 helper 对象中的相关函数请参考：利用 app_helper 编写 SConstruct。

1.2 把源码文件加入工程编译

在工程的 src/SConscript 脚本文件中，将 3rd/xxx 目录下的源码文件添加到 sources 数组中即可把它们编译到可执行程序中，代码如下：

# src/SConstruct
import os
import sys
import platform

...

# 添加 src 目录下的所有 .c 文件，符号 * 为通配符
sources = Glob('**/*.c') + Glob('*.c')
# 添加 3rd/xxx 目录下的所有 .c 文件
sources += Glob('../3rd/xxx/*.c')

# 将 sources 中的所有文件编译为 bin/demo 程序
env.Program(os.path.join(BIN_DIR, 'demo'), sources, LIBS = env['LIBS'])

1.3 扩展用法（添加预处理参数、链接参数）

在工程的 SConstruct 脚本文件中调用 helper 对象中的以下函数可以添加预处理参数、链接参数：

  • add_ccflags：增加 C 预处理参数。
  • add_cxxflags：增加 C++ 预处理参数。
  • add_linkflags：增加链接参数。

例如此处添加 C 预处理参数（定义宏NDEBUG=1），SConstruct 脚本代码如下，其他两个函数用法也是类似的：

# SConstruct
...
XXX_PATH = [os.path.join(helper.APP_ROOT, '3rd', 'xxx')]
helper.add_cpppath(XXX_PATH).add_ccflags(' -DNDEBUG=1 ').call(DefaultEnvironment)
...

2 引用第三方库编译好的库文件

引用第三方库时，更常见的应该是直接引用编译好的库文件（动态库或静态库），此时在工程的 SConstruct 中描述依赖关系即可。具体方式为：先定义依赖描述，再调用 set_deps 将依赖描述设置到 helper 对象中。

2.1 常规用法

需要注意的是，使用本节方法引用第三方库时，默认按照 AWTK 约定的规则存放第三方库的代码文件和库文件，规则如下：

  • 第三方库的代码文件需要放在库路径 src 目录中。
  • 第三方库的动态库文件需要放在库路径的 bin 目录中。
  • 第三方库的静态库文件需要放在库路径的 lib 目录中。

注：如果想自定义上述文件的路径，则需额外指定 cpppath 和 libpath 参数，详见下文。

假设此处有一个名为 xxx 的第三方库，它提供了头文件 xxx.h 和相关的库文件，按照约定的规则，我们将它放在 AWTK 工程的 3rd/xxx 目录中，结构如下：

3rd
  xxx
    bin
      xxx.dll  # 动态库文件
      xxx.lib  # 动态库的导出列表
    lib
      xxx.lib  # 静态库文件
    src
      xxx.h
...
SConstruct

在工程的 SConstruct 脚本文件中，引用动态库的方式如下：

# SConstruct
...
DEPENDS_LIBS = [
  {
    "root" : '3rd/xxx',     # 第三方库路径，支持绝对路径和相对路径。
    'shared_libs': ['xxx'], # 引用的动态库名称，动态库文件必须放在 root/bin 目录下。
    'static_libs': []       # 引用的静态库名称，静态库文件必须放在 root/lib 目录下。
  }
]

# 设置依赖库，默认会添加以下路径：
# 1.头文件路径（root/src）
# 2.库文件路径（root/bin、root/lib）
helper.set_deps(DEPENDS_LIBS)
...
helper.call(DefaultEnvironment)

注：helper.set_deps 一定要在 helper.call 之前调用，call 函数支持链式调用，需要放到最后，且只需调用一次。

2.2 依赖描述参数

DEPENDS_LIBS 是一个数组，可以添加多个第三方依赖库，每个元素是一个依赖描述对象，可以指定以下参数：

  • root 第三方库的根目录。建议使用相对于应用程序的相对路径。如：
"root" : '../awtk-mvvm',
  • shared_libs 第三方库提供的动态库列表（数组），不带扩展名和 lib 前缀。如：
"shared_libs" : ["a","b","c"]
  • static_libs 第三方库提供的静态库库列表（数组），不带扩展名和 lib 前缀。如：
"static_libs" : ["a","b","c"]
  • libpath 库所在的路径，相对于前面指定的 root 路径。缺省为：[“lib”, “bin”]。如：
"libpath" : ["lib", "bin"]
  • cpppath 头文件所在的路径，相对于前面指定的 root 路径。缺省为：[“src”]。如：
"cpppath" : ["includes", "src"]
  • cflags C 语言的预处理参数（可选）。如：
"cflags" : " -DNDEBUG=1 "

  • cxxflags C++语言的预处理参数（可选）。

  • ccflags C/C++语言的预处理参数（可选）。

2.3 完整示例

  • awtk-mvvm-c-hello


如何使用软键盘上的 action 按钮

android/iphone 等手机的软键盘上有一个特殊的键，这个键的功能和文字与当前的编辑密切相关，在不同的编辑器上，可能显示“发送”、“下一个”、“回车”，“关闭”，“清除”等。

1. 软键盘

AWTK 也支持类似的功能，我们把它称为 action 键，在软键盘中可以这样定义：

<button name="action" style="highlight" w="20%" text="Return"/>

完整代码请参考 kb_default.xml

2. 编辑器

编辑器可以指定 action_text 属性，来修改软键盘上的 action 键上的文本：

<edit w="70%" right_margin="30" input_type="password" action_text="next">

action_text 可以通过 strings.xml 中文本进行翻译，所以用小写英文字母即可。action_text 有几个特殊的取值：

  • next 将焦点切换到下一个控件。
  • done 完成，关闭软键盘。
<string name="return">
 <language name="en_US">Return</language>
 <language name="zh_CN">回车</language>
</string>

<string name="next">
 <language name="en_US">Next</language>
 <language name="zh_CN">下一个</language>
</string>

<string name="done">
 <language name="en_US">Done</language>
 <language name="zh_CN">完成</language>
</string>

软键盘中 action 按钮优先显示 edit 中设置的 action_text，如果 edit 没有该属性，则显示 action 按钮的 text。

3. 事件处理

如果你想自己处理 action 按键按下的事件，可以注册编辑器的 EVT_IM_ACTION 事件。

如：

static ret_t on_action_event(void* ctx, event_t* evt) {
  widget_t* target = WIDGET(evt->target);

  log_debug("%s action event\n", target->name);

  return RET_OK;
}

widget_on(edit1, EVT_IM_ACTION, on_action_event, NULL);

完整代码请参考：https://github.com/zlgopen/awtk-c-demos/blob/master/demos/edit.c


如何存取应用程序的配置信息

1. 介绍

AWTK 提供了 app_conf 接口，用于保存或读取应用程序的配置信息。其特点有：

  • 线程安全，可以多线程访问。
  • 观察者模式，配置变化时通知关注者。
  • 统一接口，不用关注存储格式和存储介质。
  • 接口支持多种数据类型，开发者无需在字符串和其它类型之间转换。

配置信息可以保存为任意格式，目前支持下列文件格式（其它格式开发者可以自行增加）:

  • INI

  • JSON

  • UBJSON

配置信息可以存放在任何介质上，目前支持以下介质：

  • 文件系统。

  • Flash(TODO)

2. 初始化（任意选一种格式即可）

app_conf 作为可选组件，需要开发者自己初始化。

初始化函数一般在 application_init 函数中调用。所有读写等函数，必须在成功初始化之后才能调用。

配置文件通常保存在用户目录下，比如应用程序的名称为demo，存储格式为json，那么在不同的平台下，存放的位置为：

  • linux
～/demo/app_conf.json
  • macos
～/demo/app_conf.json
  • windows
～/AppData/Local/demo/app_conf.json
  • 嵌入式
/appdata/demo/app_conf.json

应用程序在启动时，会打印配置文件的位置，以实际位置为准。

  • 2.1 使用 ini 格式时的初始方法

包含头文件：

#include "conf_io/app_conf_init_ini.h"

调用初始化函数

/**
 * @method app_conf_init_ini
 *
 * 初始化应用程序的配置信息。
 *
 * @param {const char*} app_name 应用程序名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_init_ini(const char* app_name)

示例：

  ENSURE(app_conf_init_ini("demo") == RET_OK);
  • 2.2 使用 json 格式时的初始方法

包含头文件：

#include "conf_io/app_conf_init_json.h"

调用初始化函数

/**
 * @method app_conf_init_json
 *
 * 初始化应用程序的配置信息。
 *
 * @param {const char*} app_name 应用程序名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_init_json(const char* app_name)

示例：

  ENSURE(app_conf_init_json("demo") == RET_OK);
  • 2.3 使用 ubjson 格式时的初始方法

包含头文件：

#include "conf_io/app_conf_init_ubjson.h"

调用初始化函数

/**
 * @method app_conf_init_ubjson
 *
 * 初始化应用程序的配置信息。
 *
 * @param {const char*} app_name 应用程序名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_init_ubjson(const char* app_name)

示例：

  ENSURE(app_conf_init_ubjson("demo") == RET_OK);

3. 存取配置信息

3.1 包含头文件：

app_conf 作为可选组件，需要开发者自己包含头文件。

#include "conf_io/app_conf.h"

3.2 修改配置信息

/**
 * @method app_conf_set_int
 * 设置整数类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {int32_t} v 配置项的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_set_int(const char* key, int32_t v);

/**
 * @method app_conf_set_int64
 * 设置 64 位整数类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {int64_t} v 配置项的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_set_int64(const char* key, int64_t v);

/**
 * @method app_conf_set_bool
 * 设置 bool 类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {bool_t} v 配置项的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_set_bool(const char* key, bool_t v);

/**
 * @method app_conf_set_double
 * 设置双精度类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {double} v 配置项的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_set_double(const char* key, double v);

/**
 * @method app_conf_set_str
 * 设置字符串类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {const char*} v 配置项的值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_set_str(const char* key, const char* v);

示例：

  app_conf_set_bool("wifi.on", TRUE);
  app_conf_set_str("wifi.name", "awtk");
  app_conf_set_int("server.port", 8080);
  app_conf_set_double("server.timeout", 1.0);

使用 ini 格式时，实际存为：

[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

使用 json 格式时，实际存为：

{
    "wifi" : {
        "on" : true,
        "name" : "awtk"
    },
    "server" : {
        "port" : 8080,
        "timeout" : 1
    }
}

使用 ubjson 格式时，实际存为二进制格式，这里不再举例。

3.3 读取配置信息

/**
 * @method app_conf_get_int
 * 获取整数类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {int32_t} defval 缺省值。
 *
 * @return {int32_t} 返回配置项的值（如果不存在返回缺省值）。
 */
int32_t app_conf_get_int(const char* key, int32_t defval);

/**
 * @method app_conf_get_int64
 * 获取 64 位整数类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {int64_t} defval 缺省值。
 *
 * @return {int64_t} 返回配置项的值（如果不存在返回缺省值）。
 */
int64_t app_conf_get_int64(const char* key, int64_t defval);

/**
 * @method app_conf_get_bool
 * 获取 bool 类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {bool_t} defval 缺省值。
 *
 * @return {bool_t} 返回配置项的值（如果不存在返回缺省值）。
 */
bool_t app_conf_get_bool(const char* key, bool_t defval);

/**
 * @method app_conf_get_double
 * 获取单精度浮点数类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {double} defval 缺省值。
 *
 * @return {double} 返回配置项的值（如果不存在返回缺省值）。
 */
double app_conf_get_double(const char* key, double defval);

/**
 * @method app_conf_get_str
 * 获取字符串类型配置项的值。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 * @param {const char*} defval 缺省值。
 *
 * @return {const char*} 返回配置项的值（如果不存在返回缺省值）。
 */
const char* app_conf_get_str(const char* key, const char* defval);

示例：

  on = app_conf_get_bool("wifi.on", FALSE);
  port = app_conf_get_int("server.port", 0);
  timeout = app_conf_get_double("server.timeout", 0);
  name = app_conf_get_str("wifi.name", NULL);

3.4 删除配置信息

/**
 * @method app_conf_remove
 * 删除配置项。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_remove(const char* key);

示例：

  app_conf_set_str("wifi.password", "123123");
  assert(app_conf_exist("wifi.password"));

  app_conf_remove("wifi.password");
  assert(!app_conf_exist("wifi.password"));

3.5 检查配置信息是否存在

/**
 * @method app_conf_exist
 * 检查配置项是否存在。
 *
 * @annotation ["static", "scriptable"]
 *
 * @param {const char*} key 配置项的名称。
 *
 * @return {bool_t} 返回 TRUE 表示存在，FALSE 表示不存在。
 */
bool_t app_conf_exist(const char* key);

示例：

  app_conf_set_str("wifi.password", "123123");
  assert(app_conf_exist("wifi.password"));

  app_conf_remove("wifi.password");
  assert(!app_conf_exist("wifi.password"));

3.6 持久保存配置信息

/**
 * @method app_conf_save
 * 持久保存配置。
 *
 * @annotation ["static", "scriptable"]
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_save(void);

示例：

app_conf_save();

3.7 关注配置信息的变化

/**
 * @method app_conf_on_changed
 * 注册配置变化事件。
 *
 * @annotation ["static", "scriptable"]
 * @param {event_func_t} on_event 事件处理函数。
 * @param {void*} ctx 事件处理函数上下文。
 * @return {uint32_t} 返回 id，用于 app_conf_off_changed。
 */
uint32_t app_conf_on_changed(event_func_t on_event, void* ctx);

/**
 * @method app_conf_off_changed
 * 注销配置变化事件。
 *
 * @annotation ["static", "scriptable"]
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_off_changed(uint32_t id);

/**
 * @method app_conf_off_changed_by_ctx
 * 注销配置变化事件。
 *
 * @annotation ["static"]
 * @param {void*} ctx 事件处理函数上下文。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_off_changed_by_ctx(void* ctx);

示例：

static ret_t app_conf_changed(void* ctx, event_t* e) {
  prop_change_event_t* evt = prop_change_event_cast(e);

  log_debug("%s changed\n", evt->name);

  return RET_OK;
}

...

app_conf_on_changed(app_conf_changed, NULL);

回调函数在修改配置的线程调用。如果是后台线程修改配置，在配置变化时，需要更新界面，此时需要用 idle_queue 进行串行化。

3.8 恢复出厂设置

用默认配置文件替换当前配置文件，并重新加载。

/**
 * @method app_conf_reset
 *
 * 恢复出厂设置。
 *
 * @annotation ["global"]
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t app_conf_reset(void);

6. 释放配置相关资源。

/**
 * @method app_conf_deinit
 * 释放 conf 对象。
 *
 * @annotation ["static", "scriptable"]
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t app_conf_deinit(void);

示例：

ret_t application_exit() {
  app_conf_deinit();
  log_debug("application_exit\n");
  return RET_OK;
}

7. key 的规则

  • 配置信息通常都是层次结构的，为了能访问所有数据，key 也必须是多级的，各级的名称之间用“.”分隔。

“.”不能作为名称的一部分，如果出现，需要用其它字符代替。

{
    "network" : {
        "eth0" : {
            "ip" : "192.169.0.100",
            "gateway" : "192.169.0.1",
            "mask" : "255.255.255.0"
        }
    }
}

在这个例子中，要访问 ip 的这个配置，可以用”network.eth0.ip”:

  app_conf_set_str("network.eth0.ip", "192.169.0.100");
  • 按索引访问

在访问时，每一级的名称，可以用索引代替，格式为：[+索引+]，比如 [0] 表示第一项，[2] 表示第三项。这对于不清楚名称的情况，或遍历全部配置，很有帮助。

如：

  const char* ip0 = app_conf_get_str("network.[0].ip", NULL);
  const char* ip1 = app_conf_get_str("network.[1].ip", NULL);
  const char* ip2 = app_conf_get_str("network.[2].ip", NULL);
  • 用 #size 获取子节点个数

示例：

[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

在上面的例子中，”#size”获取分组的个数为 2，”wifi.#size”获取 wifi 下的子项数为 2。

  assert(app_conf_get_int("#size", 0) == 2);
  assert(app_conf_get_int("wifi.#size", 0) == 2);
  • 用 #name 获取项的名称。

示例：

[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

在上面的例子中，”[0].#name” 获取第一个分组的名称为”wifi”，”wifi.[0].#name” 获取 wifi 下第一项的名称为 “on”。

  assert(strcmp(app_conf_get_str("[0].#name", NULL), "wifi") == 0);
  assert(strcmp(app_conf_get_str("wifi.[0].#name", NULL), "on") == 0);
  • 用 #index 获取配置项在兄弟节点中的序数。
[wifi]
  on = 1
  name = awtk
[server]
  port = 8080
  timeout = 1.000000

在上面的例子中，”wifi.#index” 获取 wifi 的序数为 0，”server.#index” 获取 server 的序数为 1。

  assert(app_conf_get_int("wifi.#index", -1) == 0);
  assert(app_conf_get_int("server.#index", -1) == 1);

8. 缺省配置

  • 位置。缺省配置放到资源中，位于：design/default/data

  • 命名：应用程序名 + ‘.’ + 文件扩展名。

  • 文件扩展名与初始化时指定的格式一致。

比如，下面的例子中，应用程序名 demo，扩展名为 json。所以对应的缺省配置文件为：design/default/demo.json

  ENSURE(app_conf_init_json("demo") == RET_OK);

在初始化时，如果配置文件不存在，则将缺省配置拷贝到配置文件。

9. 注意事项

  • 英文的点(.) 作为 key 的分隔符，所以 key 不能包含英文的点(.)。

  • ini 格式不支持注释和换行。

10. 参考示例

  • conf_ini

  • conf_json

  • conf_ubjson


如何使用离线的 canvas

​ canvas 在 awtk 中是画布的意思，而且用户常常是通过回调函数回去是在线 canvas 来进行绘图，但是在在线 canvas 上面画东西就会显示到屏幕上面。

​ 为了解决用户离线画布的需求，所以 awtk 中提供了 canvas_offline_xxx 系列函数给用户使用。

一，创建离线画布 canvas

​ 下面为创建离线画布 canvas 的函数，在离线画布 canvas 内置了一个离线的 bitmap，提供给用户使用。

/**
 * @method canvas_offline_create
 * 创建一个离线的 canvas
 * 在 opengl 模式下 format 参数只能为 BITMAP_FMT_RGBA8888
 * 在其他模式下，离线 canvas 格式可以为 rgba，bgar，bgr565和rgb565
 *
 * @param {uint32_t} w 离线 canvas 的宽。
 * @param {uint32_t} h 离线 canvas 的高。
 * @param {bitmap_format_t} format 离线 canvas 的格式。
 *
 * @return {canvas_t*} 成功返回 canvas ，失败返回 NULL。
 */
canvas_t* canvas_offline_create(uint32_t w, uint32_t h, bitmap_format_t format);

/**
 * @method canvas_offline_get_bitmap
 * 获取离线 canvas 的离线 bitmap。
 *
 * @param {canvas_t*} canvas 离线 canvas 对象。
 *
 * @return {bitmap_t*} 返回 bitmap_t 对象表示成功，返回 NULL 表示失败。
 */
bitmap_t* canvas_offline_get_bitmap(canvas_t* canvas);

下面代码，创建离线 canvas：

  static canvas_t* canvas_offline = NULL;

  /* 创建离线的 canvas */
  canvas_offline = canvas_offline_create(320, 480, BITMAP_FMT_RGBA8888);

备注：在 opengl 模式下离线 canvas 格式只能为 RGBA8888，而在 AGGE 下可以为 RGBA8888，BGRA8888，RGB565 和 BGR5656。（其他的格式暂时不支持）

二，绘图离线画布 canvas

​ 离线 canvas 的绘图过程和平时使用 canvas 绘图是一样的，只不过在绘制之前需要先调用 canvas_offline_begin_draw 函数，结束的时候调用 canvas_offline_end_draw 函数。

/**
 * @method canvas_offline_clear_canvas
 * 把离线 canvas 清除所有数据，并把背景设置为全透明（注意：该离线 canvas 需要有透明通道）
 * 该函数调用前必须要先 canvas_offline_begin_draw 函数。
 * 该函数用来解决离线 canvas 多次绘图半透效果后导致半透效果无效的问题。
 *
 * @param {canvas_t*} canvas 离线 canvas 对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t canvas_offline_clear_canvas(canvas_t* canvas);

/**
 * @method canvas_offline_bitmap_move_to_new_bitmap
 * 把离线 canvas 的离线 bitmap 移动赋值给新的 bitmap。
 * 移动赋值后原来的离线 canvas 的离线 bitmap 就会被置空。
 * 备注：在移动赋值之前会先调用 canvas_offline_flush_bitmap 把数据回流到内存中。
 *
 * @param {canvas_t*} canvas 离线 canvas 对象。
 *
 * @return {bitmap_t*} 返回 bitmap_t 对象表示成功，返回 NULL 表示失败。
 */
ret_t canvas_offline_bitmap_move_to_new_bitmap(canvas_t* canvas, bitmap_t* bitmap);

/**
 * @method canvas_offline_flush_bitmap
 * 把离线 canvas 的数据放到绑定的 bitmap 中
 * 该函数只有在 opengl 模式才需要调用，是否把显存中的数据回传到内存中。
 *
 * @param {canvas_t*} canvas 离线 canvas 对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t canvas_offline_flush_bitmap(canvas_t* canvas);

下面代码把整个窗口绘制到离线 canvas 上面。

  bitmap_t* offline_bitmap = NULL;

  /* 开始离线 canvas 绘图 */
  canvas_begin_frame(canvas_offline);
  /* 把整个窗口绘制到离线的 canvas 中 */
  widget_paint(window_manager(), canvas_offline);
  /* 结束离线 canvas 绘图 */
  canvas_end_frame(canvas_offline);

  /* 由于需要把 bitmap 保存为 png 文件，所以需要把显存中的数据回传到内存中 */
  canvas_offline_flush_bitmap(canvas_offline);

  /* 获取离线的 canvas 对应的离线 bitmap */
  offline_bitmap = canvas_offline_get_bitmap(canvas_offline);

  /* 把 bitmap 保存到 png 文件 */
  bitmap_save_png(offline_bitmap, "test.png");

备注：

  1. 如果 awtk 在 opengl 模式下，同时需要操作 bitmap 中的位图数据的话，就需要调用 canvas_offline_flush_bitmap 函数把 GPU 中的显存数据回传到内存中。
  2. canvas 的所有函数，离线 canvas 都可以调用，并且绘制数据只会放到离线 canvas 中。
  3. 如果需要使用 vg 的话，可以通过 canvas_get_vgcanvas 函数，获取离线 canvas 的 vg 对象。

三，释放离线画布 canvas

​ 释放离线画布只是释放对应的离线 canvas，而不会释放绑定的 bitmap，bitmap 需要用户自行管理。

/**
 * @method canvas_offline_destroy
 * 释放离线 canvas 和离线 bitmap
 *
 * @param {canvas_t*} canvas 离线 canvas 对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t canvas_offline_destroy(canvas_t* canvas);

四，用户自定义特殊的离线画布 canvas

​ 由于有一些特别平台不能直接使用 awtk 提供的离线 canvas，只能通过平台的一些特殊的接口来实现离线画布 canvas，所以 awtk 的离线 canvas 提供了一个给外部重载离线 canvas 的函数的方法。

​ 通过定义 WITH_CANVAS_OFFLINE_CUSTOM 宏，并且用户自行重写下面的函数，并且返回值必须是 RET_OK 或者非 NULL：

函数名字 | 作用
canvas_offline_custom_create | 用户自定义 canvas_offline_create
canvas_offline_custom_clear_canvas | 用户自定义 canvas_offline_custom_clear_canvas
canvas_offline_custom_begin_draw | 用户自定义 canvas_offline_custom_begin_draw
canvas_offline_custom_end_draw | 用户自定义 canvas_offline_custom_end_draw
canvas_offline_custom_get_bitmap | 用户自定义 canvas_offline_custom_get_bitmap
canvas_offline_custom_bitmap_move_to_new_bitmap | 用户自定义 canvas_offline_custom_bitmap_move_to_new_bitmap
canvas_offline_custom_flush_bitmap | 用户自定义 canvas_offline_custom_flush_bitmap
canvas_offline_custom_destroy | 用户自定义 canvas_offline_custom_destroy

备注：如果用户只需要部分函数的实现的话，可以把其他的函数返回 RET_FAIL 或者 NULL ，即可以让离线画布 canvas 函数执行回 awtk 的原来的代码逻辑。

具体用法请参考 demo_offline_canvas.c


如何使用对话框

对话框有模态和非模态两种，具体用法如下：

一、非模态对话框

非模态对话框的使用方法与普通窗口完全一样，只是对话框的大小和位置可以改变。通常情况下，尽量使用非模态对话框。

示例：

完整代码请参考： awtk-c-demos/demos/normal_dialog.c

static ret_t on_yes(void* ctx, event_t* e) {
  tk_quit();

  return RET_OK;
}

static ret_t on_no(void* ctx, event_t* e) {
  window_close(widget_get_window(WIDGET(e->target)));

  return RET_OK;
}

static ret_t on_open_dialog(void* ctx, event_t* e) {
  widget_t* dlg = dialog_create_simple(NULL, 0, 0, 240, 160);

  ...

  return RET_OK;
}

二、模态对话框

对于模态对话框，需要调用函数 dialog_modal 等待对话框退出，dialog_modal 函数会阻塞直到 dialog_quit 被调用。

在点击某个按钮时，如果要关闭对话框，一定要通过 dialog_quit 函数，不能直接关闭对话框！！！

示例：

完整代码请参考： awtk-c-demos/demos/modal_dialog.c

static ret_t on_yes(void* ctx, event_t* e) {
  dialog_quit(widget_get_window(WIDGET(e->target)), DIALOG_QUIT_YES);

  return RET_OK;
}

static ret_t on_no(void* ctx, event_t* e) {
  dialog_quit(widget_get_window(WIDGET(e->target)), DIALOG_QUIT_NO);

  return RET_OK;
}

static ret_t on_open_dialog(void* ctx, event_t* e) {
  int code = 0;

  ...

  code = dialog_modal(dlg);
  if(code == DIALOG_QUIT_YES) {
    tk_quit();
  }

  return RET_OK;
}

在上面的代码中，下面的代码不会被执行，直到按钮被点击，然后调用 dialog_quit。

if(code == DIALOG_QUIT_YES)

对于模态对话框来说，在确认按钮的事件处理函数中，除了调用 dialog_quit 函数，什么都别做！处理逻辑放到 dialog_modal 之后，根据 dialog_modal 的返回值决定下一步如何做。


如何使用高效的屏幕旋转

在实际的开发中，屏幕的选择会受到成本、供应商以及效果等因素的限制，某些情况下，需要旋转应用来适应屏幕。

AWTK 默认提供了一种基于图像旋转的屏幕旋转功能，该功能的兼容性好，但是效率比较低，而且很吃资源和内存。

现在 AWTK 额外提供一种全新的高效旋转机制来解决上述问题，该机制能保持较高的效率（和没有旋转时的运行效率几乎一样），但兼容性比较差，需要满足以下条件才能使用：

  1. 开启 AWTK 提供的矢量画布 vgcanvas 功能，即定义宏 WITH_NANOVG_AGGE。
  2. LCD 适配层基于 Framebuffer 实现，调用 AWTK 提供的 lcd_mem_t 类型创建 lcd_t 对象。
  3. 如果开启 G2D 硬件加速，则需要自行实现 g2d_rotate_image_ex() 接口和 g2d_blend_image_rotate() 接口。

注：高效旋转机制是基于矢量计算实现的，其原理是在底层绘图之前把相关的数据通过矢量计算进行转换。

1 基本用法

在满足上述条件时，使用高效旋转的步骤如下：

  1. 定义宏 WITH_FAST_LCD_PORTRAIT。
  2. 在 AWTK Designer 的项目设置中选择旋转角度并勾选”使用快速旋转模式”，或者在程序初始化时手动调用相关接口，代码如下：
ret_t application_init(void) {
  tk_enable_fast_lcd_portrait(TRUE);           /* 使能高效旋转 */
  tk_set_lcd_orientation(LCD_ORIENTATION_90);  /* 旋转 90 度 */
  ......

  return RET_OK;
}

注：定义宏 WITH_FAST_LCD_PORTRAIT 只是把功能相关的代码编译到程序中，开启功能仍需调用 tk_enable_fast_lcd_portrait() 接口。

1.1 重载 lcd 的 flush 函数

在某些情况下，用户可能会重载 lcd 的 flush 的函数，与默认的旋转机制不同，开启高效旋转时，flush 函数中不需要调用 image_rotate() 接口来旋转图像，只需调用 image_copy() 接口直接拷贝图像即可，示例代码如下：

/* awtk-linux-fb/lcd_linux/lcd_linux_fb.c */

static ret_t lcd_linux_flush(lcd_t* base, int fbid) {
  ......
  /* 获取脏矩形列表 */
  dirty_rects = lcd_fb_dirty_rects_get_dirty_rects_by_fb(&(lcd->fb_dirty_rects_list), buff);
  if (dirty_rects != NULL && dirty_rects->nr > 0) {
    for (int i = 0; i < dirty_rects->nr; i++) {
      const rect_t* dr = (const rect_t*)dirty_rects->rects + i;
#ifdef WITH_FAST_LCD_PORTRAIT /* 开启高效旋转 */
      if (system_info()->flags & SYSTEM_INFO_FLAG_FAST_LCD_PORTRAIT) {
        /* 旋转脏矩形 */
        rect_t rr = lcd_orientation_rect_rotate_by_anticlockwise(dr, o, lcd_get_width(base), lcd_get_height(base));
        /* 根据旋转后的脏矩形，把 offline_fb 的数据拷贝到 online_fb 上面 */
        image_copy(&online_fb, &offline_fb, &rr, rr.x, rr.y);
      } else
#endif
      { /* 如果没开启高效旋转，则默认调用 image_rotate() 接口旋转图像 */
        if (o == LCD_ORIENTATION_0) {
          image_copy(&online_fb, &offline_fb, dr, dr->x, dr->y);
        } else {
          image_rotate(&online_fb, &offline_fb, dr, o);
        }
      }
    }
   ......
}

1.2 注意事项

  1. 为了高效贴图，打包资源时会先将图像数据旋转到指定角度（特指 data 类型的位图资源），建议采用 AWTK Designer 打包资源。
  2. 在支持图片解码功能（定义宏 WITH_STB_IMAGE）时，使用图片原始数据，支持动态旋转，但解码数据会消耗一定性能。
  3. 在不支持图片解码功能（没有定义宏 WITH_STB_IMAGE）时，使用 data 类型的位图资源，不支持动态旋转，打包资源时必须设置好旋转角度，并且与 LCD 旋转角度一致。

2 移植高效旋转

在某些特殊情况下，用户会自行适配 lcd，vgcanvas 以及 g2d，此时需要在适配层中加入相关的代码，详见下文。

在移植高效旋转需要先了解以下两个概念：

  1. 图像的逻辑数据：指界面上显示出来的效果，可简单理解成图片原来未旋转时的逻辑尺寸，比如以前的 bitmap->w，bitmap->h 和 bitmap->line_length 都为逻辑数据。
  2. 图像的物理数据：指图片解码后在保存在内存中的数据，可简单理解成图片解码旋转后的在内存中的物理数据，通常使用 bitmap_get_physical_xxx() 接口获取，常用的接口声明如下：
/* awtk/base/bitmap.h */

/**
 * @method bitmap_get_physical_line_length
 * 获取图片真实物理的每一行占用内存的字节数。
 *
 * @param {bitmap_t*} bitmap bitmap对象。
 *
 * @return {uint32_t} 返回每一行占用内存的字节数。
 */
uint32_t bitmap_get_physical_line_length(bitmap_t* bitmap);

/**
 * @method bitmap_get_physical_width
 * 获取图片真实物理的宽度。
 * @param {bitmap_t*} bitmap bitmap对象。
 *
 * @return {uint32_t} 返回图片宽度。
 */
uint32_t bitmap_get_physical_width(bitmap_t* bitmap);

/**
 * @method bitmap_get_physical_height
 * 获取图片真实物理的高度。
 * @param {bitmap_t*} bitmap bitmap对象。
 *
 * @return {uint32_t} 返回图片高度。
 */
uint32_t bitmap_get_physical_height(bitmap_t* bitmap);

除了上述的接口，其他接口获取出来都是逻辑数据。

在自行适配 lcd，vgcanvas 以及 g2d 时，如果需要支持高效旋转，在绘图时统一采用图像的物理数据即可，此外在使用脏矩形时也需要调用相关接口旋转脏矩形坐标，具体详见下文。

2.1 LCD 层适配

需要在各个的 lcd 层的绘图函数中加入坐标数据转化的机制，例如：

/* awtk/lcd/lcd_mem.inc */

/* 填充矩形 */
static ret_t lcd_mem_fill_rect_with_color(lcd_t* lcd, xy_t x, xy_t y, wh_t w, wh_t h, color_t c) {
  bitmap_t fb;

#ifdef WITH_FAST_LCD_PORTRAIT
  rect_t r = rect_init(x, y, w, h);
  system_info_t* info = system_info();
  rect_t rr = lcd_orientation_rect_rotate_by_anticlockwise(&r, info->lcd_orientation, lcd_get_width(lcd), lcd_get_height(lcd));
#else
  rect_t rr = rect_init(x, y, w, h);
#endif

  c.rgba.a = (c.rgba.a * lcd->global_alpha) / 0xff;

  lcd_mem_init_drawing_fb(lcd, &fb);
  return image_fill(&fb, &rr, c);
}

在 WITH_FAST_LCD_PORTRAIT 宏中，我们可以看到把填充的矩形坐标数据通过 lcd_orientation_rect_rotate_by_anticlockwise 函数转化为新的一个矩形坐标，然后再调用相关的填充函数来填充颜色。

/* lcd_orientation_helper.inc */

/* 输入一个矩形数据通过旋转计算后返回的一个矩形数据 */
rect_t lcd_orientation_rect_rotate_by_anticlockwise(const rect_t* rect, lcd_orientation_t o, wh_t src_limit_w, wh_t src_limit_h);

lcd 适配层一共需要适配下面的函数：（适配的思路可以查看 lcd_mem.inc 中的代码）

函数 | 作用
fill_rect | 填充矩形区域颜色
clear_rect | 清除矩形区域颜色
draw_image | 绘制贴图
draw_image_matrix | 绘制贴图
draw_glyph | 绘制字体
get_point_color | 获取坐标对应颜色
get_physical_width | 获取真实物理宽度
get_physical_height | 获取真实物理高度

上面的基本的适配函数，可能在实际运行的时候，还需要适配其他的函数（例如：set_orientation 函数）。

2.2 VGCANVAS 层适配

vgcanvas 层的适配和 lcd 层的适配大同小异，都是适配绘图函数即可，但是需要特别注意的是贴图旋转的问题，有一些矢量画布库是不支持旋转贴图的。

注：为了高效贴图，图像数据在加载到内存前就会被旋转到指定的角度了（又称已旋转的贴图），如果 vgcanvas 层不支持显示旋转后的图片，则需要定义宏 WITHOUT_FAST_LCD_PORTRAIT_FOR_IMAGE，此时如果使用 data 位图数据，则打包资源时需要指定旋转角度为 0。

2.3 G2D 层适配

g2d 层的适配主要是增加了这两个适配函数：

/* awtk/base/g2d.h */

/**
 * @method image_rotate_ex
 * @export none
 * 把图片指定的区域进行旋转。
 * @param {bitmap_t*} dst 目标图片对象。
 * @param {bitmap_t*} src 源图片对象。
 * @param {const rect_t*} src_r 要旋转并拷贝的区域。
 * @param {xy_t} dx 目标位置的x坐标。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
 * @param {xy_t} dy 目标位置的y坐标。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
 * @param {lcd_orientation_t} o 旋转角度(一般支持90度即可，旋转方向为逆时针)。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
 */
ret_t g2d_rotate_image_ex(bitmap_t* dst, bitmap_t* src, const rect_t* src_r, xy_t dx, xy_t dy, lcd_orientation_t o);

/**
 * @method g2d_blend_image_rotate
 * @export none
 * 把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放以及旋转。
 *
 * @param {bitmap_t*} dst 目标图片对象。
 * @param {bitmap_t*} src 源图片对象。
 * @param {const rectf_t*} dst_r 目的区域。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
 * @param {const rectf_t*} src_r 源区域。
 * @param {uint8_t} global_alpha 全局alpha。
 * @param {lcd_orientation_t} o 旋转角度(一般支持90度即可，旋转方向为逆时针)。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
 */
ret_t g2d_blend_image_rotate(bitmap_t* dst, bitmap_t* src, const rectf_t* dst_r, const rectf_t* src_r,
                       uint8_t alpha, lcd_orientation_t o);

备注： 1. 如果不实现这两个函数的话，则会调用 soft_rotate_image_ex 和 soft_blend_image_rotate 进行软件旋转绘制图片。 2. g2d 层的这两个函数主要是用来处理图片旋转角度为 0 的 lcd 旋转的情况，如果可以保证图片旋转角度和 lcd 旋转角度一样的话，这两个函数可以不实现。


如何使用硬件图像解码

AWTK 默认采用 stb 库进行软件图像解码，全靠 CPU 计算。硬件解码是指将图像解码的工作分配给专门的硬件来处理，减轻 CPU 的计算量，从而提高图像绘制的性能。

1 AWTK 解码图片的流程

不同平台的解码流程可能会有区别，在 AWTK 中，用户需要自己实现硬件解码的接口，然后调用 image_loader_register 函数注册该接口，后续 AWTK 程序在进行解码时会自动调用该接口解码图片。

/**
 * @method image_loader_register
 * 注册图片加载器。
 *
 * @annotation ["static"]
 * @param {image_loader_t*} loader loader对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t image_loader_register(image_loader_t* loader);

此处以获取 jpg 图片为例展示 AWTK 是如何获取图片的：

注： 1. 上图中的 image_manager_get_bitimp 函数是 AWTK 提供的获取图片功能，接口详见：awtk/src/base/image_manager.c。 2. 上图中的 image_loader_load_image 函数是 AWTK 提供的加载图片接口，接口详见：awtk/src/base/image_loader.h。

2 STM32 平台案例

本节以 AWTK 针对 STM32F767igtx 为例，大致讲解如何将硬件解码接口集成到 AWTK 中，移植层源码可前往 GitHub 下载。

步骤一：用户需根据实际使用的硬件平台实现 jpg 图像硬件解码的接口，然后定义一个 image_loader_t 的对象，重载对象中的 load 函数，代码如下：

/* awtk-stm32f767igtx-raw/awtk-port/stm32_jpg_image_loader.c */
/* jpg硬件解码函数 */
static ret_t image_loader_stm32_jpg_load(image_loader_t *l,
                                         const asset_info_t *asset,
                                         bitmap_t *image) {
/* 实现jpg硬件解码，具体实现视硬件决定 */
}

static const image_loader_t stm32_jpg_image_loader = {
    .load = image_loader_stm32_jpg_load};

image_loader_t *image_loader_stm32_jpg() {
  return (image_loader_t *)&stm32_jpg_image_loader;
}

步骤二：在 LCD 初始化时顺便注册上一步骤中创建的 image_loader_t 对象，代码如下：

/* awtk-stm32f767igtx-raw/awtk-port/main_loop_stm32_raw.c */
/* 在LCD初始化时调用注册函数 */
lcd_t* platform_create_lcd(wh_t w, wh_t h) {
  image_loader_register(image_loader_stm32_jpg());
  return stm32f767_create_lcd(w, h);
}


如何使用多点触控

​ AWTK 提供的多点触控功能主要是为了给用户提供多点触控的基本数据，方便用户开发多点触控的控件或者应用。

一，多点触控的类型

​ AWTK 一共提供了两种多点触控的类型，分别是获取手指 ID 的可识别手指类型的多点触控和不可以获取手指 ID 的不可识别手指类型的多点触控，下表为两者的区别：

 | 可识别手指类型 | 不可识别手指类型的
是否需要提供手指 ID | 是 | 否
触摸消息是否提供距离增量 | 是 | 是
触摸消息是否提供中心点 | 是 | 是
触摸消息是否提供旋转角度 | 是 | 只支持两个手指头

备注：因为某些触摸硬件是无法提供具体的手指 ID 的，所以 AWTK 特别提供一种不需要手指 ID 的多点触控机制，但是这个机制提供出来的消息是只能支持两个手指头的旋转数据，所以用户需要更加具体情况来旋转使用。

二，多点触控的API

1.可识别手指类型

/**
 * @method multi_gesture_gesture_touch_fingers_destroy
 * 释放可识别手指类型的对象
 * @param {multi_gesture_touch_fingers_t*} touch 可识别手指类型的对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t multi_gesture_gesture_touch_fingers_destroy(multi_gesture_touch_fingers_t* touch);

/**
 * @method multi_gesture_touch_fingers_create
 * 创建可识别手指类型的对象
 * @param {int32_t} finger_size 可识别手指个数。
 *
 * @return {multi_gesture_touch_fingers_t*} 成功返回可识别手指类型的对象，失败返回NULL。
 */
multi_gesture_touch_fingers_t* multi_gesture_touch_fingers_create(int32_t finger_size);

/**
 * @method multi_gesture_post_event_from_fingers
 * 发送多点触控消息
 * @param {main_loop_t*} loop 主循环对象
 * @param {multi_gesture_touch_fingers_t*} touch 可识别手指类型的对象。
 * @param {uint32_t} point_size 手指个数
 * @param {multi_touch_point_event_t*} points 手指数据数组
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t multi_gesture_post_event_from_fingers(main_loop_t* loop, multi_gesture_touch_fingers_t* touch, uint32_t point_size, multi_touch_point_event_t* points);

2.不可识别手指类型

/**
 * @method multi_gesture_gesture_touch_points_destroy
 * 释放不可识别手指类型的对象
 * @param {multi_gesture_touch_points_t*} touch 不可识别手指类型的对象。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t multi_gesture_gesture_touch_points_destroy(multi_gesture_touch_points_t* touch);

/**
 * @method multi_gesture_touch_points_create
 * 创建不可识别手指类型的对象
 * @param {uint32_t} last_dist_lenght 均值滤波的缓冲长度。
 *
 * @return {multi_gesture_touch_points_t*} 成功返回不可识别手指类型的对象，失败返回NULL。
 */
multi_gesture_touch_points_t* multi_gesture_touch_points_create(uint32_t last_dist_lenght);

/**
 * @method multi_gesture_post_event_from_points
 * 发送多点触控消息
 * @param {main_loop_t*} loop 主循环对象
 * @param {multi_gesture_touch_points_t*} touch 不可识别手指类型的对象。
 * @param {uint32_t} point_size 手指个数
 * @param {multi_touch_point_event_t*} points 手指数据数组
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t multi_gesture_post_event_from_points(main_loop_t* loop, multi_gesture_touch_points_t* touch, uint32_t point_size, multi_touch_point_event_t* points);

具体用法请参考

multi_gesture.inc

三，如何使用

​ 本文使用 github 中 stm32f429 项目为例子，来讲述如何使用 awtk 提供的多点触控方案。

1.适配层

​ stm32f429 项目中的适配层，把触摸数据发送到 AWTK 消息循环中。

/* main_loop_stm32_raw.c */
/* 省略了一部分无关代码 */

#include "base/multi_gesture.inc"
static multi_gesture_touch_points_t* touch_points = NULL;
static multi_gesture_touch_fingers_t* touch_fingers = NULL;
static multi_touch_point_event_t s_points[CT_MAX_TOUCH];

static int last_x = 0;
static int last_y = 0;
static bool_t one_press = FALSE;
static bool_t mult_press = FALSE;
void platform_disaptch_input_down(main_loop_t* loop, int32_t fingers, int32_t last_fingers) {
    int32_t i = 0;
    uint8_t num_down_fingers = 0;
    /* 当前手指个数为 1，并且之前的手指格式为 0 或者 1 的时候，发送普通点击消息 */
    if (fingers == 1 && (last_fingers == 0 || last_fingers == 1)) {
        if (tp_dev.sta & TP_PRES_DOWN) {
            /* 记录已经触发了普通点击 */
            one_press = TRUE;
            last_x = tp_dev.y[0];
            last_y = lcdltdc.pheight - tp_dev.x[0];
            main_loop_post_pointer_event(loop, TRUE, last_x, last_y);
        }
    } else {
        /* 把数据转为多点触控的结构体 */
        for(i = 0; i < CT_MAX_TOUCH; i++) {
                s_points[i].touch_id = 0;
                s_points[i].finger_id = i;
                if (tp_dev.sta & (1<<i) && (!(tp_dev.y[i] == 0 && tp_dev.x[i] == 0))) {
                    num_down_fingers++;
                    if (!(tp_dev.y[i] == 0 && tp_dev.x[i] == 0)) {
                        s_points[i].x = tp_dev.y[i];
                        s_points[i].y = lcdltdc.pheight - tp_dev.x[i];
                    }
                    s_points[i].type = (s_points[i].type == EVT_MULTI_TOUCH_UP) ? EVT_MULTI_TOUCH_DOWN : EVT_MULTI_TOUCH_MOVE;
                } else {
                    if (s_points[i].type == EVT_MULTI_TOUCH_MOVE || s_points[i].type == EVT_MULTI_TOUCH_DOWN) {
                        num_down_fingers++;
                    }
                    s_points[i].x = 0;
                    s_points[i].y = 0;
                    s_points[i].type = EVT_MULTI_TOUCH_UP;
                }
        }
        /* 记录已经触发了多点触控 */
        mult_press = TRUE;
        /* 使用可识别手指类型发送多点触控消息 */
        multi_gesture_post_event_from_fingers(loop, touch_fingers, num_down_fingers, s_points);
        /* 使用不可识别手指类型发送多点触控消息 */
        //multi_gesture_post_event_from_points(loop, touch_points, num_down_fingers, s_points);
  }
}

void platform_disaptch_input_up(main_loop_t* loop, int32_t last_fingers) {
    /* 如果触发了普通点击，就发送普通点击控弹起事件 */
    if (one_press) {
        /* 复位 */
        one_press = FALSE;
        /* 发送普通点击弹起事件 */
        main_loop_post_pointer_event(loop, FALSE, last_x, last_y);
    }
    /* 如果触发了多点触控，就发送多点触控弹起事件 */
    if (mult_press) {
        int i = 0;
        for(i = 0; i < CT_MAX_TOUCH; i++) {
            s_points[i].type = EVT_MULTI_TOUCH_UP;
        }
        /* 复位 */
        mult_press = FALSE;
        /* 使用可识别手指类型发送多点触控弹起事件消息 */
        multi_gesture_post_event_from_fingers(loop, touch_fingers, last_fingers, s_points);
        /* 使用不可识别手指类型发送多点触控弹起事件消息 */
        //multi_gesture_post_event_from_points(loop, touch_points, last_fingers, s_points);
    }
}

uint8_t platform_disaptch_input(main_loop_t* loop) {
    int32_t i = 0;
    uint8_t touch_number = 0;
    static uint8_t last_touch_number = 0;

    tp_dev.scan(0);
    /* 计算当前有多少只手指按下 */
    for(i = 0; i < CT_MAX_TOUCH; i++) {
        if (tp_dev.sta & (1<<i)) {
            touch_number++;
        }
    }
    /* 手指个数变化了，所以发送弹起事件 */
    if (touch_number != last_touch_number) {
        platform_disaptch_input_up(loop, last_touch_number);
    }
    /* 手指个数大于 0 需要发送按下消息 */
    if (touch_number > 0) {
        platform_disaptch_input_down(loop, touch_number, last_touch_number);
    }
    last_touch_number = touch_number;

    return 0;
}

extern lcd_t* stm32f429_create_lcd(wh_t w, wh_t h);

lcd_t* platform_create_lcd(wh_t w, wh_t h) {
  /* 创建不可识别手指类型的多点触控句柄 */
  touch_points = multi_gesture_touch_points_create(15);
  /* 创建可识别手指类型的多点触控句柄 */
  touch_fingers = multi_gesture_touch_fingers_create(CT_MAX_TOUCH);
  memset(s_points, 0x0, sizeof(multi_touch_point_event_t) * CT_MAX_TOUCH);
  return stm32f429_create_lcd(w, h);
}

#include "main_loop/main_loop_raw.inc"

备注：

  1. 上面的代码有两个 for 循环，一个是计算当前按下的手指个数，一个是把硬件的手指坐标数据转换为 multi_touch_point_event_t 类型。
  2. 只需要把上面 multi_gesture_post_event_form_points 函数取消注释，然后把 multi_gesture_post_event_form_fingers 函数加上注释就可以实现使用不可识别手指类型的多点触控，本例子默认为可识别手指类型的多点触控。

2.应用层

​ 由于多点触控无法通过手指点击坐标来确定具体的控件，所以 AWTK 的多点触控默认会发送给当前选中的窗口上面，所以用户想获取具体的消息，需要通过给当前的窗口注册多点触控消息事件（EVT_MULTI_GESTURE 事件）来获取对应消息，如下代码：

static ret_t multi_gesture_view_on_event_multi_gesture(void* ctx, event_t* e) {
  multi_gesture_event_t* event = (multi_gesture_event_t*)e;
  return_value_if_fail(multi_gesture_view != NULL && e != NULL, RET_BAD_PARAMS);
  /* centroid 为中心点
   * distance为两点间的距离增量，(-1,0)表示缩小，(0-1)表示增加。
   * rotation为旋转角度(幅度)增量，（单位弧度）。
   */
  printf("centroid:(%d, %d), distance:%f, rotation:%f \r\n", event->x, event->y, event->distance, event->rotation);
  return RET_OK;
}

static ret_t multi_gesture_view_init_multi_gesture_event(widget_t* widget) {
  widget_t* win = NULL;
  multi_gesture_view_t* multi_gesture_view = MULTI_GESTURE_VIEW(widget);
  return_value_if_fail(widget != NULL && multi_gesture_view != NULL, RET_BAD_PARAMS);

  if (widget->parent != NULL) {
    /* 获取控件的父集窗口，当焦点在控件上面时，父集窗口肯定也是选中的 */
    win = widget_get_window(widget);
  }

  if (win != NULL && multi_gesture_view->event_win != win) {
    if (multi_gesture_view->event_id != TK_INVALID_ID) {
      /* 切换父集窗口的时候，移除消息，以免父集窗口不一样，导致出错 */
      multi_gesture_view_deint_multi_gesture_event(widget);
    }

    multi_gesture_view->event_win = win;
    /* 注册多点触控消息事件 */
    multi_gesture_view->event_id = widget_on(win, EVT_MULTI_GESTURE, multi_gesture_view_on_event_multi_gesture, widget);
    return multi_gesture_view->event_id != TK_INVALID_ID ? RET_OK : RET_FAIL;
  }
  return RET_FAIL;
}

备注：用户可以自行根据需求自行写上述代码来获取多点触控消息。


如何使用 mutable_image 控件

如果需要将视频数据或者摄像头采集到的画面显示到屏幕上，可以使用 mutable_image 控件来实现该功能。该控件主要提供了 mutable_image_set_prepare_image 函数注册一个回调函数，该回调函数在每次绘制之前被调用，用于准备下一帧要显示的图片。

1 相关函数

在使用 mutable_image 控件的时候，通常涉及到下面几个函数。

（1）mutable_image_set_prepare_image 函数

  • 函数原型：
/**
 * @method mutable_image_set_prepare_image
 * 设置prepare_image回调函数。
 *
 * prepare_image回调函数在每次绘制之前被调用，用于准备下一帧要显示的图片。
 * 比如获取摄像头的预览图片，将其设置到image参数中。
 *
 * 注意：在回调函数中，只能修改图片的内容，不用修改图片的大小和格式，如果不匹配请先转换。
 *
 * @param {widget_t*} widget mutable_image对象。
 * @param {mutable_image_prepare_image_t} prepare_image 准备图片的回调函数。
 * @param {void*} prepare_image_ctx prepare_image回调函数的上下文。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t mutable_image_set_prepare_image(widget_t* widget,
            mutable_image_prepare_image_t prepare_image, void* prepare_image_ctx);

mutable_image_prepare_image_t 的定义如下：

typedef ret_t (*mutable_image_prepare_image_t)(void* ctx, bitmap_t* image);

（2）bitmap_create_ex 函数

  • 函数原型：
/**
 * @method bitmap_create_ex
 * 创建图片对象。
 * @annotation ["constructor", "scriptable", "gc"]
 * @param {uint32_t} w 宽度。
 * @param {uint32_t} h 高度。
 * @param {uint32_t} line_length 每一行实际占用的内存，一般情况下为w\*bpp，可填写默认值0。
 * @param {bitmap_format_t} format 格式。
 *
 * @return {bitmap_t*} 返回bitmap对象。
 */
bitmap_t* bitmap_create_ex(uint32_t w, uint32_t h, uint32_t line_length,
                           bitmap_format_t format);

format 参数位图格式常量详见下表：

名称 | 说明
BITMAP_FMT_NONE | 无效格式
BITMAP_FMT_RGBA8888 | 一个像素占用4个字节，RGBA占一个字节，按内存地址递增
BITMAP_FMT_ABGR8888 | 一个像素占用4个字节，ABGR占一个字节，按内存地址递增
BITMAP_FMT_BGRA8888 | 一个像素占用4个字节，BGRA占一个字节，按内存地址递增
BITMAP_FMT_ARGB8888 | 一个像素占用4个字节，ARGB占一个字节，按内存地址递增
BITMAP_FMT_RGB565 | 一个像素占用2个字节，RGB分别占用5,6,5位,按内存地址递增
BITMAP_FMT_BGR565 | 一个像素占用2个字节，BGR分别占用5,6,5位,按内存地址递增
BITMAP_FMT_RGB888 | 一个像素占用3个字节，RGB占一个字节，按内存地址递增
BITMAP_FMT_BGR888 | 一个像素占用3个字节，RGB占一个字节，按内存地址递增
BITMAP_FMT_GRAY | 一个像素占用1个字节
BITMAP_FMT_MONO | 一个像素占用1比特

（3）image_fill 函数

  • 函数原型：
/**
 * @method image_fill
 * 用颜色绘制指定的区域。
 * @param {bitmap_t*} dst 目标图片对象。
 * @param {const rect_t*} dst_r 要填充的目标区域。
 * @param {color_t} c 颜色。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
 */
ret_t image_fill(bitmap_t* dst, rect_t* dst_r, color_t c);

（4）image_copy 函数

  • 函数原型：
/**
 * @method image_copy
 * 把图片指定的区域拷贝到framebuffer中。
 * @param {bitmap_t*} dst 目标图片对象。
 * @param {bitmap_t*} src 源图片对象。
 * @param {const rect_t*} src_r 要拷贝的区域。
 * @param {xy_t} dx 目标位置的x坐标。
 * @param {xy_t} dy 目标位置的y坐标。
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
 */
ret_t image_copy(bitmap_t* dst, bitmap_t* src, rect_t* src_r, xy_t dx, xy_t dy);

2 基本用法

可以通过下面两种方式使用 mutable_image 控件，两者完成的功能都是一样的，设置屏幕的颜色为蓝色，效果如下图所示：

2.1 示例一

直接操作位图数据 image_data，然后往 image_data 设置相应的颜色值，image_data 的大小 = 位图的高度 * bitmap_get_line_length（每一行实际占用的内存，一般情况下为 w * bpp，其中 w 表示位图的高度，bpp 表示一个像素占用字节数）。image_data 的位图数据格式要与当前 LCD 保持一致,可以调用 lcd_get_desired_bitmap_format 函数获取当前LCD位图数据格式，例如：

bitmap_format_t format = lcd_get_desired_bitmap_format(c->lcd);

其中，bitmap_format_t 的定义可参考上面中的 format 参数说明或者参考 awtk/src/base/types_def.h文件。

  • 如果 format = BITMAP_FMT_BGR565，表示一个像素占用 2 个字节，BGR 分别占用 5,6,5 位,按内存地址递 增，设置 image_data 的颜色值为蓝色数据格式如下：
image_data[0] = 0x1f;   //第一个像素
image_data[1] = 0x00;   //第一个像素
image_data[2] = 0x1f;   //第二个像素
image_data[3] = 0x00;   //第二个像素
...
  • 如果 format = BITMAP_FMT_BGRA8888，表示一个像素占用 4 个字节，BGRA 占一个字节，按内存地址递增，设置 image_data 的颜色值为蓝色数据格式如下：
image_data[0] = 0x1f;   //第一个像素
image_data[1] = 0x00;   //第一个像素
image_data[2] = 0x00;   //第一个像素
image_data[3] = 0xff;    //第一个像素

AWTK 中默认使用的 LCD 的格式为 BGR565，对应的数据格式请看下图

实现代码如下：

ret_t mutable_image_prepare_image(void* ctx, bitmap_t* image) {
  uint32_t i = 0;
  uint32_t bpp = 0;
  uint32_t size = 0;
  uint8_t* image_data = NULL;
  bpp = bitmap_get_bpp(image);
  size = image->h * bitmap_get_line_length(image);
  image_data = bitmap_lock_buffer_for_write(image);

  /*
   * LCD 的格式为 BGR565 ,那么 bpp 应该为 2
   * image_data是 mutable_image 控件的 bitmap 的位图数据，数据格式与LCD保持一致
   * image_data大小 =  image->h * bitmap_get_line_length（每一行实际占用的内存，一般情况下为w*bpp）
   * 这里给 image_data 设置为蓝色，当然也可以设置摄像头数据或者视频数据
   */
  for (; i < size; i += bpp, image_data += bpp) {
    image_data[0] = 0x1f;
    image_data[1] = 0x00;
  }

  return RET_OK;
}

ret_t application_init() {
  tk_ext_widgets_init();

  widget_t* win = window_create(NULL, 0, 0, 0, 0);

  /* 创建 mutable_image 控件 */
  widget_t* mutable = mutable_image_create(win, 0, 0, win->w, win->h);

  /* 注册 mutable_image 控件的绘制图像回调函数 */
  mutable_image_set_prepare_image(mutable, mutable_image_prepare_image, NULL);

  return RET_OK;
}

2.2 示例二

调用 bitmap_create_ex 创建图片对象，图片对象创建好后，调用 image_fill 函数往图片对象填充颜色值。最后调用 image_copy 函数负责将要显示的图片复制到目标图片中（该图片对象由 mutable_image 控件自动生成和销毁），代码如下：

static ret_t mutable_image_prepare_image(void* ctx, bitmap_t* image) {
  bitmap_t* src = (bitmap_t*)ctx;
  rect_t r = rect_init(0, 0, image->w, image->h);

  color_t color;
  color.rgba.r = 0;
  color.rgba.g = 0;
  color.rgba.b = 0xff;
  color.rgba.a = 0xff;

  image_fill(src, &r, color);
  image_copy(image, src, &r, 0, 0);

  return RET_OK;
}

ret_t application_init() {
  widget_t* mutable_image = NULL;
  bitmap_t* src = NULL;
  widget_t* win = window_create(NULL, 0, 0, 0, 0);
  canvas_t* c = widget_get_canvas(win);

  /* XXX: 解码图片的格式和 lcd 的格式保持一致，才能获得最高的性能 */
  bitmap_format_t format = lcd_get_desired_bitmap_format(c->lcd);
  src = bitmap_create_ex(win->w, win->h, 0, format);

  mutable_image = mutable_image_create(win, 0, 0, win->w, win->h);
  mutable_image_set_prepare_image(mutable_image, mutable_image_prepare_image, src);

  return RET_OK;
}

完整示例请参考 mutable_image.c。

3 硬件图层融合用法

在某些平台下，支持 LCD 有多个硬件 FrameBuffer，这些硬件 FrameBuffer 可以在硬件绘制时合成到 LCD 上显示，可将这些 FrameBuffer 理解为多个图层，图层融合后绘制到 LCD 上，这样的速度比软件合成要快很多，因此 mutable_image 控件也支持硬件图层融合用法。

注：硬件图层融合用法只适用于支持 LCD 有多个硬件 FrameBuffer 的平台。

使用硬件图层融合用法需满足以下要求：

  • AWTK 的 LCD 类型必须是 32 位色的 RGBA 或 BGRA；
  • 定义宏 WITH_LCD_CLEAR_ALPHA，让 AWTK 支持刷新透明区域，并支持背景色为透明的混合算法。

需要注意的是：

  1. 定义宏 WITH_LCD_CLEAR_ALPHA 会降低 AWTK 的性能；
  2. AWTK 支持刷新透明区域，即支持 window 背景色为透明或半透明的效果，其原理是在绘图之前在矩形区域刷一层全透明的颜色；
  3. AWTK 支持背景色为透明的混合算法，该算法会比背景色为不透明的混合算法更加消耗性能（背景色为透明，需要比背景色不透明的每个像素点增加好几个乘除法的运算，但是如果背景色本身为不透明就会退化为原来的背景色不透明的混合算法）。

3.1 示例

硬件图层融合用法相较于基本用法不同的地方有三点：

  • 硬件图层融合用法需要 LCD 类型为 32 位色的 RGBA 或 BGRA；
  • 需要有 LCD 的硬件 FrameBuffer 的地址，该地址通常由硬件平台指定；
  • 需要调用 mutable_image_set_framebuffe r函数设置硬件 FrameBuffer。

调用 mutable_image_set_framebuffer 函数设置硬件 FrameBuffer后，mutable_image 控件不会在 AWTK 的 GUI 上显示，但由于 mutable_image 控件的刷新函数受到 AWTK 消息循环机制的影响，所以 mutable_image 控件的帧率和 AWTK 的帧率一样，但优点是用户只需要把图像数据刷新到 mutable_image 控件上即可，接下来的过程由 AWTK 处理，代码如下：

/* 假设 DEVICE_FB 宏的地址为 lcd 的硬件 framebuffer 地址 */
#define DEVICE_FB (uint8_t*)0XC0000000

ret_t mutable_image_prepare_image(void* ctx, bitmap_t* image) {
  uint32_t i = 0;
  uint32_t bpp = 0;
  uint32_t size = 0;
  uint8_t* image_data = NULL;
  bpp = bitmap_get_bpp(image);
  size = image->h * bitmap_get_line_length(image);
  image_data = bitmap_lock_buffer_for_write(image);

  /*
   * 把带有透明度的蓝色填充到 LCD 的硬件 FrameBuffer 中
   * image_data 是 mutable_image 控件的 bitmap 的位图数据
   * 这里的 image 的位图格式和长宽是在 mutable_image_set_framebuffer 函数中设置的
   * 这里给 image_data 设置为蓝色，当然也可以设置摄像头数据或者视频数据
   * 这里的 image_data 的地址就是上面 LCD 的硬件 FrameBuffer 地址
   */
  for(;i < size; i += bpp, image_data += bpp) {
      image_data[0] = 0xff;
      image_data[1] = 0x00;
      image_data[2] = 0x00;
      image_data[3] = 0xa0;
  }
  return RET_OK;
}

ret_t application_init() {
  tk_ext_widgets_init();
  widget_t* win = window_create(NULL, 0, 0, 0, 0);
  widget_t* mutable = mutable_image_create(win, 0, 0, win->w, win->h);
  mutable_image_set_prepare_image(mutable, mutable_image_prepare_image, NULL);

  /* mutable_image 控件设置位图格式为 BGRA8888 的 LCD 的硬件 FrameBuffer */
  mutable_image_set_framebuffer(mutable, win->w, win->h, BITMAP_FMT_BGRA8888, DEVICE_FB);

  return RET_OK;
}

3.2 直接刷新硬件 FrameBuffer

若嵌入式平台支持多线程，可以使用一条线程绘制视频数据到其中一个硬件图层上，然后使用另外一条线程绘制 AWTK 的 GUI。该方法的优点是视频的刷新率不会受到 AWTK 的帧率影响，就算 AWTK 的 GUI 出现卡顿现象，也不会导致视频卡顿。

由于 mutable_image 控件只支持 RGBA8888、BGRA8888、RGB888、BGR888、RGB565、BGR565 格式的图像，因此当视频数据为 YUV 格式的图像时，就需要开发者在程序中将 YUV 图像转换为 mutable_image 控件支持的图像格式，再绘制到控件上。若硬件图层支持各种格式的透传，例如支持 YUV 图像，那么就可以节省格式转换所消耗的时间与资源。


在自定义控件中使用 offset 的注意事项

当用户自己写自定义控件的时候，如果需要该自定义控件实现滚动效果效果的时候，此时需要引入一个 offset 的概念（水平方向用 xoffset，垂直方向用 yoffset），在控件中通过 offset 的变化来移动控件的子控件的位置到指定的区域中显示，从而达到滚动效果。（比如：每个子控件的 y 属性都根据 offset 来计算出来，那么 offset 改变了，那么每个子控件的 y 坐标都改变了，从而决定子控件显示的位置。）

同时 AWTK 的点击事件（鼠标或者触摸）都会受到控件的 offset 影响，所以 AWTK 提供了两个机会给控件把这个 offset 的数据传递给 AWTK：

方法 | 备注
作为属性通过 get_prop 或者 set_prop | 方便外部动画等操作修改和读取属性
注册控件的 get_offset 函数指针 | 只能读取 offset 的数据

注意：如果两个方法一起使用的话，一定要注意的是获取的 offset 要保持一致。

1. 子控件显示问题

一般滚动效果都是为了存放更多的子控件，但是在 AWTK 显示子控件有三种方式：

  1. 在 on_paint_children 回调函数中，通过 offset 来把有需要的显示控件移动到父控件的显示区域中，而不需要显示的子控件会被移动到父控件显示区域外面，所以每个子控件的坐标未必是按照真实的布局来摆放的。
  2. 子控件是真实的控件布局，每个子控件都是按照父控件的虚拟空间中做真实的布局，然后通过 offset 来设置画布的偏移坐标，来实现真实的布局子控件正确显示到屏幕上面。

这两种方式都是可以正确的显示出来子控件，但是区别在于有没有真实的布局子控件。

如果只是为了显示，其子控件不需要接收点击事件（鼠标或者触摸）的话，直接使用功能第一种方式的话，比较简单快速。

但是如果需要子控件也接收到来自 AWTK 的消息事件的话，最好采用第二种方式来实现了（请查看 AWTK 的 scroll_view 的实现源码）

2. 受到 offset 影响的 API 以及问题

offset 会影响 AWTK 内部的 API 甚至会影响内部执行逻辑，从而导致一些消息事件的转发不正常和绘图不正常的问题。

API | 影响
widget_to_screen | 转化为屏幕坐标时候出错
widget_to_local | 转化为控件坐标时候出错，导致无法通过坐标查找到具体的控件或者子控件
widget_invalidate_default | 导致出现残影或者控件被裁剪到了

3. 总结

如果使用 offset 的话，尽量使用上面说的第二种方法来实现，这样可以减少很多问题，如果实在不行的话，可以通过重载 find_target 和 is_point_in 函数来处理，但是这样子也是把问题变复杂了。


如何使用 packed 图片

1 介绍

有时我们把多张小图片打包成一张大图片，这种做法在游戏行业和串口屏经常使用。这样做有以下几个原因：

  • 美术做图方便。
  • 现存的资源就是这样，懒得去切图。
  • 在有 GPU 的时候，可以在一定程度提高性能。

最新的 AWTK 对 packed 图片提供了支持。本文介绍一下如何使用 packed 的图片。

2 如何指定 packed 图片中的子图

在 style 中指定图片名称时，用#分隔图片名称和子图区域，符号”#”之前是大图片的名称，符号”#”之后是设置子图区域的字符串。指定子图区域的方式有以下几种：

  • 空字符串。表示使用控件当前的 xywh 来决定子图的位置和大小。如：
<pressed bg_image="image_packed_fg#"/>

注：如果当前控件的区域是 (10, 20, 30, 40)，那么子图的区域也是 (10, 20, 30, 40)。

  • g。表示使用控件当前的 xywh 来决定子图的位置和大小，xy 转换成全局坐标。如：
<pressed bg_image="image_packed_fg#g"/>

注：如果当前控件的区域是 (10, 20, 30, 40)，相对于窗口的坐标是 50, 60，那么子图的区域就是 (50, 60, 30, 40)。

  • xywh(x,y,w,h) 指定子图的绝对坐标。如：
 <pressed bg_image="image_packed_fg#xywh(106,0,106,54)"/>

注：那么子图的区域就是 (106,0,106,54)

  • grid(rows,cols,row,col) 将图片划分为 rows 行 cols 列等大小的网格。row 和 col 指定使用哪一格的子图。如：
<pressed bg_image="image_packed_fg#grid(4,3,0,2)"/

注：如果图片大小是 80x60，那么子图的区域就是 (40,0,20,20)

3 示例

此处准备两张packed图片，正常时的效果图片名称为image_packed_bg，颜色浅一点；按下时的效果图片名称为image_packed_fg，颜色深一点。

  • 正常时的效果

  • 按下时的效果

注：两张图看起来有些相近，第二张是把第一张调暗后得到的，不过运行起来后按下效果很明显的。

3.1 UI 文件

<window>
  <view style="image_packed" x="c" y="m" w="320" h="216" children_layout="default(r=4,c=3)">
    <button style="num_1"/>
    <button style="num_2"/>
    <button style="num_3"/>
    <button style="num_4"/>
    <button style="num_5"/>
    <button style="num_6"/>
    <button style="num_7"/>
    <button style="num_8"/>
    <button style="num_9"/>
    <button style="dot"/>
    <button style="num_0"/>
    <button style="backspace"/>
  </view>
</window>

3.2 Style 文件

  • 使用第一张图为 view 的背景图。按钮在正常情况什么都不用显示。
  • 按钮在 pressed 状态下背景用指定区域的图片。
  • 本例子演示来各种用法。通常使用缺省用法即可：
<pressed bg_image="image_packed_fg#" />

<button>
    <style name="num_1">
        <normal />
        <pressed bg_image="image_packed_fg#xywh(0,0,106,54)" />
    </style>
    <style name="num_2">
        <normal />
        <pressed bg_image="image_packed_fg#xywh(106,0,106,54)" />
    </style>
    <style name="num_3">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,0,2)" />
    </style>
    <style name="num_4">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,1,0)" />
    </style>
    <style name="num_5">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,1,1)" />
    </style>
    <style name="num_6">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,1,2)" />
    </style>
    <style name="num_7">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,2,0)" />
    </style>
    <style name="num_8">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,2,1)" />
    </style>
    <style name="num_9">
        <normal />
        <pressed bg_image="image_packed_fg#grid(4,3,2,2)" />
    </style>
    <style name="dot">
        <normal />
        <pressed bg_image="image_packed_fg#" />
    </style>
    <style name="num_0">
        <normal />
        <pressed bg_image="image_packed_fg#" />
    </style>
    <style name="backspace">
        <normal />
        <pressed bg_image="image_packed_fg#" />
    </style>
</button>
<view>
    <style name="image_packed">
        <normal bg_image="image_packed_bg" />
    </style>
</view>

3.3 运行例程

./bin/preview_ui design/default/ui/image_packed.xml

4. 限制

  • 目前只能在 style 中使用。
  • draw_type 只支持 default|scale|center|icon 等几种。


如何使用 stb 外部硬件 YUV 转 RGB

​ AWTK 解码图片是使用 stb 类库来解码的，但是 stb 的内部是软解码的，而且 jpg 一般都是使用 yuv 的颜色空间的，所以在 stb 解码 jpg 的时候，往往需要把 yuv 的颜色空间转化为 rgb 的颜色空间，但是传统的软转换效率会比较低（就算是查表也是比较慢的），所以 awtk 的 stb 提供了一个可以外部接入硬件转换的功能。

一，开启 stb 外部硬件 YUV 转 RGB

​ 开启该功能，需要定义 HAS_STB_YUV_TO_RGB_G2D 宏，然后需要实现 stbi__YCbCr_to_RGB_g2d 函数，该函数是给用户在外部写硬件转换的代码，可选定义的宏是 STB_YUV_DATA_PIXEL_BTYE，该宏是用于定义 yuv 的数据流的字节数，默认为 4 字节（32 位对齐）。

/**
 * @method stbi__YCbCr_to_RGB_g2d
 * stb 外部的硬件 YUV 转换 RGB
 *
 * @annotation ["static"]
 * @param {unsigned char*} out_data 输出的 RGB 数据流。
 * @param {int} out_data_size 输出的 RGB 数据流的长度。
 * @param {unsigned char*} yuv_data 输入的 YUV 的数据流（YUV 的格式为 packed 模式的 YUV444，默认是 4 字节对齐）。
 * @param {int} yuv_data_size 输入的 YUV 的数据流长度。
 * @param {int} w 输入图片的宽
 * @param {int} h 输入图片的高
 * @param {int*} out_channel_order 返回 RGB 数据流的类型（0 代表 R 在低位，1 代表 R 在高位）
 *
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
int stbi__YCbCr_to_RGB_g2d(unsigned char* out_data, int out_data_size, unsigned char* yuv_data, int yuv_data_size, int w, int h, int* out_channel_order);


如何用 valgrind 查找内存相关问题

valgrind 是 Linux 下一个强大的内存调试工具，特别擅长查找内存越界、内存泄露和野指针等问题，所有的程序都应该在 valgrind 上运行一下，把各种潜在的问题暴露出来，在出现莫名其妙的奔溃时，更是应该借助 valgrind 来快速定位问题。

由于 valgrind 对 SDL 应用程序不太友好，需要在 linux-fb 模式下编译和运行 AWTK 应用程序。

在 VmWare 中，安装 Ubuntu 18 后，可以参考这个文档编译和运行 AWTK: UbuntuVM

  • 安装 valgrind
sudo apt-get install valgrind
  • 用 valgrind 运行 demoui
valgrind --leak-check=full ./bin/demoui


如何在窗体样式文件中写控件布局参数

一个控件在多个界面出现，而且它的布局参数是一样的，可以把它布局参数放到 style 中，这样可以提高可维护性。

一、在 style 中指定布局参数

  • 控件自身布局参数使用 self_layout 属性指定。请参考 控件布局参数文档

  • 子控件布局参数使用 children_layout 属性指定。请参考 控件布局参数文档

示例：

<column>
  <style name="buttons" children_layout="default(row=4,col=1,spacing=10)"                        self_layout="default(x=center,y=10,w=50%,h=148)">
    <normal />
  </style>
</column>

完整示例请参考 styles/button.xml

二、在 UI 文件中引用

示例：

  <column style="buttons">
    <button name="open:dialog1" style="round" enable_long_press="true" text="Long Press"/>
    <button style="red_btn" text="Text"/>
    <button style="icon" text="Fullscreen" name="fullscreen"/>
    <button >
      <label y="0" x="0" w="100%" h="100%" text="Text"/>
      <image image="earth" draw_type="icon" y="0" x="right" w="30" h="100%"/>
    </button>
  </column>

完整示例请参考 ui/button.xml


AWTK 中的图片显示方式

一、显示方式

AWTK 提供了多种图片显示方式：

  • 居中显示 (center)。将图片按原大小显示在目标矩形的中央。
  • 缩放显示 (scale)。将图片缩放至目标矩形的大小（不保证宽高成比例）。
  • 自动缩放显示 (scale_auto)。将图片缩放至目标矩形的宽度或高度（选取最小的比例），并居中显示。
  • 宽度缩放显示 (scale_w)。将图片缩放至目标矩形的宽度，高度按此比例进行缩放，超出不部分不显示。
  • 高度缩放显示 (scale_h)。将图片缩放至目标矩形的高度，宽度按此比例进行缩放，超出不部分不显示。
  • 平铺显示 (repeat)。
  • 水平方向平铺显示，垂直方向缩放 (repeat_x)。
  • 垂直方向平铺显示，水平方向缩放 (repeat_y)。
  • 9 宫格显示 (patch9)。将图片分成等大小的 9 块，4 个角按原大小显示在目标矩形的 4 个角，左右上下和中间 5 块分别缩放显示在对应的目标区域。
  • 水平方向 3 宫格显示，垂直方向居中 (patch3_x)。将图片在水平方向上分成等大小的 3 块，左右两块按原大小显示在目标矩形的左右，中间一块缩放显示在目标区域中间剩余部分。
  • 垂直方向 3 宫格显示，水平方向居中 (patch3_y)。将图片在垂直方向上分成等大小的 3 块，上下两块按原大小显示在目标矩形的上下，中间一块缩放显示在目标区域中间剩余部分。
  • 水平方向 3 宫格显示，垂直方向缩放 (patch3_x_scale_y)。将图片在水平方向上分成等大小的 3 块，左右两块按原大小显示在目标矩形的左右，中间一块缩放显示在目标区域中间剩余部分。
  • 垂直方向 3 宫格显示，水平方向缩放 (patch3_y_scale_x)。将图片在垂直方向上分成等大小的 3 块，上下两块按原大小显示在目标矩形的上下，中间一块缩放显示在目标区域中间剩余部分。

二、在程序中使用（仅限于 image 控件）

image_set_draw_type(img, IMAGE_DRAW_CENTER);

三、在 XML 界面描述文件中使用（仅限于 image 控件）

<window name="main" x="0" y="0" w="320" h="480">
  <image style="border" x="0" y="0" w="50%" h="50%" image="earth" draw_type="center"/>
  <image style="border" x="0" y="50%" w="100%" h="50%" image="earth" draw_type="repeat"/>
</window>

四、在窗体样式中使用（适用于所有控件的背景）

<progress_bar>
  <style name="img_v"  bg_image="slider_v_bg" fg_image="slider_v_fg" text_color="black"
    bg_image_draw_type="patch3_y" fg_image_draw_type="patch3_y">
    <normal/>
  </style>
</progress_bar>

五、查看实际效果

images.xml 展示了各种绘制方式。

./bin/preview_ui demos/assets/raw/ui/images.xml


文档

0. 参考手册

  • 参考手册
  • 参考手册 (chm)
  • 开发实践

1. 使用文档

  • 避坑指南
  • AWTK 控件的布局参数介绍
  • AWTK 界面描述文件介绍
  • AWTK 中的图片显示方式
  • AWTK 中的矢量图绘图函数
  • AWTK 中的事件处理函数
  • AWTK 中的国际化之字符串翻译
  • AWTK 中的窗体样式
  • AWTK 中的 system_bar 使用方法
  • AWTK 中的资源管理器
  • AWTK 中的窗口动画
  • AWTK 中的控件动画
  • LCD 旋转（横屏与竖屏）
  • AWTK 中的输入法
  • AWTK 硬件资源需求评估
  • AWTK 中的一些惯例
  • 对话框高亮策略
  • 控件焦点相关问题
  • AWTK 中的颜色格式
  • AWTK 输入事件处理流程
  • 内存耗尽处理流程
  • 实时切换主题
  • 键值映射
  • 应用程序的入口函数
  • 资源打包
  • LCD 密度与图片的对应关系
  • slide_view/pages 各个页面缺省的焦点控件

2.HowTos

  • AWTK 调试技巧
  • AWTK 优化技巧
  • 如何加入中文输入法
  • 如何在 Visual Studio 中调试 AWTK
  • 如何在非 GUI 线程操作 GUI 控件
  • 如何启用鼠标指针
  • 如何启用屏保
  • 如何设置字体的全局缩放比例
  • 如何实现”back”键和”home”键
  • 如何实现自定义的软键盘
  • 如何编译 Windows 32 位版本
  • 如何支持单色 LCD
  • 如何使用 mutable_image 控件
  • 如何让文本滚动起来
  • 如何在窗体样式文件中写控件布局参数
  • 如何开启按键音
  • 如何更新拼音输入法数据
  • 如何集成第三方库
  • 如何使用 stb 外部硬件 YUV 转 RGB
  • 如何设置自定义键值

3. 内部原理

  • AWTK 脚本绑定原理

4. 移植文档

  • 嵌入式平台移植注意事项
  • 将 AWTK 移植到 STM32f103ze 裸系统
  • 将 AWTK 移植到 STM32f429igtx 裸系统
  • 将 AWTK 移植到 AWorksOS 平台
  • 将 AWTK 移植到 TinyOS 平台
  • 将 AWTK 移植到 RT-Thread 平台

5. 技术笔记

  • LCD 接口的三种实现方式
  • FrameBuffer 的几种使用方式

6. 其它

  • 常见问题解答
  • 修改 AWTK 的代码风格
  • AWTK 是如何保证代码质量的

7. 第三方文档

  • AWTK 编译与调试 环境搭建指南


输入事件处理流程

本文介绍一下 AWTK 中 Pointer 事件和 Key 事件的处理流程。

一、事件处理的三个阶段

第一阶段：子控件处理前。

控件内部实现时，可以重载 on_event_before_children 处理这个阶段的事件。

应用程序开发者可以注册 XXX_BEFORE_CHILDREN 之类的事件处理这个阶段的事件。这些事件包括：

  • EVT_POINTER_DOWN_BEFORE_CHILDREN
  • EVT_POINTER_MOVE_BEFORE_CHILDREN
  • EVT_POINTER_UP_BEFORE_CHILDREN
  • EVT_KEY_DOWN_BEFORE_CHILDREN
  • EVT_KEY_UP_BEFORE_CHILDREN

第二阶段：子控件处理。

子控件处理时同样遵循这个三个阶段。

第三阶段：子控件处理后。

控件内部实现时，可以重载 on_event 处理这个阶段的事件。

应用程序开发者可以注册正常的 pointer 事件和 key 事件处理这个阶段的事件。这些事件包括：

  • EVT_POINTER_DOWN
  • EVT_POINTER_MOVE
  • EVT_POINTER_UP
  • EVT_KEY_DOWN
  • EVT_KEY_UP

二、事件终止

如果在某个阶段，处理事件后，不希望后面阶段继续处理，让事件处理函数返回 RET_STOP 即可。


输入法

输入法是 GUI 重要的组件之一，虽然实现起来并不是太复杂，但其涉及的组件比较多，理解起来还是比较困难的，这里介绍一下 AWTK 中输入法的内部架构。

一、软键盘

在嵌入式系统中，通常没有物理键盘，所以需要在屏幕上实现软键盘。AWTK 中的软键盘是一个普通的窗口，其中的按钮和候选字控件，都是用 AWTK 的 UI 描述文件定义的，可以方便实现各种不同的软键盘。软键盘的描述文件放在 res/raw/ui 目录下，文件名以 kb_打头。

与普通窗口相比，软键盘有以下不同：

  • 被点击时不会影响原有编辑器的焦点。
  • 缺省不接受按键事件(除非指定grab_keys属性为true)和输入文本事件。

为了实现方便，AWTK 中引入了一个 keyboard 的窗口类，在设计时考虑了下面几个问题：

    1. 软键盘上有多个页面。有的输入中文，有的输入大写字母，有的输入小写字母，有的输入数字，有的输入符号。

方案： 在软键盘中可以放多个页面，点击切按钮时进行切换。按钮的名字以”page:”开头，即意味着按下该按钮时切换到指定的页面。比如，下面的按钮被点击时就会切换到数字符号键盘：

 <button name="page:symnum" style="1:highlight" w="15%" text="123"/>
    2. 不同的编辑器需要不同的软键盘。比如输入数值的编辑器得到焦点时，就应该只显示输入数值的软键盘。

方案： 为不同输入类型的编辑器提供不同软键盘，这些软键盘有各自的 UI 描述文件。输入类型和 UI 描述文件名之间的对应关系如下：

输入类型 | 键盘描述文件 | 说明
INPUT_PHONE | kb_phone | 电话号码
INPUT_INT | kb_int | 整数
INPUT_FLOAT | kb_float | 浮点数
INPUT_UINT | kb_uint | 非负整数
INPUT_UFLOAT | kb_ufloat | 非负浮点数
INPUT_HEX | kb_hex | 16 进制
INPUT_EMAIL | kb_ascii | 邮件地址
INPUT_PASSWORD | kb_ascii | 密码
其它 | kb_default |

参考：input_methods/input_method_default.c

    3. 软键盘上的按钮存在多种功能。有点用于切换软键盘上页面，有的用于输入文本，有的提交按键给输入法引擎进一步处理，有的用于删除最后输入的字符。

方案： 通过按钮的名字决定其功能：

按钮名称 | 功能说明
return | 回车键
action | 定制按钮
backspace | 删除键
tab | tab键
space | 空格键
close | 关闭软键盘
clear | 清除编辑器的内容
cancel | 恢复编辑器的内容
back | 关闭当前窗口
back_to_home | 返回home窗口
前缀key: | 键值
前缀hard_key: | 模拟物理键盘
前缀page: | 切换到页面
前缀opt: | 多个字符选择一个，点击切换到下一个，超时提交字符(用于实现九宫格输入)
    4. 有时需要显示候选字有时不需要。

方案： 提供一个候选字控件，可以根据需要加入到软键盘描述文件中。

参考：res/raw/ui/kb_default.xml

详情请参考 keyboard 的文档。

二、输入法接口及实现

AWTK 作为一个通用的 GUI，需要考虑以下几种情况：

    1. 不需要输入法。
    2. 低端嵌入式设备没有资源启用输入法。
    3. 手机/PC 有原生的输入法，不需要 AWTK 提供一套输入法。
    4. 在中高端嵌入式设备中，有资源启用输入法而且需要输入法。

针对上面几种情况，AWTK 提供了三种不同的实现，可以根据需要加入对应的实现：

  • null 实现只是提供了空的实现，不启用输入法和软键盘。
  • sdl 实现包装了原生输入法 (SDL 的实现有些问题，还需要进一步完善）。
  • default 提供了自己的实现，负责软键盘的打开关闭和输入法引擎的创建。

三、输入法引擎及实现

输入法引擎主要负责将用户的按键转换成一组候选字（这些候选字将在软键盘上的候选字控件上显示出来）。输入法引擎有很多，不同的语言也有不同的输入法引擎。请参考 输入法引擎

四、编辑器

编辑器只需要在得到焦点或失去焦点时，请求输入法打开或关闭输入法即可。

五、键盘控制打开、关闭和 toggle 输入法

在没有触屏的系统中，可能需要用按键来打开、关闭和 toggle 输入法，否则软键盘一旦弹出来，就没有办法关闭了。

我们可以重新定义以下的宏，来实现这个功能。

#ifndef TK_KEY_CLOSE_INPUT_METHOD
#define TK_KEY_CLOSE_INPUT_METHOD TK_KEY_F7
#endif /*TK_KEY_CLOSE_INPUT_METHOD*/

#ifndef TK_KEY_OPEN_INPUT_METHOD
#define TK_KEY_OPEN_INPUT_METHOD TK_KEY_F8
#endif /*TK_KEY_OPEN_INPUT_METHOD*/

#ifndef TK_KEY_TOGGLE_INPUT_METHOD
#define TK_KEY_TOGGLE_INPUT_METHOD TK_KEY_F9
#endif /*TK_KEY_TOGGLE_INPUT_METHOD*/

六、其它

  • 修改候选字的最大个数，重新定义宏 TK_IM_MAX_CANDIDATE_CHARS 即可。
#define TK_IM_MAX_CANDIDATE_CHARS 32


控件布局器 (layouter)

一、为什么需要控件布局器 (layouter)

如果界面上元素是预先知道的，而且窗口的大小也是固定的，通过可视化的工具，以所见即所得的方式，去创建界面是最轻松的方式。但是在下列情况下，使用布局参数是更好的选择。

  • 需要适应不同大小的屏幕。
  • 窗口的大小可以动态调整的。
  • 界面上的元素是动态的，需要用程序创建界面。

AWTK 提供了简单而又强大的布局参数。

二、概述

AWTK 的布局器 (layouter) 分为两类，一类用于对控件自身进行布局，另外一类用于对子控件进行布局。

  • self_layout 对控件自身进行布局
  • children_layout 用于对子控件进行布局

AWTK 提供了灵活的扩展机制，可以方便的扩展新的布局方式，所以 self_layouter 和 children_layouter 都是接口。

三、控件自身的布局

  • 1.缺省控件布局器介绍
  • 2.菜单布局器介绍

以后会陆续实现 css flex 等布局方式。

三、子控件的布局

  • 1.缺省子控件布局器介绍
  • 2.ListView 子控件布局器介绍

以后会陆续实现 css flex 等布局方式。


LCD 接口的四种实现方式

LCD 是对显示设备的抽象，提供了基本的绘图函数。自己去实现 LCD 接口虽然不难，但是需要花费不少功夫，AWTK 提供了几种缺省的实现，利用这些缺省的实现，在移植到新的平台时，一般只需要很少的代码就行了。

下面我们介绍一下几种常见的 LCD 实现方式：

1. 基于寄存器实现的 LCD

在低端的嵌入式平台上，内存只有几十 KB，没有足够的内存使用 framebuffer，通常直接向寄存器中写入坐标和颜色数据。lcd_reg.inc 提供了基于寄存器实现的 LCD，用它实现不同平台的 LCD 时，只需要提供两个宏即可：

  • set_window_func 设置要写入颜色数据的区域，相对于每次设置坐标而言，可以极大提高工作效率。
  • write_data_func 写入颜色数据。

下面是 STMF103ze 上 LCD 的实现，这里把 set_window_func 定义为 TFT_SetWindow，把 write_data_func 定义为 TFT_WriteData:

#include "tftlcd.h"
#include "tkc/mem.h"
#include "lcd/lcd_reg.h"

typedef uint16_t pixel_t;

#define LCD_FORMAT BITMAP_FMT_BGR565
#define pixel_from_rgb(r, g, b)                                                \
  ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
#define pixel_to_rgba(p)                                                       \
  { (0xff & ((p >> 11) << 3)), (0xff & ((p >> 5) << 2)), (0xff & (p << 3)) }

#define set_window_func LCD_Set_Window
#define write_data_func LCD_WriteData_Color

#include "base/pixel.h"
#include "blend/pixel_ops.inc"
#include "lcd/lcd_reg.inc"

基于寄存器实现的实现有几个限制：

  • 由于内存和 CPU 性能的问题，不提供任何类型的动画。
  • 由于读取 LCD 当前内容速度很慢，所以需要与底色进行混合时，由 GUI 自己处理 (APP 无需关心）。
  • 屏幕大时会出现闪烁。

在 AWTK 中，不再推荐此方法，基于片段帧缓冲实现的 LCD 是更好的选择。

2. 基于片段帧缓冲实现的 LCD

2.1 介绍

在低端的嵌入式平台上，内存只有几十 KB，没有足够的内存创建一屏的帧缓冲，而使用基于寄存器的方式屏幕容易闪烁。

比较好的办法是，创建一小块帧缓冲，把屏幕分成很多小块，一次只绘制一小块。由于有脏矩形机制，除了打开新窗口时，在正常情况下，绘制速度仍然很快，可以有效的解决闪速问题。

2.2 方式 1

lcd_mem_fragment.inc 提供了基于片段帧缓冲实现的 LCD，用它实现不同平台的 LCD 时，只需要提供两个宏即可：

  • set_window_func 设置要写入颜色数据的区域，相对于每次设置坐标而言，可以极大提高工作效率。
  • write_data_func 写入颜色数据。

下面是 STMF103ze 上 LCD 的实现，这里把 set_window_func 定义为 TFT_SetWindow，把 write_data_func 定义为 TFT_WriteData:

#include "tftlcd.h"

#include "tkc/mem.h"
#include "lcd/lcd_mem_fragment.h"

typedef uint16_t pixel_t;

#define LCD_FORMAT BITMAP_FMT_BGR565
#define pixel_from_rgb(r, g, b)                                                \
  ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
#define pixel_to_rgba(p)                                                       \
  { (0xff & ((p >> 11) << 3)), (0xff & ((p >> 5) << 2)), (0xff & (p << 3)) }

#define set_window_func LCD_Set_Window
#define write_data_func LCD_WriteData_Color

#include "base/pixel.h"
#include "blend/pixel_ops.inc"
#include "lcd/lcd_mem_fragment.inc"

完整示例请参考：https://github.com/zlgopen/awtk-stm32f103ze-raw/blob/master/awtk-port/lcd_stm32_raw.c

2.3 方式 2

在有的情况下，也可以选择实现宏 lcd_draw_bitmap_impl，它复杂把变化的部分更新到物理设备（如 SPI 屏）。看看 lcd_mem_fragment_flush 的实现，你大概就会明白如何实现 lcd_draw_bitmap_impl 宏了。

static ret_t lcd_mem_fragment_flush(lcd_t* lcd) {
  lcd_mem_fragment_t* mem = (lcd_mem_fragment_t*)lcd;

  int32_t x = mem->x;
  int32_t y = mem->y;
  uint32_t w = mem->fb.w;
  uint32_t h = mem->fb.h;
  pixel_t* p = mem->buff;

#ifdef lcd_draw_bitmap_impl
  lcd_draw_bitmap_impl(x, y, w, h, p);
#else
  uint32_t nr = w * h;
  set_window_func(x, y, x + w - 1, y + h - 1);
  while (nr-- > 0) {
    write_data_func(*p++);
  }
#endif

  return RET_OK;
}

3. 基于 framebuffer 实现的 LCD

3.1 介绍

这是在嵌入式平台上最常见的方式。一般有两个 framebuffer，一个称为 online framebuffer，一个称为 offline framebuffer。online framebuffer 是当前现实的内容，offline framebuffer 是 GUI 当前正在绘制的内容。lcd_mem_rgb565 提供了 rgb565 格式的 LCD 实现，lcd_mem_rgba8888 提供了 rgba8888 格式的 LCD 实现，它们都是在 lcd_mem.inc 基础上实现的，要增加新的格式也是很方便的。

下面是 STMF767 上 LCD 的实现：

#define FB_ADDR (uint8_t*)0XC0000000

static uint8_t* s_framebuffers[2];

lcd_t* stm32f767_create_lcd(wh_t w, wh_t h) {
  lcd_t* lcd = NULL;
  uint32_t size = w * h * lcdltdc.pixsize;
  s_framebuffers[0] = FB_ADDR;
  s_framebuffers[1] = FB_ADDR + size;

#if LCD_PIXFORMAT == LCD_PIXFORMAT_ARGB8888
  lcd = lcd_mem_bgra8888_create_double_fb(w, h, s_framebuffers[0], s_framebuffers[1]);
#else
  lcd = lcd_mem_bgr565_create_double_fb(w, h, s_framebuffers[0], s_framebuffers[1]);
#endif /*LCD_PIXFORMAT*/

  return lcd;
}

online_fb_addr 一定要是系统显存的地址，offline_fb_addr 可以是任意一块内存。

请参考： https://github.com/zlgopen/awtk-stm32f767igtx-raw/blob/master/USER/main.c

3.2 online framebuffer 和 offline framebuffer

  • online framebuffer 相当于系统显存，一般更新 online framebuffer，图像就会显示到屏幕上。

  • offline framebuffer 是 GUI 绘制时使用的 framebuffer，GUI 会把控件绘制到 offline framebuffer 上，offline framebuffer 不会直接显示到显示到屏幕上。

一般通过下面几种方式将 offline framebuffer 上的图像显示到 online framebuffer 上：

  • swap 的方式。一般重载 lcd 的 swap 函数，通过系统调用切换 online framebuffer 和 offline framebuffer 的角色。一般适用于 linux 2/3 framebuffer 系统。

参考： https://github.com/zlgopen/awtk-linux-fb/blob/master/awtk-port/lcd_linux_fb.c

  • 缺省 flush 的方式。一般由 lcd 的 flush 函数把 offline framebuffer 中的图像（脏矩形内的部分） 拷贝到 online framebuffer。这是缺省实现，一般不需修改。在这种情况下，一般用 lcd_mem_xxx_create_double_fb 创建 lcd 对象，注意 online framebuffer 参数一定要是系统显存。

如果要做显示同步，也就是等显卡把数据真正显示到屏幕上，可以重载 lcd 的 sync 函数。一般适用于 linux 单 framebuffer 的情况。参考： https://github.com/zlgopen/awtk-linux-fb/blob/master/awtk-port/lcd_linux_fb.c

  • 自定义 flush 的方式。有的系统没有 online framebuffer，只有 offline framebuffer。比如显示屏与 MCU 之间用 SPI 连接，那就需要重载 flush 函数，把 offline framebuffer 中的图像（脏矩形内的部分） 数据传输到显示屏。在这种情况下一般用 lcd_mem_xxx_create_single_fb 创建 lcd 对象，并重载 lcd 的 flush 函数。

3.3 3FB

在嵌入式系统中，如果希望提供显示帧率，可以使用 3 framebuffer，这 3 个 framebuffer 的角色为：

  • online framebuffer 当前显示的 framebuffer。

  • offline framebuffer 当前绘制的 framebuffer。

  • next framebuffer 绘制就绪的 framebuffer，下一个周期切换成 online framebuffer。

3 framebuffer 一般需要配合中断使用，实现的比较复杂，新手请不要使用。

请参考：https://github.com/zlgopen/awtk-stm32f429igtx-raw/blob/master/USER/main.c

3.4 对于不支持的 LCD 格式或者 SPI 之类的特殊 LCD

此时可以使用 lcd_mem_special。在 flush 函数中把数据转成目标格式，或者提交到 SPI 屏。具体实现可以参考：https://github.com/zlgopen/awtk-linux-fb/blob/master/awtk-port/lcd_mem_others.c

4. 基于 vgcanvas 实现的 LCD

在支持 OpenGL 3D 硬件加速的平台上（如 PC 和手机），我们使用 nanovg 把 OpenGL 封装成 vgcanvas 的接口，在 vgcanvas 基础之上实现 LCD。lcd_vgcanvas.inc 将 vgcanvas 封装成 LCD 的接口，这里出于可移植性考虑，并没有直接基于 nanovg 的函数，而是基于 vgcanvas 的接口，所以在没有 GPU 时，如果 CPU 够强大，也是可以基于 agg/picasso 去实现的 LCD。

这种方式实现，一般不会在嵌入平台上使用，读者不需要关注它。

5. 总结

以上几种实现方式，基本上涵盖了最常用的场景，所以在移植 AWTK 到新的平台时，并不需要在实现 LCD 接口上费多少功夫。


LCD 旋转

有时开发板上接的 LCD 方向和我们需要的不同，比如 LCD 缺省是横屏显示的，但我们需要竖屏的效果。如果无法通过修改硬件来实现旋转，就只能用软件来实现了。AWKT 目前对双帧缓冲的情况有完善的支持，对基于寄存器的 LCD 需要在驱动中进行配置。

注：旋转最好由硬件或驱动来做，否则性能会有大幅度下降。本文档提供的方案，主要用于开发前期使用。

1 使用方法

1.1 使用 AWTK Designer 实现

在 AWTK Designer 左下角点击”项目设置”，在”LCD 旋转设置”一栏中选择旋转角度后点击”确认”即可。

1.2 使用 C 代码实现

在 src/main.c文件中定义一个宏，示例与宏的取值如下：

宏 | 作用
LCD_ORIENTATION_90 | 逆时针旋转90°
LCD_ORIENTATION_180 | 逆时针旋转180°
LCD_ORIENTATION_270 | 逆时针旋转270°
/* 逆时针旋转90° */
#define APP_LCD_ORIENTATION LCD_ORIENTATION_90

该宏需要在”#include “awtk_main.inc”“前进行定义。

1.3 快速旋转模式

AWTK 内部还提供了快速旋转模式，该机制能在旋转时保持较高的效率（和没有旋转时的运行效率几乎一样），但是兼容性比较差，具体如何使用请参考 如何使用高效的屏幕旋转

2 不同 LCD 实现方式对旋转的支持

AWTK 目前支持 3 种 LCD 实现方式，不同的实现方式对旋转的支持有所不同，下面我们一一介绍。

2.1 基于寄存器的 LCD(lcd_reg)

  1. 对触摸事件的坐标进行转换。
  2. 设置窗口管理器的大小为旋转之后的大小。

一般的 LCD 器件可以在驱动中设置像素的扫描顺序，在初始化时设置一下即可（未测试过），所以 AWTK 并没有对像素进行相应旋转。

注：参考：http://www.cnblogs.com/amanlikethis/p/3872515.html

2.2 基于 FrameBuffer 的 LCD(lcd_mem)

  1. 对触摸事件的坐标进行转换。
  2. 设置窗口管理器的大小为旋转之后的大小。
  3. offline fb 为旋转之后的大小，online fb 为原始大小。在 lcd flush 时需要进行旋转（在没有硬件旋转减速的情况下，会增加一点性能开销）。
  4. 在进行平移窗口动画时。AWTK 将图片直接贴到 online fb 上，处于性能的考虑，在截图时进行旋转，在贴图时直接拷贝。所以在 lcd_mem_draw_image 和 lcd_mem_take_snapshot 两个函数中做了处理。

2.3 基于 VGCanvas 的 LCD(lcd_vgcanvas)

  1. 对触摸事件的坐标进行转换。
  2. 矢量画布绘制时，旋转坐标。


国际化之字符串翻译

字符串翻译是 GUI 国际化时必须实现的功能之一，AWTK 没有选择 gettext 等第三方库，而是选择自己实现，主要出于以下几点考虑：

  • 减少不必要的第三方库的依赖。运行时需要的代码也就几十行，自己实现更简单代码更少。

  • 方便支持实时切换当前语言。自己实现字符串的翻译，不需要应用程序做额外的工作，即可实现实时切换当前语言。

一、XML 格式

我们采用 XML 文件 (UTF-8) 保存字符串的各个语言的对应关系，方便程序员和翻译人员进行编辑。如：

<string name="ok">
<language name="en_US">OK</language>
<language name="zh_CN">确定</language>
</string>

<string name="cancel">
<language name="en_US">Cancel</language>
<language name="zh_CN">取消</language>
</string>

<string name="value is %d">
<language name="en_US">value is %d</language>
<language name="zh_CN">值为%d</language>
</string>

在实际工作中，由程序员提供一个模板，让翻译人员翻译，翻译好之后交给程序员放到项目中。

二、二进制格式

XML 格式方便人类阅读和编辑，但不适合计算机处理。AWTK 使用了二进制格式保存，每种语言的字符串放在独立的文件中，字符串按升序存储，查询时使用二分查找。

文件名（资源名）使用『语言』+’_‘+『国家/地区』，如 en_US，表示美国英语。如果不想搞得太精细，也可以只用语言名，如 en，表示缺省的英语。在 XML 文件中的 language 的 name 中指定即可。

三、转换工具

我们提供了一个 strgen 的工具，它负责把 XML 的字符串文件转成紧凑高效的二进制文件（也可以直接转成资源常量）。

Usage: ./bin/strgen input outputidr [bin]

四、实时切换语言

为了支持实时切换语言，我们要保存没有翻译之前的字符串，这样在当前语言改变后，才能用该字符串重新进行翻译。这会有一点额外的内存开销，在 PC 上和手机上这点开销可以忽略不计，在低端嵌入式系统中这需要考虑了，所以 AWTK 提供一个宏 WITH_DYNAMIC_TR 来决定是否启用该功能。

五、动态字符串翻译

有些字符串是在运行时动态生成的，用一个模板根据当时的数据动态生成。这类字符串的翻译，需要程序员先用函数 locale_info_tr 获取当前语言的模板，生成真正要显示的字符串，再设置到控件中去。如：

  char str[64];
  const char* format = locale_info_tr(locale_info(), "value is %d");
  tk_snprintf(str, sizeof(str), format, value);
  widget_set_text_utf8(widget, str);

在切换当前语言时，这类字符串也需要特殊处理。注册窗口的的 EVT_LOCALE_CHANGED 事件的处理函数，然后做上面的处理即可：

static ret_t on_locale_changed(void* ctx, event_t* e) {
  ...
  return RET_OK;
}
...
widget_on(win, EVT_LOCALE_CHANGED, on_locale_changed, win);

六、图片翻译

在一些应用程序中，有些文字是直接绘制在图片上的。所以在切换到不同的语言时，需要加载不同的图片。这时只要在图片名称中包含『$locale$』即可，加载时自动替换成当前的语言。

如：图片名称为『flag_$locale$』，当前语言为 en_US，加载图片时会按下列顺序查找：

  • flag_en_US
  • flag_en
  • flag_

XML 中的用法：

<image style="border" image="flag_$locale$" draw_type="icon" />

image_set_image(image, "flag_$locale$");

也可以使用 资源名称的高级用法 来实现同样的功能。

七、数字时钟月份和星期的翻译

星期的格式用”W”，如：

<digit_clock style="green" format="W"/>

月份的格式用”MMM”，如：

<digit_clock style="green" format="MMM"/>

星期要翻译的字符串如下：

<string name="Mon">
<language name="en_US">Mon</language>
<language name="zh_CN">星期一</language>
</string>

<string name="Tues">
<language name="en_US">Tues</language>
<language name="zh_CN">星期二</language>
</string>

<string name="Wed">
<language name="en_US">Wed</language>
<language name="zh_CN">星期三</language>
</string>

<string name="Thur">
<language name="en_US">Thur</language>
<language name="zh_CN">星期四</language>
</string>

<string name="Fri">
<language name="en_US">Fri</language>
<language name="zh_CN">星期五</language>
</string>

<string name="Sat">
<language name="en_US">Sat</language>
<language name="zh_CN">星期六</language>
</string>

<string name="Sun">
<language name="en_US">Sun</language>
<language name="zh_CN">星期天</language>
</string>

月份要翻译的字符串如下：

<string name="Jan">
<language name="en_US">Jan</language>
<language name="zh_CN">一月</language>
</string>

<string name="Feb">
<language name="en_US">Feb</language>
<language name="zh_CN">二月</language>
</string>

<string name="Mar">
<language name="en_US">Mar</language>
<language name="zh_CN">三月</language>
</string>

<string name="Apr">
<language name="en_US">Apr</language>
<language name="zh_CN">四月</language>
</string>

<string name="May">
<language name="en_US">May</language>
<language name="zh_CN">五月</language>
</string>

<string name="Jun">
<language name="en_US">Jun</language>
<language name="zh_CN">六月</language>
</string>

<string name="Jul">
<language name="en_US">Jul</language>
<language name="zh_CN">七月</language>
</string>

<string name="Aug">
<language name="en_US">Aug</language>
<language name="zh_CN">八月</language>
</string>

<string name="Sept">
<language name="en_US">Sept</language>
<language name="zh_CN">九月</language>
</string>

<string name="Oct">
<language name="en_US">Oct</language>
<language name="zh_CN">十月</language>
</string>

<string name="Nov">
<language name="en_US">Nov</language>
<language name="zh_CN">十一月</language>
</string>

<string name="Dec">
<language name="en_US">Dec</language>
<language name="zh_CN">十二月</language>
</string>

八、使用方法

  • XML 中用 tr_text 属性指定。如：
  <label ... tr_text="ok"/>
  • C 代码通过函数 widget_set_tr_text 设置文本（如果不需要翻译，则用 widget_set_text 设置）:
widget_set_tr_text(radio_button, "Chinese");

九、示例

demotr 提供了实时切换语言的示例，代码可以参考 demos/demo_tr_app.c。运行下面的程序可以看到效果：

./bin/demotr

缺省的 demo 中并没有带完整的中文字体，如果翻译之后的文字无法显示，请把 default.ttf 换成自己的字体文件。

十、注意事项

    1. 在源文件中最好不要用非英文字符串。如果一定要用，源文件的格式一定要用 UTF8-BOM 编码，这个可以用 vscode 或记事本转换，否则在 Windows 平台可能出现乱码。
    2. 在 XML 中，以下字符需要转义成 HTML 实体
字符 | 转义实体
< | &lt;
> | &gt;
“ | &quot;

示例：

<string name="&lt;&quot;en&amp;zh&quot;&gt;">
<language name="en_US">&lt;&quot;en&amp;zh&quot;&gt;</language>
<language name="zh_CN">&lt;&quot; 英文&amp; 中文&quot;&gt;</language>
</string>
    3. tr_text 中的内容只是一个用来查找的 key，如果翻译的内容比较长，建议用一个精简且唯一的句子代替即可。这样，写起来简单，运行时又节省内存。

比如：用来介绍 AWTK 的文字，在 UI 文件中，可以这样写：

  <label ... tr_text="awtk_intro"/>

<string name="awtk_intro">
<language name="en_US">AWTK , the abbreviation of Toolkit AnyWhere, is an open source GUI engine developed by ZLG. It is a cross-platform GUI engine for embedded systems, WEB, mini programs, mobile phones and PC. It is a powerful, efficient, reliable and easy-to-use GUI engine for users to design beautiful GUI applications.</language>
<language name="zh_CN">AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。</language>
</string>


参考手册

一、GUI 相关组件

控件

widget

  • widget 所有控件、窗口和窗口管理器的基类。

窗口管理器

  • window_manager 窗口管理器。

窗口

  • window_base 窗口基类。
  • dialog 对话框。
  • popup 弹出窗口。
  • window 普通窗口。
  • system_bar 系统状态窗口。
  • calibration_win 电阻屏校准窗口。
  • overlay 悬浮窗口。

基本控件

  • button 按钮控件。
  • label 文本控件。
  • edit 单行编辑器控件。
  • image 图片控件。
  • dragger dragger 控件。
  • draggable draggable 控件。
  • image_base 图片控件基类。
  • check_button 多选按钮。
  • radio_button 单选按钮。
  • spin_box 数值编辑器控件。
  • combo_box 下拉列表控件。
  • combo_box_ex 可滚动的下拉列表控件。
  • combo_box_item 下拉列表项控件。
  • color_tile 色块控件。
  • dialog_title 对话框标题控件。
  • dialog_client 对话框客户区控件。
  • slider 滑块控件。
  • progress_bar 进度条控件。
  • tab_control 标签控件。
  • tab_button 标签按钮控件。
  • tab_button_group 标签按钮分组控件。

通用容器控件

  • row 行控件。
  • column 列控件。
  • grid 网格控件。
  • view 通用容器控件。
  • grid_item 网格项控件。
  • group_box 通用分组控件。
  • app_bar app_bar 控件。
  • button_group 按钮分组控件。

扩展控件

  • candidates 软键盘候选字控件。
  • canvas_widget 画布控件。
  • color_picker 颜色选择器控件。
  • gif_image gif_image 控件。
  • guage 仪表控件。
  • guage_pointer 仪表指针控件。
  • image_animation 图片动画控件。
  • image_value 图片值控件。
  • keyboard 软键盘控件。
  • progress_circle 进度圆环控件。
  • rich_text 图文混排控件。
  • rich_text_view 用于协调 rich text 和 scrollbar 控件。
  • slide_menu 左右滑动菜单控件。
  • slide_view 滑动视图控件。
  • slide_view_indicator 滑动视图的指示器控件。
  • svg_image SVG 图片控件。
  • switch 开关控件。
  • text_selector 文本选择器控件。
  • time_clock 模拟时钟控件。
  • digit_clock 数字时钟控件。
  • list_view 列表视图控件。
  • list_view_h 水平列表视图控件。
  • list_item 列表项控件。
  • scroll_bar 滚动条控件。
  • scroll_view 滚动视图控件。
  • mledit 多行编辑器控件。
  • line_number 多行编辑器的行号控件。
  • mutable_image mutable 图片控件（用于辅助实现 camera/video)。
  • file_browser_view 文件浏览控件。

常用常量

  • 控件状态定义

  • 控件属性定义

画布

普通画布

  • canvas

  • canvas offline

矢量图画布

  • vgcanvas

资源相关组件

  • asset_info 资源信息。
  • assets_manager 资源管理器。

1. 字体

  • glyph 字模。
  • font 字体。
  • font_loader 字体加载器。
  • font_loader_ft 基于 freetype 实现的字体加载器。
  • font_loader_stb 基于 stb 实现的字体加载器。
  • font_loader_bitmap 基于位图实现的字体加载器。
  • font_manager 字体管理器。

2. 图片

  • bitmap 位图。
  • image_loader 图片加载器。
  • image_loader_stb stb 图片加载器。
  • image_manager 图片管理器。

3. 字符串资源

  • locale_info 本地化信息。

4. 窗体样式

  • style style 接口。
  • theme 常量窗体样式数据。
  • style_factory style 工厂。
  • style_const 只读的 style。
  • style_mutable 可修改的 style。

5.UI 描述数据

  • ui_loader loader 接口。

  • ui_builder builder 接口。

  • ui_builder_default 缺省 builder 实现，负责构建 widget 树。

  • ui_xml_writer 生成 XML 格式的 UI 描述数据。

  • ui_binary_writer 生成二进制格式的 UI 描述数据。

  • ui_loader_default 二进制格式的 UI 资源加载器。

  • ui_loader_xml XML 格式的 UI 资源加载器。

输入法

  • input_type 输入类型（用于控制软键盘和输入格式）
  • input_method 输入法接口。
  • input_method_default 输入法缺省实现。
  • input_method_sdl 输入法 SDL 实现。

  • input_method_null 输入法空实现。

  • input_engine 输入法引擎接口。

  • input_engine_null 空输入法引擎实现。
  • input_engine_pinyin 拼音输入法引擎实现。

定时器/IDLE

  • timer 定时器。

  • timer_info 单个 timer 的信息。

  • idle 用于异步执行一些函数。

  • idle_info 单个 idle 的信息。

布局器

  • self_layouter 控件自身排版布局器的接口

  • children_layouter 子控件排版布局器的接口

  • self_layouter_factory 控件自身排版布局器的工厂。

  • children_layouter_factory 子控件排版布局器的的工厂。

  • self_layouter_default 缺省的控件自身布局算法实现。

  • self_layouter_menu 菜单控件自身布局算法实现。

  • children_layouter_default 缺省的子控件布局算法实现。

  • children_layouter_list_view 列表视图的子控件布局算法实现。

lcd

  • lcd LCD 接口

  • lcd_type LCD 类型定义

  • lcd_draw_mode LCD 绘制模式

  • lcd_mem_fragment 片段 LCD

  • lcd_orientation LCD 旋转常量

  • lcd_mem_bgr565 bgr565 格式的 LCD

  • lcd_mem_bgr888 bgr888 格式的 LCD

  • lcd_mem_bgra8888 bgra8888 格式的 LCD

  • lcd_mem_rgb565 rgb565 格式的 LCD

  • lcd_mem_rgb888 rgb888 格式的 LCD

  • lcd_mem_rgba8888 bgra8888 格式的 LCD

  • lcd_mem_special 特殊格式的 LCD

  • lcd_mono 单色 LCD

  • lcd_profile 用于 profile 性能的 LCD

杂项

  • system_info 系统信息。

二、基本函数库

容器与基本数据结构

  • darray 动态数组。
  • slist 单向链表。
  • wbuffer Write Buffer。
  • rbuffer Read Buffer。
  • ring_buffer 循环缓存区。
  • str 可变长度的 UTF8 字符串。
  • wstr 可变长度的宽字符字符串。
  • object 对象接口。
  • object_default 对象接口的缺省实现。

  • object_array 简单的动态数组，内部存放 value 对象。

  • point 点。

  • rect 矩形。
  • color 颜色对象。
  • pointf 点（浮点数格式）。
  • int_str 数字-字符串类型
  • str_str 字符串-字符串类型
  • named_value 命名的值。
  • value 一个通用数据类型，用来存放整数、浮点数、字符串和其它对象。
  • emitter 事件分发器，用于实现观察者模式。
  • rgba RGBA 颜色值。
  • asset_info 资源类型定义。

流

  • istream 输入流的接口。
  • ostream 输出流的接口。

  • iostream 输入/出流的接口。

  • iostream_mem 内存输入输出流。

  • istream_mem 内存输入流。

  • ostream_mem 内存输出流。

  • istream_file 文件输入流。

  • ostream_file 文件输出流。

  • iostream_tcp TCP 输入输出流。

  • istream_tcp TCP 输入流。

  • ostream_tcp TCP 输出流。

  • iostream_udp UDP 输入输出流。

  • istream_udp UDP 输入流。

  • ostream_udp UDP 输出流。

  • iostream_serial 串口输入输出流。

  • istream_serial 串口输入流。

  • ostream_serial 串口输出流。

  • istream_buffered 缓冲输入流。

  • ostream_buffered 缓冲输出流。

  • iostream_noisy 故障注入流。

  • ostream_noisy 故障注入输出流。

  • iostream_shdlc SHDLC 输入输出流。

  • istream_shdlc SHDLC 输入流。

  • ostream_shdlc SHDLC 输出流。

  • ostream_retry 重传输出流。

并发

  • mutex 互斥锁。
  • thread 线程。
  • semaphor 信号量。
  • cond_var 简化版条件变量。

事件与事件源

  • event 事件基类。
  • timer_info 单个定时器的信息。
  • timer_manager 定时器管理器
  • idle_info 单个 idle 的信息。
  • idle_manager idle_manager_t 管理器
  • event_source 事件源接口。
  • event_source_fd 基于文件描述符的事件源实现。
  • event_source_idle 基于 IDLE 的事件源实现。
  • event_source_timer 基于 Time 的事件源实现。
  • event_source_manager 事件源管理器的接口。
  • event_source_manager_default 创建事件源管理器。

压缩解压

  • compressor 压缩解压接口。
  • compressor_miniz 基于 miniz 实现的压缩解压接口。

平台相关

  • fs 文件系统
  • fs_dir 目录
  • fs_file 文件
  • fs_item 目录或目录。
  • path 路径相关的工具函数。
  • memory 内存管理相关函数和宏。
  • date_time 时间日期函数。
  • time_now 获取当前时间的函数。
  • platform 平台接口，包括：获取时间、休眠等函数
  • socket_pair 生成两个可以互相通信的 socket 句柄。

数据格式

  • ubjson_parser
  • ubjson_writer
  • xml_parser

工具类

  • easing 缓动作常量定义。
  • utils 工具类
  • utf8 wchar_t 和 char 类型转换接口
  • matrix 2D 阵变换。
  • func_desc 函数描述。
  • value_desc 属性描述。
  • func_call_parser 从字符串中解析出函数调用需要的参数。
  • tokenizer 从字符串中解析出一个一个的 token。
  • color_parse 颜色解析对象。


键值映射

AWTK 控件支持键值映射，也就是将一个键值转换成另外一个键值。

有的硬件平台只有四个方向和其它少数几个键。比如在 listview 界面，希望按 up/down 键时执行翻页的功能，此时可以把 up 键映射 pageup，把 down 映射成 pagedown。

如：

<list_view x="0"  y="0" w="100%" h="-50" item_height="60" map_key:up="pageup" map_key:down="pagedown">

键值映射可以放到任何控件，请根据自己的需要调整。

键名的定义请参考 enums.c。


内存分配器

1. 介绍

  • mem_allocator 定义了内存分配器的基本接口
/**
 * @method mem_allocator_alloc
 * 分配指定大小的内存。
 *
 * @param {mem_allocator_t*} allocator allocator 对象。
 * @param {uint32_t} size 内存的大小。
 * @param {const char*}  分配内存的函数（用于调试）。
 * @param {uint32_t} line 分配内存的行数（用于调试）。
 *
 * @return {void*} 成功返回内存块的地址，失败返回 NULL。
 */
static inline void* mem_allocator_alloc(mem_allocator_t* allocator, uint32_t size, const char* func,
                                        uint32_t line) ;

/**
 * @method mem_allocator_realloc
 * 重新分配指定大小的内存。
 *
 * @param {mem_allocator_t*} allocator allocator 对象。
 * @param {void*} ptr 原来内存的地址。
 * @param {uint32_t} size 内存的大小。
 * @param {const char*} 分配内存的函数（用于调试）。
 * @param {uint32_t} line 分配内存的行数（用于调试）。
 *
 * @return {void*} 成功返回内存块的地址，失败返回 NULL。
 */
static inline void* mem_allocator_realloc(mem_allocator_t* allocator, void* ptr, uint32_t size,
                                          const char* func, uint32_t line) ;

/**
 * @method mem_allocator_free
 * 释放内存。
 *
 * @param {mem_allocator_t*} allocator allocator 对象。
 * @param {void*} ptr 内存的地址。
 *
 * @return {void*} 成功返回内存块的地址，失败返回 NULL。
 */
static inline void mem_allocator_free(mem_allocator_t* allocator, void* ptr) ;

/**
 * @method mem_allocator_dump
 * 显示内存信息，用于调试。
 *
 * @param {mem_allocator_t*} allocator allocator 对象。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
static inline ret_t mem_allocator_dump(mem_allocator_t* allocator);

2. 基本内存分配器

  • mem_allocator_std 基于标准内存管理函数 malloc/free/realloc 实现的内存分配器。在系统提供了 malloc/free/realloc 函数时，请使用本分配器。

  • mem_allocator_simple AWTK 本身实现的一个简单内存分配器，在系统没有提供 malloc/free/realloc 函数时，请使用本分配器。

通过宏 HAS_STD_MALLOC 来选择是否使用标准的内存分配器。一般在 PC 上修改 awtk_config.py，在嵌入式系统一般修改 awtk_config.h。

3. 装饰器-加锁

mem_allocator_lock 对现有的 allocator 进行包装，提供互斥功能。由于标准内存分配器使用的 malloc/free/realloc 本身有互斥功能，所以本装饰器主要用于 mem_allocator_simple 。

4. 装饰器-防止碎片

mem_allocator_pool 对现有的 allocator 进行包装，预先分配一部分内存，用于分配小块内存，可以避免内存碎片。

经过测试，一般情况下，80%的情况，都是小块内存，在 pool 中分配，可以有效的防止内存碎片。

开发者可以跟踪 mem_allocator_pool 的使用情况，根据实际情况调整预先分配的块数。

5. 装饰器-调试

mem_allocator_debug 对现有的 allocator 进行包装，记录分配的内存，用于帮助分析内存的使用和泄露。

由于 mem_allocator_debug 本身会占用一部分内存，一般在 PC 上使用。

一般按下指定快捷键时调用 tk_mem_dump 显示内存使用情况，如：

c
  if (evt->key == TK_KEY_F9) {
    tk_mem_dump();
    return RET_STOP;
  } else if (evt->key == TK_KEY_F10) {
    /*有时释放缓存数据后，再显示内存信息，可以排除一步部分干扰*/
    font_manager_unload_all(font_manager());
    image_manager_unload_all(image_manager());
    assets_manager_clear_cache(assets_manager(), ASSET_TYPE_UI);
    tk_mem_dump();
    return RET_STOP;
  }

宏 ENABLE_MEM_LEAK_CHECK 决定是否开启调试功能。在 PC 上一般修改 awtk_config.py，在嵌入式系统一般修改 awtk_config.h。

一般长时间运行，才能得出真实数据。可以结合输入事件记录与重放来结合测试。

请参考 demos/demo_ui_app.c

6. 装饰器-内存耗尽

mem_allocator_oom 对现有的 allocator 进行包装，如果分配内存失败，调用预先设置的回调函数释放内存，然后再重试。

给应用程序优雅退出的机会。


在 windows 下使用 gcc 编译 AWTK

在 windows 下，如果不想使用 Visual C++编译，也可以使用 gcc 编译。具体方法如下：

  • 1.根据实际情况下载不同的版本的 mingw

  • 2.解压后将 路径 ${实际目录}/mingw64/bin 添加到系统环境变量 PATH 中。

  • 3.修改 awtk_config_common.py，放开注释掉的 TOOLS_NAME。

TOOLS_NAME = 'mingw'
  • 编译
scons


优化技巧

一、优化提示

  • memcpy 是最快的贴图方式，所以对于不透明的图片，尽量保持与 Framebuffer 一致的格式，这样可以直接使用 memcpy 贴图。

比如 FrameBuffer 的格式是 BGR565，请定义宏 WITH_BITMAP_BGR565。

  • 背景图片使用 JPG 格式或者不透明的 PNG 文件。

  • 旋转对于性能影响非常大，除非支持硬件加速旋转，最好不要使用旋转功能。

  • 缩放对于性能影响较大，尽量按按原图大小显示。

  • 不要采用 24 位 LCD，24 位不是总线对齐的，会导致性能明显下降。

  • 如果支持硬件加速，确保（半）透明的图片解码成硬件支持的格式。

比如对于 PXP/DMA2D 硬件加速，请定义宏 WITH_BITMAP_BGRA。

  • memcpy 的速度对于 AWTK 非常重要。如果显示速度不理想，请测试一下 memcpy 的速度。

如果 memcpy 的速度不理想，请检查一下 GUI 使用的内存是否配置正确（如 cache 等）。

  • 在窗口动画中，平移动画是最快的动画。所以请优先采用水平平移、垂直平移、底部弹出和顶部弹出几种动画。在没有硬件加速时，不要使用缩放和淡入的窗口动画。

  • 在控件动画中，平移动画和值动画是最快的，淡入/淡出其次，缩放和旋转是最慢的。PXP/DMA2D 加速不能用于加速缩放和旋转，所以除非有 GPU，否则缩放和旋转动画只适用于少量小图片。

  • 在不旋转和缩放的情况下，SVG 图片比普通图片慢，但在旋转和缩放的情况下，SVG 比普通图片快数倍。在仪表指针等需要旋转场景中，使用 SVG 图片可以显著提高性能。

  • 绘制一帧需要的时间是一个重要指标。

可以在 src/base/window_manager.c:window_manager_paint_normal 中查看 wm->last_paint_cost 的值。

  • 排除法有时能快速定位性能瓶颈。

  1. 怀疑字体渲染太慢？让 lcd_draw_glyph 直接返回，看看效果如何。

  2. 怀疑图片渲染太慢？lcd_draw_image 直接返回，看看效果如何。

  3. 怀疑填充颜色太慢？lcd_fill_rect 直接返回，看看效果如何。

  4. 怀疑硬件加速没有效果，用纯软件渲染试试，对比一下渲染一帧需要的时间。

  • 使用 3 个 framebuffer 可以避免 GUI 等待和拷贝，能够有效提高帧率，有条件时尽量启用。

  • 猜测往往是错误的，请用函数 time_now_ms 去度量你怀疑的地方。

二、工具

如果定义全局的宏（在工程中定义）ENABLE_PERFORMANCE_PROFILE，会使用 lcd_profile 对全部绘制函数（图片、文字和填充等等）进行时间统计。当绘制一帧需要的时间超过 25ms，会打印一些信息：

###
###
###
###
###
###
###
###
###
###
###
####
src/base/lcd_profile.c:326
-------------------------------------
  total_cost=30
  draw_image_cost=18 times=1
  draw_text_cost=0 times=15
  fill_cost=0 times=15
  stroke_cost=0 times=15
  end_frame_cost=10
-------------------------------------

也可以在 lcd_profile_end_frame 函数里设置一个断点，从 profile 对象上能查看到更详细的统计信息：

  uint32_t total_cost;
  uint32_t swap_cost;
  uint32_t flush_cost;

  uint32_t draw_image_cost;
  uint32_t draw_image_times;
  uint32_t draw_image_pixels;

  uint32_t draw_text_cost;
  uint32_t draw_text_times;
  uint32_t draw_text_chars;

  uint32_t fill_cost;
  uint32_t fill_times;
  uint32_t fill_pixels;

  uint32_t stroke_cost;
  uint32_t stroke_times;
  uint32_t stroke_pixels;

参考 lcd_profile.c


优化 freetype 解析矢量字体的显示效果

一、freetype 的缺陷

矢量字体（TrueType）通过数学曲线来描述字形，包含字形边界上的关键点、连线的导数信息等。

freetype 解析矢量字体的过程是将字形关键点按照规则连线变成字符轮廓，最后再将轮廓填充成点阵字。

很明显，在这个过程中，字形关键点是字体轮廓精准的度量，而位图则可以看成网格状态的，单位为像素，那么将坐标点转化为位图的过程势必会导致精度丢失，比如点坐标为(1.2, 2.8)，那么转换成位图则变成了(1, 3)。

并且由于 freetype 为了提高运算速度，采用位移的方式进行数学计算势必会导致精度丢失更加严重，在处理一些小字号字体或像素字体时，容易发生像素块粘连的现象，因此，AWTK 针对该问题做了一些优化。

像素字体也是矢量字体，只是该字体由正方形的像素块组成，其字体轮廓只有直线，像素块与像素块之间的间距比较小，具体效果可上网搜索“方正像素18”、“方正像素24”等关键字。

二、针对 freetype 缺陷所做优化

2.1 提高 freetype 解析字体的精度

虽然 freetype 解析字体时精度丢失无法避免，但提高运算精度依然可以优化显示效果。

freetype 提供两种计算二次贝塞尔曲线的精度，低精度 0.5 个像素，高精度 0.0625 个像素。其默认采用低精度进行运算，当栅格化过程中垂直方向上的扫描点小于 24 个时，freetype 会自动开启标志位 FT_OUTLINE_HIGH_PRECISION，采用高精度运算。

2.2 关闭 auto_hint

要了解 auto_hint 首先需要知道什么是 hinting 。

hinting 用来优化字体显示的方法。由于屏幕像素有限，矢量字体的缩放需要有更多的考虑，例如当一条线在两个像素格子中间时，该取左边的格子还是右边的格子？如果这方面没做好，就常常会出现字形衬线没对齐、或小字号字形歪七扭八、或像素块粘连到一起的情况。

hinting 是额外的信息，它告诉 渲染器 renderer 该如何处理这些细节部分，使矢量字在小字号时显示效果更好，因此，hinting 是非常费时费人力的工作，TrueType 字体很多，但是有良好 hinting 的不多，拙劣的 hinting 会让字变得很难看。

为了改善以上问题，freetype 提供了 auto_hint 功能，并默认开启该功能，它可以自动为没有 hinting 的字体做 hinting 工作，auto_hint 肯定无法做得像人力 hinting 一样好，对于许多笔画复杂的文字（如中文）效果不佳，并且对于小字号的复杂字形，经常造成一系列反效果，最典型问题的就是像素粘连。

因此，经过多次测试，AWTK 决定关闭 freetype 的 auto_hint 功能以对大多数矢量字体达到更好的效果，通过设置标志位 FT_LOAD_NO_AUTOHINT 可关闭该功能。

//awtk/src/font_loader/font_loader_ft.c
...
uint32_t flags = FT_LOAD_DEFAULT | FT_LOAD_RENDER | FT_LOAD_NO_AUTOHINT;
...


优化 stb_truetype 在 mono 模式下的字体显示效果

stb_truetype 解析 ttf 字体文件时，输出的字模为灰度图，如果需要在mono模式下使用stb_truetype 则需要另外编写二值化算法。

一、stb_truetype 的二值化算法

AWTK 通过给定阈值实现 stb_truetype 的二值化算法，代码如下：

//awtk/src/font_loader/font_loader_stb.c
static ret_t font_stb_gray_to_mono_by_threshold(const glyph_t* gray, glyph_t* mono,
                                                uint32_t threshold) {
  return_value_if_fail(gray != NULL && mono != NULL && gray->format == GLYPH_FMT_ALPHA,
                       RET_BAD_PARAMS);
  uint32_t i = 0;
  uint32_t j = 0;
  uint16_t h = gray->h;
  uint16_t w = gray->w;

  mono->format = GLYPH_FMT_MONO;
  mono->h = h;
  mono->w = w;
  mono->pitch = ((mono->w + 15) >> 4) << 1;
  mono->x = gray->x;
  mono->y = gray->y;
  mono->advance = gray->advance;

  uint32_t nmemb = mono->pitch * h;
  uint8_t* bitmap = TKMEM_CALLOC(nmemb, sizeof(uint8_t));
  return_value_if_fail(bitmap != NULL, RET_OOM);
  for (j = 0; j < h; ++j) {
    for (i = 0; i < w; ++i) {
      if (gray->data[w * j + i] > threshold) {
        uint32_t offset = j * mono->pitch + (i >> 3);
        uint32_t offset_bit = 7 - (i % 8);
        bitmap[offset] += 0x1 << offset_bit;
      }
    }
  }
  mono->data = bitmap;
  return RET_OK;
}

二、优化二值化阈值

经测试发现二值化阈值与 ttf 字体文件和字号有关，因此，对 stb_truetype 获取的灰度图字模进行二值化的阈值做了调整，在不同字号区间使用不同的阈值，代码如下：

//awtk/src/font_loader/font_loader_stb.c
static ret_t font_stb_get_glyph(font_t* f, wchar_t c, font_size_t font_size, glyph_t* g) {
  ...
  if (bitmap != NULL) {
    if (font->mono) {
      glyph_t* gray_g = glyph_clone(g);
      gray_g->data = bitmap;
      uint32_t threshold = font_size > 24? (font_size > 48 ? (font_size > 71 ? (font_size > 95 ? 195 : 175) : 160) : 118) : 95;
      font_stb_gray_to_mono_by_threshold(gray_g, g, threshold);
      STBTT_free(bitmap, NULL);
      glyph_destroy(gray_g);
    } else {
      g->data = bitmap;
    }
    ...
  }

  return g->data != NULL || c == ' ' ? RET_OK : RET_NOT_FOUND;
}

可以看出 stb_truetype 在 mono 模式下的字体显示效果主要由阈值 threshold 决定，这些阈值是通过测试不断调整得到的，用户也可针对自己使用矢量字体文件进行调整。


内存耗尽处理流程

当 AWTK 应用程序内存分配失败时，会做以下尝试：

    1. 释放最近 10 秒内没有用过的图片缓存，然后内存管理器再尝试分配内存。
    2. 释放全部图片缓存，然后内存管理器再尝试分配内存。
    3. 发出 EVT_LOW_MEMORY 事件，应用程序此时可以释放不必要的内存，然后内存管理器再尝试分配内存。
    4. 发出 EVT_OUT_OF_MEMORY 事件，应用程序此时可以释放紧急备用内存，保存重要数据，重启应用程序。
    5. 如果第 4 步应用程序没有重启，内存管理器返回 NULL，后面发生的事情自求多福。

为了避免内存泄漏导致内存耗尽，建议应用程序编译awtk-linux-fb版本，用valgrind检查是否存在内存泄漏的问题。

注册事件的示例：

static ret_t wm_on_low_memory(void* ctx, event_t* evt) {
  log_debug("low memory\n");
  return RET_OK;
}

static ret_t wm_on_out_of_memory(void* ctx, event_t* evt) {
  log_debug("out of memory\n");
  return RET_OK;
}

widget_t* wm = window_manager();
widget_on(wm, EVT_LOW_MEMORY, wm_on_low_memory, wm);
widget_on(wm, EVT_OUT_OF_MEMORY, wm_on_out_of_memory, wm);


slide_view/pages 各个页面缺省的焦点控件

正常情况下，一个窗口只能指定一个初始焦点。

对于 pages/slideview 来说，在没有触摸屏的情况下，仅用键盘操作，可能希望每一个页面都有一个初始焦点，此时可以用 pages/slideview 的直接子控件 view 的属性 default_focused_child 来该页面的初始焦点控件，default_focused_child 的值可以是子控件的类型或名称。

<window anim_hint="htranslate">
  <slide_view x="0" y="0" w="100%" h="100%" >
    <view x="0" y="0" w="100%" h="100%"
        children_layout="default(r=0,c=1,s=0,m=0)"
        default_focused_child="list_view">

        <list_view w="100%" h="100%" item_height="80" focused="true" >
        ...
        </list_view>
    </view>

    <view x="0" y="0" w="100%" h="100%"
        children_layout="default(r=0,c=1,s=0,m=0)"
        default_focused_child="list_view">

        <list_view w="100%" h="100%" item_height="80" >
        ...
        </list_view>
    </view>
  </slide_view>

注意：仍然需用 focused=”true”指定窗口的初始焦点，窗口的初始焦点一定要在缺省页面上。


用 picasso 实现 vgcanvas 遇到的一些问题。

颜色格式

SDL 的 Texture 为 SDL_PIXELFORMAT_RGBA8888 时，picasso 的 canvas 的格式要使用 COLOR_FORMAT_ABGR。

矩阵变换

矩阵变换存在两个问题：

  • 在生成路径时，picasso 没有立即用矩阵对顶点进行变化，所以如果在生成路径的过程中修改矩阵，会影响之前的路径，这与 HTML5 Canvas 中的行为不符。所以修改了 picasso_api.cpp，用矩阵立即对路径的顶点进行变化。

  • picasso 的矩阵与常规做法不同。比如，旋转并不是基于 world 原点而是基于 view 原点。这与 HTML5 Canvas 中的行为不符。所以矩阵变化在外部完成，再同步到 picasso 中。

图片格式

在 picasso 的 canvas 格式使用 COLOR_FORMAT_ABGR 时，其图片采样格式与 stb 加载的格式相反。所以修改了 gfx_span_image_filters.h，让 RGBA 的图片按固定格式采样。


嵌入式平台移植注意事项

一、配置的宏

awtk_config.h

/**
 * 嵌入式系统有自己的 main 函数时，请定义本宏。
 *
 * #define USE_GUI_MAIN 1
 */

/**
 * 如果需要支持预先解码的位图字体，请定义本宏。一般只在 RAM 极小时，才启用本宏。
 * #define WITH_BITMAP_FONT 1
 */

/**
 * 如果支持 png/jpeg 图片，请定义本宏
 *
 * #define WITH_STB_IMAGE 1
 */

/**
 * 如果用 stb 支持 Truetype 字体，请定义本宏
 *
 * #define WITH_STB_FONT 1
 */

/**
 * 如果用 freetype 支持 Truetype 字体，请定义本宏。
 *
 * #define WITH_FT_FONT 1
 */

/**
 * 如果支持从文件系统加载资源，请定义本宏
 *
 * #define WITH_FS_RES 1
 */

/**
 * 如果代码在 flash 中，而资源在文件系统，请定义本宏指明资源所在的路径。
 *
 * #define APP_RES_ROOT "0://awtk/"
 *
 */

/**
 * 如果定义本宏，使用标准的 UNICODE 换行算法，除非资源极为有限，请定义本宏。
 *
 * #define WITH_UNICODE_BREAK 1
 */

/**
 * 如果定义本宏，将图片解码成 BGRA8888 格式，否则解码成 RGBA8888 的格式。
 * 当硬件的 2D 加速需要 BGRA 格式时，请启用本宏。
 *
 * #define WITH_BITMAP_BGRA 1
 */

/**
 * 如果定义本宏，将不透明的 PNG 图片解码成 BGR565 格式，建议定义。
 * 另外和 LCD 的格式保存一致，可以大幅度提高性能。
 * 如果没有定义 WITH_BITMAP_BGR565 和 WITH_BITMAP_RGB565 宏，默认解析为 32 位色
 *
 * #define WITH_BITMAP_BGR565 1
 */

/**
 * 如果定义本宏，将不透明的 PNG 图片解码成 RGB565 格式，建议定义。
 * 另外和 LCD 的格式保存一致，可以大幅度提高性能。
 * 如果没有定义 WITH_BITMAP_BGR565 和 WITH_BITMAP_RGB565 宏，默认解析为 32 位色
 *
 * #define WITH_BITMAP_RGB565 1
 */

/**
 * 如果不需输入法，请定义本宏
 *
 * #define WITH_NULL_IM 1
 */

/**
 * 如果有标准的 malloc/free/calloc 等函数，请定义本宏
 *
 * #define HAS_STD_MALLOC 1
 */

/**
 * 如果有标准的 fopen/fclose 等函数，请定义本宏
 *
 * #define HAS_STDIO 1
 */

/**
 * 如果有标准的 pthread 等函数，请定义本宏
 *
 * #define HAS_PTHREAD 1
 */

/**
 * 如果有优化版本的 memcpy 函数，请定义本宏
 *
 * #define HAS_FAST_MEMCPY 1
 */

/**
 * 如果出现 wcsxxx 之类的函数没有定义时，请定义该宏
 *
 * #define WITH_WCSXXX 1
 */

/**
 * 如果启用 STM32 G2D 硬件加速，请定义本宏
 *
 * #define WITH_STM32_G2D 1
 */

/**
 * 如果启用 NXP PXP 硬件加速，请定义本宏
 *
 * #define WITH_PXP_G2D 1
 */

/**
 * 在没有 GPU 时，如果启用 agge 作为 nanovg 的后端（较 agg 作为后端：小，快，图形质量稍差），请定义本宏。
 *
 * #define WITH_NANOVG_AGGE 1
 */

/**
 * 在没有 GPU 时，如果启用 agg 作为 nanovg 的后端（较 agge 作为后端：大，慢，图形质量好），请定义本宏。
 * 注意：agg 是以 GPL 协议开源。
 *
 * #define WITH_NANOVG_AGG 1
 */

/**
 * 如果启用鼠标指针，请定义本宏
 *
 * #define ENABLE_CURSOR 1
 */

/**
 * 对于低端平台，如果不使用控件动画，请定义本宏。
 *
 * #define WITHOUT_WIDGET_ANIMATORS 1
 */

/**
 * 对于低端平台，如果不使用窗口动画，请定义本宏。
 *
 * #define WITHOUT_WINDOW_ANIMATORS 1
 */

/**
 * 对于低端平台，如果不使用对话框高亮策略，请定义本宏。
 *
 * #define WITHOUT_DIALOG_HIGHLIGHTER 1
 */

/**
 * 对于低端平台，如果不使用扩展控件，请定义本宏。
 *
 * #define WITHOUT_EXT_WIDGETS 1
 */

/**
 * 对于低端平台，如果内存不足以提供完整的 FrameBuffer，请定义本宏启用局部 FrameBuffer，可大幅度提高渲染性能。（单位是像素个数）
 *
 * #define FRAGMENT_FRAME_BUFFER_SIZE 32 * 1024
 */

/**
 * 启用输入法，但不想启用联想功能，请定义本宏。
 *
 * #define WITHOUT_SUGGEST_WORDS 1
 */

/**
 * 如果需要从 zip 文件中加载资源，请定义本宏。
 *
 * #define WITH_ASSET_LOADER_ZIP 1
 */

/**
 * 对于只有 512K flash 的平台，而且 LCD 格式是 BGR565。如果希望进一步优化空间，去掉多余的 bitmap 格式支持代码。请定义本宏。
 * 其它 LCD 格式，可以自行修改：src/blend/soft_g2d.c 保留需要的格式即可。
 *
 * #define LCD_BGR565_LITE 1
 */

/**
 * 如果希望支持文字双向排版算法（如阿拉伯语言），请定义本宏。
 *
 * #define WITH_TEXT_BIDI 1
 *
 */

/**
 * 开启自定义的离线 canvas，如果板子使用特殊的画布的话，需要定义该宏来定义特殊离线 canvas 函数
 *
 * #define WITH_CANVAS_OFFLINE_CUSTOM 1
 */

/**
 * 开启透明色背景的刷新机制，一般使用在多图层的透明背景使用
 *
 * #define WITH_LCD_CLEAR_ALPHA 1
 */

/**
 * 如果支持多块不连续的内存块，请定义内存块的数目。
 *
 * #define TK_MAX_MEM_BLOCK_NR 4
 */

/**
 * 用于控制窗口动画是否使用缓存。开启后可以降低内存需求(减少2倍framebuffer大小的内存)，如果内存紧缺，在下面情况可以开启：
 *  1. 界面简单
 *  2. CPU速度快
 *
 * 如果绘制速度慢，而且内存紧缺，建议关闭窗口动画。
 *
 * 限制条件：
 *  1.不支持缩放窗口动画。
 *  2.不支持对话框高亮策略。
 *
 * #define WITHOUT_WINDOW_ANIMATOR_CACHE 1
 */

请参考：src/base/awtk_config_sample.h

二、include 路径

awtk/src
awtk/src/ext_widgets
awtk/3rd
awtk/3rd/agge
awtk/3rd/nanovg
awtk/3rd/nanovg/base
awtk/3rd/gpinyin/include
awtk/3rd/libunibreak
awtk-port

三、要加入到工程的文件

文件 | 说明
src/awtk_global.c | 加入
src/tkc | 全部加入
src/base | 全部加入
src/widgets | 全部加入
src/xml | 全部加入
src/ui_loader | 全部加入
src/svg | 支持 vgcanvas 时全部加入
src/blend | 使用 framebuffer 时全部加入
src/ext_widgets | 使用扩展控件时全部加入
src/font_loader | 推荐全部加入（可只加需要的）
src/image_loader | 推荐全部加入（可只加需要的）
src/input_engines | 不需要输入法时加入 input_engine_null.c，否则加入 input_engine_pinyin.cpp
src/input_methods | 加入 input_method_creator.c，根据宏决定启用何种输入法
src/lcd | 根据 LCD 类型 (OpenGL/FrameBuffer/Register）选择相应的文件
src/main_loop | 嵌入式系统一般使用 main_loop_simple.c
src/misc | 如果没有标准的内存管理函数请加入
src/native_window | 一般加入 native_window_raw.*
src/window_manager | 一般加入 window_manager_default.*
src/graphic_buffer | 一般加入 graphic_buffer_default.*
src/platforms/raw/fs_os.c | 如果没有文件系统请加入，否则请自行实现 fs 接口
src/platforms/raw/mutex_null.c | 如果没有 mutex 请加入，否则请自行实现 mutex 接口
src/platforms/raw/sys_tick.c | 如果需要自己实现 sys tick 中断，可以加入
src/vgcanvas | 如果需要矢量图或图片旋转（不支持 lcd_reg) 请加入 vgcanvas_nanovg_soft.c，否则加入 vgcanvas_null.c
src/widget_animators | 除了使用 LCD_REG 的平台外推荐全部加入
src/window_animators | 加入全部文件，根据宏决定是否启用。
src/ubjson | 不用不加。
src/streams | 一般不加。
awtk/3rd/agge | 在 framebuffer 模式启用 vgcanvas 时加入
awtk/3rd/gpinyin/src | 启用拼音输入法时加入
awtk/3rd/nanovg/base | 在启用 vgcanvas 时加入
awtk/3rd/nanovg/agge | 在启用 vgcanvas 时加入
awtk/3rd/libunibreak | 建议加入
awtk-port | 加入各个平台自己的移植代码。
awtk/demos | 在使用 ui demos 可以加入：assets.c demo_main.c demo_ui_app.c。

四、其它

    1. 如果要加载 png/jpg 图片格式 StackSize 不小于 32K。
    2. 使用 keil 编译时，请在 C/C++ -> Misc Controls 中加上–gnu 标志。
    3. 如果系统有 FPU，初始化时一定要开启 FPU。
    4. 在工程中定义宏 HAS_AWTK_CONFIG。


将AWTK移植到AWorksOS平台

AWTK的可移植性很高，在移植时只需要实现平台初始化、lcd和mainloop三个方面的东西。本文以aworks-rt1052平台为例介绍移植AWTK到新平台的过程。

一、平台初始化

除了基本的libc函数外，AWTK对平台没有特别要求，实现获取当前时间的函数get_time_ms64和sleep_ms函数即可。另外需要给GUI分配一块内存空间，并调用tk_mem_init。

#include "aw_system.h"
#include "aw_delay.h"
#include "base/mem.h"
#include "base/timer.h"

uint32_t get_time_ms64() {
  return aw_sys_tick_get();
}

void sleep_ms(uint32_t ms) {
  aw_mdelay(ms);
}

#define TK_MEM_SIZE 4 * 1024 * 1024

ret_t platform_prepare(void) {
  uint32_t* mem = (uint32_t*) aw_mem_alloc(TK_MEM_SIZE);
  return_value_if_fail(mem != NULL, RET_OOM);

  tk_mem_init(mem, TK_MEM_SIZE);

  return RET_OK;
}

参考：awtk-port/platform.c

二、实现lcd

AWorksOS使用基于framebuffer的lcd的缺省实现，只需要调用函数lcd_mem_create_double_fb即可。

#include "aw_emwin_fb.h"
#include "aw_sem.h"
#include "aw_cache.h"
#include "aw_delay.h"
#include "aw_vdebug.h"
#include <string.h>

#include "base/types_def.h"
static uint32_t *s_frame_buffer = 0;
static uint32_t *s_offline_frame_buffer = 0;
static aw_emwin_fb_info_t *s_awtk_fb = NULL;

uint32_t* aworks_get_online_fb(void) {
  return s_frame_buffer;
}

uint32_t* aworks_get_offline_fb(void) {
  return s_offline_frame_buffer;
}

aw_emwin_fb_info_t* aworks_lcd_init(void) {
  int fb_size = 0;
  s_awtk_fb = aw_emwin_fb_open("imx1050_emwin_fb", 0);
  return_value_if_fail(s_awtk_fb != NULL, NULL);

  fb_size = s_awtk_fb->x_res * s_awtk_fb->y_res * 2;

  s_frame_buffer = (uint32_t*) aw_cache_dma_malloc(fb_size);
  return_value_if_fail(s_frame_buffer != NULL, NULL);
  memset(s_frame_buffer, 0x00, fb_size);

  s_offline_frame_buffer = (uint32_t*) aw_cache_dma_malloc(fb_size);
  return_value_if_fail(s_offline_frame_buffer != NULL, NULL);
  memset(s_offline_frame_buffer, 0x00, fb_size);

  return_value_if_fail(
      AW_OK == aw_emwin_fb_init(s_awtk_fb, s_frame_buffer, AW_FB_VERTICAL_SCREEN),
      NULL);

  aw_emwin_fb_run(s_awtk_fb);

  aw_emwin_fb_backlight(s_awtk_fb, 100);

  return s_awtk_fb;
}

参考 awtk-port/lcd_aworks.c

三、实现main_loop

main_loop主要负责事件分发和绘制这个不断循环的过程。main_loop_raw.inc里实现了裸系统main_loop的基本功能，在移植时加上输入事件的的分发即可：

static aw_ts_id ts_app_init(void) {
  aw_ts_id sys_ts = sys_ts = aw_ts_serv_id_get("480x272", 0, 0);
  return_value_if_fail(sys_ts != NULL, NULL);
  return_value_if_fail(aw_ts_calc_data_read(sys_ts) == AW_OK, NULL);

  return sys_ts;
}

ret_t platform_disaptch_input(main_loop_t* loop) {
  int tsret = 0;
  static aw_ts_id ts_id = NULL;
  struct aw_ts_state ts_state;

  memset(&ts_state, 0x00, sizeof(ts_state));
  if (ts_id == NULL) {
    ts_id = ts_app_init();
  }

  return_value_if_fail(ts_id != NULL, RET_FAIL);

  tsret = aw_ts_exec(ts_id, &ts_state, 1);
  if (tsret >= 0) {
    if (ts_state.pressed) {
      main_loop_post_pointer_event(loop, ts_state.pressed, ts_state.x,
          ts_state.y);
    } else {
      main_loop_post_pointer_event(loop, ts_state.pressed, ts_state.x,
          ts_state.y);
    }
  }

  return RET_OK;
}

extern uint32_t* aworks_get_online_fb(void);
extern uint32_t* aworks_get_offline_fb(void);

lcd_t* platform_create_lcd(wh_t w, wh_t h) {
  lcd_t* lcd = lcd_mem_rgb565_create_double_fb(w, h, (uint8_t*) aworks_get_online_fb(),
      (uint8_t*) aworks_get_offline_fb());

  return lcd;
}

#include "main_loop/main\_loop_raw.inc"

参考 awtk-port/main_loop_aworks.c

完整项目和源码请参考：awtk-aworks-rt1052


将 AWTK 移植到 STM32f103ze 裸系统

AWTK 的可移植性很高，在移植时只需要实现平台初始化、lcd 和 mainloop 三个方面的东西。本文以 STM32f103ze 为例介绍移植 AWTK 到新平台的过程。

一、平台初始化

除了基本的libc函数外，AWTK对平台没有特别要求，实现获取当前时间的函数get_time_ms64和sleep_ms函数即可。另外需要给GUI分配一块内存空间，并调用tk_mem_init。

我们使用 systick 来实现 get_time_ms64 和 sleep_ms 两个函数，裸系统上只需加入 src/platforms/raw/sys_tick.c 并初始化 sys_tick 即可。

以下是初始化内存的代码。

ret_t platform_prepare(void) {
  static bool_t inited = FALSE;
  static uint32_t s_heam_mem[4000];

  if (!inited) {
    inited = TRUE;
    tk_mem_init(s_heam_mem, sizeof(s_heam_mem));
  }

  return RET_OK;
}

参考：awtk-port/platform.c

以下是初始化 systick 的代码（在板子提供代码上修改而来）。

static u8 fac_us = 0;
static u16 fac_ms = 0;

void systick_enable_int(void) {
  SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;
  SysTick->LOAD = fac_ms;
  SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
}

void SysTick_Init(void) {
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  fac_us = SystemCoreClock / 8000000;
  fac_ms = (u16)fac_us * 1000;
}

void delay_us(u32 nus) {
  u32 temp = 0;
  SysTick->LOAD = nus * fac_us;
  SysTick->VAL = 0x00;
  do {
    temp = SysTick->CTRL;
  } while ((temp & 0x01) && !(temp & (1 << 16)));
}

void delay_ms(u16 nms) {
  u32 temp = 0;
  SysTick->LOAD = (u32)nms * fac_ms;
  SysTick->VAL = 0x00;
  do {
    temp = SysTick->CTRL;
  } while ((temp & 0x01) && !(temp & (1 << 16)));
}

参考：awtk-port/SysTick.c

二、实现 lcd

lcd_t 接口提供基本的显示功能，AWTK 提供基于寄存器、帧缓冲和片段帧缓冲三种缺省实现，在此基础上实现自己的 lcd_t 接口非常方便。

stm32f103ze 使用基于片段帧缓冲的 lcd 的缺省实现，只需要提供 set_window_func 和 write_data_func 两个函数/宏即可。这里直接使用了 TFT_SetWindow 和 TFT_WriteData 两个函数。

直接写寄存器的方式容易闪烁，而帧缓冲又需要大量内存，片段帧缓冲能有效解决低内存平台的闪烁问题。

#include "tftlcd.h"
#include "tkc/mem.h"
#include "lcd/lcd_mem_fragment.h"

typedef uint16_t pixel_t;

#define LCD_FORMAT BITMAP_FMT_BGR565
#define pixel_from_rgb(r, g, b)                                                \
  ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
#define pixel_to_rgba(p)                                                       \
  { (0xff & ((p >> 11) << 3)), (0xff & ((p >> 5) << 2)), (0xff & (p << 3)) }

#define set_window_func LCD_Set_Window
#define write_data_func LCD_WriteData_Color

#include "base/pixel.h"
#include "blend/pixel_ops.inc"
#include "lcd/lcd_mem_fragment.inc"

参考 awtk-port/lcd_stm32_raw.c

三、实现 main_loop

main_loop 主要负责事件分发和绘制这个不断循环的过程。main_loop_raw.inc 里实现了裸系统 main_loop 的基本功能，在移植时加上输入事件的的分发即可：

#include "key.h"
#include "led.h"
#include "rtc.h"
#include "stdlib.h"
#include "tftlcd.h"
#include "touch.h"
#include "usart.h"

#include "base/idle.h"
#include "base/timer.h"
#include "tkc/platform.h"
#include "base/main_loop.h"
#include "base/event_queue.h"
#include "base/font_manager.h"
#include "lcd/lcd_mem_fragment.h"
#include "main_loop/main_loop_simple.h"

ret_t platform_disaptch_input(main_loop_t *l) { return RET_OK; }

static lcd_t *platform_create_lcd(wh_t w, wh_t h) {
  return lcd_mem_fragment_create(w, h);
}

void dispatch_input_events(void) {
  int key = KEY_Scan(0);

  switch (key) {
  case KEY_UP: {
    key = TK_KEY_UP;
    break;
  }
  case KEY_DOWN: {
    key = TK_KEY_DOWN;
    break;
  }
  case KEY_LEFT: {
    key = TK_KEY_RETURN;
    break;
  }
  case KEY_RIGHT: {
    key = TK_KEY_BACK;
    break;
  }
  default: { key = 0; }
  }

  if (key) {
    main_loop_post_key_event(main_loop(), TRUE, key);
  } else {
    main_loop_post_key_event(main_loop(), FALSE, key);
  }

  if (TOUCH_Scan() == 0) {
    main_loop_post_pointer_event(main_loop(), TRUE, TouchData.lcdx,
                                 TouchData.lcdy);
  } else {
    main_loop_post_pointer_event(main_loop(), FALSE, TouchData.lcdx,
                                 TouchData.lcdy);
  }
}

void TIM3_IRQHandler(void) {
  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
    dispatch_input_events();
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  }
}

#include "main_loop/main_loop_raw.inc"

参考 awtk-port/main_loop_stm32_raw.c

四、Keil 设置

    1. 勾选 c99
    2. 定义 HAS_AWTK_CONFIG
    3. 增加如下头文件路径：
awtk\src
awtk\3rd
awtk-port

请根据项目文件位置进行调整。

五、其它配置

其它配置请参考 awtk-port/awtk_config.h

注：目前以 普中科技 STM32F103ZET6 开发实验板 为载体移植，其它开发板应该差不多。

完整项目和源码请参考：awtk-stm32f103ze-raw

六、常见问题

  • 1.莫名其妙的崩溃，可能是栈溢出。请修 Stack_Size 的大小。
 Stack_Size      EQU     0x00001000
  • 2.如果出现 wcsxxx 之类的函数没有定义时，请在 awtk-port/awtk_config.h 中定义 WITH_WCSXXX。


将AWTK移植到STM32f429igtx裸系统

AWTK的可移植性很高，在移植时只需要实现平台初始化、lcd和mainloop三个方面的东西。本文以STM32f429igtx为例介绍移植AWTK到新平台的过程。

一、平台初始化

除了基本的libc函数外，AWTK对平台没有特别要求，实现获取当前时间的函数get_time_ms64和sleep_ms函数即可。另外需要给GUI分配一块内存空间，并调用tk_mem_init。

uint32_t get_time_ms64() {
  return HAL_GetTick();
}

void sleep_ms(uint32_t ms) {
  delay_ms(ms);
}

#define MEM2_MAX_SIZE   28912 * 1024
#define MEM2_ADDR (uint8_t*)0XC01F4000

ret_t platform_prepare(void) {
  tk_mem_init(MEM2_ADDR, MEM2_MAX_SIZE);

  return RET_OK;
}

参考：awtk-port/platform.c

二、实现lcd

stm32f429igtx使用基于framebuffer的lcd的缺省实现，只需要调用函数lcd_mem_create_double_fb即可。

extern u32 *ltdc_framebuf[2];
#define online_fb_addr (uint8_t*)ltdc_framebuf[0]
#define offline_fb_addr (uint8_t*)ltdc_framebuf[1]

lcd_t* platform_create_lcd(wh_t w, wh_t h) {
  return lcd_mem_create_double_fb(lcdltdc.pwidth, lcdltdc.pheight, online_fb_addr, offline_fb_addr);
}

参考 awtk-port/main_loop_stm32_raw.c

三、实现main_loop

main_loop主要负责事件分发和绘制这个不断循环的过程。main_loop_raw.inc里实现了裸系统main_loop的基本功能，在移植时加上输入事件的的分发即可：

#include "base/g2d.h"
#include "base/idle.h"
#include "base/timer.h"
#include "lcd/lcd_mem_rgb565.h"
#include "main_loop/main_loop_simple.h"

extern u32 *ltdc_framebuf[2];
#define online_fb_addr (uint8_t*)ltdc_framebuf[0]
#define offline_fb_addr (uint8_t*)ltdc_framebuf[1]

uint8_t platform_disaptch_input(main_loop_t* loop) {
  int x = 0;
  int y = 0;
  uint8_t key = KEY_Scan(0);

  tp_dev.scan(0);

  x = tp_dev.x[0];
  y = tp_dev.y[0];

  y = lcdltdc.pheight - tp_dev.x[0];
  x = tp_dev.y[0];

  if(tp_dev.sta&TP_PRES_DOWN){
    main_loop_post_pointer_event(loop, TRUE, x, y);
  } else {
    main_loop_post_pointer_event(loop, FALSE, x, y);
  }

  return 0;
}

lcd_t* platform_create_lcd(wh_t w, wh_t h) {
  return lcd_mem_rgb565_create_double_fb(w, h, online_fb_addr, offline_fb_addr);
}

#include "main_loop/main_loop_raw.inc"

参考 awtk-port/main_loop_stm32_raw.c

注：正点原子的开发实验板为载体移植，其它开发板应该差不多。

完整项目和源码请参考：awtk-stm32f429igtx-raw


AWTK 是如何保证代码质量的

这是不少朋友关心的问题，这里统一回复一下。我们在保证 AWTK 的代码质量方面，主要采用了下列措施：

  • 架构设计。 软件架构对代码的质量有决定性的影响，但好的架构不是预先设计出来的，而是在应对各种需求和变化时，不断完善和优化出来的。常常见到，有人花十年时间打造一件绝世作品，也有人花几年时间让一套软件变成不可维护，这就是说明软件架构是在不断变化的，是变好还是变坏，则取决于开发者的意志。从一开始我们就把 AWTK 的架构优化放在首要地位，无论是增加新的功能还是修改 BUG，每一次改动都对 AWTK 的架构进行改进和优化。AWTK 的设计思想基本来自《系统程序员成长计划》，另外《设计模式》、《实时设计模式》、《软件框架设计的艺术》和《架构整洁之道》等书籍对 AWTK 架构的发展影响也很大。AWTK 的架构还有很大的改进空间，但我们相信通过不断的优化，AWTK 的架构会越来越完善。

  • 单元测试。 代码的可测试对于单元测试至关重要，如果在设计系统架构时，没有考虑可测试性，那么单元测试是很难写的（请参考 Bob 大叔的《架构整洁之道》)。所幸在设计 AWTK 之初，我们就非常注重它可测试性。针对接口编程和依赖注入 (DIP) 是提高代码可测试重要的方法，在 AWTK 中有大量的接口和依赖注入，这使得 AWTK 绝大部分组件都可以编写单元测试。有人说单元测试只能解决 25%-50%的问题。我赞同这个观点，单元测试不是全能的，但它确实非常有用，我们也在不断完善 AWTK 的测试用例，让单元测试起到更大的作用。

  • Code Review。 Code Review 也是提高代码质量极好的手段，每次增加新的功能或修改 BUG，我们都会去 Review 相关的代码。在 Review 时，经常发现一些丑陋的代码，有时甚至完全不相信这些代码是自己写出来的，这时会庆幸进行了 Code Review，否则这些丑陋的代码就不被发现。通过 Code Review 发现这些丑陋的代码，并及时对其重构，不但让提高了代码的质量，还能有效防止破窗效应的出现。

  • 在不同平台进行测试。 不同的平台、不同的编译器、甚至不同版本的操作系统和不同版本的编译器，都会发现新的问题。所以我们会定期在 MacOS，Linux、Windows 和各个嵌入式平台上进行测试，保证在各个平台上运行正常，这对提高代码质量也是非常有用的。

  • 对代码进行静态检查。 使用 cppcheck 和 facebook infer 进行静态检查。说实在的，如果平时写代码注意一点，静态分析的效果不大，偶尔能找出一个无关紧要的警告。

  • 对代码进行动态检查。 用 C/C++写代码时，内存问题，比如：内存泄露、越界访问和野指针，这些问题引发的后果，可能随机出现，也可能很长时间后才出现，所以很难调试和定位。幸好动态检查对这类问题非常有效，valgrind 是一个强大且免费的动态检查工具，它能检查出绝大部分内存问题（与运行时代码的覆盖率有关）。可惜它支持 Linux 平台，而且对 SDL 支持不好。为了使用 valgrind，我们及时支持了 Linux Framebuffer，这使得我们可以用 valgrind 对 AWTK 进行全面检查。

  • 手工测试。 手工测试也是必不可少的，我们会定期（基本上每天）手工把 demoui 中展现的功能测试一遍，有时会发现一些单元测试遗漏的问题或者无法自动测试的问题。

  • 经常修改。 《架构整洁之道》中提出一个观点：要使软件架构稳定，你就要不断的修改它。这个观点初看有点自相矛盾，经常修改的东西会稳定吗？仔细一想，它又确实与我们过去多年的经验不谋而合：增加新功能时去完善它，在修改 BUG 去完善它，没事就去 Review 并重构它，架构自然越来越好，代码质量自然越来越高。当然，前提你的单元测试用例尽可能完善，否则没人敢去修改一个大型项目的代码。如果你关注 AWTK，你就会发现 AWTK 几乎天天都有很多改动，这些改动可能并没有增加新的功能。

  • 群策群力。 ZLG 内部有不少同事在基于 AWTK 做项目，外部已经有不少公司开始使用 AWTK，他们也会发现一些漏网的问题，或提出一些新的需求。我们会及时响应这问题，对于严重的问题，基本上在当天都能解决。

对于一些特定平台出现的问题，我们没有重现的环境，希望发现问题的朋友，能静下心来去查找问题的原因，并分享出来。

  • 自动化集成测试。 AWTK 实现了自动化测试引擎，兼容 appium 接口，轻松实现 UI 全自动化测试。详情请参考 awtk-ui-automation

在 AWTK 中，肯定还有很多问题，以上这些措施也并不全面，我们还在持续努力中。欢迎大家提出问题和建议，也欢迎大家去挖掘 AWTK 中 BUG 和丑陋的代码，用这些东西对我们进行”打脸”和”羞辱”。


文档

0. 参考手册

  • 参考手册
  • 参考手册 (chm)
  • 开发实践

1. 使用文档

  • 避坑指南
  • AWTK 控件的布局参数介绍
  • AWTK 界面描述文件介绍
  • AWTK 中的图片显示方式
  • AWTK 中的矢量图绘图函数
  • AWTK 中的事件处理函数
  • AWTK 中的国际化之字符串翻译
  • AWTK 中的窗体样式
  • AWTK 中的 system_bar 使用方法
  • AWTK 中的资源管理器
  • AWTK 中的窗口动画
  • AWTK 中的控件动画
  • LCD 旋转（横屏与竖屏）
  • AWTK 中的输入法
  • AWTK 硬件资源需求评估
  • AWTK 中的一些惯例
  • 对话框高亮策略
  • 控件焦点相关问题
  • AWTK 中的颜色格式
  • AWTK 输入事件处理流程
  • 内存耗尽处理流程
  • 实时切换主题
  • 键值映射
  • 应用程序的入口函数
  • 资源打包
  • LCD 密度与图片的对应关系
  • slide_view/pages 各个页面缺省的焦点控件
  • 输入事件记录与重放
  • API 注释格式
  • 自定义控件规范
  • 动态库与静态库
  • 窗口之间如何通信
  • 为 512K Flash 优化空间
  • 如何绘制旋转文字
  • 如何修改 Windows 下应用程序的图标
  • 项目描述文件 project.json 介绍
  • 利用 app_helper 编写 SConstruct
  • 自定义控件支持脚本绑定
  • 编写跨平台的代码
  • 应用程序的类型
  • 如何引用第三方库
  • 在 windows 下使用 gcc 编译 AWTK
  • AWTK 中的字符串编码

2.HowTos

  • AWTK 调试技巧
  • AWTK 优化技巧
  • 如何使用离线画布
  • 如何加入中文输入法
  • 如何在 Visual Studio 中调试 AWTK
  • 如何在非 GUI 线程操作 GUI 控件
  • 如何启用鼠标指针
  • 如何启用屏保
  • 如何设置字体的全局缩放比例
  • 如何实现”back”键和”home”键
  • 如何实现自定义的软键盘
  • 如何编译 Windows 32 位版本
  • 如何支持单色 LCD
  • 如何使用 mutable_image 控件
  • 如何让文本滚动起来
  • 如何在窗体样式文件中写控件布局参数
  • 如何开启按键音
  • 如何更新拼音输入法数据
  • 如何用 valgrind 查找内存相关问题
  • 如何定制 combo_box 控件中按钮的风格和大小
  • 如何访问控件的属性
  • 如何集成第三方库
  • 如何使用对话框
  • 如何使用软键盘上的 action 按钮
  • 如何存取应用程序的配置信息
  • 如何实现弹出菜单
  • 如何用 edit 控件编辑日期
  • 如何用 edit 控件编辑时间
  • 如何用 edit 控件编辑 IP 地址
  • 如何支持 unicode bidirectional algorithm
  • 如何续期使用 AWTK Designer
  • 如何将生成的可执行文件和资源打包
  • 如何使用多点触控手势算法
  • 如何隐藏滚动条的上下按钮
  • 如何使用 packed 图
  • 如何根据实际分辨率自动调整窗口中子控件的位置大小
  • 如何修改 stb_truetype 获取字模时申请的缓冲区大小
  • 如何让内存管理器支持管理多块不连续的内存
  • 如何使用keil的AC6工具链编译
  • 如何支持极简键盘 (3 键键盘、5 键键盘和旋转按钮）
  • 如何在改变控件属性时附带动画
  • LCD快速旋转
  • 如何显示上下文菜单（俗称右键菜单）
  • 如何启用编辑器的上下文菜单
  • 如何设置下拉选择框 (combo box) 弹出窗口/列表项的样式
  • 如何支持软键盘按钮预览
  • 如何设置自定义键值
  • 如何自定义资源加载方式
  • 如何处理将文件拖入到窗口的事件
  • 如何将资源编译到应用程序并使用它们

3. 内部原理

  • AWTK 脚本绑定原理
  • AWTK 内存分配器
  • 优化 freetype 解析矢量字体的显示效果
  • 优化 stb_truetype 在 mono 模式下的字体显示效果

4. 移植文档

  • 嵌入式平台移植注意事项
  • 将 AWTK 移植到 STM32f103ze 裸系统
  • 将 AWTK 移植到 STM32f429igtx 裸系统
  • 将 AWTK 移植到 AWorksOS 平台
  • 将 AWTK 移植到 TencentOS 平台
  • 将 AWTK 移植到 RT-Thread 平台
  • 将 AWTK 移植到 LPC1867 裸系统（推荐）
  • 将 AWTK 移植到 STM32H743(TencentOS) 平台（推荐）

5. 技术笔记

  • LCD 接口的几种实现方式
  • FrameBuffer 的几种使用方式

6. 其它

  • 常见问题解答
  • 修改 AWTK 的代码风格
  • AWTK 是如何保证代码质量的

7. 第三方文档

  • AWTK 编译与调试 环境搭建指南


如何启用屏保

屏保是一个普通窗口，定时切换不同的图片或者动态绘制一些图形，以到达保护屏幕的效果。

一、设置屏保定时器时间

用函数 window_manager_set_screen_saver_time 设置屏保时间。

/**
 * @method window_manager_set_screen_saver_time
 * 设置屏保时间。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 窗口管理器对象。
 * @param {uint32_t}  screen_saver_time 屏保时间（单位毫秒）。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t window_manager_set_screen_saver_time(widget_t* widget, uint32_t screen_saver_time);

window_manager_set_screen_saver_time(window_manager(), 180 * 1000);

二、注册事件并打开屏保窗口

示例：

static ret_t close_window_on_event(void* ctx, event_t* e) {
  window_close(WIDGET(ctx));

  return RET_REMOVE;
}

static ret_t on_screen_saver(void* ctx, event_t* e) {
  widget_t* win = NULL;
  const char* screen_saver_win = "image_animation";

  if (widget_child(window_manager(), screen_saver_win) != NULL) {
    log_debug("screen saver exist.\n");
    return RET_OK;
  }

  win = window_open(screen_saver_win);
  widget_on(win, EVT_POINTER_MOVE, close_window_on_event, win);
  widget_on(win, EVT_POINTER_UP, close_window_on_event, win);
  widget_on(win, EVT_KEY_UP, close_window_on_event, win);

  return RET_OK;
}

ret_t application_init() {
  tk_ext_widgets_init();

  /*enable screen saver*/
  window_manager_set_screen_saver_time(window_manager(), 180 * 1000);
  widget_on(window_manager(), EVT_SCREEN_SAVER, on_screen_saver, NULL);

  return show_preload_res_window();
}

可以在 XML 设置 window 的 fullscreen 属性，让屏保窗口进入全屏状态。

三、扩展用法

有时需求可能是这样的：

  • 用户 m 秒没有操作，返回到主屏

  • 用户 n 秒没有操作，启动屏保

  • 用户 k 秒没有操作，进入睡眠。

其中 m < n < k

此时可以把 screen_saver_time 设置短一点（比如 5s)，每次收到屏保事件则更新用户没有操作的时间，根据这个时间做适当的处理。


AWTK 脚本绑定的实现原理 - lua 绑定

脚本化是 AWTK 的一个基本功能。AWTK 计划支持嵌入式系统中常用的脚本，如 lua、python 和 jerryscript。脚本绑定说简单也简单，说复杂也复杂，采用 FFI(calling external C functions) 和 SWIG 绑定一些简单的函数是很方便的，但绑定一个复杂的 GUI 系统还是很有挑战的。之所以不采用通用的工具，而是实现自己的代码产生器，主要有以下考虑：

  • 我使用 FFI 和 SWIG 的经验很有限，觉得有些功能不太好实现，至少目前我还不知道实现这些功能的方法和思路。

  • 担心 FFI 和 SWIG 的运行环境的可移植性。在 Windows、Linux 和 Macos 上肯定是没有问题的，但是在嵌入式系统，特别是 RTOS 和裸系统中，支持像动态库等功能可能有些困难的。

  • 对 jerryscript 没有支持。jerryscript 是三星开源的 javascript 实现，在嵌入式系统中用得比较多，通用的绑定机制对 jerryscript 没有支持。

  • 代码风格。不同语言有不同的代码风格，特别是命名风格，直接把 C 言语的风格映射过去，对于开发者不太友好。FFI 和 SWIG 都需要做额外的工作才能实现这个功能。

  • AWTK 采用面向对象设计，并用 C 实现面向对象编程的。而通用的绑定机制对此并不友好，实现起来非常困难。

  • 自定义的代码产生器并不复杂，而且具有更大的灵活性。

基于以上这些原因，我决定自己实现 AWTK 的脚本绑定机制。它的实现原理如下：用特定格式的 API 注释来描述要脚本化的 API，用一个名为 gen_idl 的工具把注释提取出来生成 JSON 的接口描述文件，然后用不同的代码产生器生成对应语言的绑定：

参考

1.API 注释格式

2.JerryScript 绑定

3.QuickJS 绑定

4.Lua 绑定


SDL + OpenGL 使用笔记

AWTK 是一个嵌入式 GUI，为了开发方便，需要提供 PC 运行环境。我选择了 SDL2+OpenGL+nanovg 来实现底层的渲染，让 AWTK 可以运行在各个平台上。GLFW+OpenGL 也是一个不错的选择，但是 GLFW 没有 Android 和 iOS 的移植，而且没有提供原生输入法的支持。AWTK 虽然最初是为嵌入式系统而生，但也有一个小目标：可以用于开发嵌入式系统，也可以开发 PC 软件和移动 APP，所以最后选择了 SDL2+OpenGL+nanovg。在使用 SDL2+OpenGL+nanovg 的过程中，踩了一些坑，这里做个笔记，给需要的朋友参考：

一、在 MacPro 上显示模糊的问题。

在网上查了一下，有人提供的方案是设置 SCALE_QUALITY，貌似也有些道理，但是效果不佳。

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");

花了一些时间去看 SDL 的源码后，发现其实 SDL 在创建窗口时提供了 SDL_WINDOW_ALLOW_HIGHDPI 标志，可以用来解决模糊的问题：

SDL_CreateWindow("AWTK Simulator", x, y, w, h, SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI);

如果设置了 SDL_WINDOW_ALLOW_HIGHDPI 标志，窗口大小和 Drawable 的大小可能不一致，在绘图时需要做相应缩放：

SDL_GetWindowSize(sdl_window, &ww, &wh);
SDL_GL_GetDrawableSize(sdl_window, &fw, &fh);
ratio = (float)fw / (float)ww;

二、nanovg 裁剪算法无效。

使用低级的 OpenGL 去绘图是一个比较麻烦的事情。在 AWTK 中，采用了 nanovg 矢量图绘图函数库，nanovg 缺省使用的 GLFW，要移植到 SDL2 上也不难。但是我发现 nanovg 的示例在 SDL 上和在 GLFW 上的效果有些差异，仔细观察后，初步判断与用 stencil 进行裁剪有关，以为是没有启用 stencil 测试引起的，于是加了下面的代码：

glEnable(GL_STENCIL_TEST);

但是没有效果，在 nanovg 的代码中，也发现它自己会启用 stencil 测试。对比基于 nanovg 基于 GLFW 的例子，也没发现有价值的线索。然后对比 SDL_CreateWindow/glfwCreateWindow 和 SDL_Init/glfwInit 的实现，发现 SDL 中，stencil_size 的缺省值是 0，尝试把设置它为 8：

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);

显示正常了。

三、Windows 下的 OpenGL

在 MacPro 和 Ubuntu 下测试没有问题，在 Window 测试时发现一些 OpenGL 函数找不到，明明已经链接了 opengl32.dll 啊。网上的方案多是基于 GLUT 和 GLFW 在 Windows 下做 OpenGL 开发的，SDL 则没有找到相关资料，只好再去研读 GLFW，看能不能从中借用部分代码。很快发现 deps/glad 是干这个的，而 glad 是 http://glad.dav1d.de/ 上在线生成的。把 glad.c 加入项目中，并调用初始化函数：

gladLoadGL();

编译没有问题了，不过运行起来就崩掉了。调试时发现 glGetString(GL_VERSION) 返回 NULL，这个简单的函数居然会失败！后来在 google 搜索 到 glGetString(GL_VERSION) 失败的原因：gladLoadGL 需要放在 SDL_GL_CreateContext 之后调用。而我把它放在了 SDL_Init 和 SDL_GL_CreateContext 之间了。


缺省的控件自身布局器 (self_layouter_default) 介绍

概述

缺省布局中有 5 个参数：

  • x x 坐标
  • y y 坐标
  • w 控件宽度
  • h 控件高度
  • floating 是否为浮动布局。 如果设置为 true，该控件不受父控件的 children_layouter 的影响。

二、像素方式

直接指定控件的 x/y/w/h 的像素值，这是缺省的方式，也是最缺乏灵活性的方式。

示例：

  • 在 XML 界面描述文件中：
<button x="10" y="5" w="80" h="30" text="ok"/>
  • 在代码中：
widget_move_resize(btn, 10, 5, 80, 30);

三、百分比

  • x/w 的值如果包含”%”，则自动换算成相对其父控件宽度的百分比。
  • y/h 的值如果包含”%”，则自动换算成相对其父控件高度的百分比。

示例：

  • 在 XML 界面描述文件中：
<button x="10%" y="10" w="50%" h="30" text="ok"/>
  • 在代码中（看起来要麻烦一点）：
widget_set_self_layout_params(btn, "10%", "10", "50%", "30");
widget_layout(btn);

在代码中设置控件的布局参数，方法类似，后面就不再举例子了。

四、水平居中

让控件在水平方向上居中，只需要将 x 的值设置成”c”或者”center”即可。

示例：

<button x="center" y="10" w="50%" h="30" text="ok"/>

五、垂直居中

让控件在垂直方向上居中，只需要将 y 的值设置成”m”或者”middle”即可。

示例：

<button x="center" y="middle" w="50%" h="30" text="ok"/>

六、位于右边

让控件位于父控件的右侧，只需要将 x 的值设置成”r”或者”right”即可。

示例：

<button x="right" y="10" w="50%" h="30" text="ok"/>

如果还想离右侧有一定距离，可以在 right 后指定距离的像素。

示例：

<button x="right:20" y="10" w="50%" h="30" text="ok"/>

七、位于底部

让控件位于父控件的底部，只需要将 y 的值设置成”b”或者”bottom”即可。

示例：

<button x="10" y="bottom" w="50%" h="30" text="ok"/>

如果还想离底部有一定距离，可以在 bottom 后指定距离的像素。

示例：

<button x="10" y="bottom:20" w="50%" h="30" text="ok"/>

八、宽度和高度为负数

无论是像素模式还是百分比模式，宽度和高度均可为负数。

  • 宽度为负数。其值为父控件的宽度+该负值。
  • 高度为负数。其值为父控件的高度+该负值。

九、浮动布局

如果 floating 设置为 true，该控件不受父控件的 children_layouter 的影响。

示例：

<button x="10" y="20" w="50" h="30" floating="true" "text="ok"/>


menu 自身布局器 (self_layouter_menu) 介绍

1. 概述

用于确定菜单的位置和大小，菜单一般用 popup 窗口或 dialog 来实现。

缺省布局中有 5 个参数：

  • x x 参数
  • y y 参数
  • w 宽度
  • h 高度
  • position 位置

2. 位置确定

2.1 缺省位置

由当前点击的位置决定菜单弹出的位置。菜单弹出的位置在当前点击位置的右下角（会根据屏幕大小适当调整，以确保菜单在屏幕范围内）

<popup self_layout="menu(w=128,h=90)" close_when_click_outside="true">
...
</popup>

可以通过 w/h 指定菜单的宽度和高度，支持百分比方式。

2.2 在触发的控件的上方 (position=up) 或下方 (position=down)。

比如点击一个按钮时弹出菜单，position=up 让菜单在按钮的上方弹出，position=down 让菜单在按钮的下方弹出。

可以通过 x 参数指定菜单与触发控件的对齐关系。

  • 缺省左对齐。
  • center 中心对齐。
  • right 右对齐。

可以通过 w/h 指定菜单的宽度和高度，支持百分比方式。

可以通过 y 指定菜单与触发控件之间的间距。

示例： 下方左对齐：

<popup style="dark" self_layout="menu(position=down,x=left,w=128,h=90)" close_when_click="true">
...
</popup>

下方中心对齐：

<popup style="dark" self_layout="menu(position=down,x=center,w=128,h=90)" close_when_click="true">
</popup>

下方右对齐：

<popup style="dark" self_layout="menu(position=down,x=right,w=128,h=90)" close_when_click="true">
</popup>

2.3 在触发的控件的右边 (position=right) 或左边 (position=left)。

比如点击一个按钮时弹出菜单，position=right 让菜单在按钮的右边弹出，position=left 让菜单在按钮的左边弹出。

可以通过 y 参数指定菜单与触发控件的对齐关系。

  • 缺省顶部对齐。
  • middle 中心对齐。
  • bottom 底部对齐。

可以通过 w/h 指定菜单的宽度和高度，支持百分比边式。

可以通过 x 指定菜单与触发控件之间的间距。

示例：

左边顶部对齐：

<popup style="dark" self_layout="menu(position=left,y=top,w=128,h=90)" close_when_click="true">
...
</popright>

左边中心对齐：

<popup style="dark" self_layout="menu(position=left,y=middle,w=128,h=90)" close_when_click="true">
</popright>

左边底部对齐：

<popup style="dark" self_layout="menu(position=left,y=bottom,w=128,h=90)" close_when_click="true">
</popright>

更多例子请参考menu.xml。


使用 serial_widget 简化串口编程

把串口做成一个控件并不是一个新鲜的东西，记得在 Visual Basic 里有个通信组件，就是用来简化串口编程的。最近 AWTK 也提供了这样一个控件 serial_widget，当串口数据到来时，它触发 EVT_DATA 事件，在该事件中你可以读取数据，并更新界面或者回应对方。本文介绍一下它的使用方法：

1. 基本功能

我们编写一个简单的应用程序，它有两个功能：

  • 把收到的数据显示出来。

  • 把界面输入的数据发送给对方。

2. UI 界面描述文件

<window>
  <button name="open" text="Open Device" x="10" y="100" w="160" h="36" />
  <edit name="device" x="180" y="100" w="-200" h="36" text="/dev/ttys032" />

  <button name="send" text="Send Message" x="10" y="150" w="160" h="36" />
  <edit name="send_msg" x="180" y="150" w="-200" h="36" text="hello serial" />

  <label name="recv_msg" x="c" y="b:100" w="90%" h="100" />

  <serial name="serial" />
</window>

3. 接收数据

  • 先注册数据事件的处理函数
widget_child_on(win, "serial", EVT_DATA, on_data, win);
  • 在处理函数中读取数据并显示到界面上
static ret_t on_data(void* ctx, event_t* e) {
  char text[128] = {0};
  widget_t* win = WIDGET(ctx);
  serial_widget_t* serial = SERIAL_WIDGET(e->target);
  widget_t* label = widget_lookup(win, "recv_msg", TRUE);

  int32_t len = tk_istream_read(serial->istream, text, sizeof(text)-1);
  if(len > 0) {
    text[len] = '\0';
    widget_set_text_utf8(label, text);
  }

  return RET_OK;
}

4. 发送数据

从界面读取数据，并发送到串口

static ret_t on_send(void* ctx, event_t* e) {
  char text[128] = {0};
  widget_t* win = WIDGET(ctx);
  serial_widget_t* serial = SERIAL_WIDGET(widget_lookup(win, "serial", TRUE));
  widget_t* edit = widget_lookup(win, "send_msg", TRUE);
  widget_get_text_utf8(edit, text, sizeof(text)-1);

  tk_ostream_write_len(serial->ostream, text, strlen(text), 3000);

  return RET_OK;
}

完整代码请参考 serial 可以下载 awtk-c-demos 编译运行。

./bin/demo_serial

5. 测试

下面操作是在 Linux/MacOS 上测试的，Windows 下需要安装虚拟串口软件，具体做法有些不同，请自行调整。

  • 使用 socat 创建虚拟串口
socat -d -d pty,raw,echo=0 pty,raw,echo=0

该命令会生成两个设备文件，对应串口的两端（每次生成的设备名可能不同）。

2022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys032
2022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys033
2022/07/08 16:32:33 socat[1879] N starting data transfer loop with FDs [5,5] and [7,7]

  • 在 AWTK 这端我们使用设备 /dev/ttys032

  • 在另外一端读取数据

打开一个新的终端，并运行下面的命令（有数据时自动显示出来）：

cat /dev/ttys033
  • 在另外一端发送数据

打开一个新的终端，并运行下面的命令（发送当前时间字符串）：

date >/dev/ttys033

6. 使用 fscript 进行串口编程

也可以使用 fscript 进行串口编程（配合 AWBlock 就简单了）。AWTK 里提供一个与前面功能相同的例子，总体来看要简洁不少。

<window>
  <button text="打开设备" x="16" y="15" w="76" h="34" >
    <property name="on:click">
      var device = widget_get('device', 'text')
      widget_set('serial','device', device)
    </property>
  </button>

  <edit name="device" x="119" y="13" w="178" h="38" text="/dev/ttys028" />
  <label name="recv" x="5" y="123" w="303" h="101" />
  <edit name="send" text="hello serial" x="5" y="273" w="200" h="34" />

  <button text="button" tr_text="send" x="220" y="274" w="81" h="34" >
    <property name="on:click">
      var os = widget_get('serial','ostream')
      var msg = widget_get('send', 'text')
      ostream_write_string(os, msg)
    </property>
  </button>

  <serial name="serial">
    <property name="on:data">
      var is = widget_get('self','istream')
      var msg = istream_read_string(is, 100, 0)
      widget_set('recv', 'text', msg)
    </property>
  </serial>
</window>

在 AWTK 根目录下可以运行该例子，测试方法与前面相同。

./bin/preview_ui design/default/ui/serial.xml

7. 移植

目前串口只实现了Windows, Linux, MacOS, Android 和 AWorks 等平台，其它平台需要自己移植。

请参考AWorks平台的移植：src/platforms/aworkslp/serial_helper.c

8. 注意

  • windows 平台需要调用 tk_socket_init 初始化 socket。


静态链接与动态链接

目前 PC 版本的 awtk 同时生成动态库和静态库，你可以根据具体情况进行选择。

由于 windows 下多次链接同一个静态库会存在问题，Windows 平台只能使用动态库，动态库是唯一推荐的方式。

使用方法如下：

1. 链接动态库

LIBS 参数使用 awtk.SHARED_LIBS

示例：

DefaultEnvironment(TOOLS = APP_TOOLS,
  CCFLAGS = awtk.CCFLAGS,
  LIBS = awtk.SHARED_LIBS,
  LIBPATH = awtk.LIBPATH,
  CPPPATH = awtk.CPPPATH,
  LINKFLAGS = awtk.LINKFLAGS,
  TARGET_ARCH=awtk.TARGET_ARCH,
  OS_SUBSYSTEM_CONSOLE=awtk.OS_SUBSYSTEM_CONSOLE,
  OS_SUBSYSTEM_WINDOWS=awtk.OS_SUBSYSTEM_WINDOWS
)

2. 链接静态库

LIBS 参数使用 awtk.STATIC_LIBS

示例：

DefaultEnvironment(TOOLS = APP_TOOLS,
  CCFLAGS = awtk.CCFLAGS,
  LIBS = awtk.STATIC_LIBS,
  LIBPATH = awtk.LIBPATH,
  CPPPATH = awtk.CPPPATH,
  LINKFLAGS = awtk.LINKFLAGS,
  TARGET_ARCH=awtk.TARGET_ARCH,
  OS_SUBSYSTEM_CONSOLE=awtk.OS_SUBSYSTEM_CONSOLE,
  OS_SUBSYSTEM_WINDOWS=awtk.OS_SUBSYSTEM_WINDOWS
)

原来的 awtk.LIBS 仍然可以使用，为链接静态库方式。


spin_box 的几种形态

spin_box 是一个特殊的 edit，主要用于数值编辑。它自带两个按钮，点击它们可以增加/减少数值，增量可以用 step 来设置。

在 AWTK 中，spin_box 有三种形态。

1. 传统形态

1.1 特点

两个按钮均在右侧，按钮比较小，相距很近，只要移动很小距离，即可在两个按钮之间切换，适合鼠标这种比较精确的输入设备。

1.2 按钮的 style：

  • 增加 (inc) 按钮的 style 由 spinbox_up 决定。
  • 减小 (dec) 按钮的 style 由 spinbox_down 决定。

1.3 示例：

  • UI
<spin_box x="5%" y="10" w="50%" h="30" text="100"/>
  • style
  <style name="spinbox_down" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_down_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_down_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_down_o"/>
  </style>

  <style name="spinbox_up" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_up_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_up_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_up_o"/>
  </style>

2. 按钮在左右两侧

2.1 特点

按钮在编辑器左右两侧，按钮比较大，不容易发生误操作。适合电容屏这种不太精确的输入设备。

2.2 按钮的 style：

  • 增加 (inc) 按钮的 style 由 spinbox_right 决定。
  • 减小 (dec) 按钮的 style 由 spinbox_left 决定。

2.3 使用方法

  • 需要设置 easy_touch_mode=”true”
  • 控件的 style 中设置文本居中。

2.4 示例：

  • UI
<spin_box x="5%" y="100" w="50%" h="30" text="100" easy_touch_mode="true" style="center"/>
  • style
  <style name="spinbox_left" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_left_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_left_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_left_o"/>
  </style>

  <style name="spinbox_right" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_right_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_right_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_right_o"/>
  </style>

3. 按钮在上下两端

3.1 特点

按钮在编辑器上下两端，按钮比较大，不容易发生误操作。适合电容屏这种不太精确的输入设备。

3.2 按钮的 style：

  • 增加 (inc) 按钮的 style 由 spinbox_top 决定。
  • 减小 (dec) 按钮的 style 由 spinbox_bottom 决定。

3.3 使用方法：

  • 需要设置 easy_touch_mode=”true”
  • 控件的 style 中设置文本居中。
  • 并保证控件的高度大于字体大小的 3 倍

3.4 示例：

  • UI
<spin_box x="5%" y="200" w="40%" h="90" text="100" easy_touch_mode="true" style="center"/>
  • style
  <style name="spinbox_bottom" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_down_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_down_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_down_o"/>
  </style>

  <style name="spinbox_top" border_color="#a0a0a0">
    <normal     bg_color="#f0f0f0" icon="arrow_up_n"/>
    <pressed    bg_color="#c0c0c0" icon="arrow_up_p"/>
    <over       bg_color="#e0e0e0" icon="arrow_up_o"/>
  </style>

在 AWTK 中，spin_box 完全可以用 edit + button 来实现，只是直接使用 spin_box 要简单一些。使用时可以根据自己的实际情况进行选择。


system_bar 使用方法

system_bar 是一个位于屏幕上方的窗口，通常用来显示当前窗口的标题、时间、电池电量、网络信号和关闭当前窗口的按钮等。

system_bar 是可选的，可以启用也可以不启用。如果要启用 system_bar，可以按下列方法：

一、创建 system_bar 窗口

system_bar 和普通窗口类似，你可以用代码创建，也可以用 XML UI 描述文件创建，比如下面是 demoui 中的 system_bar 的 XML UI 描述文件 (system_bar.xml)：

<system_bar h="30">
  <column x="0" y="0" w="-40" h="100%">
    <label style="title" x="10" y="m" w="55%" h="100%" name="title"/>
    <digit_clock style="time" x="r" y="m" w="40%" h="100%" format="h:m"/>
  </column>
  <button style="close" x="r:5" y="m" w="26" h="26" name="close" text="x"/>
</system_bar>

在 system_bar 窗口中，有两个控件比较特殊（均为可选）：

    1. 名为 title 的 label 控件。它自动显示当前主窗口的标题或名称。

窗口的标题可以用窗口的 text 属性指定。

    2. 名为 close 的 button 控件。点击它时，它向当前主窗口放送 EVT_REQUEST_CLOSE_WINDOW 事件。

缺省情况下，窗口收到 EVT_REQUEST_CLOSE_WINDOW 事件时，窗口会被关闭。

如果窗口不想接受 EVT_REQUEST_CLOSE_WINDOW 事件，可以设置窗口的 closable 属性为”no”，此时 close 按钮自动禁用。如：

<window closable="no" anim_hint="htranslate">

如果窗口希望收到 EVT_REQUEST_CLOSE_WINDOW 事件时，由用户决定是否关闭当前。可以设置窗口的 closable 属性为”confirm”，同时处理 EVT_REQUEST_CLOSE_WINDOW 事件，根据当前的情况决定是否关闭窗口。

二、打开窗口

如果要启用 system_bar 窗口，必须在打开应用程序的窗口之前打开 system_bar 窗口。

可以在资源加载窗口之后打开 system_bar 窗口，但是资源加载窗口顶部区域需要留白。

window_open("system_bar");

三、style

system_bar 的 style 和其它窗口一样，可以在 styles 目录下放一个与窗口同名的 style 文件 (system_bar.xml)。比如下面是 demoui 中的 system_bar 的 style(system_bar.xml)：

<system_bar>
  <style name="default">
    <normal bg_color="#404040"/>
  </style>
</system_bar>

<label>
  <style name="title" text_align_h="left">
    <normal text_color="white" />
  </style>
</label>

<digit_clock>
  <style name="time">
    <normal text_color="white" />
  </style>
</digit_clock>

<button>
  <style name="close" icon="earth">
    <normal     icon="close_n"/>
    <pressed    icon="close_p"/>
    <over       icon="close_n"/>
    <disable    icon="close_d"/>
  </style>
</button>

如果整个屏幕用一张大的背景图，可以把背景图片设置到窗口管理器上，这样就不需要为 system_bar 和应用窗口分别指定背景图片了。如：

<window_manager>
  <style name="default">
    <normal bg_image="bg800x480"/>
  </style>
</window_manager>


T9 输入法笔记（触屏版）

1. T9 输入法的中文字典数据

网上可以找到 T9 输入法的中文字典数据，但是通常有两个问题：

  • 采用 GPL 协议，不太适合加入 AWTK。

  • 只支持单个汉字的输入，不支持词组的输入。

经过考虑之后，决定自己生成 T9 输入法的中文字典数据。AWTK 使用了谷歌拼音输入法作为缺省的拼音输入法，谷歌拼音输入法的字典数据质量还是不错的，写一个工具把谷歌拼音输入法的字典数据转换为 T9 输入法的中文字典数据即可。

谷歌拼音输入法的字典数据原始格式为：

汉字 频率 简体/繁体标志 拼音

如：

中 243213.912993 0 zhong

转换工具要做的事情的是：

  • 把拼音转换成对应的数字。比 zhong 对应的是 83553。

  • 生成适合查询的格式。本来想复用谷歌拼音输入的引擎，但是没有成功，最后决定自己写程序来查询。

转换工具完整的代码请参考：awtk/tools/t9_gen/to_t9_zh.js

如果需要对字典进行裁剪，可以先编辑原始数据，然后重新生成数据。

2. T9 输入法的英文字典数据

要生成英文字典数据，获取一个英文单词列表，并且按照单词的使用频率进行排序。找 github 上找到了这样的数据。

同样需要写个小工具，把该数据转成生成适合查询的格式。

转换工具完整的代码请参考：awtk/tools/t9_gen/to_t9_en.js

该工具应该同样适用于其它西文语言。

3. 对键盘、输入法框架和编辑器进行改进

为了支持 T9 输入法，需要对键盘、输入法框架和编辑器进行改进。

随便提一下，SOLID 原则中的开闭原则通常只存在于理想（简单）情况下，一种切实可行的方法是，在早期设计时要考虑将来的扩展，但也无需过度设计，而是每次扩展时都对框架进行完善，让它更适应于将来的扩展。

3.1 支持语言切换

同样是在中文环境下，你可能需要输入中文，也可能需要输入英文。在中文键盘下输入中文，在英文键盘下输入英文。 在键盘切换时需要让输入法引擎知道当前的语言。

3.1.1 键盘

如果需要切换语言，可以给键盘的页面设置一个 lang 属性，用于标识改键盘的语言，切换到该页面时，自动设置输入法引擎的语言。

如：

    <view name="chinese" lang="zh_cn"
      x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
        <button repeat="300" name="，" text="，"/>
        <button repeat="300" name="key:1" text="ABC"/>
        <button repeat="300" name="key:2" text="DEF"/>
        <button repeat="300" name="key:backspace" style="highlight">
          <image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
        </button>
        <button repeat="300" name="key:3" text="GHI"/>
        <button repeat="300" name="key:4" text="JKL"/>
        <button repeat="300" name="key:5" text="MNO"/>
        <button name="page:lower" style="highlight" text="abc"/>

        <button repeat="300" name="key:6" text="PQRS"/>
        <button repeat="300" name="key:7" text="TUV"/>
        <button repeat="300" name="key:8" text="WXYZ"/>
        <button name="page:symbols" style="highlight" text="#+="/>
        <button repeat="300" name="opt:。？！" text="。？！"/>
        <button repeat="300" name="space" text="Space"/>
        <button name="action" style="highlight" text="Return"/>
        <button name="page:number" style="highlight" text="123"/>
    </view>

在切换键盘时，如果存在 lang 属性，将其设置到输入法。

    value_t v;
    widget_t* active = widget_get_child(iter, widget_get_value(iter));

    if (widget_get_prop(active, WIDGET_PROP_IM_LANG, &v) == RET_OK) {
      input_method_set_lang(input_method(), value_str(&v));
    }

3.1.2 输入法提供设置语言的函数

/**
 * @method input_method_set_lang
 * 设置语言。
 *
 * > 有的输入法，同时支持输入多种语言。
 * > 比如 T9，可以同时支持中文和英文输入，配合软键盘随时切换输入的语言。
 *
 * @annotation ["scriptable"]
 * @param {input_method_t*} im 输入法对象。
 * @param {const char*} lang 语言。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t input_method_set_lang(input_method_t* im, const char* lang);

3.1.3 输入法引擎提供设置语言的函数

/**
 * @engine input_engine_set_lang
 * 设置语言。
 * @annotation ["scriptable"]
 * @param {input_engine_t*} engine 输入法引擎对象。
 * @param {const char*} lang 语言。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t input_engine_set_lang(input_engine_t* engine, const char* lang);

3.2 支持预编辑状态 (preedit)

预编辑状态是在文本真正提交到编辑器之前的状态，在预编辑状态下输入的文本，可以被后面的输入覆盖。比如软键盘上，一个按键有 ABC 三个字符，按一下输入 A，再按一下输入 B，继续按钮输入 C，在指定时间内没有按，则提交当前的字符到编辑器。

3.2.1 软键盘

键盘的按钮名称以”opt:”开头的按钮，表示这个按钮需要预编辑处理。为了支持预编辑输入，软键盘在按钮事件处理函数中，要做下列处理：

  • 当前不在预编辑状态时，则进入预编辑状态，并启动定时器，把当前字符的序数设置为 0，并提交字符到编辑器。

  • 当前在预编辑状态，更新定时器，把字符的序数设置为下一个，并提交字符到编辑器。

  • 定时器超时或点击其它按钮，退出预编辑。

详情参考函数：keyboard_on_button_click

3.2.2 输入法

输入法需要提供几个函数用于中转消息：

/**
 * @method input_method_dispatch_preedit
 * 分发进入预编辑状态的事件。
 * @annotation ["scriptable"]
 * @param {input_method_t*} im 输入法对象。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t input_method_dispatch_preedit(input_method_t* im);

/**
 * @method input_method_dispatch_preedit_confirm
 * 分发确认预编辑状态的事件（提交预编辑内容，退出预编辑状态）。
 * @annotation ["scriptable"]
 * @param {input_method_t*} im 输入法对象。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t input_method_dispatch_preedit_confirm(input_method_t* im);

/**
 * @method input_method_dispatch_preedit_abort
 * 分发取消预编辑状态的事件（提交预编辑内容，退出预编辑状态）。
 * @annotation ["scriptable"]
 * @param {input_method_t*} im 输入法对象。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t input_method_dispatch_preedit_abort(input_method_t* im);

3.2.3 编辑器

编辑器需要处理相关事件：

    case EVT_IM_PREEDIT: {
      text_edit_preedit(edit->model);
      break;
    }
    case EVT_IM_PREEDIT_CONFIRM: {
      text_edit_preedit_confirm(edit->model);
      break;
    }
    case EVT_IM_PREEDIT_ABORT: {
      text_edit_preedit_abort(edit->model);
      break;
    }

具体请参考：edit.c/mledit.c

4. T9 输入法引擎的实现

T9 输入法引擎的实现很简单，不到 300 行代码。查找算法为：先精确查找，如果找到，将其添加到候选字列表中，否则使用前缀查找，在满足前缀的候选字中，挑选词频最高的，放到候选字列表中。

详情参考：input_engine_t9.c/t9.c


AWTK 中的字符串编码

1. 背景

不少同学在使用 AWTK 的过程中，遇到过字符串编码的问题。这里介绍一下 AWTK 中的字符串编码，希望能让新手少走弯路。

AWTK 中的字符串都是 Unicode 的，但是会使用两种不同的编码：

  • UTF-8 其字符串类型为 char*。
  • UTF-32 其字符串类型为 wchar_t*。

使用场景如下：

  • 不需要显示的字符串使用 UTF-8 编码。如控件名、属性名、资源名和文件名等等。

  • 需要显示的字符串（也就是控件的文本）使用 UTF-32 编码。如按钮上的文本和编辑器中的文本等等。

UTF-8 的好处是能够兼容 ASCII，一般字符串操作比较方便。但是在编辑和显示文本时，需要把字符解码出来，使用不方便而且影响性能，所以 AWTK 中需要显示的字符串使用了 UTF-32 编码。

2. 源文件的编码

AWTK 的源文件，不管是 AWTK 本身还是应用程序，源文件一定要使用 UTF-8 BOM 格式。如果文件头有 UTF-8 BOM(Byte Order Mark) ，明确告诉编译器源文件的编码格式。否则不同的编译器可能有不同的解释，导致显示出现乱码。

最好是不要在源文件中使用非 ASCII 字符串，把界面上要显示的文本全部放到字符串资源文件中。可以避免不少问题，后期支持国际化也非常方便。

好像也有非主流编译器不支持 UTF-8 BOM 格式的源文件。AWTK 也提供了一个工具，用来去掉 UTF-8 BOM，在这个目录下：tools/remove_utf8_bom。

3. 用 UTF-8 的方式设置控件文本

用 widget_set_text_utf8 设置控件文本，其函数原型如下：

/**
 * @method widget_set_text_utf8
 * 设置控件的文本。
 * 只是对 widget\_set\_prop 的包装，文本的意义由子类控件决定。
 * @annotation ["scriptable"]
 * @alias set_text
 * @param {widget_t*} widget 控件对象。
 * @param {const char*}  text 文本。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */

ret_t widget_set_text_utf8(widget_t* widget, const char* text);

要注意的是：这里的 text 一定要是有效的 UTF-8 编码的字符串。常见的错误有两种：

  • 把 GBK 等编码直接当作 UTF-8 编码使用。
  • 使用了 UTF-8 编码，但是最后一个字符非正常截断（使用 strncpy/snprintf 等函数时，如果目标内存不够大，可能会出现）。

这两种情况都可能导致下面的 assert:

libunibreak/linebreak.c:799: set_linebreaks: Assertion `posLast == posCur - 1 && posCur <= len' failed.

解决方法如下：

  • 对于 GBK 编码，需要转换后，才能设置到控件中。AWTK 提供了转函数：

请包含下列头文件（嵌入式系统需要自己加入相关源码和数据）。

charset/encoding.h

/**
 * @method encoding_convert
 *
 * 字符集转换。
 *
 * @annotation ["static"]
 *
 * @param {encoding_name_t} from 源字符串的编码名称。
 * @param {const char*} from_str 源字符串。
 * @param {uint32_t} from_size 源字符串的长度。
 * @param {encoding_name_t} to 目标字符串的编码名称。
 * @param {const char*} to_str 目标字符串。
 * @param {uint32_t} to_size 目标字符串的最大长度。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t encoding_convert(encoding_name_t from, const char* from_str, uint32_t from_size,
                       encoding_name_t to, char* to_str, uint32_t to_size);

/**
 * @method encoding_gbk_to_utf8
 *
 * 将 gbk 转换成 utf8 编码。
 *
 * @annotation ["static"]
 *
 * @param {const char*} from_str 源字符串 (gbk)。
 * @param {uint32_t} from_size 源字符串的长度。
 * @param {const char*} to_str 目标字符串 (utf8)。
 * @param {uint32_t} to_size 目标字符串的最大长度。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t encoding_gbk_to_utf8(const char* from_str, uint32_t from_size, char* to_str,
                           uint32_t to_size);
  • 对于非正常截断的字符串。最好是分配更大的内存，防止字符串被意外截断。另外，AWTK 提供了一个函数，用来移除最后一个无效字符串。
/**
 * @method tk_utf8_trim_invalid_char
 *
 * 如果字符串最后一个字符串是无效的，删掉该无效字符。
 *
 * > 对于用 strncpy/snprintf 等生成字符串时，如果目标字符串内存大小不够，
 * > 可能最后一个字符被从中间截断，导致该字符是无效的，这可能会触发 assert，
 * > 本函数可以用来删除最后一个无效字符。
 *
 * @param {const char*} str 输入字符串。
 *
 * @return {char*} 返回 UTF8 字符串。
 */
char* tk_utf8_trim_invalid_char(char* str);

4. 用 UTF-8 的方式获取控件文本

用 widget_get_text_utf8 可获取控件的文本，其格式为 UTF-8 格式的字符串。

/**
 * @method widget_get_text_utf8
 * 获取控件的文本。
 * 只是对 widget\_get\_prop 的包装，文本的意义由子类控件决定。
 * @param {widget_t*} widget 控件对象。
 * @param {char*}  text 用于返回文本。
 * @param {uint32_t} size text 内存长度。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_get_text_utf8(widget_t* widget, char* text, uint32_t size);

这个要注意的是 text 的内存要够大，否则可能触发 assert。

5. 用 UTF-32 的方式设置控件文本

用 widget_set_text 设置控件的文本，其原型如下：

/**
 * @method widget_set_text
 * 设置控件的文本。
 * 只是对 widget\_set\_prop 的包装，文本的意义由子类控件决定。
 * @param {widget_t*} widget 控件对象。
 * @param {const wchar_t*}  text 文本。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_text(widget_t* widget, const wchar_t* text);

如果直接设置常量字符串，字符串一定要加 L 前缀。L 是告诉编译器使用 UTF-32 格式的字符串，否则可能编译出错，或者显示乱码（如果忽略警告）。

widget_set_text(button, L"文本");

6. 用 UTF-32 的方式获取控件文本

用 widget_get_text 获取控件文本，其原型如下：

/**
 * @method widget_get_text
 * 获取控件的文本。
 * 只是对 widget\_get\_prop 的包装，文本的意义由子类控件决定。
 *
 * 如果希望获取 UTF8 格式的文本，可以参考下面的代码：
 *
 *```c
 *  str_t str;
 *  str_init(&str, 0);
 *  str_from_wstr(&str, widget_get_text(target));
 *  log_debug("%s: %s\n", target->name, str.str);
 *  str_reset(&str);
 *```
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 *
 * @return {const wchar_t*} 返回文本。
 */
const wchar_t* widget_get_text(widget_t* widget);


AWTK 中的窗体样式

设计漂亮的界面并非程序员的强项，AWTK 通过窗体样式提供这样一种机制，让设计漂亮的界面变得非常容易。通过窗体样式，可以改变控件的背景颜色、边框颜色、字体颜色、字体、字体大小、背景图片、背景图片的显示方式和图标等属性。同时 AWTK 也提供了一些窗体样式重用的机制，让窗体样式文件的开发和维护变得容易。

一、窗体样式的结构

AWTK 的窗体样式按控件进行分类，每种控件可以有多种不同的风格，每种风格下又有不同状态下的配置。比如：

<button bg_image_draw_type="3patch_x" text_color="blue">
  <style name="default" border_color="#a0a0a0"  text_color="black">
    <normal     bg_color="#f0f0f0" />
    <pressed    bg_color="#c0c0c0" />
    <over       bg_color="#e0e0e0" />
    <disable    bg_color="gray" text_color="#d0d0d0" />
  </style>
  <style name="green_btn" >
    <normal   bg_image="green_btn_n" />
    <pressed  bg_image="green_btn_p" />
    <over     bg_image="green_btn_o" />
  </style>

  <style name="red_btn">
    <normal   bg_image="red_btn_n" />
    <pressed  bg_image="red_btn_p" />
    <over     bg_image="red_btn_o" />
  </style>
</button>

上面是按钮的样式配置（你可以自由增加自己需要的），其中定义了三种不同的按钮样式：

  • default 为缺省的按钮样式。
  • green_btn 是用图片实现的绿色系按钮。
  • red_btn 是用图片实现的红色系按钮。

窗体样式的各个属性，如果出现在控件中，则为该控件下各个 style 的缺省值。如果出现在 style 中，则为该 style 的下各种状态的缺省值。这样可以实现类似继承的重用机制。

同一控件可以出现多次（如上面的 button 出现了两次），有利于实现配置共享，让维护工作更简单。

参考：

  • 完整示例 (default.xml)

  • 控件状态定义

二、窗体样式的属性

基本属性

  • bg_color 背景颜色。
  • fg_color 前景颜色。用途视具体控件而定，如进度条已完成部分的颜色使用前景颜色。
  • text_color 文字的颜色
  • tips_text_color 提示文字的颜色
  • border_color 边框颜色
  • border 边框类型，取值为 left/right/top/bottom 和 all，以及它们的组合。
  • font_name 字体的名称。
  • font_size 字体的大小。
  • font_style 字体的风格（目前还不支持），取值为：italic/bold/underline。可用『,』分隔。
  • text_align_h 文本的水平对齐方式。取值为 left/center/right。
  • text_align_v 文本的垂直对齐方式。取值为 top/middle/bottom。
  • bg_image 背景图片。
  • bg_image_draw_type 背景图片的 绘制方式。
  • fg_image 前景图片。用途视具体控件而定，如进度条已完成部分的图片使用前景图片。
  • fg_image_draw_type 前景图片的 绘制方式。
  • icon 图标。用途视具体控件而定，如 check_button 的图标，按钮上的图标，对话框标题上的图标。
  • active_icon active 图标。用途视具体控件而定，目前 slideview 的页面指示器会用到。
  • icon_at 图标的位置，取值为 left/right/top/bottom/center。
  • x_offset 在 X 坐标方向上的偏移（可用来实现按下的效果）。
  • y_offset 在 Y 坐标方向上的偏移（可用来实现按下的效果）。
  • margin 边距（边距目前只影响 icon/text，不影响子控件，子控件的边距由布局算法参数决定）。
  • margin_top 上边距。
  • margin_bottom 下边距。
  • margin_left 左边距。
  • margin_right 右边距。
  • spacer 间距（目前仅用于文本和图标之间）。
  • round_radius 背景和边框的圆角半径。
  • round_radius_top_left 背景和边框的左上角圆角半径。
  • round_radius_top_right 背景和边框的右上角圆角半径。
  • round_radius_bottom_left 背景和边框的左下角圆角半径。
  • round_radius_bottom_right 背景和边框的右下角圆角半径。
  • border_width 边框线宽（仅在定义 WITH_VGCANVAS 时有效）。
  • self_layout 自身布局参数。请参考 控件布局参数文档
  • children_layout 子控件布局参数。请参考 控件布局参数文档
  • focusable 是否支持焦点停留。
  • feedback 是否支持 feedback。
  • clear_bg 为 true 时，绘制背景时用 clear_rect 代替 fill_rect。其作用是可以直接修改 lcd 颜色的 alpha 通道，方便于其它硬件层（如摄像头/视频）进行合成。

颜色可使用标准名称，#开头的 16 进制值和 rgba 合成的值。

参考：

  • AWTK 中图片的绘制方式
  • 如何在窗体样式文件中写控件布局参数

扩展属性

第三方扩展控件可以扩展控件特有的属性，遵循下列规则即可。

  • 名称长度不超过 TK_NAME_LEN。
  • 名称带有 color 视为颜色格式的值。
  • 名称带有 name/image 视为字符串格式的值。
  • 其它视为整数格式的值。

三、编译窗体样式

窗体样式用 XML 文件编写，然后用 themegen 生成 C 常量数据，并加入资源管理器，才能在程序中使用。

  • 生成 C 常量数据
./bin/themegen input output

参考 update_res.sh

  • 加入资源管理器
#include "res/src/theme/default.data"

...

resource_manager_add(theme_default);

参考 demos/resource.c

四、为控件指定 style

  • 在代码中，使用函数 widget_use_style 指定。
  ok = button_create(dialog->client, 20, 80, 80, 30);
  widget_set_text(ok, L"Go");
  widget_use_style(ok, "green_btn");
  • 在 xml 界面描述文件中，使用属性 style 指定。
<dialog name="" icon="info" x="10" y="120" w="300" h="160" text="Dialog">
  <label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
  <button name="ok" style="green_btn" x="10" y="bottom:10" w="40%" h="30" text="Yes"/>
  <button name="cancel" style="red_btn" x="right:10" y="bottom:10" w="40%" h="30" text="No"/>
</dialog>

五、每个窗口支持独立的窗体样式

像微信小程序那样，AWTK 中每个窗口（包括对话框和其它窗口）可以有自己的窗体样式文件。

  • 通过窗口的 theme 属性来指定窗口的窗体样式文件名（方便多个窗口共用一个窗体样式文件）。

  • 如果没有指定 theme 属性，以窗口的 name 属性作为窗口的窗体样式文件名。

  • 以窗口自己的窗体样式文件优先，其次为缺省的窗体样式文件。

参考：dialog1.xml

六、inline style

窗体样式数据是只读的，它的好处是速度快，占用内存少。但在一些特殊情况下，我们希望通过函数直接修改控件的 style，或者在 UI 描述的 XML 文件中直接写 style。我们把这类 style 称为 inline style，具体用法如下：

  • 在 XML UI 描述文件中使用 inline style。

控件的属性名以『style.』开头表示这是一个 inline 属性：

style.状态.名称

下面表示设置正常状态的字体大小为 16：

style.normal.font_size="16"

状态可以省略，如果省略，表示正常状态 (normal)，下面这个和上面的功能一样：

style.font_size="16"

完整示例：

<label x="0" y="0" w="100%" h="100%" text="Basic Controls" style.font_size="24" style.text_color="green"/>
<button name="dec_value" text="Dec" focusable="true" style.focused.text_color="red"/>
  • 在 C 代码中使用 inline style。

在 C 代码中可以使用下列函数设置 style：

/**
 * @method widget_set_style_int
 * 设置整数类型的 style。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} state_and_name 状态和名字，用英文的冒号分隔。
 * @param {int32_t} value 值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_style_int(widget_t* widget, const char* state_and_name, int32_t value);

/**
 * @method widget_set_style_str
 * 设置字符串类型的 style。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} state_and_name 状态和名字，用英文的冒号分隔。
 * @param {const char*} value 值。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_style_str(widget_t* widget, const char* state_and_name, const char* value);

/**
 * @method widget_set_style_color
 * 设置颜色类型的 style。
 *
 * > * [state 的取值](https://github.com/zlgopen/awtk/blob/master/docs/manual/widget_state_t.md)
 * > * [name 的取值](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} state_and_name 状态和名字，用英文的冒号分隔。
 * @param {uint32_t} value 值。颜色值一般用十六进制表示，每两个数字表示一个颜色通道，从高位到低位，依次是 ABGR。
 *
 * 在下面这个例子中，R=0x11 G=0x22 B=0x33 A=0xFF
 *
 *```c
 *  widget_set_style_color(label, "normal.bg_color", 0xFF332211);
 *```
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_style_color(widget_t* widget, const char* state_and_name, uint32_t value);

示例：

  widget_set_style_int(label,  "normal.font_size", 24);
  widget_set_style_str(label, "normal.text_color", "red");
  widget_set_style_str(label, "normal.border_color", "#FF0000");
  widget_set_style_color(label, "normal.bg_color", 0xFF00FF00);

  /*如果记不清value的格式，也可以按下面的方式写*/
  color_t green = color_init(0, 0xff, 0, 0xff);
  widget_set_style_color(label, "normal.text_color", green.color);

  color_t blue = color_parse("blue");
  widget_set_style_color(label, "normal.text_color", blue.color);

inline style 会消耗更多内存，而且不方便切换窗体样式，一般应该尽量避免使用。 注意，以前的版本使用:分隔，由于不合 XML 规范，改为用.分隔，仍然保持对:的兼容。

注意：

  • 用 widget_set_style_color 设置颜色时：

颜色值一般用十六进制表示，每两个数字表示一个颜色通道，从高位到低位，依次是 ABGR。

  • 用 widget_set_style_str 设置颜色时：

颜色值如果用#开头，用十六进制表示，每两个数字表示一个颜色通道，从高位到低位，依次是 RGBA 或 RGB。

七、相关文档

  • AWTK 中的颜色格式

  • 控件状态定义


多主题实时切换

AWTK 支持多主题，并在不重启的情况下，实时切换到不同的主题。

1. 资源目录结构

在 assets 目录下再分主题目录，下面的例子有 default 和 dark 两个主题：

assets
├── dark
│   ├── inc
│   │   ├── data
│   │   ├── fonts
│   │   ├── images
│   │   ├── scripts
│   │   ├── strings
│   │   ├── styles
│   │   ├── ui
│   │   └── xml
│   └── raw
│       └── styles
└── default
    ├── inc
    │   ├── data
    │   ├── fonts
    │   ├── images
    │   ├── scripts
    │   ├── strings
    │   ├── styles
    │   ├── ui
    │   └── xml
    └── raw
        ├── data
        ├── fonts
        ├── images
        ├── scripts
        ├── strings
        ├── styles
        ├── ui
        └── xml

注意事项：

  • default 主题必须存在，其它主题是可选的。

  • default 主题必须具有完整的资源文件，其它主题中只需要放其特有的文件即可。

  • 查找资源的顺序为：先在当前主题中查找资源，如果找不到，就去 default 主题去查找。这样可以最大程度上共享资源数据。

  • 目前只有支持文件系统的平台才支持多主题实时切换。

2. 资源生成

如果需要支持多主题实时切换，请参考下面的例子，去修改 update_res.py 资源生成脚本：

themes = ['default', 'dark']

def run():
    for theme in themes:
        print('========================='+theme+' begin =========================');
        common.init(AWTK_ROOT, ASSETS_ROOT, theme, ASSET_C)
        common.updateRes()
        print('========================='+theme+' end =========================\n');

3. 相关函数

3.1 在初始时指定主题，请用下面的函数：

/**
 * @method assets_manager_set_theme
 * 设置当前的主题。
 *
 * @param {assets_manager_t*} am asset manager 对象。
 * @param {const char*} theme 主题名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t assets_manager_set_theme(assets_manager_t* am, const char* theme);

3.1 运行时动态切换主题，请用下面的函数

/**
 * @method widget_set_theme
 * 设置 theme 的名称，用于动态切换主题。名称与当前主题名称相同，则重新加载全部资源。
 *
 * > 目前只支持带有文件系统的平台。
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {char*} name 主题的名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_theme(widget_t* widget, const char* name);

4. 事件

当主题切换完成后，会通过窗口触发 EVT_THEME_CHANGED 事件。

  /**
   * @const EVT_THEME_CHANGED
   * 主题变化 (event_t)。
   */
  EVT_THEME_CHANGED,

5. 其它

如果同一个项目要支持多种不同的大小屏幕，而且屏幕大小差别比较大，无法简单的用 layout 方式来适配时，利用以上的机制，可以把特殊的资源放到不同的主题中，在不同的屏幕大小运行时，切换到对应的主题上，也不失为一种解决问题的方法。

6. 参考

资源目录变更通知


避坑指南

世间总是有坑的，可能是因为填坑很困难，也可能是因为填了这个坑就要挖另外一个坑。但是，有坑并不代表我们需要踩进去，绕开这些已知的坑，可以让生活更美好。当然，今天的坑，明天也许已经填了，定期阅读本清单，有助于身心健康。

把你踩过的坑告诉我们，我们尽力去填了它们，实在填不了，也可以列在这里，供大家参考：

1. 在 PC 上模拟运行时显示正常，而在开发板上出现局部残留的现象。

原因

  • 脏矩形是根据控件的位置和大小 (x/y/w/h) 计算的，也就是超出范围的部分不会被重绘。
  • 控件的文字和图片超出控件的范围时，一般是不会被裁剪的 (ScrollView 等控件除外）。
  • 在 SDL 模式下，不启用脏矩形，所以在 PC 上可能是正常的。

绕坑

  • 保持控件的文本和图片在控件自身的范围内。

2. 修改了窗体样式描述文件，但是预览时没有任何效果。

原因

  • 出于性能考虑，AWTK 使用的是二进制格式的窗体样式数据，XML 格式的窗体样式描述文件只是方便开发者编辑的。
  • 修改了 XML 格式的窗体样式描述文件，还需要将它转成二进制格式，预览时才会生效。

绕坑

  • 使用脚本 update_res.py 更新资源。
  • 或者用命令 bin/themegen 将 XML 格式的窗体样式数据转成二进制的窗体样式数据。

3. 旋转/缩放动画对按钮无效

原因

  • 几乎所有控件都支持平移和淡入淡出动画。
  • 部分控件支持 value 改变的动画（如进度条）。
  • 部分控件支持旋转/缩放的动画（目前只有图片支持）。
  • 滚动动画通常只是用于控件内部实现（如 slide_view、switch、scroll_view 和 text_selector 等）。
  • 旋转/缩放的动画只是改变控件的显示效果，不改变控件的实际大小和位置（脏矩形和事件处理）。

绕坑

  • 趋长（吉）避短（凶），平安幸福。

4.widget_move/widget_resize/widget_move_resizes 操作无效。

原因

  • 通常是设置 layout 参数，只要 layout 参数存在，widget_layout 被触发时，就会用该参数重新布局。

绕坑

  • 如果你需要调用 widget_move/widget_resize/widget_move_resizes 修改控件的大小和位置，就不要设置 layout 参数。

5. 为什么回调函数的行为很诡异？

my_param_t param;
...

timer_add(on_timer, &param, interval);

原因

把临时变量 param 作为回调函数的上下文，回调函数在访问 param 时，param 早就被释放了。

绕坑

动态分配或者使用全局变量。最好使用动态分配，但是要记得释放。

内存问题请参考我以前写的一篇博客：大内高手—常见内存错误


AWTK 中的界面描述数据

AWTK 可以直接加载 XML 格式的和二进制格式的界面描述数据，从性能和资源开销的角度考虑，二进制格式是更好的选择，AWTK 提供了工具将 XML 格式转换成二进制格式的界面描述数据，其工作流程如下：

AWStudio 在开发之中…

一、界面描述数据的使用方法

1. 创建 XML 格式的界面描述文件

AWTK XML 界面描述数据非常紧凑和直观。标签的名称对应控件的类型，标签的属性对应控件的属性。常见的属性有：

  • x x 坐标
  • y y 坐标
  • w 宽度
  • h 高度
  • text 文本
  • value 值
  • name 是控件的名称，创建完成之后可以用 widget_look_up 函数找到指定名称的控件。

控件的属性请参考控件的文档。

用户可以定义自己的需要的属性。

x/y/w/h 可以使用 AWTK 的 layout 参数。

示例：

<window name="main" x="0" y="0" w="320" h="480">
  <button name="inc" x="10" y="5" w="40%" h="30" text="Inc"/>
  <button name="dec" x="right:10" y="5" w="40%" h="30" text="Dec"/>
  <image name="img" x="10" y="230" w="100" h="100"/>
  <label name="" x="10" y="40" w="80" h="30" text="Left"/>
  <label name="" x="100" y="40" w="80" h="30" text="Center"/>
  <label name="" x="200" y="40" w="80" h="30" text="Right"/>
  <progress_bar name="bar1" x="10" y="80" w="168" h="30" value="40"/>
  <progress_bar name="bar2" x="260" y="80" w="30" h="118" value="20" vertical="true"/>
  <check_button name="c1" x="10" y="150" w="80" h="30" text="Book"/>
  <check_button name="c2" x="100" y="150" w="80" h="30" text="Food"/>
  <radio_button name="r1" x="10" y="200" w="80" h="30" text="Book"/>
  <radio_button name="r2" x="100" y="200" w="80" h="30" text="Food"/>
  <radio_button name="r3" x="190" y="200" w="80" h="30" text="Pencil" value="true"/>
  <button name="dialog" x="10" y="260" w="40%" h="30" text="Dialog"/>
  <button name="dialog2" x="right:10" y="260" w="40%" h="30" text="Dialog2"/>
</window>

有时 text 或其它属性中出现了<>”等特殊字符，需要转义成 entity 才符合 XML 规范，此时使用起来比较麻烦。可以把它放到 property 标签中，并用 CDATA 把它括起来。如：

示例:

  <rich_text x="0" y="0" w="100%" h="60">
    <property name="text">
      <![CDATA[<image name="bricks"/><font align_v="middle">hello awtk!</font><font color="red" size="32">ZLG</font>]]>
    </property>
  </rich_text>

property 标签必须放在第一个控件之前。

除了x、y、w和h的任何属性都可以放到 property TAG 中，请根据实际情况决定。

2. 预览 XML 格式的界面描述文件

XML UI 文件写好后，可以用预览工具预览。如：

./bin/preview_ui demos/assets/raw/ui/main.xml

3. 转换成二进制格式的界面描述文件

对 XML 预览的效果满意之后，把它转换成二进制的格式：

 ./bin/xml_to_ui window1.xml window1.data

为了方便在没有文件系统的嵌入式系统中使用，直接生成常量数据，和程序一起编译。如：

  1 const unsigned char ui_window1[] = {
  2 0x07,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x77,0x69,0x6e,0x64,0x6f,0x77,0x31,0x00,0x64,0x61,0x74,0x61,
  3 0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  4 0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6d,0x61,0x69,
  5 0x6e,0x00,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x28,
  6 0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x69,0x6e,0x63,0x00,0x74,0x65,0x78,0x74,
  7 0x00,0x49,0x6e,0x63,0x00,0x00,0x00,0x01,0x00,0x0a,0x00,0x03,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x05,
  8 0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x64,0x65,0x63,0x00,
  9 0x74,0x65,0x78,0x74,0x00,0x44,0x65,0x63,0x00,0x00,0x00,0x01,0x00,0x0b,0x00,0x00,0x00,0x00,0x00,0x0a,
 10 0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
 11 0x69,0x6d,0x67,0x00,0x00,0x00,0x01,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x28,0x00,
 12 0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x00,0x74,0x65,0x78,0x74,
 13 0x00,0x4c,0x65,0x66,0x74,0x00,0x00,0x00,0x01,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
 14 0x28,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x00,0x74,0x65,
 15 0x78,0x74,0x00,0x43,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x00,0x01,0x00,0x09,0x00,0x00,0x00,0x00,0x00,
 16 0xc8,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
 17 0x00,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x01,0x00,0x0d,0x00,0x00,
 18 0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,
 19 0x61,0x6d,0x65,0x00,0x62,0x61,0x72,0x31,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x34,0x30,0x00,0x00,0x00,
 20 0x01,0x00,0x0d,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
 21 0x76,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x62,0x61,0x72,0x32,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,
 22 0x32,0x30,0x00,0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,0x01,
 23 0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,
 24 0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x31,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x6f,0x6f,0x6b,
 25 0x00,0x00,0x00,0x01,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x50,
 26 0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x32,0x00,0x74,0x65,0x78,0x74,0x00,
 27 0x46,0x6f,0x6f,0x64,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0xc8,
 28 0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x72,0x31,0x00,0x74,
 29 0x65,0x78,0x74,0x00,0x42,0x6f,0x6f,0x6b,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x64,
 30 0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
 31 0x72,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x46,0x6f,0x6f,0x64,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,
 32 0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,
 33 0x61,0x6d,0x65,0x00,0x72,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x65,0x6e,0x63,0x69,0x6c,0x00,0x76,
 34 0x61,0x6c,0x75,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,
 35 0x0a,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
 36 0x00,0x64,0x69,0x61,0x6c,0x6f,0x67,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x69,0x61,0x6c,0x6f,0x67,0x00,
 37 0x00,0x00,0x01,0x00,0x0a,0x00,0x03,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x28,0x00,
 38 0x00,0x00,0x1e,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x64,0x69,0x61,0x6c,0x6f,0x67,0x32,0x00,0x74,
 39 0x65,0x78,0x74,0x00,0x44,0x69,0x61,0x6c,0x6f,0x67,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

4. 使用二进制格式的界面描述文件

在程序中引用，并放入资源管理器中：

#include "res/ui/window1.data"
...

assets_manager_add((const asset_info_t*)ui_window1);

在需要打开该窗口时，调用 window_open 函数（对话框用 dialog_open):

  widget_t* win = window_open(name);

  widget_child_on(win, "ok", EVT_CLICK, on_ok, win);
  widget_child_on(win, "cancel", EVT_CLICK, on_cancel, win);


AWTK 中的矢量图绘图函数

一、工作模式

强大的 Vector graphics library 对 GUI 来说至关重要，一些酷炫的效果更是离不开 Vector graphics library 的支持。最有名的 Vector graphics library 要数下面这些了：

  • GDI+
  • Quartz 2D
  • skia
  • cairo
  • nanovg
  • agg
  • agge

其中最后 5 个是开源的，skia 和 cairo 很强但也很大，不太适合嵌入式环境（可以用于 linux 嵌入式平台）。nanovg 是最简洁最优雅的，可惜它只支持 OpenGL，为此，我们用 agg/agge 作为 nanovg 软件渲染的后端。经过一番考虑之后，AWTK 的 canvas 根据硬件环境分为三个层次：

  • 简约模式。支持基本的绘图函数，但不支持 Vector graphics 绘图函数，能实现 GUI 常见功能。适用于低端的硬件环境，如 CPU 主频小于 100M，RAM 不足以实现。

  • 正常模式。支持最基本的绘图函数，和软件实现的 Vector graphics 绘图函数，由于软件实现的 Vector graphics 绘图函数性能不高，所以只有在必要的情况下才使用它们。此时采用 nanovg+agge 作为 Vector graphics library。嵌入式 linux 平台也可以选择 cairo 作为 Vector graphics library。

  • GPU 模式。如果硬件支持 OpenGL，则使用 OpenGL 实现的 Vector graphics 绘图函数，并用它们包装成基本的绘图函数。此时采用 nanovg 作为 Vector graphics library。

注意：agg 使用 GPL 协议开源，如果在商业软件中使用，需要作者协商一下。

二、接口函数

vgcanvas 的接口如何定义呢，nanovg 和 agg 的接口差异极大，必须为 AWTK 上层提供统一的接口。AWTK 采用了 HTML5 canvas 类似的接口，这套接口非常好用，但由于底层的 agg 和 nanovg 的限制，在有 GPU 和无 GPU 时，效果可能不太一样，甚至不兼容，所以在使用时尽量保守一点：)

ret_t vgcanvas_begin_path(vgcanvas_t* vg);
ret_t vgcanvas_move_to(vgcanvas_t* vg, float_t x, float_t y);
ret_t vgcanvas_line_to(vgcanvas_t* vg, float_t x, float_t y);
ret_t vgcanvas_quadratic_curve_to(vgcanvas_t* vg, float_t cpx, float_t cpy, float_t x, float_t y);
ret_t vgcanvas_bezier_curve_to(vgcanvas_t* vg, float_t cp1x, float_t cp1y, float_t cp2x, float_t cp2y,
                               float_t x, float_t y);
ret_t vgcanvas_arc_to(vgcanvas_t* vg, float_t x1, float_t y1, float_t x2, float_t y2, float_t r);
ret_t vgcanvas_arc(vgcanvas_t* vg, float_t x, float_t y, float_t r, float_t start_angle,
                   float_t end_angle, bool_t ccw);
bool_t vgcanvas_is_point_in_path(vgcanvas_t* vg, float_t x, float_t y);
ret_t vgcanvas_rect(vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h);
ret_t vgcanvas_round_rect(vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h, float_t r);
ret_t vgcanvas_ellipse(vgcanvas_t* vg, float_t x, float_t y, float_t rx, float_t ry);
ret_t vgcanvas_close_path(vgcanvas_t* vg);

...

三、使用示例

  vgcanvas_t* vg = canvas_get_vgcanvas(c);

  vgcanvas_set_line_width(vg, 2);
  vgcanvas_set_fill_color(vg, color_init(0xff, 0xff, 0, 0xff));
  vgcanvas_set_stroke_color(vg, color_init(0, 0xff, 0, 0xff));
  vgcanvas_clear_rect(vg, 0, 0, vg->w, vg->h, color_init(0xf0, 0xf0, 0xf0, 0xff));

  vgcanvas_round_rect(vg, 10, 10, 100, 20, 5);
  vgcanvas_stroke(vg);

  vgcanvas_rect(vg, 128, 10, 100, 20);
  vgcanvas_fill(vg);


在 Visual Studio 中调试 AWTK

scons 编译时并没有生成 Visual Studio 的工程，如果需要个在 Visual Studio 中调试 AWTK 应用程序，可按下列步骤进行：

    1. 打开 Visual Studio。
    2. 在『文件』菜单中点击『打开』并选中『项目』。
    3. 选择 awtk\bin\demoui.exe （或者其它要调试的可执行文件）。
    4. 在项目设置中设置调试参数（可选）。
    5. 进行调试。

参考： How to: Debug an Executable Not Part of a Visual Studio Solution

建议使用 vscode 调试。


控件动画

控件动画是一种很常见的动画，常用于入场动画、离场动画、装饰用户界面和吸引用户注意力等。

一、动画类型

AWTK 目前支持的动画有：

  • move：通过改变控件的位置形成动画效果。
  • value：通过改变控件的值形成动画效果。
  • opacity：通过改变控件的透明度形成动画效果。
  • scale：通过改变控件的缩放比例形成动画效果（目前需要 vgcanvas)。
  • rotation：通过改变控件的旋转角度形成动画效果（目前需要 vgcanvas)。
  • 其它任何数值型的属性。如 x/y/w/h 等等。

二、主要特色

  • 支持逆向模式。
  • 支持停止和暂停。
  • 支持定时（延迟）执行。
  • 支持重复模式（可指定次数）。
  • 支持往返模式（可指定次数）。
  • 支持多种插值算法（如加速和减速等）。
  • 支持同一控件多个动画并行执行。
  • 支持同一控件多个动画串行执行。
  • 支持时间倍率，让时间变快和变慢。
  • 支持按名称去开始、暂停、停止和销毁动画。

三、使用方法

1. 方法一：通过函数 widget_create_animator。

示例：

  1. 创建动画
widget_create_animator(image1, "opacity(to=0, duration=500, yoyo_times=1000)");
  2. 暂停指定的动画
widget_pause_animator(image1, "opacity");
  3. 暂停全部动画
widget_pause_animator(NULL, NULL);
  4. 恢复/启动全部动画
widget_start_animator(NULL, NULL);

在缺省情况下，动画创建后自动启动，完成后自动销毁。可以指定 auto_start=false 禁止创建后自动启动，指定参数 auto_destroy=false 禁止完成时自动销毁（控件销毁时仍然会自动销毁）。

动画创建、播放、暂停、停止、设置时间倍率和销毁等相关函数如下：

/**
 * @method widget_create_animator
 * 创建动画。
 * 除非指定 auto_start=false，动画创建后自动启动。
 * 除非指定 auto_destroy=false，动画播放完成后自动销毁。
 * 参数的格式类似函数调用，如：
 * opacity(from=0, to=255, yoyo_times=1000, duration=1000)
 * move(x_from=10, x_to=100, y_from=10, y_to=100, duration=1000)
 * 参考：https://github.com/zlgopen/awtk/blob/master/docs/widget_animator.md
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} animation 动画参数。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_create_animator(widget_t* widget, const char* animation);

/**
 * @method widget_start_animator
 * 播放动画。
 * 1.widget 为 NULL 时，播放所有名称为 name 的动画。
 * 2.name 为 NULL 时，播放所有 widget 相关的动画。
 * 3.widget 和 name 均为 NULL，播放所有动画。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} name 动画名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_start_animator(widget_t* widget, const char* name);

/**
 * @method widget_set_animator_time_scale
 * 设置动画的时间倍率，<0: 时间倒退，<1: 时间变慢，>1 时间变快。
 * 1.widget 为 NULL 时，设置所有名称为 name 的动画的时间倍率。
 * 2.name 为 NULL 时，设置所有 widget 相关的动画的时间倍率。
 * 3.widget 和 name 均为 NULL，设置所有动画的时间倍率。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {const char*} name 动画名称。
 * @param {float_t} time_scale 时间倍率。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_set_animator_time_scale(widget_t* widget, const char* name, float_t time_scale);

/**
 * @method widget_pause_animator
 * 暂停动画。
 * 1.widget 为 NULL 时，暂停所有名称为 name 的动画。
 * 2.name 为 NULL 时，暂停所有 widget 相关的动画。
 * 3.widget 和 name 均为 NULL，暂停所有动画。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {char*} name 动画名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_pause_animator(widget_t* widget, const char* name);

/**
 * @method widget_stop_animator
 * 停止动画（控件的相应属性回归原位）。
 * 1.widget 为 NULL 时，停止所有名称为 name 的动画。
 * 2.name 为 NULL 时，停止所有 widget 相关的动画。
 * 3.widget 和 name 均为 NULL，停止所有动画。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {char*} name 动画名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_stop_animator(widget_t* widget, const char* name);

/**
 * @method widget_destroy_animator
 * 销毁动画。
 * 1.widget 为 NULL 时，销毁所有名称为 name 的动画。
 * 2.name 为 NULL 时，销毁所有 widget 相关的动画。
 * 3.widget 和 name 均为 NULL，销毁所有动画。
 * @annotation ["scriptable"]
 * @param {widget_t*} widget 控件对象。
 * @param {char*} name 动画名称。
 *
 * @return {ret_t} 返回 RET_OK 表示成功，否则表示失败。
 */
ret_t widget_destroy_animator(widget_t* widget, const char* name);

2. 方法二：在 XML 中指定

animation 参数的格式，类似与函数调用。多个参数可以用『;』分隔。如：

 <button name="inc_value" text="Inc" animation="opacity(from=0, to=255, yoyo_times=1000, duration=1000)"/>
 <button name="dec_value" text="Dec" animation="move(x_from=10, x_to=100, y_from=10, y_to=100, duration=1000);opacity(from=0, to=255, yoyo_times=1000, duration=1000)"/>

此方法最为简单，后续可以在程序中通过动画名字，对动画进行启动和暂停等控制。

3. 方法三：直接使用（不再推荐）

使用控件动画时，一般需要创建动画、设置参数、设置模式和启动动画四个步骤。如：

  animator = widget_animator_move_create(image, 1000, delay, EASING_SIN_INOUT);
  widget_animator_move_set_params(animator, image->x, image->y, image->x + 100, image->y + 100);
  widget_animator_set_yoyo(animator, 10);
  widget_animator_start(animator);

此方法比较麻烦，不再推荐使用。

四、可用参数

1. 公共参数

  • name 动画名称（缺省为动画的类型如 move)。
  • delay 延迟启动时间（毫秒）。
  • duration 时长（毫秒）。
  • easing 插值算法（见后面描述）。
  • yoyo_times 往返的次数 (x2)，为 0 视为永久播放。
  • repeat_times 重复的次数，为 0 视为永久播放。
  • auto_start 创建后自动启动（缺省为 true)。
  • auto_destroy 完成后自动销毁（缺省为 true)。

以下参数的缺省值为控件当前对应的值。

2. widget_animator_move 动画的参数

  • x_from x 起始位置。
  • y_from y 起始位置。
  • x_to x 结束位置。
  • y_to y 结束位置。

3. widget_animator_value 动画的参数

  • from 起始值。
  • to 结束值。

4. widget_animator_opacity 动画的参数

  • from 起始值 (0-255)。
  • to 结束值 (0-255)。

5. widget_animator_scale 动画的参数

  • x_from x 方向缩放起始值。
  • y_from y 方向缩放起始值。
  • x_to x 方向缩放结束值。
  • y_to y 方向缩放结束值。

6. widget_animator_rotation 动画的参数

  • from 起始值（弧度）。
  • to 结束值（弧度）。

7. 其它数值型属性动画的参数

  • from 起始值。
  • to 结束值。

五、插值算法名称 (easing)

请参考：插值算法名称

六、完整示例

完整示例请参考：demos/demo_animator_app.c

运行下列命令查看各种动画的效果：

./bin/demo_animator

五、其它

  1. 动画对象一般不需主动销毁，在动画结束或控件被销毁时自动销毁。

  2. 如使用控件的入场动画，一般不要启用窗口动画。


控件焦点相关问题

一、启用焦点停留 (tab stop)

除了 edit 控件外，其它控件如果需要焦点停留功能，可以指定控件的 focusable 属性为 true 来实现。

在 XML 中，可以这样指定：

 <button ... focusable="true"/>

在 C 代码中，可以这样指定：

 widget_set_prop_bool(widget, WIDGET_PROP_FOCUSABLE, TRUE);

如果指定了 fucusable 属性为 true，请确保控件的 style 中定义了 focused 状态的数据，否则会因为 focused 状态没有 style 数据而无法显示。如：

  <style name="default" border_color="#a0a0a0"  text_color="black">
    <normal     bg_color="#f0f0f0" />
    <pressed    bg_color="#c0c0c0" x_offset="1" y_offset="1"/>
    <over       bg_color="#e0e0e0" />
    <focused    bg_color="#e0e0e0" />
    <disable    bg_color="gray" text_color="#d0d0d0" />
  </style>    <focused    bg_color="#e0e0e0" />

二、前后切换焦点的按键

1. 缺省用 tab 键循环切换焦点。

#ifndef TK_KEY_MOVE_FOCUS_NEXT
#define TK_KEY_MOVE_FOCUS_NEXT "tab"
#endif /*TK_KEY_MOVE_FOCUS_NEXT*/

#ifndef TK_KEY_MOVE_FOCUS_PREV
#define TK_KEY_MOVE_FOCUS_PREV "shift+tab"
#endif /*TK_KEY_MOVE_FOCUS_PREV*/

在嵌入式系统中，可以根据需要，定义成其它键。比如：

#define TK_KEY_MOVE_FOCUS_NEXT "left"
#define TK_KEY_MOVE_FOCUS_PREV "right"

2. 可以为当前窗口指定的向前和向后移动焦点的键值。

  • move_focus_prev_key 指定向前移动焦点的键值。
  • move_focus_next_key 指定向后移动焦点的键值。
<window anim_hint="htranslate" move_focus_prev_key="up" move_focus_next_key="down">

在这个例子中，方向键 up 移动到前一个焦点控件，方向键 down 移动到下一个焦点控件。

三、上下左右切换焦点的按键

在一些特殊的硬件设备上，没有触摸屏，只有上、下、左、右、确定和取消六个键。

为了快速切换焦点，AWTK 支持通过左右键切换水平焦点，通过上下键切换垂直焦点。可以通过窗口的下列属性来设置：

  • move_focus_up_key 向上移动焦点的键。
  • move_focus_down_key 向下移动焦点的键。
  • move_focus_left_key 向左移动焦点的键。
  • move_focus_right_key 向右移动焦点的键。

示例：

<window text="Custom Soft Keyboard" anim_hint="htranslate"
  move_focus_up_key="up" move_focus_down_key="down" move_focus_left_key="left" move_focus_right_key="right">

  <edit name="edit" x="c" y="10" w="90%" h="30" focused="true" input_type="custom" text="" tips="custom"/>
  <view y="60" x="c" w="90%" h="-60" is_keyboard="true" grab_keys="true"
    children_layout="default(r=4,c=4,m=5,s=5)" >
    <button focusable="true" name="key0" text="0" />
    <button focusable="true" name="key1" text="1" />
    <button focusable="true" name="key2" text="2" />
    <button focusable="true" name="key3" text="3" />
    <button focusable="true" name="key4" text="4" />
    <button focusable="true" name="key5" text="5" />
    <button focusable="true" name="key6" text="6" />
    <button focusable="true" name="key7" text="7" />
    <button focusable="true" name="key8" text="8" />
    <button focusable="true" name="key9" text="9" />
    <button focusable="true" name="key#" text="#" />
    <button focusable="true" name="backspace" text="<=" />
  </view>
</window>

在这个例子中，方向键 up 移动到上方的焦点控件，方向键 down 移动到下方的焦点控件。 方向键 left 移动到左方的焦点控件，方向键 right 移动到右方的焦点控件。

软键盘本身不能得到焦点，为了收到按键消息，需要指定属性 grab_keys=”true”。

四、设置初始焦点

可以指定控件的 focused 属性为 true 将控件设置为初始焦点控件。

在 XML 中，可以这样指定：

 <button ... focused="true"/>

在 C 中，可以这样指定：

 widget_set_prop_bool(widget, WIDGET_PROP_FOCUSED, TRUE);

五、参考

  • 键名的定义：https://github.com/zlgopen/awtk/blob/master/src/base/enums.c。

  • 键值映射：https://github.com/zlgopen/awtk/blob/master/docs/map_key.md

  • 如何支持极简键盘 (3 键键盘、5 键键盘和旋转按钮）


AWTK 中的窗口动画

窗口动画是现代 GUI 最基本的功能之一，在窗口打开或关闭时，引入一个过渡动画，让用户感觉这个过程是流畅的。窗口动画的基本原理很简单：在打开或关闭窗口时，把前后两个窗口预先绘制到两张内存图片上，按照指定规则显示两张图片，形成动画效果。

一、介绍

窗口本身只需指定期望的动画类型，由窗口管理器负责在适当的时候（如打开和关闭窗口时），创建窗口动画并让窗口动画绘制到屏幕上。在窗口动画期间，窗口管理器会禁止窗口本身的绘制，并忽略所有输入事件。目前支持的动画有：

普通窗口动画：

  • htranslate: 左右平移动画（速度最快，嵌入式平台推荐使用）。
  • vtranslate: 上下平移动画。
  • slide_up: 向上弹出。
  • slide_down: 向下弹出。
  • slide_left: 向左弹出。
  • slide_right: 向右弹出。

对话框动画：

  • popup: 向上弹出（速度最快，嵌入式平台推荐使用）。
  • popdown: 向下弹出。
  • fade: 淡入淡出动画。
  • center_scale: 缩放动画（没有硬件时加速慎用）。

以前的 bottom_to_top 相当于 popup，仍然可以使用，但建议用 popup 代替。

以前的 top_to_bottom 相当于 popdown，仍然可以使用，但建议用 popdown 代替。

对话框的动画可与 对话框的 highlight 属性 一起使用。

窗口动画有三种实现方式：

  • 在系统支持 OpenGL 时，使用 vgcanvas 进行绘制，因为使用了浮点数，整个动画最为平滑。

  • 在系统支持 FrameBuffer，使用 lcd 绘图函数实现动画。

  • 在低端系统上，不启用动画。

二、使用方法

给窗口或对话框指定动画效果，只需设置窗口或对话框的 anim_hint 属性即可：

  <window name="main" anim_hint="vtranslate">
...
  </window>

anim_hint 的可选值，请参考 window_animator.h 中的定义。

三、动画参数

可以为动画指定参数，其格式为 类似函数调用的参数格式。

  1. 所有动画都支持下面的参数：
  • duration 动画持续时间（毫秒）
  • easing 插值算法名称

如：

anim_hint="center_scale(duration=300)"

2.slide_up、slide_down、slide_left 和 slide_right 动画特有参数：

alpha 值用于在背景上画一层透明的颜色，这能够实现让背景变暗的效果。如果 start_alpha 和 end_alpha 不相同，则能实现动态变暗的效果，这有额外的运行开销，如果性能不佳，建议设置 alpha 即可。

  • start_alpha 起始 alpha 值 (0-255)。
  • end_alpha 结束 alpha 值 (0-255)。
  • alpha 相当于将 start_alpha 和 end_alpha 设置为同一个值。

四、示例

demoui 演示了各种窗口动画：

./bin/demoui

五、自定义动画

开发者可以自定义动画，自定义的动画可以像内置动画一样，在 XML 文件中启用。

自定义动画非常简单，通常只需要几行代码即可。步骤如下：

  1. 实现 window_animator_t 接口。如：
static const window_animator_vtable_t s_window_animator_popup_vt = {
    .overlap = TRUE,
    .type = "popup",
    .desc = "popup",
    .size = sizeof(window_animator_t),
    .draw_prev_window = window_animator_overlap_default_draw_prev,
    .draw_curr_window = window_animator_to_top_draw_curr};

window_animator_t* window_animator_popup_create(bool_t open, object_t* args) {
  return window_animator_create(open, &s_window_animator_popup_vt);
}
  2. 注册到 window_animator 工厂。如：
  window_animator_factory_register(factory, WINDOW_ANIMATOR_POPUP,
                                   window_animator_popup_create);

完整示例请参考：https://github.com/zlgopen/awtk/tree/master/src/window_animators

其它

启用窗口动画时，默认情况下，需要对前后两个窗口进行截图，以获得更好的性能，但是需要两个 FB 大小的内存。如果内存不够（比如只有片内内存），可以选择关闭缓存，直接进行绘制。在 awtk_config.h 定义下面的宏即可：

#define WITHOUT_WINDOW_ANIMATOR_CACHE 1


action_darray_thread_t

概述

执行action的线程。

> 每个线程都有一个action darray，可以是共享的darray，也可以是私有的darray。

函数

函数名称 | 说明
action_darray_thread_create | 创建action_darray_thread对象。
action_darray_thread_create_ex | 创建action_darray_thread对象。
action_darray_thread_create_with_darray | 创建action_darray_thread对象。
action_darray_thread_create_with_darray_ex | 创建action_darray_thread对象。
action_darray_thread_destroy | 销毁。
action_darray_thread_exec | 让线程执行action。
action_darray_thread_set_on_idle | 设置空闲时的回调函数。
action_darray_thread_set_on_quit | 设置退出时的回调函数。
action_darray_thread_set_strategy | 设置策略
action_queue_create | 创建action_queue对象。
action_queue_destroy | 销毁。
action_queue_recv | 接收一个请求。
action_queue_send | 发送一个请求。

属性

属性名称 | 类型 | 说明
darray | waitable_action_darray_t* | action darray。
executed_actions_nr | uint32_t | 已经执行action的个数。
thread | tk_thread_t* | 线程对象。

action_darray_thread_create 函数

  • 函数功能：

创建action_darray_thread对象。

  • 函数原型：
action_darray_thread_t* action_darray_thread_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_darray_thread_t* | action_darray_thread对象。

action_darray_thread_create_ex 函数

  • 函数功能：

创建action_darray_thread对象。

  • 函数原型：
action_darray_thread_t* action_darray_thread_create_ex (const char* name, uint32_t stack_size, tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_darray_thread_t* | action_darray_thread对象。
name | const char* | 名称。
stack_size | uint32_t | 栈的大小。
priority | tk_thread_priority_t | 优先级。

action_darray_thread_create_with_darray 函数

  • 函数功能：

创建action_darray_thread对象。

  • 函数原型：
action_darray_thread_t* action_darray_thread_create_with_darray (waitable_action_darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_darray_thread_t* | action_darray_thread对象。
darray | waitable_action_darray_t* | darray对象。

action_darray_thread_create_with_darray_ex 函数

  • 函数功能：

创建action_darray_thread对象。

  • 函数原型：
action_darray_thread_t* action_darray_thread_create_with_darray_ex (waitable_action_darray_t* darray, const char* name, uint32_t stack_size, tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_darray_thread_t* | action_darray_thread对象。
darray | waitable_action_darray_t* | darray对象。
name | const char* | 名称。
stack_size | uint32_t | 栈的大小。
priority | tk_thread_priority_t | 优先级。

action_darray_thread_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t action_darray_thread_destroy (action_darray_thread_t* thread);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_darray_thread_t* | action_darray_thread对象。

action_darray_thread_exec 函数

  • 函数功能：

让线程执行action。

  • 函数原型：
ret_t action_darray_thread_exec (action_darray_thread_t* thread, qaction_t* action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_darray_thread_t* | action_darray_thread对象。
action | qaction_t* | action对象。

action_darray_thread_set_on_idle 函数

  • 函数功能：

设置空闲时的回调函数。

  • 函数原型：
ret_t action_darray_thread_set_on_idle (action_darray_thread_t* thread, action_darray_thread_on_idle_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_darray_thread_t* | action_darray_thread对象。
on_idle | action_darray_thread_on_idle_t | 空闲时的回调函数。
ctx | void* | 回调函数的上下文。

action_darray_thread_set_on_quit 函数

  • 函数功能：

设置退出时的回调函数。

  • 函数原型：
ret_t action_darray_thread_set_on_quit (action_darray_thread_t* thread, action_darray_thread_on_quit_t on_quit, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_darray_thread_t* | action_darray_thread对象。
on_quit | action_darray_thread_on_quit_t | 退出时的回调函数。
ctx | void* | 回调函数的上下文。

action_darray_thread_set_strategy 函数

  • 函数功能：

设置策略

  • 函数原型：
ret_t action_darray_thread_set_strategy (action_darray_thread_t* thread, action_darray_thread_strategy_t strategy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t值
thread | action_darray_thread_t* | action_darray_thread对象。
strategy | action_darray_thread_strategy_t | 策略

action_queue_create 函数

  • 函数功能：

创建action_queue对象。

  • 函数原型：
action_queue_t* action_queue_create (uint16_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_queue_t* | action_queue对象。
capacity | uint16_t | action的容量。

action_queue_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t action_queue_destroy (action_queue_t* q);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | action_queue_t* | action_queue对象。

action_queue_recv 函数

  • 函数功能：

接收一个请求。

  • 函数原型：
ret_t action_queue_recv (action_queue_t* q, qaction_t** action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | action_queue_t* | action_queue对象。
action | qaction_t** | 用于返回action对象。

action_queue_send 函数

  • 函数功能：

发送一个请求。

  • 函数原型：
ret_t action_queue_send (action_queue_t* q, qaction_t* action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | action_queue_t* | action_queue对象。
action | qaction_t* | action对象。

darray 属性

action darray。

  • 类型：waitable_action_darray_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

executed_actions_nr 属性

已经执行action的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

thread 属性

线程对象。

  • 类型：tk_thread_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


action_thread_pool_t

概述

action线程池。

函数

函数名称 | 说明
action_thread_pool_create | 创建action_thread_pool对象。
action_thread_pool_create_ex | 创建action_thread_pool对象。
action_thread_pool_destroy | 销毁。
action_thread_pool_exec | 执行action。

属性

属性名称 | 类型 | 说明
max_thread_nr | uint32_t | 最大线程数。
min_idle_nr | uint32_t | 最小空闲线程数
priority | tk_thread_priority_t | 线程池中的线程优先级
stack_size | uint32_t | 线程池中的线程栈大小

action_thread_pool_create 函数

  • 函数功能：

创建action_thread_pool对象。

  • 函数原型：
action_thread_pool_t* action_thread_pool_create (uint16_t max_thread_nr, uint16_t min_idle_nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_thread_pool_t* | action_thread_pool对象。
max_thread_nr | uint16_t | 最大线程数。
min_idle_nr | uint16_t | 最小空闲线程数(必须大于0)。

action_thread_pool_create_ex 函数

  • 函数功能：

创建action_thread_pool对象。

  • 函数原型：
action_thread_pool_t* action_thread_pool_create_ex (uint16_t max_thread_nr, uint16_t min_idle_nr, uint32_t stack_size, tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_thread_pool_t* | action_thread_pool对象。
max_thread_nr | uint16_t | 最大线程数。
min_idle_nr | uint16_t | 最小空闲线程数(必须大于0)。
stack_size | uint32_t | 栈的大小。
priority | tk_thread_priority_t | 优先级

action_thread_pool_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t action_thread_pool_destroy (action_thread_pool_t* thread_pool);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread_pool | action_thread_pool_t* | action_thread_pool对象。

action_thread_pool_exec 函数

  • 函数功能：

执行action。

  • 函数原型：
ret_t action_thread_pool_exec (action_thread_pool_t* thread_pool, qaction_t* action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread_pool | action_thread_pool_t* | action_thread_pool对象。
action | qaction_t* | action对象。

max_thread_nr 属性

最大线程数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min_idle_nr 属性

最小空闲线程数

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

priority 属性

线程池中的线程优先级

  • 类型：tk_thread_priority_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

stack_size 属性

线程池中的线程栈大小

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


action_thread_t

概述

执行action的线程。

> 每个线程都有一个action queue，可以是共享的queue，也可以是私有的queue。

函数

函数名称 | 说明
action_thread_create | 创建action_thread对象。
action_thread_create_ex | 创建action_thread对象。
action_thread_create_with_queue | 创建action_thread对象。
action_thread_create_with_queue_ex | 创建action_thread对象。
action_thread_destroy | 销毁。
action_thread_exec | 让线程执行action。
action_thread_set_on_idle | 设置空闲时的回调函数。
action_thread_set_on_quit | 设置退出时的回调函数。

属性

属性名称 | 类型 | 说明
executed_actions_nr | uint32_t | 已经执行action的个数。
queue | waitable_action_queue_t* | action queue。
thread | tk_thread_t* | 线程对象。

action_thread_create 函数

  • 函数功能：

创建action_thread对象。

  • 函数原型：
action_thread_t* action_thread_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_thread_t* | action_thread对象。

action_thread_create_ex 函数

  • 函数功能：

创建action_thread对象。

  • 函数原型：
action_thread_t* action_thread_create_ex (const char* name, uint32_t stack_size, tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_thread_t* | action_thread对象。
name | const char* | 名称。
stack_size | uint32_t | 栈的大小。
priority | tk_thread_priority_t | 优先级。

action_thread_create_with_queue 函数

  • 函数功能：

创建action_thread对象。

  • 函数原型：
action_thread_t* action_thread_create_with_queue (waitable_action_queue_t* queue);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_thread_t* | action_thread对象。
queue | waitable_action_queue_t* | queue对象。

action_thread_create_with_queue_ex 函数

  • 函数功能：

创建action_thread对象。

  • 函数原型：
action_thread_t* action_thread_create_with_queue_ex (waitable_action_queue_t* queue, const char* name, uint32_t stack_size, tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | action_thread_t* | action_thread对象。
queue | waitable_action_queue_t* | queue对象。
name | const char* | 名称。
stack_size | uint32_t | 栈的大小。
priority | tk_thread_priority_t | 优先级。

action_thread_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t action_thread_destroy (action_thread_t* thread);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_thread_t* | action_thread对象。

action_thread_exec 函数

  • 函数功能：

让线程执行action。

  • 函数原型：
ret_t action_thread_exec (action_thread_t* thread, qaction_t* action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_thread_t* | action_thread对象。
action | qaction_t* | action对象。

action_thread_set_on_idle 函数

  • 函数功能：

设置空闲时的回调函数。

  • 函数原型：
ret_t action_thread_set_on_idle (action_thread_t* thread, action_thread_on_idle_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_thread_t* | action_thread对象。
on_idle | action_thread_on_idle_t | 空闲时的回调函数。
ctx | void* | 回调函数的上下文。

action_thread_set_on_quit 函数

  • 函数功能：

设置退出时的回调函数。

  • 函数原型：
ret_t action_thread_set_on_quit (action_thread_t* thread, action_thread_on_quit_t on_quit, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | action_thread_t* | action_thread对象。
on_quit | action_thread_on_quit_t | 退出时的回调函数。
ctx | void* | 回调函数的上下文。

executed_actions_nr 属性

已经执行action的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

queue 属性

action queue。

  • 类型：waitable_action_queue_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

thread 属性

线程对象。

  • 类型：tk_thread_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


align_h_t

概述

水平对齐的常量定义。

常量

名称 | 说明
ALIGN_H_NONE | 无效对齐方式。
ALIGN_H_CENTER | 居中对齐。
ALIGN_H_LEFT | 左边对齐。
ALIGN_H_RIGHT | 右边对齐。


align_v_t

概述

垂直对齐的常量定义。

常量

名称 | 说明
ALIGN_V_NONE | 无效对齐方式。
ALIGN_V_MIDDLE | 居中对齐。
ALIGN_V_TOP | 顶部对齐。
ALIGN_V_BOTTOM | 底部对齐。


app_bar_t

概述

app_bar控件。

一个简单的容器控件，一般在窗口的顶部，用于显示本窗口的状态和信息。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

app_bar_t是widget_t的子类控件，widget_t的函数均适用于app_bar_t控件。

在xml中使用”app_bar”标签创建app_bar。如：

<app_bar x="0" y="0" w="100%" h="30" >
<label x="0" y="0" w="100%" h="100%" text="Basic Controls" />
</app_bar>

在c代码中使用函数app_bar_create创建app_bar。如：

widget_t* app_bar = app_bar_create(win, 0, 0, 320, 30);

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
app_bar_cast | 转换为app_bar对象(供脚本语言使用)。
app_bar_create | 创建app_bar对象
app_bar_get_widget_vtable | 获取 app_bar 虚表。

app_bar_cast 函数

  • 函数功能：

转换为app_bar对象(供脚本语言使用)。

  • 函数原型：
widget_t* app_bar_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | app_bar对象。
widget | widget_t* | app_bar对象。

app_bar_create 函数

  • 函数功能：

创建app_bar对象

  • 函数原型：
widget_t* app_bar_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

app_bar_get_widget_vtable 函数

  • 函数功能：

获取 app_bar 虚表。

  • 函数原型：
const widget_vtable_t* app_bar_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 app_bar 虚表。


app_conf_t

概述

应用程序的配置信息。

底层实现可以是任何格式，比如INI，XML，JSON和UBJSON。

对于树状的文档，key可以是多级的，用.分隔。如network.ip。

conf-io是可选组件，需要自己包含头文件，否则64位数据类型会被截断成32位的数据。

#include "conf_io/app_conf.h"

函数

函数名称 | 说明
app_conf_deinit | 释放conf对象。
app_conf_exist | 检查配置项是否存在。
app_conf_get | 获取配置项的值。
app_conf_get_bool | 获取bool类型配置项的值。
app_conf_get_double | 获取单精度浮点数类型配置项的值。
app_conf_get_instance | 获取app_conf实例。
app_conf_get_int | 获取整数类型配置项的值。
app_conf_get_int64 | 获取64位整数类型配置项的值。
app_conf_get_str | 获取字符串类型配置项的值。
app_conf_get_wstr | 获取宽字符串类型配置项的值。
app_conf_off_changed | 注销配置变化事件。
app_conf_off_changed_by_ctx | 注销配置变化事件。
app_conf_on_changed | 注册配置变化事件。
app_conf_reload | 重新加载配置(内存中的配置丢失)。
app_conf_remove | 删除配置项。
app_conf_save | 持久保存配置。
app_conf_set | 设置配置项的值。
app_conf_set_bool | 设置bool类型配置项的值。
app_conf_set_double | 设置双精度类型配置项的值。
app_conf_set_instance | 设置app_conf实例。
app_conf_set_int | 设置整数类型配置项的值。
app_conf_set_int64 | 设置64位整数类型配置项的值。
app_conf_set_str | 设置字符串类型配置项的值。
app_conf_set_wstr | 设置宽字符串类型配置项的值。

app_conf_deinit 函数

  • 函数功能：

释放conf对象。

  • 函数原型：
ret_t app_conf_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

app_conf_exist 函数

  • 函数功能：

检查配置项是否存在。

  • 函数原型：
bool_t app_conf_exist (const char* key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，FALSE表示不存在。
key | const char* | 配置项的名称。

app_conf_get 函数

  • 函数功能：

获取配置项的值。

  • 函数原型：
ret_t app_conf_get (const char* key, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | value_t* | 配置项的值(用于返回)。

app_conf_get_bool 函数

  • 函数功能：

获取bool类型配置项的值。

  • 函数原型：
bool_t app_conf_get_bool (const char* key, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回配置项的值（如果不存在返回缺省值）。
key | const char* | 配置项的名称。
defval | bool_t | 缺省值。

app_conf_get_double 函数

  • 函数功能：

获取单精度浮点数类型配置项的值。

  • 函数原型：
double app_conf_get_double (const char* key, double defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回配置项的值（如果不存在返回缺省值）。
key | const char* | 配置项的名称。
defval | double | 缺省值。

app_conf_get_instance 函数

  • 函数功能：

获取app_conf实例。

  • 函数原型：
tk_object_t* app_conf_get_instance ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回app_conf实例。

app_conf_get_int 函数

  • 函数功能：

获取整数类型配置项的值。

  • 函数原型：
int32_t app_conf_get_int (const char* key, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回配置项的值（如果不存在返回缺省值）。
key | const char* | 配置项的名称。
defval | int32_t | 缺省值。

app_conf_get_int64 函数

  • 函数功能：

获取64位整数类型配置项的值。

  • 函数原型：
int64_t app_conf_get_int64 (const char* key, int64_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回配置项的值（如果不存在返回缺省值）。
key | const char* | 配置项的名称。
defval | int64_t | 缺省值。

app_conf_get_str 函数

  • 函数功能：

获取字符串类型配置项的值。

  • 函数原型：
const char* app_conf_get_str (const char* key, const char* defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回配置项的值（如果不存在返回缺省值）。
key | const char* | 配置项的名称。
defval | const char* | 缺省值。

app_conf_get_wstr 函数

  • 函数功能：

获取宽字符串类型配置项的值。

  • 函数原型：
ret_t app_conf_get_wstr (const char* key, wchar_t* str, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
str | wchar_t* | 返回值。
max_size | uint32_t | 最大长度(字符数)。

app_conf_off_changed 函数

  • 函数功能：

注销配置变化事件。

  • 函数原型：
ret_t app_conf_off_changed (uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
id | uint32_t | app_conf_on_changed返回的ID。

app_conf_off_changed_by_ctx 函数

  • 函数功能：

注销配置变化事件。

  • 函数原型：
ret_t app_conf_off_changed_by_ctx (void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ctx | void* | 事件处理函数上下文。

app_conf_on_changed 函数

  • 函数功能：

注册配置变化事件。

  • 函数原型：
uint32_t app_conf_on_changed (event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于app_conf_off_changed。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

app_conf_reload 函数

  • 函数功能：

重新加载配置(内存中的配置丢失)。

  • 函数原型：
ret_t app_conf_reload ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

app_conf_remove 函数

  • 函数功能：

删除配置项。

  • 函数原型：
ret_t app_conf_remove (const char* key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。

app_conf_save 函数

  • 函数功能：

持久保存配置。

  • 函数原型：
ret_t app_conf_save ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

app_conf_set 函数

  • 函数功能：

设置配置项的值。

  • 函数原型：
ret_t app_conf_set (const char* key, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | const value_t* | 配置项的值。

app_conf_set_bool 函数

  • 函数功能：

设置bool类型配置项的值。

  • 函数原型：
ret_t app_conf_set_bool (const char* key, bool_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | bool_t | 配置项的值。

app_conf_set_double 函数

  • 函数功能：

设置双精度类型配置项的值。

  • 函数原型：
ret_t app_conf_set_double (const char* key, double v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | double | 配置项的值。

app_conf_set_instance 函数

  • 函数功能：

设置app_conf实例。

  • 函数原型：
ret_t app_conf_set_instance (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 配置对象。由app_conf_deinit释放。

app_conf_set_int 函数

  • 函数功能：

设置整数类型配置项的值。

  • 函数原型：
ret_t app_conf_set_int (const char* key, int32_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | int32_t | 配置项的值。

app_conf_set_int64 函数

  • 函数功能：

设置64位整数类型配置项的值。

  • 函数原型：
ret_t app_conf_set_int64 (const char* key, int64_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | int64_t | 配置项的值。

app_conf_set_str 函数

  • 函数功能：

设置字符串类型配置项的值。

  • 函数原型：
ret_t app_conf_set_str (const char* key, const char* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | const char* | 配置项的值。

app_conf_set_wstr 函数

  • 函数功能：

设置宽字符串类型配置项的值。

  • 函数原型：
ret_t app_conf_set_wstr (const char* key, const wchar_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
key | const char* | 配置项的名称。
v | const wchar_t* | 配置项的值。


app_type_t

概述

应用程序类型。

常量

名称 | 说明
APP_MOBILE | 嵌入式或移动APP
APP_SIMULATOR | 模拟器。
APP_DESKTOP | 桌面应用程序。
APP_CONSOLE | 控制台（没有界面）。


arg_desc_flags_t

概述

参数描述范围常量定义。

常量

名称 | 说明
ARG_DESC_FLAGS_REQUIRED | 必须提供。


assets_event_t

概述

资源事件，由资源管理器触发。

函数

函数名称 | 说明
assets_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
asset_info | asset_info_t* | 触发事件的资源对象
type | asset_type_t | 触发事件的资源类型

assets_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* assets_event_init (assets_event_t* event, assets_manager_t* am, uint32_t type, asset_type_t asset_type, asset_info_t* asset_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | assets_event_t* | event对象。
am | assets_manager_t* | 事件目标资源管理器。
type | uint32_t | 事件类型。
asset_type | asset_type_t | 资源类型。
asset_info | asset_info_t* | 资源对象。

asset_info 属性

触发事件的资源对象

  • 类型：asset_info_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

type 属性

触发事件的资源类型

  • 类型：asset_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


assets_managers_t

概述

在某些情况下，需要多个资源管理器。比如在手表系统里，每个小应用或表盘，可能放在独立的资源包中， 此时优先加载应用自己的资源，如果没有就加载系统的资源。

通常AWTK是单进程应用程序，为了避免概念混淆，我们把这些独立可安装的小应用成为”applet”。

函数

函数名称 | 说明
assets_manager_get_theme_name | 获取当前的主题名称。
assets_managers_is_applet_assets_supported | 是否支持小应用程序(applet)拥有独立资源目录。
assets_managers_ref | 获取指定小应用程序(applet)的资源管理器。
assets_managers_set_applet_res_root | 设置小应用程序(applet)的资源根目录。
assets_managers_set_theme | 设置当前的主题。
assets_managers_unref | 释放指定小应用程序(applet)的资源管理器。

assets_manager_get_theme_name 函数

  • 函数功能：

获取当前的主题名称。

  • 函数原型：
const char* assets_manager_get_theme_name (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回主题名称。
am | assets_manager_t* | 资源管理器对象。

assets_managers_is_applet_assets_supported 函数

  • 函数功能：

是否支持小应用程序(applet)拥有独立资源目录。

  • 函数原型：
bool_t assets_managers_is_applet_assets_supported ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示支持，否则表示不支持。

assets_managers_ref 函数

  • 函数功能：

获取指定小应用程序(applet)的资源管理器。

  • 函数原型：
assets_manager_t* assets_managers_ref (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | assets_manager_t* | 返回asset manager对象。
name | const char* | 小应用程序(applet)的名称。

assets_managers_set_applet_res_root 函数

  • 函数功能：

设置小应用程序(applet)的资源根目录。

  • 函数原型：
ret_t assets_managers_set_applet_res_root (const char* res_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
res_root | const char* | 资源根目录。

assets_managers_set_theme 函数

  • 函数功能：

设置当前的主题。

  • 函数原型：
ret_t assets_managers_set_theme (const char* theme);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
theme | const char* | 主题名称。

assets_managers_unref 函数

  • 函数功能：

释放指定小应用程序(applet)的资源管理器。

  • 函数原型：
ret_t assets_managers_unref (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | 资源管理器对象。


assets_manager_t

概述

资源管理器。 这里的资源管理器并非Windows下的文件浏览器，而是负责对各种资源，比如字体、窗体样式、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个：

  • 让上层不需要了解存储的方式。 在没有文件系统时或者内存紧缺时，把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时，资源放在文件系统中。在有网络时，资源也可以存放在服务器上(暂未实现)。资源管理器为上层提供统一的接口，让上层而不用关心底层的存储方式。

  • 让上层不需要了解资源的具体格式。 比如一个名为earth的图片，没有文件系统或内存紧缺，图片直接用位图数据格式存在ROM中，而有文件系统时，则用PNG格式存放在文件系统中。资源管理器让上层不需要关心图片的格式，访问时指定图片的名称即可(不用指定扩展名)。

  • 让上层不需要了解屏幕的密度。 不同的屏幕密度下需要加载不同的图片，比如MacPro的Retina屏就需要用双倍解析度的图片，否则就出现界面模糊。AWTK以后会支持PC软件和手机软件的开发，所以资源管理器需要为此提供支持，让上层不需关心屏幕的密度。

  • 对资源进行内存缓存。 不同类型的资源使用方式是不一样的，比如字体和窗体样式加载之后会一直使用，UI文件在生成界面之后就暂时不需要了，PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。

当从文件系统加载资源时，目录结构要求如下：

assets/{theme}/raw/
fonts   字体
images  图片
x1   普通密度屏幕的图片。
x2   2倍密度屏幕的图片。
x3   3倍密度屏幕的图片。
xx   密度无关的图片。
strings 需要翻译的字符串。
styles  窗体样式数据。
ui      UI描述数据。

函数

函数名称 | 说明
assets_manager | 获取缺省资源管理器。
assets_manager_add | 向资源管理器中增加一个资源。
assets_manager_add_data | 向资源管理器中增加一个资源data。
assets_manager_build_asset_filename | 构建资源文件名。
assets_manager_clear_all | 清除全部缓存的资源。
assets_manager_clear_cache | 清除指定类型的缓存。
assets_manager_clear_cache_ex | 清除指定类型和名称的缓存。
assets_manager_create | 创建资源管理器。
assets_manager_deinit | 释放全部资源。
assets_manager_destroy | 释放全部资源并销毁asset manager对象。
assets_manager_find_in_cache | 在资源管理器的缓存中查找指定的资源(不引用)。
assets_manager_get_res_root | 获取资源所在的目录(其下目录结构请参考demos)。
assets_manager_init | 初始化资源管理器。
assets_manager_is_save_assets_list | 检查指定类型是否需要保存。
assets_manager_load | 从文件系统中加载指定的资源，并缓存到内存中。在定义了宏WITH_FS_RES时才生效。
assets_manager_load_ex | 从文件系统中加载指定的资源，并缓存到内存中。在定义了宏WITH_FS_RES时才生效。
assets_manager_load_file | 获取path里的资源。
assets_manager_preload | 从文件系统中加载指定的资源，并缓存到内存中。在定义了宏WITH_FS_RES时才生效。
assets_manager_ref | 在资源管理器的缓存中查找指定的资源并引用它，如果缓存中不存在，尝试加载该资源。
assets_manager_ref_ex | 在资源管理器的缓存中查找指定的资源并引用它，如果缓存中不存在，尝试加载该资源。
assets_manager_set | 设置缺省资源管理器。
assets_manager_set_custom_build_asset_dir | 设置一个函数，该函数用于生成资源路径。
assets_manager_set_custom_load_asset | 设置一个函数，该函数用于实现自定义加载资源。
assets_manager_set_fallback_load_asset | 设置一个函数，该函数在找不到资源时加载后补资源。
assets_manager_set_loader | 设置loader。
assets_manager_set_locale_info | 设置locale_info对象。
assets_manager_set_res_root | 设置资源所在的目录(其下目录结构请参考demos)。
assets_manager_set_system_info | 设置system_info对象。
assets_manager_set_theme | 设置当前的主题。
assets_manager_unref | 释放指定的资源。

assets_manager 函数

  • 函数功能：

获取缺省资源管理器。

  • 函数原型：
assets_manager_t* assets_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | assets_manager_t* | 返回asset manager对象。

assets_manager_add 函数

  • 函数功能：

向资源管理器中增加一个资源。 备注：同一份资源多次调用会出现缓存叠加的问题，导致内存泄露

  • 函数原型：
ret_t assets_manager_add (assets_manager_t* am, const void* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
info | const void* | 待增加的资源。

assets_manager_add_data 函数

  • 函数功能：

向资源管理器中增加一个资源data。 备注：同一份资源多次调用会出现缓存叠加的问题，导致内存泄露

  • 函数原型：
ret_t assets_manager_add_data (assets_manager_t* am, const char* name, uint16_t type, uint16_t subtype, uint8_t* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
name | const char* | 待增加的资源的名字。
type | uint16_t | 待增加的资源的主类型枚举。
subtype | uint16_t | 待增加的资源的子类型枚举。
buff | uint8_t* | 待增加的资源的data数据。
size | uint32_t | 待增加的资源的data数据长度。

assets_manager_build_asset_filename 函数

  • 函数功能：

构建资源文件名。

  • 函数原型：
ret_t assets_manager_build_asset_filename (assets_manager_t* am, char* path, uint32_t size, const char* theme, bool_t ratio_sensitive, const char* subpath, const char* name, const char* extname);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功。
am | assets_manager_t* | asset manager对象。
path | char* | 文件名。
size | uint32_t | 文件名长度。
theme | const char* | 主题。
ratio_sensitive | bool_t | 是否按像素比查找。
subpath | const char* | 自路径。
name | const char* | 名称。
extname | const char* | 扩展名。

assets_manager_clear_all 函数

  • 函数功能：

清除全部缓存的资源。

  • 函数原型：
ret_t assets_manager_clear_all (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。

assets_manager_clear_cache 函数

  • 函数功能：

清除指定类型的缓存。

  • 函数原型：
ret_t assets_manager_clear_cache (assets_manager_t* am, asset_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。

assets_manager_clear_cache_ex 函数

  • 函数功能：

清除指定类型和名称的缓存。

  • 函数原型：
ret_t assets_manager_clear_cache_ex (assets_manager_t* am, asset_type_t type, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
name | const char* | 资源的名称。

assets_manager_create 函数

  • 函数功能：

创建资源管理器。

  • 函数原型：
assets_manager_t* assets_manager_create (uint32_t init_nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | assets_manager_t* | 返回asset manager对象。
init_nr | uint32_t | 预先分配资源的个数。

assets_manager_deinit 函数

  • 函数功能：

释放全部资源。

  • 函数原型：
ret_t assets_manager_deinit (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。

assets_manager_destroy 函数

  • 函数功能：

释放全部资源并销毁asset manager对象。

  • 函数原型：
ret_t assets_manager_destroy (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。

assets_manager_find_in_cache 函数

  • 函数功能：

在资源管理器的缓存中查找指定的资源(不引用)。

  • 函数原型：
const asset_info_t* assets_manager_find_in_cache (assets_manager_t* am, asset_type_t type, uint16_t subtype, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const asset_info_t* | 返回资源。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
subtype | uint16_t | 资源的子类型。
name | const char* | 资源的名称。

assets_manager_get_res_root 函数

  • 函数功能：

获取资源所在的目录(其下目录结构请参考demos)。

  • 函数原型：
const char* assets_manager_get_res_root (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回资源所在的目录。
am | assets_manager_t* | asset manager对象。

assets_manager_init 函数

  • 函数功能：

初始化资源管理器。

  • 函数原型：
assets_manager_t* assets_manager_init (assets_manager_t* am, uint32_t init_nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | assets_manager_t* | 返回asset manager对象。
am | assets_manager_t* | asset manager对象。
init_nr | uint32_t | 预先分配资源的个数。

assets_manager_is_save_assets_list 函数

  • 函数功能：

检查指定类型是否需要保存。

  • 函数原型：
bool_t assets_manager_is_save_assets_list (asset_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示需要保持，否则不需要保存。
type | asset_type_t | 资源类型。

assets_manager_load 函数

  • 函数功能：

从文件系统中加载指定的资源，并缓存到内存中。在定义了宏WITH_FS_RES时才生效。 备注：内部使用的，如果是加载资源的话，建议使用 assets_manager_ref 函数。

  • 函数原型：
asset_info_t* assets_manager_load (assets_manager_t* am, asset_type_t type, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_info_t* | 返回资源。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
name | const char* | 资源的名称。

assets_manager_load_ex 函数

  • 函数功能：

从文件系统中加载指定的资源，并缓存到内存中。在定义了宏WITH_FS_RES时才生效。 备注：内部使用的，如果是加载资源的话，建议使用 assets_manager_ref_ex 函数。

  • 函数原型：
asset_info_t* assets_manager_load_ex (assets_manager_t* am, asset_type_t type, uint16_t subtype, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_info_t* | 返回资源。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
subtype | uint16_t | 资源的子类型。
name | const char* | 资源的名称。

assets_manager_load_file 函数

  • 函数功能：

获取path里的资源。

  • 函数原型：
asset_info_t* assets_manager_load_file (assets_manager_t* am, asset_type_t type, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_info_t* | 返回asset_info_t。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源类型。
path | const char* | 目录。

assets_manager_preload 函数

  • 函数功能：

从文件系统中加载指定的资源，并缓存到内存中。在定义了宏WITH_FS_RES时才生效。 备注：内部使用的，不建议用户自行调用。

  • 函数原型：
ret_t assets_manager_preload (assets_manager_t* am, asset_type_t type, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
name | const char* | 资源的名称。

assets_manager_ref 函数

  • 函数功能：

在资源管理器的缓存中查找指定的资源并引用它，如果缓存中不存在，尝试加载该资源。

  • 函数原型：
const asset_info_t* assets_manager_ref (assets_manager_t* am, asset_type_t type, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const asset_info_t* | 返回资源。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
name | const char* | 资源的名称。

assets_manager_ref_ex 函数

  • 函数功能：

在资源管理器的缓存中查找指定的资源并引用它，如果缓存中不存在，尝试加载该资源。

  • 函数原型：
const asset_info_t* assets_manager_ref_ex (assets_manager_t* am, asset_type_t type, uint16_t subtype, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const asset_info_t* | 返回资源。
am | assets_manager_t* | asset manager对象。
type | asset_type_t | 资源的类型。
subtype | uint16_t | 资源的子类型。
name | const char* | 资源的名称。

assets_manager_set 函数

  • 函数功能：

设置缺省资源管理器。

  • 函数原型：
ret_t assets_manager_set (assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。

assets_manager_set_custom_build_asset_dir 函数

  • 函数功能：

设置一个函数，该函数用于生成资源路径。

有时我们需要优先加载用户自定义的资源，加载失败才加载系统缺省的，可用设置一个函数去实现这类功能。

  • 函数原型：
ret_t assets_manager_set_custom_build_asset_dir (assets_manager_t* am, assets_manager_build_asset_dir_t custom_build_asset_dir, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
custom_build_asset_dir | assets_manager_build_asset_dir_t | 回调函数。
ctx | void* | 回调函数的上下文。

assets_manager_set_custom_load_asset 函数

  • 函数功能：

设置一个函数，该函数用于实现自定义加载资源。

如果不支持文件系统，开发者可以设置一个加载资源的回调函数，从flash或其它地方读取资源。

  • 函数原型：
ret_t assets_manager_set_custom_load_asset (assets_manager_t* am, assets_manager_load_asset_t custom_load_asset, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
custom_load_asset | assets_manager_load_asset_t | 回调函数。
ctx | void* | 回调函数的上下文。

assets_manager_set_fallback_load_asset 函数

  • 函数功能：

设置一个函数，该函数在找不到资源时加载后补资源。

  • 函数原型：
ret_t assets_manager_set_fallback_load_asset (assets_manager_t* am, assets_manager_load_asset_t fallback_load_asset, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
fallback_load_asset | assets_manager_load_asset_t | 回调函数。
ctx | void* | 回调函数的上下文。

assets_manager_set_loader 函数

  • 函数功能：

设置loader。

  • 函数原型：
ret_t assets_manager_set_loader (assets_manager_t* am, asset_loader_t* loader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
loader | asset_loader_t* | 加载器(由assets manager销毁)。

assets_manager_set_locale_info 函数

  • 函数功能：

设置locale_info对象。

  • 函数原型：
ret_t assets_manager_set_locale_info (assets_manager_t* am, locale_info_t* locale_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
locale_info | locale_info_t* | locale_info对象。。

assets_manager_set_res_root 函数

  • 函数功能：

设置资源所在的目录(其下目录结构请参考demos)。

  • 函数原型：
ret_t assets_manager_set_res_root (assets_manager_t* am, const char* res_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
res_root | const char* | 资源所在的目录。

assets_manager_set_system_info 函数

  • 函数功能：

设置system_info对象。

  • 函数原型：
ret_t assets_manager_set_system_info (assets_manager_t* am, system_info_t* system_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
system_info | system_info_t* | system_info对象。。

assets_manager_set_theme 函数

  • 函数功能：

设置当前的主题。

  • 函数原型：
ret_t assets_manager_set_theme (assets_manager_t* am, const char* theme);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
theme | const char* | 主题名称。

assets_manager_unref 函数

  • 函数功能：

释放指定的资源。

  • 函数原型：
ret_t assets_manager_unref (assets_manager_t* am, const asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | assets_manager_t* | asset manager对象。
info | const asset_info_t* | 资源。


asset_data_type_t

概述

数据资源类型定义。

常量

名称 | 说明
ASSET_TYPE_DATA_NONE | 未知数据类型。
ASSET_TYPE_DATA_TEXT | 文本数据类型。
ASSET_TYPE_DATA_BIN | 二进制数据类型。
ASSET_TYPE_DATA_JSON | JSON数据类型。
ASSET_TYPE_DATA_DAT | 通用数据类型。


asset_font_type_t

概述

字体资源类型定义。

常量

名称 | 说明
ASSET_TYPE_FONT_NONE | 无效字体。
ASSET_TYPE_FONT_TTF | TTF字体。
ASSET_TYPE_FONT_BMP | 位图字体。


asset_image_type_t

概述

图片资源类型定义。

常量

名称 | 说明
ASSET_TYPE_IMAGE_NONE | 未知图片类型。
ASSET_TYPE_IMAGE_RAW | Raw图片类型。
ASSET_TYPE_IMAGE_BMP | 位图图片类型。
ASSET_TYPE_IMAGE_PNG | PNG图片类型。
ASSET_TYPE_IMAGE_JPG | JPG图片类型。
ASSET_TYPE_IMAGE_BSVG | BSVG图片类型。
ASSET_TYPE_IMAGE_GIF | GIF图片类型。
ASSET_TYPE_IMAGE_WEBP | WEBP图片类型。
ASSET_TYPE_IMAGE_LZ4 | LZ4压缩的图片类型。
ASSET_TYPE_IMAGE_OTHER | 其它图片类型。


asset_info_flag_t

概述

资源标志常量定义。

常量

名称 | 说明
ASSET_INFO_FLAG_IN_ROM | 资源在ROM中。
ASSET_INFO_FLAG_FULL_NAME | 使用长名字。


asset_info_t

概述

单个资源的描述信息。

函数

函数名称 | 说明
asset_info_create | 创建asset_info对象。
asset_info_destroy | 销毁asset_info对象。
asset_info_get_formatted_name | 把资源名字格式化为符合标准长度的字符串。
asset_info_get_name | 获取名称。
asset_info_get_type | 获取类型。
asset_info_is_in_rom | 资源是否在ROM中。
asset_info_ref | 增加asset_info对象的引用计数。
asset_info_set_is_in_rom | 设置资源是否在ROM中的标记位。
asset_info_unref | 减少asset_info对象的引用计数。

属性

属性名称 | 类型 | 说明
flags | uint8_t | 资源标志。
refcount | uint32_t | 引用计数。
size | uint32_t | 大小。
subtype | uint8_t | 子类型。
type | uint16_t | 类型。

asset_info_create 函数

  • 函数功能：

创建asset_info对象。

主要供脚本语言使用。

  • 函数原型：
asset_info_t* asset_info_create (uint16_t type, uint16_t subtype, const char* name, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_info_t* | asset_info对象。
type | uint16_t | 资源的类型。
subtype | uint16_t | 资源的子类型。
name | const char* | 资源的名称。
size | int32_t | 资源的数据长度(用于分配空间)。

asset_info_destroy 函数

  • 函数功能：

销毁asset_info对象。

  • 函数原型：
ret_t asset_info_destroy (asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | asset_info_t* | asset_info对象。

asset_info_get_formatted_name 函数

  • 函数功能：

把资源名字格式化为符合标准长度的字符串。

  • 函数原型：
const char* asset_info_get_formatted_name (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回格式化后的名字。
name | const char* | 未格式化名字。

asset_info_get_name 函数

  • 函数功能：

获取名称。

  • 函数原型：
const char* asset_info_get_name (const asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回名称。
info | const asset_info_t* | asset_info对象。

asset_info_get_type 函数

  • 函数功能：

获取类型。

  • 函数原型：
uint16_t asset_info_get_type (asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回类型。
info | asset_info_t* | asset_info对象。

asset_info_is_in_rom 函数

  • 函数功能：

资源是否在ROM中。

  • 函数原型：
bool_t asset_info_is_in_rom (const asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回 TRUE 为在 ROM 中，返回 FALSE 则不在。
info | const asset_info_t* | asset_info对象。

asset_info_ref 函数

  • 函数功能：

增加asset_info对象的引用计数。

  • 函数原型：
ret_t asset_info_ref (asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | asset_info_t* | asset_info对象。

asset_info_set_is_in_rom 函数

  • 函数功能：

设置资源是否在ROM中的标记位。

  • 函数原型：
ret_t asset_info_set_is_in_rom (asset_info_t* info, bool_t is_in_rom);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | asset_info_t* | asset_info对象。
is_in_rom | bool_t | 资源是否在ROM中。

asset_info_unref 函数

  • 函数功能：

减少asset_info对象的引用计数。

  • 函数原型：
ret_t asset_info_unref (asset_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | asset_info_t* | asset_info对象。

flags 属性

资源标志。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

refcount 属性

引用计数。 is_in_rom == FALSE时才有效。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

size 属性

大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

subtype 属性

子类型。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

type 属性

类型。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


asset_loader_t

概述

资源加载器接口。

函数

函数名称 | 说明
asset_loader_create | 创建缺省的资源加载器。
asset_loader_destroy | 销毁loader对象。
asset_loader_exist | 判断指定资源是否存在。
asset_loader_load | 加载指定的资源。

asset_loader_create 函数

  • 函数功能：

创建缺省的资源加载器。

  • 函数原型：
asset_loader_t* asset_loader_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_loader_t* | 返回loader对象。

asset_loader_destroy 函数

  • 函数功能：

销毁loader对象。

  • 函数原型：
ret_t asset_loader_destroy (asset_loader_t* loader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
loader | asset_loader_t* | loader对象。

asset_loader_exist 函数

  • 函数功能：

判断指定资源是否存在。 。

  • 函数原型：
bool_t asset_loader_exist (asset_loader_t* loader, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则不存在。
loader | asset_loader_t* | loader对象。
path | const char* | 资源是路径。

asset_loader_load 函数

  • 函数功能：

加载指定的资源。

  • 函数原型：
asset_info_t* asset_loader_load (asset_loader_t* loader, uint16_t type, uint16_t subtype, const char* path, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_info_t* | 返回资源对象(由调用者销毁)。
loader | asset_loader_t* | loader对象。
type | uint16_t | 资源类型。
subtype | uint16_t | 资源子类型。
path | const char* | 路径。
name | const char* | 名称。


asset_script_type_t

概述

脚本资源类型定义。

常量

名称 | 说明
ASSET_TYPE_SCRIPT_NONE | 未知脚本类型。
ASSET_TYPE_SCRIPT_JS | JS脚本类型。
ASSET_TYPE_SCRIPT_LUA | LUA脚本类型。
ASSET_TYPE_SCRIPT_PYTHON | Python脚本类型。


asset_type_t

概述

资源类型常量定义。

常量

名称 | 说明
ASSET_TYPE_NONE | 无效资源。
ASSET_TYPE_FONT | 字体资源。
ASSET_TYPE_IMAGE | 图片资源。
ASSET_TYPE_STYLE | 窗体样式资源。
ASSET_TYPE_UI | UI数据资源。
ASSET_TYPE_XML | XML数据资源。
ASSET_TYPE_STRINGS | 字符串数据资源。
ASSET_TYPE_SCRIPT | JS等脚本资源。
ASSET_TYPE_FLOW | 流图资源。
ASSET_TYPE_DATA | 其它数据资源。


asset_ui_type_t

概述

UI资源类型定义。

常量

名称 | 说明
ASSET_TYPE_UI_NONE | 无效UI类型。
ASSET_TYPE_UI_BIN | 二进制的UI类型。
ASSET_TYPE_UI_XML | XML格式的UI类型。


async_t

概述

在后台线程执行指定函数，不会阻塞UI线程。

函数

函数名称 | 说明
async_call | 异步执行exec函数，执行完成后，在后台线程调用on_result函数。
async_call_deinit | 全局~初始化。
async_call_init_ex | 全局初始化。
async_call_init_ex2 | 全局初始化。

async_call 函数

  • 函数功能：

异步执行exec函数，执行完成后，在后台线程调用on_result函数。

  • 函数原型：
ret_t async_call (async_exec_t exec, async_on_result_t on_result, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
exec | async_exec_t | 需要异步支持的函数。
on_result | async_on_result_t | 返回执行结果(可选)
ctx | void* | 两个回调函数的上下文。

async_call_deinit 函数

  • 函数功能：

全局~初始化。

  • 函数原型：
ret_t async_call_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

async_call_init_ex 函数

  • 函数功能：

全局初始化。

  • 函数原型：
ret_t async_call_init_ex (uint32_t max_threads, uint32_t min_threads);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
max_threads | uint32_t | 最大线程数。
min_threads | uint32_t | 最小线程数(必须大于0)。

async_call_init_ex2 函数

  • 函数功能：

全局初始化。

  • 函数原型：
ret_t async_call_init_ex2 (uint32_t max_threads, uint32_t min_threads, uint32_t stack_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
max_threads | uint32_t | 最大线程数。
min_threads | uint32_t | 最小线程数(必须大于0)。
stack_size | uint32_t | 栈空间大小(字节)。


bidi_t

概述

Unicode Bidirectional Algorithm.

函数

函数名称 | 说明
bidi_deinit | 释放bidi对象相关资源。
bidi_init | 初始化bidi对象。
bidi_log2vis | 将字符串转成用于显示的字符串，输出结果放在bidi->vis_str中。
bidi_type_from_name | 将bidi类型的名称转换成类型。

属性

属性名称 | 类型 | 说明
positions_L_to_V | int32_t* | logical位置与visual位置的映射。
positions_V_to_L | int32_t* | visual位置与logical位置的映射。
request_type | bidi_type_t | 请求的类型。
resolved_type | bidi_type_t | 实际的类型。
vis_str | wchar_t* | 用于显示的字符串(存放log2vis的结果)。
vis_str_size | uint32_t | 用于显示的字符串长度(存放log2vis的结果)。

bidi_deinit 函数

  • 函数功能：

释放bidi对象相关资源。

  • 函数原型：
ret_t bidi_deinit (bidi_t* bidi);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bidi | bidi_t* | bidi对象。

bidi_init 函数

  • 函数功能：

初始化bidi对象。

  • 函数原型：
bidi_t* bidi_init (bidi_t* bidi, bool_t alloc_l2v, bool_t alloc_v2l, bidi_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bidi_t* | 返回bidi对象。
bidi | bidi_t* | bidi对象。
alloc_l2v | bool_t | 是否为positions_L_to_V分配空间。
alloc_v2l | bool_t | 是否为positions_V_to_L分配空间。
type | bidi_type_t | 类型。

bidi_log2vis 函数

  • 函数功能：

将字符串转成用于显示的字符串，输出结果放在bidi->vis_str中。

  • 函数原型：
ret_t bidi_log2vis (bidi_t* bidi, const wchar_t* str, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bidi | bidi_t* | bidi对象。
str | const wchar_t* | 字符串。
size | uint32_t | 字符串的长度。

bidi_type_from_name 函数

  • 函数功能：

将bidi类型的名称转换成类型。

  • 函数原型：
bidi_type_t bidi_type_from_name (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bidi_type_t | 返回bidi对象。
name | const char* | 类型名称(取值：rtl,ltr,auto,wrtl,wltr,lro,rlo)。

positions_L_to_V 属性

logical位置与visual位置的映射。

  • 类型：int32_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

positions_V_to_L 属性

visual位置与logical位置的映射。

  • 类型：int32_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

request_type 属性

请求的类型。

  • 类型：bidi_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

resolved_type 属性

实际的类型。

  • 类型：bidi_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

vis_str 属性

用于显示的字符串(存放log2vis的结果)。

  • 类型：wchar_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

vis_str_size 属性

用于显示的字符串长度(存放log2vis的结果)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


bidi_type_t

概述

bidi 类型常量定义。

常量

名称 | 说明
BIDI_TYPE_AUTO | 自动检查。
BIDI_TYPE_LTR | Left-To-Right letter。
BIDI_TYPE_RTL | Right-To-Left letter。
BIDI_TYPE_LRO | Left-To-Right letter Override。
BIDI_TYPE_RLO | Right-To-Left letter Override。
BIDI_TYPE_WLTR | Weak Left To Right paragraph。
BIDI_TYPE_WRTL | Weak Right To Left paragraph。


bitmap_flag_t

概述

位图标志常量定义。

常量

名称 | 说明
BITMAP_FLAG_NONE | 无特殊标志。
BITMAP_FLAG_OPAQUE | 不透明图片。
BITMAP_FLAG_IMMUTABLE | 图片内容不会变化。
BITMAP_FLAG_TEXTURE | OpenGL Texture, bitmap的id是有效的texture id。
BITMAP_FLAG_CHANGED | 如果是MUTABLE的图片，更新时需要设置此标志，底层可能会做特殊处理，比如更新图片到GPU。
BITMAP_FLAG_PREMULTI_ALPHA | 预乘alpha。
BITMAP_FLAG_LCD_ORIENTATION | 位图数据已经处理了 lcd 旋转，同时说明 bitmap 的宽高和真实数据的宽高可能不一致
BITMAP_FLAG_GPU_FBO_TEXTURE | 该位图为 GPU 的 fbo 数据。


bitmap_format_t

概述

位图格式常量定义。

常量

名称 | 说明
BITMAP_FMT_NONE | 无效格式。
BITMAP_FMT_RGBA8888 | 一个像素占用4个字节，RGBA占一个字节，按内存地址递增。
BITMAP_FMT_ABGR8888 | 一个像素占用4个字节，ABGR占一个字节，按内存地址递增。
BITMAP_FMT_BGRA8888 | 一个像素占用4个字节，BGRA占一个字节，按内存地址递增。
BITMAP_FMT_ARGB8888 | 一个像素占用4个字节，ARGB占一个字节，按内存地址递增。
BITMAP_FMT_RGB565 | 一个像素占用2个字节，RGB分别占用5,6,5位, 按内存地址递增。
BITMAP_FMT_BGR565 | 一个像素占用2个字节，BGR分别占用5,6,5位, 按内存地址递增。
BITMAP_FMT_RGB888 | 一个像素占用3个字节，RGB占一个字节，按内存地址递增。
BITMAP_FMT_BGR888 | 一个像素占用3个字节，RGB占一个字节，按内存地址递增。
BITMAP_FMT_GRAY | 一个像素占用1个字节。
BITMAP_FMT_MONO | 一个像素占用1比特。


bitmap_t

概述

位图。

函数

函数名称 | 说明
bitmap_clone | Clone图片。
bitmap_create | 创建图片对象(一般供脚本语言中使用)。
bitmap_create_ex | 创建图片对象。
bitmap_destroy | 销毁图片。
bitmap_destroy_with_self | 销毁图片(for script only)。
bitmap_get_bpp | 获取图片一个像素占用的字节数。
bitmap_get_bpp_of_format | 获取位图格式对应的颜色位数。
bitmap_get_line_length | 获取每一行占用内存的字节数。
bitmap_get_physical_height | 获取图片真实物理的高度。
bitmap_get_physical_line_length | 获取图片真实物理的每一行占用内存的字节数。
bitmap_get_physical_width | 获取图片真实物理的宽度。
bitmap_get_pixel | 获取图片指定像素的rgba颜色值(主要用于测试程序)。
bitmap_init | 初始化图片。
bitmap_init_ex | 初始化图片。
bitmap_init_from_bgra | 初始化图片。
bitmap_init_from_rgba | 初始化图片。
bitmap_lock_buffer_for_read | 为读取数据而锁定bitmap的图片缓冲区。
bitmap_lock_buffer_for_write | 为修改数据而锁定bitmap的图片缓冲区。
bitmap_mono_dump | dump mono bitmap。
bitmap_save_png | 把bitmap保存为png。
bitmap_set_line_length | 设置line_length。
bitmap_transform | 对图片每个像素进行变换。
bitmap_unlock_buffer | 解锁图像缓冲区。

属性

属性名称 | 类型 | 说明
buffer | graphic_buffer_t* | 图片数据。
flags | uint16_t | 标志。请参考
format | uint16_t | 格式。请参考
h | wh_t | 高度。
line_length | uint32_t | 每一行实际占用的内存(也称为stride或pitch)，一般情况下为w*bpp。
name | const char* | 名称。
orientation | lcd_orientation_t | 图片数据旋转。（修改了图片数据旋转后 flags 会带有 BITMAP_FLAG_LCD_ORIENTATION）
w | wh_t | 宽度。

bitmap_clone 函数

  • 函数功能：

Clone图片。

  • 函数原型：
bitmap_t* bitmap_clone (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回新的bitmap对象。
bitmap | bitmap_t* | bitmap对象。

bitmap_create 函数

  • 函数功能：

创建图片对象(一般供脚本语言中使用)。

  • 函数原型：
bitmap_t* bitmap_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回bitmap对象。

bitmap_create_ex 函数

  • 函数功能：

创建图片对象。

  • 函数原型：
bitmap_t* bitmap_create_ex (uint32_t w, uint32_t h, uint32_t line_length, bitmap_format_t format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回bitmap对象。
w | uint32_t | 宽度。
h | uint32_t | 高度。
line_length | uint32_t | line_length。
format | bitmap_format_t | 格式。

bitmap_destroy 函数

  • 函数功能：

销毁图片。

  • 函数原型：
ret_t bitmap_destroy (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。

bitmap_destroy_with_self 函数

  • 函数功能：

销毁图片(for script only)。

  • 函数原型：
ret_t bitmap_destroy_with_self (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。

bitmap_get_bpp 函数

  • 函数功能：

获取图片一个像素占用的字节数。

  • 函数原型：
uint32_t bitmap_get_bpp (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回一个像素占用的字节数。
bitmap | bitmap_t* | bitmap对象。

bitmap_get_bpp_of_format 函数

  • 函数功能：

获取位图格式对应的颜色位数。

  • 函数原型：
uint32_t bitmap_get_bpp_of_format (bitmap_format_t format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 成功返回颜色位数，失败返回0。
format | bitmap_format_t | 位图格式。

bitmap_get_line_length 函数

  • 函数功能：

获取每一行占用内存的字节数。

  • 函数原型：
uint32_t bitmap_get_line_length (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回每一行占用内存的字节数。
bitmap | bitmap_t* | bitmap对象。

bitmap_get_physical_height 函数

  • 函数功能：

获取图片真实物理的高度。

  • 函数原型：
uint32_t bitmap_get_physical_height (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回图片高度。
bitmap | bitmap_t* | bitmap对象。

bitmap_get_physical_line_length 函数

  • 函数功能：

获取图片真实物理的每一行占用内存的字节数。

  • 函数原型：
uint32_t bitmap_get_physical_line_length (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回每一行占用内存的字节数。
bitmap | bitmap_t* | bitmap对象。

bitmap_get_physical_width 函数

  • 函数功能：

获取图片真实物理的宽度。

  • 函数原型：
uint32_t bitmap_get_physical_width (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回图片宽度。
bitmap | bitmap_t* | bitmap对象。

bitmap_get_pixel 函数

  • 函数功能：

获取图片指定像素的rgba颜色值(主要用于测试程序)。

  • 函数原型：
ret_t bitmap_get_pixel (bitmap_t* bitmap, uint32_t x, uint32_t y, rgba_t* rgba);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
x | uint32_t | x坐标。
y | uint32_t | y坐标。
rgba | rgba_t* | 返回颜色值。

bitmap_init 函数

  • 函数功能：

初始化图片。

  • 函数原型：
ret_t bitmap_init (bitmap_t* bitmap, uint32_t w, uint32_t h, bitmap_format_t format, uint8_t* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
w | uint32_t | 宽度。
h | uint32_t | 高度。
format | bitmap_format_t | 格式。
data | uint8_t* | 数据，直接引用，但不负责释放。如果为空，由内部自动分配和释放。

bitmap_init_ex 函数

  • 函数功能：

初始化图片。

  • 函数原型：
ret_t bitmap_init_ex (bitmap_t* bitmap, uint32_t w, uint32_t h, uint32_t line_length, bitmap_format_t format, uint8_t* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
w | uint32_t | 宽度。
h | uint32_t | 高度。
line_length | uint32_t | 行长。
format | bitmap_format_t | 格式。
data | uint8_t* | 数据，直接引用，但不负责释放。如果为空，由内部自动分配和释放。

bitmap_init_from_bgra 函数

  • 函数功能：

初始化图片。

  • 函数原型：
ret_t bitmap_init_from_bgra (bitmap_t* bitmap, uint32_t w, uint32_t h, bitmap_format_t format, const uint8_t* data, uint32_t comp, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
w | uint32_t | 宽度。
h | uint32_t | 高度。
format | bitmap_format_t | 格式。
data | const uint8_t* | 数据。3通道时为BGR888格式，4通道时为BGRA888格式(内部拷贝该数据，不会引用，调用者自行释放)。
comp | uint32_t | 颜色通道数(目前支持3(bgr)和4(bgra))。
o | lcd_orientation_t | 旋转方向。

bitmap_init_from_rgba 函数

  • 函数功能：

初始化图片。

  • 函数原型：
ret_t bitmap_init_from_rgba (bitmap_t* bitmap, uint32_t w, uint32_t h, bitmap_format_t format, const uint8_t* data, uint32_t comp, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
w | uint32_t | 宽度。
h | uint32_t | 高度。
format | bitmap_format_t | 格式。
data | const uint8_t* | 数据。3通道时为RGB888格式，4通道时为RGBA888格式(内部拷贝该数据，不会引用，调用者自行释放)。
comp | uint32_t | 颜色通道数(目前支持3(rgb)和4(rgba))。
o | lcd_orientation_t | 旋转方向。

bitmap_lock_buffer_for_read 函数

  • 函数功能：

为读取数据而锁定bitmap的图片缓冲区。

  • 函数原型：
uint8_t* bitmap_lock_buffer_for_read (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回缓存区的首地址。
bitmap | bitmap_t* | bitmap对象。

bitmap_lock_buffer_for_write 函数

  • 函数功能：

为修改数据而锁定bitmap的图片缓冲区。

  • 函数原型：
uint8_t* bitmap_lock_buffer_for_write (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回缓存区的首地址。
bitmap | bitmap_t* | bitmap对象。

bitmap_mono_dump 函数

  • 函数功能：

dump mono bitmap。

  • 函数原型：
ret_t bitmap_mono_dump (const uint8_t* buff, uint32_t w, uint32_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buff | const uint8_t* | 数据。
w | uint32_t | 宽度。
h | uint32_t | 高度。

bitmap_save_png 函数

  • 函数功能：

把bitmap保存为png。

  • 函数原型：
bool_t bitmap_save_png (bitmap_t* bitmap, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示成功，FALSE表示失败。
bitmap | bitmap_t* | bitmap对象。
filename | const char* | 文件名。

bitmap_set_line_length 函数

  • 函数功能：

设置line_length。

  • 函数原型：
ret_t bitmap_set_line_length (bitmap_t* bitmap, uint32_t line_length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
line_length | uint32_t | line_length。

bitmap_transform 函数

  • 函数功能：

对图片每个像素进行变换。

  • 函数原型：
ret_t bitmap_transform (bitmap_t* bitmap, bitmap_transform_t transform, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。
transform | bitmap_transform_t | 回调函数。
ctx | void* | 回调函数的上下文。

bitmap_unlock_buffer 函数

  • 函数功能：

解锁图像缓冲区。

  • 函数原型：
ret_t bitmap_unlock_buffer (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | bitmap对象。

buffer 属性

图片数据。

  • 类型：graphic_buffer_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

flags 属性

标志。请参考{bitmap_flag_t}。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

format 属性

格式。请参考{bitmap_format_t}。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

h 属性

高度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

line_length 属性

每一行实际占用的内存(也称为stride或pitch)，一般情况下为w*bpp。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

name 属性

名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

orientation 属性

图片数据旋转。（修改了图片数据旋转后 flags 会带有 BITMAP_FLAG_LCD_ORIENTATION）

  • 类型：lcd_orientation_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

w 属性

宽度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


border_type_t

概述

控件边框类型。

常量

名称 | 说明
BORDER_NONE | 无边框。
BORDER_LEFT | 左边框线。
BORDER_RIGHT | 右边框线。
BORDER_TOP | 上边框线。
BORDER_BOTTOM | 下边框线。
BORDER_ALL | 全边框线。


bsvg_t

概述

函数

函数名称 | 说明
bsvg_draw | 绘制bsvg。
bsvg_draw_path | 绘制bsvg路径。
bsvg_init | 初始化bsvg对象。

bsvg_draw 函数

  • 函数功能：

绘制bsvg。

  • 函数原型：
ret_t bsvg_draw (bsvg_t* svg, vgcanvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
svg | bsvg_t* | SVG对象。
canvas | vgcanvas_t* | vgcanvas对象。

bsvg_draw_path 函数

  • 函数功能：

绘制bsvg路径。

  • 函数原型：
ret_t bsvg_draw_path (bsvg_draw_ctx_t* ctx, const svg_path_t* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ctx | bsvg_draw_ctx_t* | 绘制上下文。
path | const svg_path_t* | path对象。

bsvg_init 函数

  • 函数功能：

初始化bsvg对象。

  • 函数原型：
bsvg_t* bsvg_init (bsvg_t* svg, const uint32_t* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bsvg_t* | 返回解析后的svg。
svg | bsvg_t* | svg对象。
data | const uint32_t* | svg数据。
size | uint32_t | data长度。


button_group_t

概述

Button Group控件。一个简单的容器控件，用于容纳一组按钮控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

button_group_t是widget_t的子类控件，widget_t的函数均适用于button_group_t控件。

在xml中使用”button_group”标签创建button_group。如：

<button_group x="0" y="m" w="100%" h="40" children_layout="default(c=4,r=1,s=5,m=5)">
<button name="open:basic" text="Basic"/>
<button name="open:button" text="Buttons"/>
<button name="open:edit" text="Edits"/>
<button name="open:keyboard" text="KeyBoard"/>
</button_group>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
button_group_cast | 转换为button_group对象(供脚本语言使用)。
button_group_create | 创建button_group对象
button_group_get_widget_vtable | 获取 button_group 虚表。

button_group_cast 函数

  • 函数功能：

转换为button_group对象(供脚本语言使用)。

  • 函数原型：
widget_t* button_group_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | button_group对象。
widget | widget_t* | button_group对象。

button_group_create 函数

  • 函数功能：

创建button_group对象

  • 函数原型：
widget_t* button_group_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

button_group_get_widget_vtable 函数

  • 函数功能：

获取 button_group 虚表。

  • 函数原型：
const widget_vtable_t* button_group_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 button_group 虚表。


button_t

概述

按钮控件。

点击按钮之后会触发EVT_CLICK事件，注册EVT_CLICK事件以执行特定操作。

按钮控件也可以作为容器使用，使用图片和文本作为其子控件，可以实现很多有趣的效果。

button_t是widget_t的子类控件，widget_t的函数均适用于button_t控件。

在xml中使用”button”标签创建按钮控件。如：

<button x="c" y="m" w="80" h="30" text="OK"/>

更多用法请参考： button.xml

在c代码中使用函数button_create创建按钮控件。如：

widget_t* button = button_create(win, 10, 10, 128, 30);
widget_set_text(button, L"OK");
widget_on(button, EVT_CLICK, on_click, NULL);

创建之后，需要用widget_set_text或widget_set_text_utf8设置文本内容。

完整示例请参考： button demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default" border_color="#a0a0a0"  text_color="black">
<normal     bg_color="#f0f0f0" />
<pressed    bg_color="#c0c0c0" x_offset="1" y_offset="1"/>
<over       bg_color="#e0e0e0" />
<disable    bg_color="gray" text_color="#d0d0d0" />
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
button_cast | 转换为button对象(供脚本语言使用)。
button_create | 创建button对象
button_get_widget_vtable | 获取 button 虚表。
button_set_enable_long_press | 设置是否启用长按事件。
button_set_enable_preview | 设置是否启用预览。
button_set_long_press_time | 设置触发长按事件的时间。
button_set_repeat | 设置触发EVT_CLICK事件的时间间隔。为0则不重复触发EVT_CLICK事件。

属性

属性名称 | 类型 | 说明
enable_long_press | bool_t | 是否启用长按事件，为true时才触发长按事件。
enable_preview | bool_t | 是否启用预览(主要用于软键盘)。
long_press_time | uint32_t | 触发长按事件的时间(ms)
pressed | bool_t | 当前是否按下。
repeat | int32_t | 重复触发EVT_CLICK事件的时间间隔。

事件

事件名称 | 类型 | 说明
EVT_CLICK | pointer_event_t | 点击事件。
EVT_LONG_PRESS | pointer_event_t | 长按事件。

button_cast 函数

  • 函数功能：

转换为button对象(供脚本语言使用)。

  • 函数原型：
widget_t* button_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | button对象。
widget | widget_t* | button对象。

button_create 函数

  • 函数功能：

创建button对象

  • 函数原型：
widget_t* button_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

button_get_widget_vtable 函数

  • 函数功能：

获取 button 虚表。

  • 函数原型：
const widget_vtable_t* button_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 button 虚表。

button_set_enable_long_press 函数

  • 函数功能：

设置是否启用长按事件。

  • 函数原型：
ret_t button_set_enable_long_press (widget_t* widget, bool_t enable_long_press);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
enable_long_press | bool_t | 是否启用长按事件。

button_set_enable_preview 函数

  • 函数功能：

设置是否启用预览。

  • 函数原型：
ret_t button_set_enable_preview (widget_t* widget, bool_t enable_preview);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
enable_preview | bool_t | 是否启用预览。

button_set_long_press_time 函数

  • 函数功能：

设置触发长按事件的时间。

  • 函数原型：
ret_t button_set_long_press_time (widget_t* widget, uint32_t long_press_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
long_press_time | uint32_t | 触发长按事件的时间(毫秒)。

button_set_repeat 函数

  • 函数功能：

设置触发EVT_CLICK事件的时间间隔。为0则不重复触发EVT_CLICK事件。

  • 函数原型：
ret_t button_set_repeat (widget_t* widget, int32_t repeat);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
repeat | int32_t | 触发EVT_CLICK事件的时间间隔(毫秒)。

enable_long_press 属性

是否启用长按事件，为true时才触发长按事件。

触发长按事件后不再触发点击事件。 缺省不启用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

enable_preview 属性

是否启用预览(主要用于软键盘)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

long_press_time 属性

触发长按事件的时间(ms)

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

pressed 属性

当前是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

repeat 属性

重复触发EVT_CLICK事件的时间间隔。

为0则不重复触发EVT_CLICK事件。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


bytesize_t

概述

串口字节位数。

常量

名称 | 说明
fivebits | 每字节5位。
sixbits | 每字节6位。
sevenbits | 每字节7位。
eightbits | 每字节8位。


calibration_win_t

概述

电阻屏校准窗口。

calibration_win_t是window_base_t的子类控件， window_base_t的函数均适用于calibration_win_t控件。

在xml中使用”calibration_win”标签创建电阻屏校准窗口。如：

<calibration_win name="cali" w="100%" h="100%" text="Please click the center of cross">
</calibration_win>

更多用法请参考： window.xml

在c代码中使用函数calibration_win_create创建窗口。如：

widget_t* win = calibration_win_create(NULL, 0, 0, 320, 480);

通过calibration_win_set_on_done注册回调函数，用于保存校准数据。

函数

函数名称 | 说明
calibration_win_cast | 转换为calibration_win对象(供脚本语言使用)。
calibration_win_create | 创建calibration_win对象
calibration_win_get_widget_vtable | 获取 calibration_win 虚表。
calibration_win_set_on_click | 设置校准点击事件的处理函数。
calibration_win_set_on_done | 设置校准完成的处理函数。

calibration_win_cast 函数

  • 函数功能：

转换为calibration_win对象(供脚本语言使用)。

  • 函数原型：
widget_t* calibration_win_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | calibration_win对象。
widget | widget_t* | calibration_win对象。

calibration_win_create 函数

  • 函数功能：

创建calibration_win对象

  • 函数原型：
widget_t* calibration_win_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

calibration_win_get_widget_vtable 函数

  • 函数功能：

获取 calibration_win 虚表。

  • 函数原型：
const widget_vtable_t* calibration_win_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 calibration_win 虚表。

calibration_win_set_on_click 函数

  • 函数功能：

设置校准点击事件的处理函数。

  • 函数原型：
ret_t calibration_win_set_on_click (widget_t* widget, calibration_win_on_click_t on_click, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
on_click | calibration_win_on_click_t | 回调函数。
ctx | void* | 回调函数的上下文。

calibration_win_set_on_done 函数

  • 函数功能：

设置校准完成的处理函数。

  • 函数原型：
ret_t calibration_win_set_on_done (widget_t* widget, calibration_win_on_done_t on_done, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
on_done | calibration_win_on_done_t | 回调函数。
ctx | void* | 回调函数的上下文。


candidates_t

概述

输入法候选字词控件。

如果希望启用用数字选择对应的候选字，请设置属性grab_keys=”true”。如：

<candidates x="0" y="0" w="100%" h="30" grab_keys="true"/>

相关文件： assets/default/raw/ui/kb_default.xml

如果希望通过左右键切换不同的候选字，除了设置属性grab_keys=”true”，还需要设置按钮的focused状态的style。

<style name="candidates" text_color="black">
<normal  />
<pressed    bg_color="#c0c0c0" border_color="#a0a0a0"/>
<over       bg_color="#e0e0e0" border_color="#a0a0a0"/>
<focused    border_color="#a0a0a0"/>
</style>

>相关文件：assets/default/raw/styles/keyboard.xml

函数

函数名称 | 说明
candidates_cast | 转换为candidates对象(供脚本语言使用)。
candidates_create | 创建candidates对象
candidates_get_widget_vtable | 获取 candidates 虚表。
candidates_set_auto_hide | 设置是否自动隐藏。
candidates_set_button_style | 设置按钮的style名称。
candidates_set_pre | 设置是否为预候选字列表。
candidates_set_select_by_num | 设置是否启用用数字选择候选字。

属性

属性名称 | 类型 | 说明
auto_hide | bool_t | 没有候选字时，是否自动隐藏控件。
button_style | char* | 按钮的style名称。
enable_preview | bool_t | 是否启用候选字预览。
pre | bool_t | 是否为预候选字。
select_by_num | bool_t | 是否启用用数字选择候选字。比如按下1选择第1个候选字，按下2选择第2个候选字。

candidates_cast 函数

  • 函数功能：

转换为candidates对象(供脚本语言使用)。

  • 函数原型：
widget_t* candidates_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | candidates对象。
widget | widget_t* | candidates对象。

candidates_create 函数

  • 函数功能：

创建candidates对象

  • 函数原型：
widget_t* candidates_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

candidates_get_widget_vtable 函数

  • 函数功能：

获取 candidates 虚表。

  • 函数原型：
const widget_vtable_t* candidates_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 candidates 虚表。

candidates_set_auto_hide 函数

  • 函数功能：

设置是否自动隐藏。

  • 函数原型：
ret_t candidates_set_auto_hide (widget_t* widget, bool_t auto_hide);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
auto_hide | bool_t | 是否自动隐藏。

candidates_set_button_style 函数

  • 函数功能：

设置按钮的style名称。

  • 函数原型：
ret_t candidates_set_button_style (widget_t* widget, const char* button_style);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
button_style | const char* | 按钮的style名称。

candidates_set_pre 函数

  • 函数功能：

设置是否为预候选字列表。

为预候选字列表则注册EVT_IM_SHOW_PRE_CANDIDATES，否则注册EVT_IM_SHOW_CANDIDATES事件。

  • 函数原型：
ret_t candidates_set_pre (widget_t* widget, bool_t pre);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
pre | bool_t | 是否为预候选字列表。

candidates_set_select_by_num 函数

  • 函数功能：

设置是否启用用数字选择候选字。

  • 函数原型：
ret_t candidates_set_select_by_num (widget_t* widget, bool_t select_by_num);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
select_by_num | bool_t | 是否启用用数字选择候选字。

auto_hide 属性

没有候选字时，是否自动隐藏控件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

button_style 属性

按钮的style名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

enable_preview 属性

是否启用候选字预览。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

pre 属性

是否为预候选字。

预候选字: 在有的输入法中，比如T9硬键盘输入时，按下12两个键时，预候选字会显示可用的拼音列表。 从预候选字列表中选择拼音，再查询拼音对应的候选字列表。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

select_by_num 属性

是否启用用数字选择候选字。比如按下1选择第1个候选字，按下2选择第2个候选字。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


canvas_offline_t

概述

离线画布 canvas。

函数

函数名称 | 说明
canvas_offline_begin_draw | 设置离线 canvas 开始绘图
canvas_offline_bitmap_move_to_new_bitmap | 把离线 canvas 的离线 bitmap 移动赋值给新的 bitmap。
canvas_offline_clear_canvas | 清除离线 canvas 所有数据，并把背景设置为全透明（注意：该离线 canvas 需要有透明通道）
canvas_offline_create | 创建一个离线的 canvas
canvas_offline_create_by_widget | 创建一个和控件大小一样的离线的 canvas
canvas_offline_custom_begin_draw | 用户自定义 canvas_offline_custom_begin_draw
canvas_offline_custom_bitmap_move_to_new_bitmap | 用户自定义 canvas_offline_custom_bitmap_move_to_new_bitmap
canvas_offline_custom_clear_canvas | 用户自定义 canvas_offline_custom_clear_canvas
canvas_offline_custom_create | 用户自定义 canvas_offline_create
canvas_offline_custom_destroy | 用户自定义 canvas_offline_custom_destroy
canvas_offline_custom_end_draw | 用户自定义 canvas_offline_custom_end_draw
canvas_offline_custom_flush_bitmap | 用户自定义 canvas_offline_custom_flush_bitmap
canvas_offline_custom_get_bitmap | 用户自定义 canvas_offline_custom_get_bitmap
canvas_offline_destroy | 释放离线 canvas 和离线 bitmap
canvas_offline_end_draw | 设置离线 canvas 结束绘图
canvas_offline_flush_bitmap | 把离线 canvas 的数据放到绑定的 bitmap 中
canvas_offline_get_bitmap | 获取离线 canvas 的离线 bitmap。
canvas_offline_set_canvas_orientation | 设置离线画布旋转角度。

属性

属性名称 | 类型 | 说明
bitmap | bitmap_t* | 绑定的离线 bitmap
canvas_orientation | lcd_orientation_t | 快速的旋转角度（对应 WITH_FAST_LCD_PORTRAIT 宏的使用）

canvas_offline_begin_draw 函数

  • 函数功能：

设置离线 canvas 开始绘图

  • 函数原型：
ret_t canvas_offline_begin_draw (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_bitmap_move_to_new_bitmap 函数

  • 函数功能：

把离线 canvas 的离线 bitmap 移动赋值给新的 bitmap。 移动赋值后原来的离线 canvas 的离线 bitmap 就会被置空。

  • 函数原型：
ret_t canvas_offline_bitmap_move_to_new_bitmap (canvas_t* canvas, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。
bitmap | bitmap_t* | 新的 bitmap 对象。

canvas_offline_clear_canvas 函数

  • 函数功能：

清除离线 canvas 所有数据，并把背景设置为全透明（注意：该离线 canvas 需要有透明通道） 该函数调用前必须要先 canvas_offline_begin_draw 函数。 该函数用来解决离线 canvas 多次绘图半透效果后导致半透效果无效的问题。

  • 函数原型：
ret_t canvas_offline_clear_canvas (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_create 函数

  • 函数功能：

创建一个离线的 canvas 在 opengl 模式下 format 参数只能为 BITMAP_FMT_RGBA8888 在其他模式下，离线 canvas 格式可以为 rgba，bgar，bgr565和rgb565 旋转方向和 lcd 旋转方向保存一致，旋转方向不同可能会导致 bitmap 的逻辑宽高不同。

  • 函数原型：
canvas_t* canvas_offline_create (uint32_t w, uint32_t h, bitmap_format_t format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 成功返回 canvas ，失败返回 NULL。
w | uint32_t | 离线 canvas 的物理宽。
h | uint32_t | 离线 canvas 的物理高。
format | bitmap_format_t | 离线 canvas 的格式。

canvas_offline_create_by_widget 函数

  • 函数功能：

创建一个和控件大小一样的离线的 canvas

  • 函数原型：
canvas_t* canvas_offline_create_by_widget (widget_t* widget, bitmap_format_t format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 成功返回 canvas ，失败返回 NULL。
widget | widget_t* | 控件。
format | bitmap_format_t | 离线 canvas 的格式。

canvas_offline_custom_begin_draw 函数

  • 函数功能：

用户自定义 canvas_offline_custom_begin_draw

  • 函数原型：
ret_t canvas_offline_custom_begin_draw (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_custom_bitmap_move_to_new_bitmap 函数

  • 函数功能：

用户自定义 canvas_offline_custom_bitmap_move_to_new_bitmap

  • 函数原型：
ret_t canvas_offline_custom_bitmap_move_to_new_bitmap (canvas_t* canvas, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。
bitmap | bitmap_t* | 新的 bitmap 对象。

canvas_offline_custom_clear_canvas 函数

  • 函数功能：

用户自定义 canvas_offline_custom_clear_canvas

  • 函数原型：
ret_t canvas_offline_custom_clear_canvas (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_custom_create 函数

  • 函数功能：

用户自定义 canvas_offline_create

  • 函数原型：
canvas_t* canvas_offline_custom_create (uint32_t w, uint32_t h, bitmap_format_t format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 成功返回 canvas ，失败返回 NULL。
w | uint32_t | 离线 canvas 的宽。
h | uint32_t | 离线 canvas 的高。
format | bitmap_format_t | 离线 canvas 的格式。

canvas_offline_custom_destroy 函数

  • 函数功能：

用户自定义 canvas_offline_custom_destroy

  • 函数原型：
ret_t canvas_offline_custom_destroy (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_custom_end_draw 函数

  • 函数功能：

用户自定义 canvas_offline_custom_end_draw

  • 函数原型：
ret_t canvas_offline_custom_end_draw (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_custom_flush_bitmap 函数

  • 函数功能：

用户自定义 canvas_offline_custom_flush_bitmap

  • 函数原型：
ret_t canvas_offline_custom_flush_bitmap (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_custom_get_bitmap 函数

  • 函数功能：

用户自定义 canvas_offline_custom_get_bitmap

  • 函数原型：
bitmap_t* canvas_offline_custom_get_bitmap (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回 bitmap_t 对象表示成功，返回 NULL 表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_destroy 函数

  • 函数功能：

释放离线 canvas 和离线 bitmap

  • 函数原型：
ret_t canvas_offline_destroy (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_end_draw 函数

  • 函数功能：

设置离线 canvas 结束绘图

  • 函数原型：
ret_t canvas_offline_end_draw (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_flush_bitmap 函数

  • 函数功能：

把离线 canvas 的数据放到绑定的 bitmap 中 该函数只有在 opengl 模式才需要调用，是否把显存中的数据回传到内存中。

  • 函数原型：
ret_t canvas_offline_flush_bitmap (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_get_bitmap 函数

  • 函数功能：

获取离线 canvas 的离线 bitmap。

  • 函数原型：
bitmap_t* canvas_offline_get_bitmap (canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回 bitmap_t 对象表示成功，返回 NULL 表示失败。
canvas | canvas_t* | 离线 canvas 对象。

canvas_offline_set_canvas_orientation 函数

  • 函数功能：

设置离线画布旋转角度。 备注：对应 WITH_FAST_LCD_PORTRAIT 宏的使用

  • 函数原型：
ret_t canvas_offline_set_canvas_orientation (canvas_t* canvas, lcd_orientation_t canvas_orientation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | 离线 canvas 对象。
canvas_orientation | lcd_orientation_t | 旋转角度。

bitmap 属性

绑定的离线 bitmap

  • 类型：bitmap_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

canvas_orientation 属性

快速的旋转角度（对应 WITH_FAST_LCD_PORTRAIT 宏的使用）

  • 类型：lcd_orientation_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


canvas_t

概述

提供基本的绘图功能和状态管理。

函数

函数名称 | 说明
canvas_begin_frame | 绘制开始。
canvas_cast | 转换为canvas对象(供脚本语言使用)。
canvas_clear_rect | 用填充颜色填充指定矩形。
canvas_draw_hline | 画水平线。
canvas_draw_icon | 绘制图标。
canvas_draw_icon_in_rect | 在指定rect内绘制icon。
canvas_draw_image | 绘制图片。
canvas_draw_image_at | 在指定位置画图。
canvas_draw_image_ex | 绘制图片。
canvas_draw_image_ex2 | 绘制图片。
canvas_draw_line | 画直线。
canvas_draw_points | 画多个点。
canvas_draw_text | 绘制文本。
canvas_draw_text_bidi_in_rect | 绘制文本(支持Unicode Bidirectional Algorithm)。
canvas_draw_text_in_rect | 绘制文本。
canvas_draw_utf8 | 绘制文本。
canvas_draw_utf8_in_rect | 绘制文本。
canvas_draw_vline | 画垂直线。
canvas_end_frame | 绘制结束。
canvas_fill_rect | 绘制矩形。
canvas_fill_rect_gradient | 绘制矩形。
canvas_fill_rounded_rect | 填充区域。
canvas_fill_rounded_rect_ex | 填充圆角矩形区域。
canvas_fill_rounded_rect_gradient | 填充圆角矩形区域。
canvas_fill_rounded_rect_gradient_ex | 填充圆角矩形区域。
canvas_get_clip_rect | 获取裁剪区。
canvas_get_font_height | 获取字体的高度。
canvas_get_height | 获取画布的高度。
canvas_get_text_metrics | 获取当前字体的度量信息。
canvas_get_vgcanvas | 获取vgcanvas对象。
canvas_get_width | 获取画布的宽度。
canvas_init | 初始化，系统内部调用。
canvas_is_rect_in_clip_rect | 判断改矩形区域是否在裁剪区中
canvas_measure_text | 计算文本所占的宽度。
canvas_measure_utf8 | 计算文本所占的宽度。
canvas_reset | 释放相关资源。
canvas_reset_cache | 清除canvas中缓存。
canvas_reset_font | 释放canvas中字体相关的资源。
canvas_set_assets_manager | 设置canvas的assets_manager对象。
canvas_set_clip_rect | 设置裁剪区。
canvas_set_clip_rect_ex | 设置裁剪区。
canvas_set_fill_color | 设置填充颜色。
canvas_set_fill_color_str | 设置填充颜色。
canvas_set_font | 设置字体。
canvas_set_font_manager | 设置canvas的font_manager对象。
canvas_set_fps | 设置FPS。
canvas_set_global_alpha | 设置全局alpha值。
canvas_set_stroke_color | 设置线条颜色。
canvas_set_stroke_color_str | 设置线条颜色。
canvas_set_text_align | 设置文本对齐方式。
canvas_set_text_color | 设置文本颜色。
canvas_set_text_color_str | 设置文本颜色。
canvas_stroke_rect | 绘制矩形。
canvas_stroke_rounded_rect | 绘制边框。
canvas_stroke_rounded_rect_ex | 绘制边框。
canvas_translate | 平移原点坐标。
canvas_untranslate | 反向平移原点坐标。

属性

属性名称 | 类型 | 说明
assets_manager | assets_manager_t* | 资源管理器对象。
clip_bottom | xy_t | 当前裁剪矩形的底部位置。
clip_left | xy_t | 当前裁剪矩形的左边位置。
clip_right | xy_t | 当前裁剪矩形的右边位置。
clip_top | xy_t | 当前裁剪矩形的顶部位置。
font | font_t* | 字体对象。
font_manager | font_manager_t* | 字体管理器对象。
font_name | char* | 当前字体名称。
font_size | font_size_t | 当前字体大小。
fps | uint32_t | 当前的帧率。
global_alpha | uint8_t | 当前全局alpha。
lcd | lcd_t* | lcd对象。
ox | xy_t | x坐标偏移。
oy | xy_t | y坐标偏移。
show_fps | bool_t | 是否显示帧率。
text_align_h | align_h_t | 文本水平对齐方式。
text_align_v | align_v_t | 文本垂直对齐方式。

canvas_begin_frame 函数

  • 函数功能：

绘制开始。

  • 函数原型：
ret_t canvas_begin_frame (canvas_t* c, const dirty_rects_t* dirty_rects, lcd_draw_mode_t draw_mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
dirty_rects | const dirty_rects_t* | 脏矩形。
draw_mode | lcd_draw_mode_t | 绘制模式。

canvas_cast 函数

  • 函数功能：

转换为canvas对象(供脚本语言使用)。

  • 函数原型：
canvas_t* canvas_cast (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | canvas对象。
c | canvas_t* | canvas对象。

canvas_clear_rect 函数

  • 函数功能：

用填充颜色填充指定矩形。

如果lcd的颜色格式带alpha通道，连同alpha的值一起修改。

  • 函数原型：
ret_t canvas_clear_rect (canvas_t* c, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

canvas_draw_hline 函数

  • 函数功能：

画水平线。

  • 函数原型：
ret_t canvas_draw_hline (canvas_t* c, xy_t x, xy_t y, wh_t w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。

canvas_draw_icon 函数

  • 函数功能：

绘制图标。

  • 函数原型：
ret_t canvas_draw_icon (canvas_t* c, bitmap_t* img, xy_t cx, xy_t cy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
img | bitmap_t* | 图片对象。
cx | xy_t | 中心点x坐标。
cy | xy_t | 中心点y坐标。

canvas_draw_icon_in_rect 函数

  • 函数功能：

在指定rect内绘制icon。

  • 函数原型：
ret_t canvas_draw_icon_in_rect (canvas_t* c, bitmap_t* img, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
img | bitmap_t* | 图片对象。
r | const rect_t* | 矩形区域。

canvas_draw_image 函数

  • 函数功能：

绘制图片。

  • 函数原型：
ret_t canvas_draw_image (canvas_t* c, bitmap_t* img, const rect_t* src, const rect_t* dst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
img | bitmap_t* | 图片对象。
src | const rect_t* | 源区域。
dst | const rect_t* | 目的区域。

canvas_draw_image_at 函数

  • 函数功能：

在指定位置画图。

  • 函数原型：
ret_t canvas_draw_image_at (canvas_t* c, bitmap_t* img, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
img | bitmap_t* | 图片对象。
x | xy_t | x坐标。
y | xy_t | w坐标。

canvas_draw_image_ex 函数

  • 函数功能：

绘制图片。

  • 函数原型：
ret_t canvas_draw_image_ex (canvas_t* c, bitmap_t* img, image_draw_type_t draw_type, const rect_t* dst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
img | bitmap_t* | 图片对象。
draw_type | image_draw_type_t | 绘制类型。
dst | const rect_t* | 目的区域。

canvas_draw_image_ex2 函数

  • 函数功能：

绘制图片。

  • 函数原型：
ret_t canvas_draw_image_ex2 (canvas_t* c, bitmap_t* img, image_draw_type_t draw_type, const rect_t* src, const rect_t* dst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
img | bitmap_t* | 图片对象。
draw_type | image_draw_type_t | 绘制类型。
src | const rect_t* | 源区域。
dst | const rect_t* | 目的区域。

canvas_draw_line 函数

  • 函数功能：

画直线。

  • 函数原型：
ret_t canvas_draw_line (canvas_t* c, xy_t x1, xy_t y1, xy_t x2, xy_t y2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x1 | xy_t | 起始点的x坐标。
y1 | xy_t | 起始点的y坐标。
x2 | xy_t | 结束点的x坐标。
y2 | xy_t | 结束点的y坐标。

canvas_draw_points 函数

  • 函数功能：

画多个点。

  • 函数原型：
ret_t canvas_draw_points (canvas_t* c, const point_t* points, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
points | const point_t* | 点数组。
nr | uint32_t | 点的个数。

canvas_draw_text 函数

  • 函数功能：

绘制文本。

  • 函数原型：
ret_t canvas_draw_text (canvas_t* c, const wchar_t* str, uint32_t nr, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
str | const wchar_t* | 字符串。
nr | uint32_t | 字符数。
x | xy_t | x坐标。
y | xy_t | y坐标。

canvas_draw_text_bidi_in_rect 函数

  • 函数功能：

绘制文本(支持Unicode Bidirectional Algorithm)。

  • 函数原型：
ret_t canvas_draw_text_bidi_in_rect (canvas_t* c, const wchar_t* str, uint32_t nr, const rect_t* r, const char* bidi_type, bool_t ellipses);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
str | const wchar_t* | 字符串。
nr | uint32_t | 字符数。
r | const rect_t* | 矩形区域。
bidi_type | const char* | 类型。
ellipses | bool_t | 如果目标宽度不够，是否显示省略号。

canvas_draw_text_in_rect 函数

  • 函数功能：

绘制文本。

  • 函数原型：
ret_t canvas_draw_text_in_rect (canvas_t* c, const wchar_t* str, uint32_t nr, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
str | const wchar_t* | 字符串。
nr | uint32_t | 字符数。
r | const rect_t* | 矩形区域。

canvas_draw_utf8 函数

  • 函数功能：

绘制文本。

供脚本语言使用。

  • 函数原型：
ret_t canvas_draw_utf8 (canvas_t* c, const char* str, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
str | const char* | 字符串。
x | xy_t | x坐标。
y | xy_t | y坐标。

canvas_draw_utf8_in_rect 函数

  • 函数功能：

绘制文本。

供脚本语言使用。

  • 函数原型：
ret_t canvas_draw_utf8_in_rect (canvas_t* c, const char* str, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
str | const char* | 字符串。
r | const rect_t* | 矩形区域。

canvas_draw_vline 函数

  • 函数功能：

画垂直线。

  • 函数原型：
ret_t canvas_draw_vline (canvas_t* c, xy_t x, xy_t y, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
h | wh_t | 高度。

canvas_end_frame 函数

  • 函数功能：

绘制结束。

  • 函数原型：
ret_t canvas_end_frame (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。

canvas_fill_rect 函数

  • 函数功能：

绘制矩形。

  • 函数原型：
ret_t canvas_fill_rect (canvas_t* c, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

canvas_fill_rect_gradient 函数

  • 函数功能：

绘制矩形。

  • 函数原型：
ret_t canvas_fill_rect_gradient (canvas_t* c, xy_t x, xy_t y, wh_t w, wh_t h, gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。
gradient | gradient_t* | 渐变颜色。

canvas_fill_rounded_rect 函数

  • 函数功能：

填充区域。

  • 函数原型：
ret_t canvas_fill_rounded_rect (canvas_t* c, const rect_t* r, const rect_t* bg_r, const color_t* color, uint32_t radius);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | 矩形。
bg_r | const rect_t* | 矩形（默认为 NULL，当圆角直径大于 r 矩形的宽高后，会根据 bg_r 矩形来决定是否需要缩小圆角半径）。
color | const color_t* | 颜色。
radius | uint32_t | 圆角半径。

canvas_fill_rounded_rect_ex 函数

  • 函数功能：

填充圆角矩形区域。 半径半径小于等于2，则表示该角为直角，如果全部角都为直角则返回RET_FAIL。（如果全是直角，该函数效率没有canvas_fill_rect函数快） 如果各个半径都不一样的话，就是会使用vg，如果不支持vg就会返回RET_FAIL（直角的情况除外）。

  • 函数原型：
ret_t canvas_fill_rounded_rect_ex (canvas_t* c, const rect_t* r, const rect_t* bg_r, const color_t* color, uint32_t radius_tl, uint32_t radius_tr, uint32_t radius_bl, uint32_t radius_br);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | 矩形。
bg_r | const rect_t* | 矩形。（默认为 NULL，当圆角直径大于 r 矩形的宽高后，会根据 bg_r 矩形来决定是否需要缩小圆角半径）
color | const color_t* | 颜色。
radius_tl | uint32_t | 左上角圆角半径。
radius_tr | uint32_t | 右上角圆角半径。
radius_bl | uint32_t | 左下角圆角半径。
radius_br | uint32_t | 右下角圆角半径。

canvas_fill_rounded_rect_gradient 函数

  • 函数功能：

填充圆角矩形区域。

  • 函数原型：
ret_t canvas_fill_rounded_rect_gradient (canvas_t* c, const rect_t* r, const rect_t* bg_r, const gradient_t* gradient, uint32_t radius);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | 矩形。
bg_r | const rect_t* | 矩形（默认为 NULL，当圆角直径大于 r 矩形的宽高后，会根据 bg_r 矩形来决定是否需要缩小圆角半径）。
gradient | const gradient_t* | 渐变颜色。
radius | uint32_t | 圆角半径。

canvas_fill_rounded_rect_gradient_ex 函数

  • 函数功能：

填充圆角矩形区域。 半径半径小于等于2，则表示该角为直角，如果全部角都为直角则返回RET_FAIL。（如果全是直角，该函数效率没有canvas_fill_rect函数快） 如果各个半径都不一样的话，就是会使用vg，如果不支持vg就会返回RET_FAIL（直角的情况除外）。

  • 函数原型：
ret_t canvas_fill_rounded_rect_gradient_ex (canvas_t* c, const rect_t* r, const rect_t* bg_r, const gradient_t* gradient, uint32_t radius_tl, uint32_t radius_tr, uint32_t radius_bl, uint32_t radius_br);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | 矩形。
bg_r | const rect_t* | 矩形。（默认为 NULL，当圆角直径大于 r 矩形的宽高后，会根据 bg_r 矩形来决定是否需要缩小圆角半径）
gradient | const gradient_t* | 渐变颜色。
radius_tl | uint32_t | 左上角圆角半径。
radius_tr | uint32_t | 右上角圆角半径。
radius_bl | uint32_t | 左下角圆角半径。
radius_br | uint32_t | 右下角圆角半径。

canvas_get_clip_rect 函数

  • 函数功能：

获取裁剪区。

  • 函数原型：
ret_t canvas_get_clip_rect (canvas_t* c, rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | rect_t* | rect对象。

canvas_get_font_height 函数

  • 函数功能：

获取字体的高度。

  • 函数原型：
float_t canvas_get_font_height (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回字体的高度。
c | canvas_t* | canvas对象。

canvas_get_height 函数

  • 函数功能：

获取画布的高度。

  • 函数原型：
wh_t canvas_get_height (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回画布的高度。
c | canvas_t* | canvas对象。

canvas_get_text_metrics 函数

  • 函数功能：

获取当前字体的度量信息。

  • 函数原型：
ret_t canvas_get_text_metrics (canvas_t* canvas, float_t* ascent, float_t* descent, float_t* line_hight);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
canvas | canvas_t* | canvas对象。
ascent | float_t* | 用于返回ascent。
descent | float_t* | 用于返回descent。
line_hight | float_t* | 用于返回line height。

canvas_get_vgcanvas 函数

  • 函数功能：

获取vgcanvas对象。

  • 函数原型：
vgcanvas_t* canvas_get_vgcanvas (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vgcanvas_t* | 返回vgcanvas对象。
c | canvas_t* | canvas对象。

canvas_get_width 函数

  • 函数功能：

获取画布的宽度。

  • 函数原型：
wh_t canvas_get_width (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回画布的宽度。
c | canvas_t* | canvas对象。

canvas_init 函数

  • 函数功能：

初始化，系统内部调用。

  • 函数原型：
canvas_t* canvas_init (canvas_t* c, lcd_t* lcd, font_manager_t* font_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 返回canvas对象本身。
c | canvas_t* | canvas对象。
lcd | lcd_t* | lcd对象。
font_manager | font_manager_t* | 字体管理器对象。

canvas_is_rect_in_clip_rect 函数

  • 函数功能：

判断改矩形区域是否在裁剪区中

  • 函数原型：
bool_t canvas_is_rect_in_clip_rect (canvas_t* c, xy_t left, xy_t top, xy_t right, xy_t bottom);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。
c | canvas_t* | canvas对象。
left | xy_t | 矩形区域左边。
top | xy_t | 矩形区域上边。
right | xy_t | 矩形区域右边。
bottom | xy_t | 矩形区域下边。

canvas_measure_text 函数

  • 函数功能：

计算文本所占的宽度。

  • 函数原型：
float_t canvas_measure_text (canvas_t* c, const wchar_t* str, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回文本所占的宽度。
c | canvas_t* | canvas对象。
str | const wchar_t* | 字符串。
nr | uint32_t | 字符数。

canvas_measure_utf8 函数

  • 函数功能：

计算文本所占的宽度。

供脚本语言使用。

  • 函数原型：
float_t canvas_measure_utf8 (canvas_t* c, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回文本所占的宽度。
c | canvas_t* | canvas对象。
str | const char* | 字符串。

canvas_reset 函数

  • 函数功能：

释放相关资源。

  • 函数原型：
ret_t canvas_reset (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。

canvas_reset_cache 函数

  • 函数功能：

清除canvas中缓存。 备注：主要用于窗口动画的离线画布绘制完成后重置在线画布，使下一帧中lcd对象的数据保持一致。

  • 函数原型：
ret_t canvas_reset_cache (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。

canvas_reset_font 函数

  • 函数功能：

释放canvas中字体相关的资源。

  • 函数原型：
ret_t canvas_reset_font (canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。

canvas_set_assets_manager 函数

  • 函数功能：

设置canvas的assets_manager对象。

  • 函数原型：
ret_t canvas_set_assets_manager (canvas_t* c, assets_manager_t* assets_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
assets_manager | assets_manager_t* | assets_manager对象。

canvas_set_clip_rect 函数

  • 函数功能：

设置裁剪区。

  • 函数原型：
ret_t canvas_set_clip_rect (canvas_t* c, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | rect对象。

canvas_set_clip_rect_ex 函数

  • 函数功能：

设置裁剪区。

  • 函数原型：
ret_t canvas_set_clip_rect_ex (canvas_t* c, const rect_t* r, bool_t translate);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | rect对象。
translate | bool_t | 是否将裁剪区的位置加上canvas当前的偏移。

canvas_set_fill_color 函数

  • 函数功能：

设置填充颜色。

  • 函数原型：
ret_t canvas_set_fill_color (canvas_t* c, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
color | color_t | 颜色。

canvas_set_fill_color_str 函数

  • 函数功能：

设置填充颜色。

供脚本语言使用。

  • 函数原型：
ret_t canvas_set_fill_color_str (canvas_t* c, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
color | const char* | 颜色。

canvas_set_font 函数

  • 函数功能：

设置字体。

  • 函数原型：
ret_t canvas_set_font (canvas_t* c, const char* name, font_size_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
name | const char* | 字体名称。
size | font_size_t | 字体大小。

canvas_set_font_manager 函数

  • 函数功能：

设置canvas的font_manager对象。

  • 函数原型：
ret_t canvas_set_font_manager (canvas_t* c, font_manager_t* font_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
font_manager | font_manager_t* | font_manager对象。

canvas_set_fps 函数

  • 函数功能：

设置FPS。

  • 函数原型：
ret_t canvas_set_fps (canvas_t* c, bool_t show_fps, uint32_t fps);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
show_fps | bool_t | 是否显示fps。
fps | uint32_t | FPS。

canvas_set_global_alpha 函数

  • 函数功能：

设置全局alpha值。

  • 函数原型：
ret_t canvas_set_global_alpha (canvas_t* c, uint8_t alpha);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
alpha | uint8_t | alpha值。

canvas_set_stroke_color 函数

  • 函数功能：

设置线条颜色。

  • 函数原型：
ret_t canvas_set_stroke_color (canvas_t* c, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
color | color_t | 颜色。

canvas_set_stroke_color_str 函数

  • 函数功能：

设置线条颜色。

供脚本语言使用。

  • 函数原型：
ret_t canvas_set_stroke_color_str (canvas_t* c, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
color | const char* | 颜色。

canvas_set_text_align 函数

  • 函数功能：

设置文本对齐方式。

  • 函数原型：
ret_t canvas_set_text_align (canvas_t* c, align_h_t align_h, align_v_t align_v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
align_h | align_h_t | 水平对齐方式。
align_v | align_v_t | 垂直对齐方式。

canvas_set_text_color 函数

  • 函数功能：

设置文本颜色。

  • 函数原型：
ret_t canvas_set_text_color (canvas_t* c, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
color | color_t | 颜色。

canvas_set_text_color_str 函数

  • 函数功能：

设置文本颜色。

供脚本语言使用。

  • 函数原型：
ret_t canvas_set_text_color_str (canvas_t* c, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
color | const char* | 颜色。

canvas_stroke_rect 函数

  • 函数功能：

绘制矩形。

  • 函数原型：
ret_t canvas_stroke_rect (canvas_t* c, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

canvas_stroke_rounded_rect 函数

  • 函数功能：

绘制边框。

  • 函数原型：
ret_t canvas_stroke_rounded_rect (canvas_t* c, const rect_t* r, const rect_t* bg_r, const color_t* color, uint32_t radius, uint32_t border_width);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | 矩形。
bg_r | const rect_t* | 矩形（默认为 NULL，当圆角直径大于 r 矩形的宽高后，会根据 bg_r 矩形来决定是否需要缩小圆角半径）。
color | const color_t* | 颜色。
radius | uint32_t | 圆角半径。
border_width | uint32_t | 边宽。

canvas_stroke_rounded_rect_ex 函数

  • 函数功能：

绘制边框。 半径半径小于等于2，则表示该角为直角，如果全部角都为直角则返回RET_FAIL。（如果全是直角，该函数效率没有canvas_stroke_rect函数快） 如果各个半径都不一样的话，就是会使用vg，如果不支持vg就会返回RET_FAIL（直角的情况除外）。

  • 函数原型：
ret_t canvas_stroke_rounded_rect_ex (canvas_t* c, const rect_t* r, const rect_t* bg_r, const color_t* color, uint32_t radius_tl, uint32_t radius_tr, uint32_t radius_bl, uint32_t radius_br, uint32_t border_width, int32_t border_model);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
r | const rect_t* | 矩形。
bg_r | const rect_t* | 矩形（默认为 NULL，当圆角直径大于 r 矩形的宽高后，会根据 bg_r 矩形来决定是否需要缩小圆角半径）。
color | const color_t* | 颜色。
radius_tl | uint32_t | 左上角圆角半径。
radius_tr | uint32_t | 右上角圆角半径。
radius_bl | uint32_t | 左下角圆角半径。
radius_br | uint32_t | 右下角圆角半径。
border_width | uint32_t | 边宽。
border_model | int32_t | 边框类型。

canvas_translate 函数

  • 函数功能：

平移原点坐标。

  • 函数原型：
ret_t canvas_translate (canvas_t* c, xy_t dx, xy_t dy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
dx | xy_t | x偏移。
dy | xy_t | y偏移。

canvas_untranslate 函数

  • 函数功能：

反向平移原点坐标。

  • 函数原型：
ret_t canvas_untranslate (canvas_t* c, xy_t dx, xy_t dy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | canvas_t* | canvas对象。
dx | xy_t | x偏移。
dy | xy_t | y偏移。

assets_manager 属性

资源管理器对象。

  • 类型：assets_manager_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

clip_bottom 属性

当前裁剪矩形的底部位置。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

clip_left 属性

当前裁剪矩形的左边位置。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

clip_right 属性

当前裁剪矩形的右边位置。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

clip_top 属性

当前裁剪矩形的顶部位置。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font 属性

字体对象。

  • 类型：font_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font_manager 属性

字体管理器对象。

  • 类型：font_manager_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font_name 属性

当前字体名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

font_size 属性

当前字体大小。

  • 类型：font_size_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

fps 属性

当前的帧率。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

global_alpha 属性

当前全局alpha。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

lcd 属性

lcd对象。

  • 类型：lcd_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ox 属性

x坐标偏移。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

oy 属性

y坐标偏移。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

show_fps 属性

是否显示帧率。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

text_align_h 属性

文本水平对齐方式。

  • 类型：align_h_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

text_align_v 属性

文本垂直对齐方式。

  • 类型：align_v_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


canvas_widget_t

概述

画布控件。

画布控件让开发者可以自己在控件上绘制需要的内容。

canvas_widget_t是widget_t的子类控件，widget_t的函数均适用于canvas_widget_t控件。

在xml中使用”canvas”标签创建画布控件。如：

<canvas name="paint_vgcanvas" x="0" y="0" w="100%" h="100%" />

更多用法请参考： canvas_widget.xml

在c代码中使用函数canvas_widget_create创建画布控件。如：

widget_t* canvas = canvas_widget_create(win, 0, 0, win->w, win->h);

创建之后，需要用widget_on注册EVT_PAINT事件，并在EVT_PAINT事件处理函数中绘制。

widget_on(canvas, EVT_PAINT, on_paint_event, canvas);

绘制时，可以通过canvas接口去绘制，也可以通过vgcanvas接口去绘制。 先从evt获取canvas对象，再通过canvas_get_vgcanvas从canvas中获取vgcanvas对象。

static ret_t on_paint_event(void* ctx, event_t* evt) {
widget_t* canvas_widget = WIDGET(ctx);
canvas_t* c = paint_event_cast(evt)->c;
vgcanvas_t* vg = canvas_get_vgcanvas(c);
color_t bg = color_init(0xe0, 0xe0, 0xe0, 0xff);
color_t tc = color_init(0, 0, 0, 0xff);
rect_t r = rect_init(canvas_widget->x, canvas_widget->y, canvas_widget->w, canvas_widget->h);

vgcanvas_save(vg);
vgcanvas_clip_rect(vg, r.x, r.y, r.w, r.h);
vgcanvas_translate(vg, r.x, r.y);

...

vgcanvas_restore(vg);

return RET_OK;
}

完整示例请参考： canvas demo

参考：

  • canvas接口描述
  • vgcanvas接口描述

函数

函数名称 | 说明
canvas_widget_cast | 转换为canvas_widget对象(供脚本语言使用)。
canvas_widget_create | 创建canvas_widget对象
canvas_widget_get_widget_vtable | 获取 canvas_widget 虚表。

canvas_widget_cast 函数

  • 函数功能：

转换为canvas_widget对象(供脚本语言使用)。

  • 函数原型：
widget_t* canvas_widget_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | canvas_widget对象。
widget | widget_t* | canvas_widget对象。

canvas_widget_create 函数

  • 函数功能：

创建canvas_widget对象

  • 函数原型：
widget_t* canvas_widget_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

canvas_widget_get_widget_vtable 函数

  • 函数功能：

获取 canvas_widget 虚表。

  • 函数原型：
const widget_vtable_t* canvas_widget_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 canvas_widget 虚表。


check_button_t

概述

勾选按钮控件(单选/多选)。

check_button_t是widget_t的子类控件，widget_t的函数均适用于check_button_t控件。

在xml中使用”check_button”标签创建多选按钮控件。如：

<check_button name="c1" text="Book"/>

在xml中使用”radio_button”标签创建单选按钮控件。如：

<radio_button name="r1" text="Book"/>

更多用法请参考： button.xml

在c代码中使用函数check_button_create创建多选按钮控件。如：

widget_t* button = check_button_create(win, x, y, w, h);
widget_set_text(button, L"OK");
widget_on(button, EVT_VALUE_CHANGED, on_changed, NULL);

在c代码中使用函数check_button_create_radio创建单选按钮控件。如：

widget_t* button = check_button_create_radio(win, x, y, w, h);
widget_set_text(button, L"OK");
widget_on(button, EVT_VALUE_CHANGED, on_changed, NULL);

完整示例请参考： button demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default" icon_at="left">
<normal  icon="unchecked" />
<pressed icon="unchecked" />
<over    icon="unchecked" text_color="green"/>
<normal_of_checked icon="checked" text_color="blue"/>
<pressed_of_checked icon="checked" text_color="blue"/>
<over_of_checked icon="checked" text_color="green"/>
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
check_button_cast | 转换check_button对象(供脚本语言使用)。
check_button_create | 创建多选按钮对象
check_button_create_ex | 创建check button对象
check_button_create_radio | 创建单选按钮对象
check_button_get_checked_button | 用于radio button获取同组中勾选的radio button。
check_button_get_widget_vtable | 获取 check_button 虚表。
check_button_set_value | 设置控件的值。

属性

属性名称 | 类型 | 说明
radio | bool_t | 是否是单选按钮。
value | bool_t | 值(勾选为TRUE，非勾选为FALSE)。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(勾选状态)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(勾选状态)改变事件。
EVT_CLICK | pointer_event_t | 点击事件。

check_button_cast 函数

  • 函数功能：

转换check_button对象(供脚本语言使用)。

  • 函数原型：
widget_t* check_button_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | check_button对象。
widget | widget_t* | check_button对象。

check_button_create 函数

  • 函数功能：

创建多选按钮对象

  • 函数原型：
widget_t* check_button_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | widget对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

check_button_create_ex 函数

  • 函数功能：

创建check button对象

  • 函数原型：
widget_t* check_button_create_ex (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h, const char* type, bool_t radio);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | widget对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度
type | const char* | 类型。
radio | bool_t | 是否单选。

check_button_create_radio 函数

  • 函数功能：

创建单选按钮对象

  • 函数原型：
widget_t* check_button_create_radio (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | widget对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

check_button_get_checked_button 函数

  • 函数功能：

用于radio button获取同组中勾选的radio button。

  • 函数原型：
widget_t* check_button_get_checked_button (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 同组中勾选的radio button对象。
widget | widget_t* | radio_button对象。

check_button_get_widget_vtable 函数

  • 函数功能：

获取 check_button 虚表。

  • 函数原型：
const widget_vtable_t* check_button_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 check_button 虚表。

check_button_set_value 函数

  • 函数功能：

设置控件的值。

  • 函数原型：
ret_t check_button_set_value (widget_t* widget, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | check_button对象。
value | bool_t | 值(勾选为TRUE，非勾选为FALSE)。

radio 属性

是否是单选按钮。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 否
可直接修改 | 否
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值(勾选为TRUE，非勾选为FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


children_layouter_default_t

概述

缺省的子控件布局算法实现。

用法请参考：缺省子控件布局算法

函数

函数名称 | 说明
children_layouter_default_create | 创建子控件布局对象。

children_layouter_default_create 函数

  • 函数功能：

创建子控件布局对象。

  • 函数原型：
children_layouter_t* children_layouter_default_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_t* | 返回创建子控件布局对象。


children_layouter_factory_t

概述

子控件布局算法工厂。

函数

函数名称 | 说明
children_layouter_factory | 获取缺省的子控件布局算法工厂对象。
children_layouter_factory_create | 创建子控件布局算法工厂对象。
children_layouter_factory_create_layouter | 创建指定类型的子控件布局算法对象。
children_layouter_factory_destroy | 析构并释放子控件布局算法工厂对象。
children_layouter_factory_register | 注册子控件布局算法创建函数。
children_layouter_factory_set | 设置缺省的子控件布局算法工厂对象。

children_layouter_factory 函数

  • 函数功能：

获取缺省的子控件布局算法工厂对象。

  • 函数原型：
children_layouter_factory_t* children_layouter_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_factory_t* | 返回子控件布局算法工厂对象。

children_layouter_factory_create 函数

  • 函数功能：

创建子控件布局算法工厂对象。

  • 函数原型：
children_layouter_factory_t* children_layouter_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_factory_t* | 返回子控件布局算法工厂对象。

children_layouter_factory_create_layouter 函数

  • 函数功能：

创建指定类型的子控件布局算法对象。

  • 函数原型：
children_layouter_t* children_layouter_factory_create_layouter (children_layouter_factory_t* factory, const char* type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_t* | 返回子控件布局算法对象。
factory | children_layouter_factory_t* | 子控件布局算法工厂对象。
type | const char* | 类型。

children_layouter_factory_destroy 函数

  • 函数功能：

析构并释放子控件布局算法工厂对象。

  • 函数原型：
ret_t children_layouter_factory_destroy (children_layouter_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | children_layouter_factory_t* | 子控件布局算法工厂对象。

children_layouter_factory_register 函数

  • 函数功能：

注册子控件布局算法创建函数。

  • 函数原型：
ret_t children_layouter_factory_register (children_layouter_factory_t* factory, const char* type, children_layouter_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | children_layouter_factory_t* | layouter工厂对象。
type | const char* | 子控件布局算法类型。
create | children_layouter_create_t | 子控件布局算法创建函数。

children_layouter_factory_set 函数

  • 函数功能：

设置缺省的子控件布局算法工厂对象。

  • 函数原型：
ret_t children_layouter_factory_set (children_layouter_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | children_layouter_factory_t* | 子控件布局算法工厂对象。


children_layouter_list_view_t

概述

listview的子控件布局算法实现。

用法请参考：listview子控件布局算法

函数

函数名称 | 说明
children_layouter_list_view_create | 创建子控件布局对象。

children_layouter_list_view_create 函数

  • 函数功能：

创建子控件布局对象。

  • 函数原型：
children_layouter_t* children_layouter_list_view_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_t* | 返回创建子控件布局对象。


children_layouter_t

概述

子控件排版布局器的接口。

按特定算法对子控件进行排版布局，子类需要实现vtable中的函数。

函数

函数名称 | 说明
children_layouter_clone | 克隆layouter对象。
children_layouter_create | 创建layouter对象。
children_layouter_destroy | 销毁layouter对象。
children_layouter_get_param | 获取指定的参数。
children_layouter_get_param_float | 获取指定的浮点格式的参数。
children_layouter_get_param_int | 获取指定的整数格式的参数。
children_layouter_is_valid | 判断layouter对象是否有效。
children_layouter_layout | 对控件的子控件进行布局。
children_layouter_set_param | 获取指定的参数。
children_layouter_set_param_str | 设置字符串格式的参数。
children_layouter_to_string | 获取全部参数。

children_layouter_clone 函数

  • 函数功能：

克隆layouter对象。

  • 函数原型：
children_layouter_t* children_layouter_clone (children_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_t* | 返回layouter对象。
layouter | children_layouter_t* | 被克隆的对象。

children_layouter_create 函数

  • 函数功能：

创建layouter对象。

  • 函数原型：
children_layouter_t* children_layouter_create (const char* params);
  • 参数说明：
参数 | 类型 | 说明
返回值 | children_layouter_t* | 返回layouter对象。
params | const char* | 参数。

children_layouter_destroy 函数

  • 函数功能：

销毁layouter对象。

  • 函数原型：
ret_t children_layouter_destroy (children_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | children_layouter_t* | layouter对象。

children_layouter_get_param 函数

  • 函数功能：

获取指定的参数。

  • 函数原型：
ret_t children_layouter_get_param (children_layouter_t* layouter, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | children_layouter_t* | layouter对象。
name | const char* | 参数名。
v | value_t* | 返回参数的值。

children_layouter_get_param_float 函数

  • 函数功能：

获取指定的浮点格式的参数。

  • 函数原型：
float_t children_layouter_get_param_float (children_layouter_t* layouter, const char* name, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 成功返回参数的值，失败返回缺省值。
layouter | children_layouter_t* | layouter对象。
name | const char* | 参数名。
defval | float_t | 缺省值。

children_layouter_get_param_int 函数

  • 函数功能：

获取指定的整数格式的参数。

  • 函数原型：
int32_t children_layouter_get_param_int (children_layouter_t* layouter, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 成功返回参数的值，失败返回缺省值。
layouter | children_layouter_t* | layouter对象。
name | const char* | 参数名。
defval | int32_t | 缺省值。

children_layouter_is_valid 函数

  • 函数功能：

判断layouter对象是否有效。

  • 函数原型：
bool_t children_layouter_is_valid (children_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示有效，否则表示无效。
layouter | children_layouter_t* | layouter对象。

children_layouter_layout 函数

  • 函数功能：

对控件的子控件进行布局。

  • 函数原型：
ret_t children_layouter_layout (children_layouter_t* layouter, widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | children_layouter_t* | layouter对象。
widget | widget_t* | 控件。

children_layouter_set_param 函数

  • 函数功能：

获取指定的参数。

  • 函数原型：
ret_t children_layouter_set_param (children_layouter_t* layouter, const char* name, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | children_layouter_t* | layouter对象。
name | const char* | 参数名。
v | const value_t* | 参数的值。

children_layouter_set_param_str 函数

  • 函数功能：

设置字符串格式的参数。

  • 函数原型：
ret_t children_layouter_set_param_str (children_layouter_t* layouter, const char* name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | children_layouter_t* | layouter对象。
name | const char* | 参数名。
value | const char* | 参数值。

children_layouter_to_string 函数

  • 函数功能：

获取全部参数。

  • 函数原型：
const char* children_layouter_to_string (children_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串格式的参数。
layouter | children_layouter_t* | layouter对象。


cmd_args_t

概述

命令行处理。

函数

函数名称 | 说明
cmd_args_init | 初始化。
cmd_args_process | 处理。
cmd_args_process_str | 处理。
cmd_args_process_wstr | 处理。
cmd_args_show_help | 显示帮助信息。

cmd_args_init 函数

  • 函数功能：

初始化。

  • 函数原型：
cmd_args_t* cmd_args_init (cmd_args_t* args, const char* usage, const cmd_arg_desc_t* desc, uint32_t desc_nr, cmd_arg_on_arg_t on_arg, void* on_arg_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | cmd_args_t* | 返回CMD_ARGS对象。
args | cmd_args_t* | args对象。
usage | const char* | 帮助信息。
desc | const cmd_arg_desc_t* | 参数描述。
desc_nr | uint32_t | 参数描述个数。
on_arg | cmd_arg_on_arg_t | 参数处理回调函数。
on_arg_ctx | void* | 参数处理回调函数的上下文。

cmd_args_process 函数

  • 函数功能：

处理。

  • 函数原型：
ret_t cmd_args_process (cmd_args_t* args, int argc, char** argv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
args | cmd_args_t* | args对象。
argc | int | 参数个数。
argv | char** | 参数数组。

cmd_args_process_str 函数

  • 函数功能：

处理。

  • 函数原型：
ret_t cmd_args_process_str (cmd_args_t* args, const char* cmd_line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
args | cmd_args_t* | args对象。
cmd_line | const char* | 字符串格式的参数(适用于Windows)。

cmd_args_process_wstr 函数

  • 函数功能：

处理。

  • 函数原型：
ret_t cmd_args_process_wstr (cmd_args_t* args, int argc, wchar_t** argv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
args | cmd_args_t* | args对象。
argc | int | 参数个数。
argv | wchar_t** | 参数数组。

cmd_args_show_help 函数

  • 函数功能：

显示帮助信息。

  • 函数原型：
ret_t cmd_args_show_help (cmd_args_t* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
args | cmd_args_t* | args对象。


cmd_arg_desc_t

概述

参数描述。

属性

属性名称 | 类型 | 说明
desc | const char* | 描述。
name | const char* | 名称。
short_name | const char* | 缩写。
value_type | value_type_t | 数据类型。

desc 属性

描述。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

short_name 属性

缩写。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

value_type 属性

数据类型。

  • 类型：value_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


cmd_exec_event_t

概述

对象执行命令的事件。

函数

函数名称 | 说明
cmd_exec_event_cast | 把event对象转cmd_exec_event_t对象。
cmd_exec_event_init | 初始命令执行事件。

属性

属性名称 | 类型 | 说明
args | const char* | 命令的参数。
can_exec | bool_t | 标识命令是否可以执行(适用于CAN_EXEC)。
name | const char* | 命令的名称。
result | ret_t | 执行结果(适用于EXECED)。

cmd_exec_event_cast 函数

  • 函数功能：

把event对象转cmd_exec_event_t对象。

  • 函数原型：
cmd_exec_event_t* cmd_exec_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | cmd_exec_event_t* | 返回event对象。
event | event_t* | event对象。

cmd_exec_event_init 函数

  • 函数功能：

初始命令执行事件。

  • 函数原型：
event_t* cmd_exec_event_init (cmd_exec_event_t* event, uint32_t type, const char* name, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | cmd_exec_event_t* | event对象。
type | uint32_t | 事件类型。
name | const char* | 命令名。
args | const char* | 命令参数。

args 属性

命令的参数。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

can_exec 属性

标识命令是否可以执行(适用于CAN_EXEC)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

name 属性

命令的名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

result 属性

执行结果(适用于EXECED)。

  • 类型：ret_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


clip_board_data_type_t

概述

剪切板数据类型定义。

常量

名称 | 说明
CLIP_BOARD_DATA_TYPE_NONE | 无数据。
CLIP_BOARD_DATA_TYPE_TEXT | UTF8文本。


clip_board_t

概述

剪切板接口。

函数

函数名称 | 说明
clip_board | 获取缺省的剪切板对象。
clip_board_clear | 清空剪切板中的数据。
clip_board_destroy | 销毁剪切板对象。
clip_board_get_data | 从剪切板中获取数据。
clip_board_get_text | 从剪切板中获取文本(UTF8)数据。
clip_board_set | 设置缺省的剪切板对象。
clip_board_set_data | 设置数据到剪切板中。
clip_board_set_text | 设置文本(UTF8)数据到剪切板。

clip_board 函数

  • 函数功能：

获取缺省的剪切板对象。

  • 函数原型：
clip_board_t* clip_board ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | clip_board_t* | 返回缺省剪切板对象。

clip_board_clear 函数

  • 函数功能：

清空剪切板中的数据。

  • 函数原型：
ret_t clip_board_clear (clip_board_t* cl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cl | clip_board_t* | 剪切板对象。

clip_board_destroy 函数

  • 函数功能：

销毁剪切板对象。

  • 函数原型：
ret_t clip_board_destroy (clip_board_t* cl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cl | clip_board_t* | 剪切板对象。

clip_board_get_data 函数

  • 函数功能：

从剪切板中获取数据。

  • 函数原型：
ret_t clip_board_get_data (clip_board_t* cl, clip_board_data_type_t* type, const void** data, uint32_t* size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cl | clip_board_t* | 剪切板对象。
type | clip_board_data_type_t* | 返回数据类型(可为NULL)。
data | const void** | 返回数据(可为NULL)。
size | uint32_t* | 返回数据长度(可为NULL)。

clip_board_get_text 函数

  • 函数功能：

从剪切板中获取文本(UTF8)数据。

  • 函数原型：
const char* clip_board_get_text ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回文本数据。

clip_board_set 函数

  • 函数功能：

设置缺省的剪切板对象。

  • 函数原型：
ret_t clip_board_set (clip_board_t* cl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cl | clip_board_t* | 剪切板对象。

clip_board_set_data 函数

  • 函数功能：

设置数据到剪切板中。

  • 函数原型：
ret_t clip_board_set_data (clip_board_t* cl, clip_board_data_type_t type, const void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cl | clip_board_t* | 剪切板对象。
type | clip_board_data_type_t | 数据类型。
data | const void* | 数据。
size | uint32_t | 数据长度

clip_board_set_text 函数

  • 函数功能：

设置文本(UTF8)数据到剪切板。

  • 函数原型：
ret_t clip_board_set_text (const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text | const char* | 文本。


clip_view_t

概述

一个裁剪子控件的容器控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

clip_view_t是widget_t的子类控件，widget_t的函数均适用于clip_view_t控件。

在xml中使用”clip_view”标签创建clip_view，在clip_view控件下的所有子控件都会被裁剪。如下button控件会被裁剪，无法画出clip_view控件 ：

<clip_view x="0" y="0" w="100" h="100">
<button x="50" y="10" w="100" h="50" />
</clip_view>

备注：在clip_view控件下的所有子控件都会被裁剪，如果子控件本身会设置裁剪区的话，在子控件中计算裁剪区的交集，具体请参考scroll_view控件的scroll_view_on_paint_children函数。

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
clip_view_cast | 转换为clip_view对象(供脚本语言使用)。
clip_view_create | 创建clip_view对象

clip_view_cast 函数

  • 函数功能：

转换为clip_view对象(供脚本语言使用)。

  • 函数原型：
widget_t* clip_view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | clip_view对象。
widget | widget_t* | clip_view对象。

clip_view_create 函数

  • 函数功能：

创建clip_view对象

  • 函数原型：
widget_t* clip_view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度


color_component_t

概述

颜色选择器的颜色分量。 控件的名称有严格规定： COLOR_PICKER_CHILD_SV: 水平为Value/Brightness(递增)，垂直为Saturation(递减)。 COLOR_PICKER_CHILD_H: 水平为同色，垂直为Hue(递减)。

函数

函数名称 | 说明
color_component_cast | 转换为color_component对象(供脚本语言使用)。
color_component_create | 创建color_component对象
color_component_get_h | 获取h分量。
color_component_get_s | 获取s分量。
color_component_get_v | 获取v分量。
color_component_get_widget_vtable | 获取 color_component 虚表。
color_component_set_color | 设置颜色。
color_component_set_hsv | 设置颜色。

事件

事件名称 | 类型 | 说明
EVT_VALUE_CHANGING | value_change_event_t | 颜色正在改变事件。

color_component_cast 函数

  • 函数功能：

转换为color_component对象(供脚本语言使用)。

  • 函数原型：
widget_t* color_component_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | color_component对象。
widget | widget_t* | color_component对象。

color_component_create 函数

  • 函数功能：

创建color_component对象

  • 函数原型：
widget_t* color_component_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

color_component_get_h 函数

  • 函数功能：

获取h分量。

  • 函数原型：
float color_component_get_h (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回h分量。
widget | widget_t* | color_component对象。

color_component_get_s 函数

  • 函数功能：

获取s分量。

  • 函数原型：
float color_component_get_s (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回s分量。
widget | widget_t* | color_component对象。

color_component_get_v 函数

  • 函数功能：

获取v分量。

  • 函数原型：
float color_component_get_v (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回v分量。
widget | widget_t* | color_component对象。

color_component_get_widget_vtable 函数

  • 函数功能：

获取 color_component 虚表。

  • 函数原型：
const widget_vtable_t* color_component_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 color_component 虚表。

color_component_set_color 函数

  • 函数功能：

设置颜色。

  • 函数原型：
ret_t color_component_set_color (widget_t* widget, color_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | color_t | 颜色。

color_component_set_hsv 函数

  • 函数功能：

设置颜色。

  • 函数原型：
ret_t color_component_set_hsv (widget_t* widget, float h, float s, float v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
h | float | 色调。
s | float | 饱和度。
v | float | 明度。


color_parser_t

概述

颜色解析相关函数。

示例：

color_t c;
c = color_parse("#112233");
c = color_parse("white");
c = color_parse("rgb(11,22,33)");
c = color_parse("rgba(11,22,33,0.5)");

函数

函数名称 | 说明
color_parse | 把字符串格式的颜色转换成color_t对象。

color_parse 函数

  • 函数功能：

把字符串格式的颜色转换成color_t对象。

目前支持下列格式：

  • 16进制格式。如：”#112233”
  • 颜色名称格式。如：”green”
  • rgb格式。如：”rgb(11,22,33)”

  • rgba格式。如：”rgba(11,22,33,0.5)”

  • 函数原型：

color_t color_parse (const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 返回color_t对象。
color | const char* | 字符串格式的颜色。


color_picker_t

概述

颜色选择器。

color_picker_t是widget_t的子类控件，widget_t的函数均适用于color_picker_t控件。

在xml中使用”color_picker”标签创建颜色选择器控件。如：

<color_picker x="0" y="0" w="100%" h="100%" value="orange">
<color_component x="0" y="0" w="200" h="200" name="sv"/>
<color_component x="210" y="0" w="20" h="200" name="h"/>
<color_tile x="0" y="210" w="50%" h="20" name="new" bg_color="green"/>
<color_tile x="right" y="210" w="50%" h="20" name="old" bg_color="blue"/>
</color_picker>

更多用法请参考： color_picker

其中的子控件必须按下列规则命名：

  • r 红色分量。可以是spin_box、edit和slider。
  • g 绿色分量。可以是spin_box、edit和slider。
  • b 蓝色分量。可以是spin_box、edit和slider。
  • h Hue分量。可以是spin_box、edit、slider和color_component。
  • s Saturation分量。可以是spin_box、edit和slider。
  • v Value/Brightness分量。可以是spin_box、edit和slider。
  • sv Saturation和Value/Brightness分量。可以是color_component。
  • old 旧的值。可以是spin_box、edit和color_tile。
  • new 新的值。可以是spin_box、edit和color_tile。

函数

函数名称 | 说明
color_picker_cast | 转换为color_picker对象(供脚本语言使用)。
color_picker_create | 创建color_picker对象
color_picker_get_widget_vtable | 获取 color_picker 虚表。
color_picker_set_color | 设置颜色。

属性

属性名称 | 类型 | 说明
value | char* | 颜色。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(颜色)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(颜色)改变事件。

color_picker_cast 函数

  • 函数功能：

转换为color_picker对象(供脚本语言使用)。

  • 函数原型：
widget_t* color_picker_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | color_picker对象。
widget | widget_t* | color_picker对象。

color_picker_create 函数

  • 函数功能：

创建color_picker对象

  • 函数原型：
widget_t* color_picker_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

color_picker_get_widget_vtable 函数

  • 函数功能：

获取 color_picker 虚表。

  • 函数原型：
const widget_vtable_t* color_picker_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 color_picker 虚表。

color_picker_set_color 函数

  • 函数功能：

设置颜色。

  • 函数原型：
ret_t color_picker_set_color (widget_t* widget, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
color | const char* | 颜色。

value 属性

颜色。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


color_t

概述

颜色。

函数

函数名称 | 说明
color_a | 获取alpha通道的值。
color_b | 获取蓝色通道的值。
color_cast | 转换为color对象。
color_create | 创建color对象。
color_destroy | 销毁color对象。
color_from_str | 创建color对象。
color_g | 获取绿色通道的值。
color_get_color | 获取颜色值。
color_hex_str | 获取16进制格式表示的颜色
color_init | 初始化颜色对象。
color_r | 获取红色通道的值。
color_rgba_str | 获取rgba格式表示的颜色

属性

属性名称 | 类型 | 说明
color | uint32_t | 颜色的数值。
rgba | rgba_t | 颜色的RGBA值。

color_a 函数

  • 函数功能：

获取alpha通道的值。

主要供脚本语言使用。

  • 函数原型：
uint8_t color_a (color_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回alpha通道的值。
c | color_t* | color对象。

color_b 函数

  • 函数功能：

获取蓝色通道的值。

主要供脚本语言使用。

  • 函数原型：
uint8_t color_b (color_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回蓝色通道的值。
c | color_t* | color对象。

color_cast 函数

  • 函数功能：

转换为color对象。

供脚本语言使用。

  • 函数原型：
color_t* color_cast (color_t* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t* | color对象。
color | color_t* | color对象。

color_create 函数

  • 函数功能：

创建color对象。

主要供脚本语言使用。

  • 函数原型：
color_t* color_create (uint8_t r, uint8_t g, uint8_t b, uint8_t a);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t* | color对象。
r | uint8_t | 红色通道。
g | uint8_t | 绿色通道。
b | uint8_t | 蓝色通道。
a | uint8_t | alpha通道。

color_destroy 函数

  • 函数功能：

销毁color对象。 主要供脚本语言使用。

  • 函数原型：
ret_t color_destroy (color_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
c | color_t* | color对象。

color_from_str 函数

  • 函数功能：

创建color对象。

主要供脚本语言使用。

  • 函数原型：
color_t* color_from_str (color_t* c, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t* | color对象。
c | color_t* | color对象。
str | const char* | css类似的颜色值。

color_g 函数

  • 函数功能：

获取绿色通道的值。

主要供脚本语言使用。

  • 函数原型：
uint8_t color_g (color_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回绿色通道的值。
c | color_t* | color对象。

color_get_color 函数

  • 函数功能：

获取颜色值。

主要供脚本语言使用。

  • 函数原型：
uint32_t color_get_color (color_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回颜色值。
c | color_t* | color对象。

color_hex_str 函数

  • 函数功能：

获取16进制格式表示的颜色

  • 函数原型：
const char* color_hex_str (color_t c, char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 获取16进制字符串表示的颜色。
c | color_t | color对象。
str | char* | 内存。

color_init 函数

  • 函数功能：

初始化颜色对象。

  • 函数原型：
color_t color_init (uint8_t r, uint8_t g, uint8_t b, uint8_t a);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 颜色对象。
r | uint8_t | 红色。
g | uint8_t | 绿色。
b | uint8_t | 蓝色。
a | uint8_t | alpha。

color_r 函数

  • 函数功能：

获取红色通道的值。

主要供脚本语言使用。

  • 函数原型：
uint8_t color_r (color_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回红色通道的值。
c | color_t* | color对象。

color_rgba_str 函数

  • 函数功能：

获取rgba格式表示的颜色

  • 函数原型：
const char* color_rgba_str (color_t c, char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 获取rgba格式表示的颜色。
c | color_t | color对象。
str | char* | 内存。

color 属性

颜色的数值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是
可脚本化 | 是

rgba 属性

颜色的RGBA值。

  • 类型：rgba_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是


color_tile_t

概述

色块控件。

用来显示一个颜色块，它通过属性而不是窗体样式来设置颜色，方便在运行时动态改变颜色。

可以使用value属性访问背景颜色的颜色值。

color_tile_t是widget_t的子类控件，widget_t的函数均适用于color_tile_t控件。

在xml中使用”color_tile”标签创建色块控件。如：

<color_tile x="c" y="m" w="80" h="30" bg_color="green" />

更多用法请参考： color_tile

在c代码中使用函数color_tile_create创建色块控件。如：

widget_t* color_tile = color_tile_create(win, 10, 10, 128, 30);
color_tile_set_bg_color(color_tile, "red");

> 创建之后，用color_tile_set_bg_color设置背景颜色。

函数

函数名称 | 说明
color_tile_cast | 转换为color_tile对象(供脚本语言使用)。
color_tile_create | 创建color_tile对象
color_tile_get_bg_color | 获取背景颜色。
color_tile_get_border_color | 获取边框颜色。
color_tile_get_widget_vtable | 获取 color_tile 虚表。
color_tile_set_bg_color | 设置背景颜色。
color_tile_set_border_color | 设置边框颜色。
color_tile_set_value | 设置背景颜色。

属性

属性名称 | 类型 | 说明
bg_color | char* | 背景颜色。
border_color | char* | 边框颜色。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(颜色)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(颜色)改变事件。

color_tile_cast 函数

  • 函数功能：

转换为color_tile对象(供脚本语言使用)。

  • 函数原型：
widget_t* color_tile_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | color_tile对象。
widget | widget_t* | color_tile对象。

color_tile_create 函数

  • 函数功能：

创建color_tile对象

  • 函数原型：
widget_t* color_tile_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

color_tile_get_bg_color 函数

  • 函数功能：

获取背景颜色。

  • 函数原型：
const char* color_tile_get_bg_color (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回背景颜色。
widget | widget_t* | 控件对象。

color_tile_get_border_color 函数

  • 函数功能：

获取边框颜色。

  • 函数原型：
const char* color_tile_get_border_color (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回边框颜色。
widget | widget_t* | 控件对象。

color_tile_get_widget_vtable 函数

  • 函数功能：

获取 color_tile 虚表。

  • 函数原型：
const widget_vtable_t* color_tile_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 color_tile 虚表。

color_tile_set_bg_color 函数

  • 函数功能：

设置背景颜色。

  • 函数原型：
ret_t color_tile_set_bg_color (widget_t* widget, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
color | const char* | 背景颜色。

color_tile_set_border_color 函数

  • 函数功能：

设置边框颜色。

  • 函数原型：
ret_t color_tile_set_border_color (widget_t* widget, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
color | const char* | 边框颜色。

color_tile_set_value 函数

  • 函数功能：

设置背景颜色。

  • 函数原型：
ret_t color_tile_set_value (widget_t* widget, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
color | color_t | 背景颜色。

bg_color 属性

背景颜色。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

border_color 属性

边框颜色。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


column_t

概述

column。一个简单的容器控件，垂直排列其子控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

column_t是widget_t的子类控件，widget_t的函数均适用于column_t控件。

在xml中使用”column”标签创建column。如：

<column x="0" y="0" w="100%" h="100%" children_layout="default(c=1,r=0)">
<button name="open:basic" text="Basic"/>
<button name="open:button" text="Buttons"/>
<button name="open:edit" text="Edits"/>
<button name="open:keyboard" text="KeyBoard"/>
</column>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
column_cast | 转换为column对象(供脚本语言使用)。
column_create | 创建column对象
column_get_widget_vtable | 获取 column 虚表。

column_cast 函数

  • 函数功能：

转换为column对象(供脚本语言使用)。

  • 函数原型：
widget_t* column_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | column对象。
widget | widget_t* | column对象。

column_create 函数

  • 函数功能：

创建column对象

  • 函数原型：
widget_t* column_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

column_get_widget_vtable 函数

  • 函数功能：

获取 column 虚表。

  • 函数原型：
const widget_vtable_t* column_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 column 虚表。


combo_box_ex_t

概述

扩展combo_box控件。支持以下功能： * 支持滚动。项目比较多时显示滚动条。 * 自动调整弹出窗口的宽度。根据最长文本自动调整弹出窗口的宽度。 * 支持分组显示。如果item的文本以”seperator.”开头，视为一个分组开始，其后的文本为分组的标题。比如: “seperator.basic”，会创建一个basic为标题的分组。

函数

函数名称 | 说明
combo_box_ex_create | 创建combo_box_ex对象

combo_box_ex_create 函数

  • 函数功能：

创建combo_box_ex对象

  • 函数原型：
widget_t* combo_box_ex_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度


combo_box_item_t

概述

ComboBox Item控件。

本类仅供combo_box控件内部使用。

函数

函数名称 | 说明
combo_box_item_cast | 转换combo_box_item对象(供脚本语言使用)。
combo_box_item_create | 创建combo_box_item对象
combo_box_item_get_widget_vtable | 获取 combo_box_item 虚表。
combo_box_item_set_checked | 设置控件是否被选中。
combo_box_item_set_value | 设置控件的值。

属性

属性名称 | 类型 | 说明
checked | bool_t | 是否被选中。
value | int32_t | 值。

事件

事件名称 | 类型 | 说明
EVT_CLICK | pointer_event_t | 点击事件。
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(勾选状态)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(勾选状态)改变事件。

combo_box_item_cast 函数

  • 函数功能：

转换combo_box_item对象(供脚本语言使用)。

  • 函数原型：
widget_t* combo_box_item_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | combo_box_item对象。
widget | widget_t* | combo_box_item对象。

combo_box_item_create 函数

  • 函数功能：

创建combo_box_item对象

  • 函数原型：
widget_t* combo_box_item_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

combo_box_item_get_widget_vtable 函数

  • 函数功能：

获取 combo_box_item 虚表。

  • 函数原型：
const widget_vtable_t* combo_box_item_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 combo_box_item 虚表。

combo_box_item_set_checked 函数

  • 函数功能：

设置控件是否被选中。

  • 函数原型：
ret_t combo_box_item_set_checked (widget_t* widget, bool_t checked);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box_item对象。
checked | bool_t | 是否被选中。

combo_box_item_set_value 函数

  • 函数功能：

设置控件的值。

  • 函数原型：
ret_t combo_box_item_set_value (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box_item对象。
value | int32_t | 值

checked 属性

是否被选中。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


combo_box_t

概述

下拉列表控件。

点击右边的按钮，可弹出一个下拉列表，从中选择一项作为当前的值。

combo_box_t是edit_t的子类控件，edit_t的函数均适用于combo_box_t控件。

在xml中使用”combo_box”标签创建下拉列表控件。

列表选项可以直接写在”options”属性中。如：

<combo_box readonly="true" x="10" y="bottom:5" w="200" h="30" tr_text="ok"
options="1:ok;2:cancel;"/>

列表选项也可以放在独立的窗口中，用属性”open_window”指定窗口的名称。如：

<combo_box open_window="language" readonly="true" x="10" y="bottom:50" w="200" h="30"
tr_text="english"/>

language.xml:

<popup close_when_click_outside="true" h="80" >
<list_view x="0"  y="0" w="100%" h="100%" item_height="30">
<scroll_view name="view" x="0"  y="0" w="-12" h="100%">
<combo_box_item tr_text="english"/>
<combo_box_item tr_text="chinese" />
</scroll_view>
<scroll_bar_d name="bar" x="right" y="0" w="12" h="100%" value="0"/>
</list_view>
</popup>

更多用法请参考：combo_box.xml

如果在文本比较长时，希望在获得焦点时文本自动滚动，可以放入一个hscroll_label为子控件，并命名为”value”。如：

<combo_box left_margin="6" readonly="true" x="10" y="50" w="80" h="30" options="leftttttttttt;centerrrrrrrrrrrrrrrr;rightttttttttt;"
selected_index="1">
<hscroll_label x="0" y="0" w="-30" h="100%"
name="value"
lull="1000"
loop="true"
yoyo="true"
ellipses="true"
only_parent_focus="true"/>
<button style="combobox_down" x="right:5" y="middle" w="20" h="20"/>
</combo_box>

在c代码中使用函数combo_box_create创建下拉列表控件。如：

widget_t* combo_box = combo_box_create(win, 10, 10, 128, 30);

combo_box_set_options(combo_box, "left;center;right;");
combo_box_set_selected_index(combo_box, 1);

创建之后：

  • 用combo_box_set_options设置可选项目。
  • 用combo_box_set_selected_index设置缺省项。

完整示例请参考：combo_box demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<combo_box>
<style name="default" border_color="#a0a0a0"  text_color="black" text_align_h="left">
<normal     bg_color="#f0f0f0" />
<focused    bg_color="#f0f0f0" border_color="black"/>
<empty      bg_color="#f0f0f0" text_color="#a0a0a0" />
</style>
</combo_box>
  • 1.combobox的下拉按钮的style名称为combobox_down，可以在窗体样式文件中设置。
<button>
<style name="combobox_down" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" icon="arrow_down_n"/>
<pressed    bg_color="#c0c0c0" icon="arrow_down_p"/>
<over       bg_color="#e0e0e0" icon="arrow_down_o"/>
</style>
</button>
  • 2.combobox的弹出popup窗口的style名称为combobox_popup，可以在窗体样式文件中设置。
<popup>
<style name="combobox_popup" border_color="red">
<normal bg_color="#808080"/>
</style>
</popup>
  • 3.combobox的下拉框中的列表项的样式，可以设置combo_box_item的style来改变。
<combo_box_item>
<style name="default" icon_at="left" text_color="black" bg_color="#f0f0f0">
<normal  icon="empty"/>
<focused icon="empty" bg_color="#1296db" text_color="gold" />
<pressed icon="empty" bg_color="#1296db" text_color="white" />
<over    icon="empty" bg_color="#1296db" text_color="white" />
<normal_of_checked  icon="check"/>
<focused_of_checked  icon="check" bg_color="#1296db" text_color="gold"/>
<pressed_of_checked icon="check" bg_color="#1296db" text_color="white" />
<over_of_checked    icon="check" bg_color="#1296db" text_color="white" />
</style>
</combo_box_item>

更多用法请参考：theme default

函数

函数名称 | 说明
combo_box_append_option | 追加一个选项。
combo_box_cast | 转换combo_box对象(供脚本语言使用)。
combo_box_count_options | 获取选项个数。
combo_box_create | 创建combo_box对象
combo_box_get_option | 获取第index个选项。
combo_box_get_text | 获取combo_box的文本(可能是翻译后的文本)。
combo_box_get_text_of_selected | 获取combo_box当前选中项目的文本(原生非翻译的文本)。
combo_box_get_value | 获取combo_box的值。
combo_box_get_widget_vtable | 获取 combo_box 虚表。
combo_box_has_option_text | 检查选项中是否存在指定的文本。
combo_box_remove_option | 删除第一个值为value的选项。
combo_box_remove_option_by_index | 删除指定序数的选项。
combo_box_reset_options | 重置所有选项。
combo_box_set_custom_open_popup | 设置自定义的打开弹出窗口的函数。
combo_box_set_item_height | 设置item高度。
combo_box_set_localize_options | 设置是否本地化(翻译)选项。
combo_box_set_on_item_click | 设置弹出窗口的item被点击的回调函数，回调函数返回非RET_OK，继续默认处理。
combo_box_set_open_window | 点击按钮时可以打开popup窗口，本函数可设置窗口的名称。
combo_box_set_options | 设置选项。
combo_box_set_selected_index | 设置第index个选项为当前选中的选项。
combo_box_set_selected_index_by_text | 根据文本设置当前选中的选项。
combo_box_set_theme_of_popup | 设置弹出窗口的主题。
combo_box_set_value | 设置值。

属性

属性名称 | 类型 | 说明
item_height | int32_t | 下拉选项的高度。如果open_window为空，则使用缺省高度。
localize_options | bool_t | 是否本地化(翻译)选项(缺省为TRUE)。
open_window | char* | 为点击按钮时，要打开窗口的名称。
options | char* | 设置可选项(冒号分隔值和文本，分号分隔选项，如:1:red;2:green;3:blue)。
selected_index | int32_t | 当前选中的选项。
theme_of_popup | char* | 弹出窗口的主题(对应的style文件必须存在)，方便为不同combo box的弹出窗口指定不同的样式。
value | int32_t | 值。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值改变事件。

combo_box_append_option 函数

  • 函数功能：

追加一个选项。

  • 函数原型：
ret_t combo_box_append_option (widget_t* widget, int32_t value, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
value | int32_t | 值。
text | const char* | 文本。

combo_box_cast 函数

  • 函数功能：

转换combo_box对象(供脚本语言使用)。

  • 函数原型：
widget_t* combo_box_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | combo_box对象。
widget | widget_t* | combo_box对象。

combo_box_count_options 函数

  • 函数功能：

获取选项个数。

  • 函数原型：
int32_t combo_box_count_options (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回选项个数。
widget | widget_t* | combo_box对象。

combo_box_create 函数

  • 函数功能：

创建combo_box对象

  • 函数原型：
widget_t* combo_box_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

combo_box_get_option 函数

  • 函数功能：

获取第index个选项。

  • 函数原型：
combo_box_option_t* combo_box_get_option (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | combo_box_option_t* | 返回index个选项。
widget | widget_t* | combo_box对象。
index | uint32_t | 选项的索引。

combo_box_get_text 函数

  • 函数功能：

获取combo_box的文本(可能是翻译后的文本)。

  • 函数原型：
const char* combo_box_get_text (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回文本。
widget | widget_t* | combo_box对象。

combo_box_get_text_of_selected 函数

  • 函数功能：

获取combo_box当前选中项目的文本(原生非翻译的文本)。

  • 函数原型：
const char* combo_box_get_text_of_selected (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回文本。
widget | widget_t* | combo_box对象。

combo_box_get_value 函数

  • 函数功能：

获取combo_box的值。

  • 函数原型：
int32_t combo_box_get_value (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回值。
widget | widget_t* | combo_box对象。

combo_box_get_widget_vtable 函数

  • 函数功能：

获取 combo_box 虚表。

  • 函数原型：
const widget_vtable_t* combo_box_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 combo_box 虚表。

combo_box_has_option_text 函数

  • 函数功能：

检查选项中是否存在指定的文本。

  • 函数原型：
bool_t combo_box_has_option_text (widget_t* widget, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
widget | widget_t* | combo_box对象。
text | const char* | option text

combo_box_remove_option 函数

  • 函数功能：

删除第一个值为value的选项。

  • 函数原型：
ret_t combo_box_remove_option (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
value | int32_t | 选项的值。

combo_box_remove_option_by_index 函数

  • 函数功能：

删除指定序数的选项。

  • 函数原型：
ret_t combo_box_remove_option_by_index (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
index | uint32_t | 选项的序数(0表示第一个)。

combo_box_reset_options 函数

  • 函数功能：

重置所有选项。

  • 函数原型：
ret_t combo_box_reset_options (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。

combo_box_set_custom_open_popup 函数

  • 函数功能：

设置自定义的打开弹出窗口的函数。

  • 函数原型：
ret_t combo_box_set_custom_open_popup (widget_t* widget, combo_box_custom_open_popup_t open_popup, combo_box_custom_on_layout_combobox_popup_t on_layout_combobox_popup);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
open_popup | combo_box_custom_open_popup_t | 回调函数。
on_layout_combobox_popup | combo_box_custom_on_layout_combobox_popup_t | layout 的回调函数。

combo_box_set_item_height 函数

  • 函数功能：

设置item高度。

  • 函数原型：
ret_t combo_box_set_item_height (widget_t* widget, uint32_t item_height);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
item_height | uint32_t | item的高度。

combo_box_set_localize_options 函数

  • 函数功能：

设置是否本地化(翻译)选项。

  • 函数原型：
ret_t combo_box_set_localize_options (widget_t* widget, bool_t localize_options);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
localize_options | bool_t | 是否本地化(翻译)选项。

combo_box_set_on_item_click 函数

  • 函数功能：

设置弹出窗口的item被点击的回调函数，回调函数返回非RET_OK，继续默认处理。

  • 函数原型：
ret_t combo_box_set_on_item_click (widget_t* widget, event_func_t on_item_click, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
on_item_click | event_func_t | 回调函数。
ctx | void* | 回调函数上下文。

combo_box_set_open_window 函数

  • 函数功能：

点击按钮时可以打开popup窗口，本函数可设置窗口的名称。

  • 函数原型：
ret_t combo_box_set_open_window (widget_t* widget, const char* open_window);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
open_window | const char* | 弹出窗口的名称。

combo_box_set_options 函数

  • 函数功能：

设置选项。

  • 函数原型：
ret_t combo_box_set_options (widget_t* widget, const char* options);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
options | const char* | 选项。

combo_box_set_selected_index 函数

  • 函数功能：

设置第index个选项为当前选中的选项。

  • 函数原型：
ret_t combo_box_set_selected_index (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
index | uint32_t | 选项的索引。

combo_box_set_selected_index_by_text 函数

  • 函数功能：

根据文本设置当前选中的选项。

  • 函数原型：
ret_t combo_box_set_selected_index_by_text (widget_t* widget, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
text | const char* | 原生(非翻译的文本)。

combo_box_set_theme_of_popup 函数

  • 函数功能：

设置弹出窗口的主题。

  • 函数原型：
ret_t combo_box_set_theme_of_popup (widget_t* widget, const char* theme_of_popup);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
theme_of_popup | const char* | 弹出的窗口主题。

combo_box_set_value 函数

  • 函数功能：

设置值。

  • 函数原型：
ret_t combo_box_set_value (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | combo_box对象。
value | int32_t | 值。

item_height 属性

下拉选项的高度。如果open_window为空，则使用缺省高度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

localize_options 属性

是否本地化(翻译)选项(缺省为TRUE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

open_window 属性

为点击按钮时，要打开窗口的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

options 属性

设置可选项(冒号分隔值和文本，分号分隔选项，如:1:red;2:green;3:blue)。 如果数据本身中有英文冒号(:)和英文分号(;)，请用16进制转义。 * 英文冒号(:)写为\x3a * 英文冒号(;)写为\x3b

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

selected_index 属性

当前选中的选项。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

theme_of_popup 属性

弹出窗口的主题(对应的style文件必须存在)，方便为不同combo box的弹出窗口指定不同的样式。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


compressor_miniz_t

概述

基于miniz实现的compressor接口。

函数

函数名称 | 说明
compressor_miniz_create | 创建compressor对象。

compressor_miniz_create 函数

  • 函数功能：

创建compressor对象。

  • 函数原型：
compressor_t* compressor_miniz_create (compressor_options_t options);
  • 参数说明：
参数 | 类型 | 说明
返回值 | compressor_t* | 返回compressor对象。
options | compressor_options_t | 选项。


compressor_t

概述

压缩解压接口。

函数

函数名称 | 说明
compressor_compress | 压缩数据。
compressor_destroy | 销毁compressor对象。
compressor_uncompress | 解压数据。

compressor_compress 函数

  • 函数功能：

压缩数据。

  • 函数原型：
ret_t compressor_compress (compressor_t* compressor, const void* data, uint32_t size, wbuffer_t* out);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
compressor | compressor_t* | compressor对象。
data | const void* | 待压缩的数据。
size | uint32_t | 数据长度。
out | wbuffer_t* | 压缩之后的数据。

compressor_destroy 函数

  • 函数功能：

销毁compressor对象。

  • 函数原型：
ret_t compressor_destroy (compressor_t* compressor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
compressor | compressor_t* | compressor对象。

compressor_uncompress 函数

  • 函数功能：

解压数据。

  • 函数原型：
ret_t compressor_uncompress (compressor_t* compressor, const void* data, uint32_t size, wbuffer_t* out);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
compressor | compressor_t* | compressor对象。
data | const void* | 待解压的数据。
size | uint32_t | 数据长度。
out | wbuffer_t* | 解压之后的数据。


conf_doc_t

概述

代表整个配置文件。

函数

函数名称 | 说明
conf_doc_add_child | 追加一个子节点。
conf_doc_append_child | 追加一个子节点。
conf_doc_append_sibling | 追加一个兄弟节点。
conf_doc_clear | 删除指定路径的节点的全部子节点。
conf_doc_create | 构造函数。
conf_doc_create_node | 创建一个空节点。
conf_doc_destroy | 析构函数。
conf_doc_destroy_node | 销毁节点对象。
conf_doc_dup_node | 拷贝一个节点，并追加到其后。
conf_doc_exists | 判断指定路径的节点是否存在。
conf_doc_find_node | 根据path查找节点。
conf_doc_get | 获取指定路径节点的值。
conf_doc_get_bool | 获取指定路径节点的值。
conf_doc_get_ex | 获取指定路径节点的值。
conf_doc_get_float | 获取指定路径节点的值。
conf_doc_get_int | 获取指定路径节点的值。
conf_doc_get_str | 获取指定路径节点的值。
conf_doc_is_first | 检查指定节点是否在兄弟节点中排第一。
conf_doc_is_last | 检查指定节点是否在兄弟节点中排最后。
conf_doc_move_down | 和后一个兄弟节点交换位置。
conf_doc_move_up | 和前一个兄弟节点交换位置。
conf_doc_remove | 删除指定路径的节点。
conf_doc_remove_child | 删除指定的子节点。
conf_doc_remove_child_by_name | 删除指定的子节点。
conf_doc_remove_children | 删除全部子节点。
conf_doc_remove_sibling | 删除指定的兄弟节点。
conf_doc_set | 设置指定路径节点的值。
conf_doc_set_bool | 设置指定路径节点的值。
conf_doc_set_float | 设置指定路径节点的值。
conf_doc_set_int | 设置指定路径节点的值。
conf_doc_set_node_prop | 设置节点的属性。
conf_doc_set_str | 设置指定路径节点的值。
conf_doc_use_extend_type | 使用拓展类型。

属性

属性名称 | 类型 | 说明
root | conf_node_t* | 根节点。
use_extend_type | bool_t | 使用拓展类型。

conf_doc_add_child 函数

  • 函数功能：

追加一个子节点。

  • 函数原型：
ret_t conf_doc_add_child (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_append_child 函数

  • 函数功能：

追加一个子节点。

  • 函数原型：
ret_t conf_doc_append_child (conf_doc_t* doc, conf_node_t* node, conf_node_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
child | conf_node_t* | 待追加节点对象。

conf_doc_append_sibling 函数

  • 函数功能：

追加一个兄弟节点。

  • 函数原型：
ret_t conf_doc_append_sibling (conf_doc_t* doc, conf_node_t* node, conf_node_t* sibling);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
sibling | conf_node_t* | 待追加节点对象。

conf_doc_clear 函数

  • 函数功能：

删除指定路径的节点的全部子节点。

  • 函数原型：
ret_t conf_doc_clear (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_create 函数

  • 函数功能：

构造函数。

  • 函数原型：
conf_doc_t* conf_doc_create (uint32_t prealloc_nodes_nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_doc_t* | 返回doc对象。
prealloc_nodes_nr | uint32_t | 预先分配的节点数。

conf_doc_create_node 函数

  • 函数功能：

创建一个空节点。

  • 函数原型：
conf_node_t* conf_doc_create_node (conf_doc_t* doc, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回节点对象。
doc | conf_doc_t* | 文档对象。
name | const char* | 节点名称。

conf_doc_destroy 函数

  • 函数功能：

析构函数。

  • 函数原型：
ret_t conf_doc_destroy (conf_doc_t* doc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。

conf_doc_destroy_node 函数

  • 函数功能：

销毁节点对象。

  • 函数原型：
ret_t conf_doc_destroy_node (conf_doc_t* doc, conf_node_t* node);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。

conf_doc_dup_node 函数

  • 函数功能：

拷贝一个节点，并追加到其后。

  • 函数原型：
conf_node_t* conf_doc_dup_node (conf_doc_t* doc, conf_node_t* node, const char* new_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回新节点。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
new_name | const char* | 节点名称。

conf_doc_exists 函数

  • 函数功能：

判断指定路径的节点是否存在。

  • 函数原型：
bool_t conf_doc_exists (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示成功，FALSE表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_find_node 函数

  • 函数功能：

根据path查找节点。

  • 函数原型：
conf_node_t* conf_doc_find_node (conf_doc_t* doc, conf_node_t* node, const char* path, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 从该节点查找。
path | const char* | 路径。
create_if_not_exist | bool_t | 不存在是否创建。

conf_doc_get 函数

  • 函数功能：

获取指定路径节点的值。

  • 函数原型：
ret_t conf_doc_get (conf_doc_t* doc, const char* path, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
v | value_t* | 用于返回值。

conf_doc_get_bool 函数

  • 函数功能：

获取指定路径节点的值。

  • 函数原型：
bool_t conf_doc_get_bool (conf_doc_t* doc, const char* path, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回值。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
defval | bool_t | 缺省值。

conf_doc_get_ex 函数

  • 函数功能：

获取指定路径节点的值。

  • 函数原型：
ret_t conf_doc_get_ex (conf_doc_t* doc, conf_node_t* node, const char* path, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 从该节点查找。
path | const char* | 节点的路径。
v | value_t* | 用于返回值。

conf_doc_get_float 函数

  • 函数功能：

获取指定路径节点的值。

  • 函数原型：
float conf_doc_get_float (conf_doc_t* doc, const char* path, float defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回值。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
defval | float | 缺省值。

conf_doc_get_int 函数

  • 函数功能：

获取指定路径节点的值。

  • 函数原型：
int32_t conf_doc_get_int (conf_doc_t* doc, const char* path, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回值。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
defval | int32_t | 缺省值。

conf_doc_get_str 函数

  • 函数功能：

获取指定路径节点的值。

  • 函数原型：
const char* conf_doc_get_str (conf_doc_t* doc, const char* path, const char* defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回值。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
defval | const char* | 缺省值。

conf_doc_is_first 函数

  • 函数功能：

检查指定节点是否在兄弟节点中排第一。

  • 函数原型：
bool_t conf_doc_is_first (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_is_last 函数

  • 函数功能：

检查指定节点是否在兄弟节点中排最后。

  • 函数原型：
bool_t conf_doc_is_last (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_move_down 函数

  • 函数功能：

和后一个兄弟节点交换位置。

  • 函数原型：
ret_t conf_doc_move_down (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_move_up 函数

  • 函数功能：

和前一个兄弟节点交换位置。

  • 函数原型：
ret_t conf_doc_move_up (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_remove 函数

  • 函数功能：

删除指定路径的节点。

  • 函数原型：
ret_t conf_doc_remove (conf_doc_t* doc, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。

conf_doc_remove_child 函数

  • 函数功能：

删除指定的子节点。

  • 函数原型：
ret_t conf_doc_remove_child (conf_doc_t* doc, conf_node_t* node, conf_node_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
child | conf_node_t* | 待删除节点对象。

conf_doc_remove_child_by_name 函数

  • 函数功能：

删除指定的子节点。

  • 函数原型：
ret_t conf_doc_remove_child_by_name (conf_doc_t* doc, conf_node_t* node, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
name | const char* | 待删除节点的名称。

conf_doc_remove_children 函数

  • 函数功能：

删除全部子节点。

  • 函数原型：
ret_t conf_doc_remove_children (conf_doc_t* doc, conf_node_t* node);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。

conf_doc_remove_sibling 函数

  • 函数功能：

删除指定的兄弟节点。

  • 函数原型：
ret_t conf_doc_remove_sibling (conf_doc_t* doc, conf_node_t* node, conf_node_t* sibling);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
sibling | conf_node_t* | 待删除节点对象。

conf_doc_set 函数

  • 函数功能：

设置指定路径节点的值。

  • 函数原型：
ret_t conf_doc_set (conf_doc_t* doc, const char* path, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
v | const value_t* | 值。

conf_doc_set_bool 函数

  • 函数功能：

设置指定路径节点的值。

  • 函数原型：
ret_t conf_doc_set_bool (conf_doc_t* doc, const char* path, bool_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
v | bool_t | 值。

conf_doc_set_float 函数

  • 函数功能：

设置指定路径节点的值。

  • 函数原型：
ret_t conf_doc_set_float (conf_doc_t* doc, const char* path, float v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
v | float | 值。

conf_doc_set_int 函数

  • 函数功能：

设置指定路径节点的值。

  • 函数原型：
ret_t conf_doc_set_int (conf_doc_t* doc, const char* path, int32_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
v | int32_t | 值。

conf_doc_set_node_prop 函数

  • 函数功能：

设置节点的属性。

  • 函数原型：
ret_t conf_doc_set_node_prop (conf_doc_t* doc, conf_node_t* node, const char* name, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
node | conf_node_t* | 节点对象。
name | const char* | 名称。
v | const value_t* | 值。

conf_doc_set_str 函数

  • 函数功能：

设置指定路径节点的值。

  • 函数原型：
ret_t conf_doc_set_str (conf_doc_t* doc, const char* path, const char* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
path | const char* | 节点的路径。
v | const char* | 值。

conf_doc_use_extend_type 函数

  • 函数功能：

使用拓展类型。

  • 函数原型：
ret_t conf_doc_use_extend_type (conf_doc_t* doc, bool_t use);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
doc | conf_doc_t* | 文档对象。
use | bool_t | 是否使用拓展类型。

root 属性

根节点。

  • 类型：conf_node_t*

use_extend_type 属性

使用拓展类型。

  • 类型：bool_t


conf_ini_t

概述

conf ini对象。

示例

char filename[MAX_PATH + 1] = {0};
path_prepend_temp_path(filename, "test.ini");

const char *ini_data1 = "[root]\n"
"name=awplc\n"
"age=18\n"
"weight=60.5\n";
ENSURE(file_write(filename, ini_data1, strlen(ini_data1)) == RET_OK);

// 从文件加载
tk_object_t *ini = conf_ini_load(filename, FALSE);

// 获取数据。
ENSURE(tk_str_eq(tk_object_get_prop_str(ini, "root.name"), "awplc"));
ENSURE(tk_object_get_prop_int(ini, "root.age", 0) == 18);
ENSURE(tk_object_get_prop_double(ini, "root.weight", 0) == 60.5);

// 销毁对象
TK_OBJECT_UNREF(ini);

// 从内存加载
ini = conf_ini_load_from_buff(ini_data1, strlen(ini_data1), FALSE);

// 获取数据
ENSURE(tk_str_eq(tk_object_get_prop_str(ini, "root.name"), "awplc"));
ENSURE(tk_object_get_prop_int(ini, "root.age", 0) == 18);
ENSURE(tk_object_get_prop_double(ini, "root.weight", 0) == 60.5);

// 设置数据
ENSURE(tk_object_set_prop_int(ini, "root.age", 20) == RET_OK);
ENSURE(tk_object_get_prop_int(ini, "root.age", 0) == 20);

// 保存到文件
ENSURE(conf_ini_save_as(ini, filename) == RET_OK);
ENSURE(file_exist(filename) == TRUE);

// 销毁对象
TK_OBJECT_UNREF(ini);

函数

函数名称 | 说明
conf_ini_create | 创建一个空的conf对象。
conf_ini_load | 从指定URL加载INI对象。
conf_ini_load_from_buff | 从内存加载INI对象。
conf_ini_save_as | 将doc对象保存到指定URL。
conf_ini_save_to_buff | 将obj保存为INI格式到内存。

conf_ini_create 函数

  • 函数功能：

创建一个空的conf对象。

  • 函数原型：
tk_object_t* conf_ini_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。

conf_ini_load 函数

  • 函数功能：

从指定URL加载INI对象。

  • 函数原型：
tk_object_t* conf_ini_load (const char* url, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
url | const char* | 路径(通常是文件路径)。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_ini_load_from_buff 函数

  • 函数功能：

从内存加载INI对象。

  • 函数原型：
tk_object_t* conf_ini_load_from_buff (const void* buff, uint32_t size, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
buff | const void* | 数据。
size | uint32_t | 数据长度。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_ini_save_as 函数

  • 函数功能：

将doc对象保存到指定URL。

  • 函数原型：
ret_t conf_ini_save_as (tk_object_t* obj, const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
url | const char* | 保存的位置。

conf_ini_save_to_buff 函数

  • 函数功能：

将obj保存为INI格式到内存。

  • 函数原型：
ret_t conf_ini_save_to_buff (tk_object_t* obj, wbuffer_t* wb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
wb | wbuffer_t* | 返回结果(不要初始化，使用完成后要调用wbuffer_deinit)。


conf_json_t

概述

conf json对象。

示例

char filename[MAX_PATH + 1] = {0};
path_prepend_temp_path(filename, "test.json");

const char *json_data1 = "{"
"{\"root\":{"
"\"name\":\"awplc\","
"\"age\":18,"
"\"weight\":60.5"
"}"
"}";
ENSURE(file_write(filename, json_data1, strlen(json_data1)) == RET_OK);

// 从文件加载
tk_object_t *json = conf_json_load(filename, FALSE);

// 获取数据。
ENSURE(tk_str_eq(tk_object_get_prop_str(json, "root.name"), "awplc"));
ENSURE(tk_object_get_prop_int(json, "root.age", 0) == 18);
ENSURE(tk_object_get_prop_double(json, "root.weight", 0) == 60.5);

// 销毁对象
TK_OBJECT_UNREF(json);

// 从内存加载
json = conf_json_load_from_buff(json_data1, strlen(json_data1), FALSE);

// 获取数据
ENSURE(tk_str_eq(tk_object_get_prop_str(json, "root.name"), "awplc"));
ENSURE(tk_object_get_prop_int(json, "root.age", 0) == 18);
ENSURE(tk_object_get_prop_double(json, "root.weight", 0) == 60.5);

// 设置数据
ENSURE(tk_object_set_prop_int(json, "root.age", 20) == RET_OK);
ENSURE(tk_object_get_prop_int(json, "root.age", 0) == 20);

// 保存到文件
ENSURE(conf_json_save_as(json, filename) == RET_OK);
ENSURE(file_exist(filename) == TRUE);

// 销毁对象
TK_OBJECT_UNREF(json);

函数

函数名称 | 说明
conf_doc_save_json_ex | 功能描述
conf_json_create | 创建一个空的conf对象。
conf_json_load | 从指定URL加载JSON对象。
conf_json_load_ex | 从指定URL加载JSON对象。
conf_json_load_from_buff | 从内存加载JSON对象。
conf_json_save_as | 将doc对象保存到指定URL。
conf_json_save_to_buff | 将obj保存为JSON格式到内存。

conf_doc_save_json_ex 函数

  • 函数功能：

功能描述

  • 函数原型：
ret_t conf_doc_save_json_ex (conf_doc_t* doc, str_t* str, uint32_t indent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t值
doc | conf_doc_t* | doc对象
str | str_t* | 保存结果
indent | uint32_t | 缩进

conf_json_create 函数

  • 函数功能：

创建一个空的conf对象。

  • 函数原型：
tk_object_t* conf_json_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。

conf_json_load 函数

  • 函数功能：

从指定URL加载JSON对象。

  • 函数原型：
tk_object_t* conf_json_load (const char* url, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
url | const char* | 路径(通常是文件路径)。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_json_load_ex 函数

  • 函数功能：

从指定URL加载JSON对象。

  • 函数原型：
tk_object_t* conf_json_load_ex (const char* url, bool_t create_if_not_exist, bool_t use_extend_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
url | const char* | 路径(通常是文件路径)。
create_if_not_exist | bool_t | 如果不存在是否创建。
use_extend_type | bool_t | 是否使用拓展类型。

conf_json_load_from_buff 函数

  • 函数功能：

从内存加载JSON对象。

  • 函数原型：
tk_object_t* conf_json_load_from_buff (const void* buff, uint32_t size, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
buff | const void* | 数据。
size | uint32_t | 数据长度。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_json_save_as 函数

  • 函数功能：

将doc对象保存到指定URL。

  • 函数原型：
ret_t conf_json_save_as (tk_object_t* obj, const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
url | const char* | 保存的位置。

conf_json_save_to_buff 函数

  • 函数功能：

将obj保存为JSON格式到内存。

  • 函数原型：
ret_t conf_json_save_to_buff (tk_object_t* obj, wbuffer_t* wb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
wb | wbuffer_t* | 返回结果(不要初始化，使用完成后要调用wbuffer_deinit)。


conf_node_t

概述

节点。

函数

函数名称 | 说明
conf_node_count_children | 获取节点的子集个数。
conf_node_find_child | 查找指定名称的子节点。
conf_node_find_child_by_index | 查找指定索引的子节点。
conf_node_find_sibling | 查找指定名称的兄弟节点。
conf_node_get_child_value | 获取子节点的值。
conf_node_get_child_value_bool | 获取子节点的值。
conf_node_get_child_value_by_index | 获取子节点的值。
conf_node_get_child_value_int32 | 获取子节点的值。
conf_node_get_child_value_str | 获取子节点的值。
conf_node_get_first_child | 获取第一个子节点。
conf_node_get_name | 获得节点的名称。
conf_node_get_value | 获取节点的值。
conf_node_set_first_child | 设置第一个子节点。
conf_node_set_value | 设置节点的值。

属性

属性名称 | 类型 | 说明
next | conf_node_t* | 下一个兄弟节点。
node_type | uint8_t | 节点类型。
parent | conf_node_t* | 父节点。
value_type | uint8_t | 值的类型。

conf_node_count_children 函数

  • 函数功能：

获取节点的子集个数。

  • 函数原型：
uint32_t conf_node_count_children (conf_node_t* node);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 成功返回节点个数。
node | conf_node_t* | 节点对象。

conf_node_find_child 函数

  • 函数功能：

查找指定名称的子节点。

  • 函数原型：
conf_node_t* conf_node_find_child (conf_node_t* node, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回节点对象。
node | conf_node_t* | 节点对象。
name | const char* | 节点名称。

conf_node_find_child_by_index 函数

  • 函数功能：

查找指定索引的子节点。

  • 函数原型：
conf_node_t* conf_node_find_child_by_index (conf_node_t* node, int32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回节点对象。
node | conf_node_t* | 节点对象。
index | int32_t | 索引。

conf_node_find_sibling 函数

  • 函数功能：

查找指定名称的兄弟节点。

  • 函数原型：
conf_node_t* conf_node_find_sibling (conf_node_t* node, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回节点对象。
node | conf_node_t* | 节点对象。
name | const char* | 节点名称。

conf_node_get_child_value 函数

  • 函数功能：

获取子节点的值。

  • 函数原型：
ret_t conf_node_get_child_value (conf_node_t* node, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
node | conf_node_t* | 节点对象。
name | const char* | 子节点名称。
v | value_t* | 值(返回)。

conf_node_get_child_value_bool 函数

  • 函数功能：

获取子节点的值。

  • 函数原型：
bool_t conf_node_get_child_value_bool (conf_node_t* node, const char* name, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回值。
node | conf_node_t* | 节点对象。
name | const char* | 子节点名称。
defval | bool_t | 默认值。

conf_node_get_child_value_by_index 函数

  • 函数功能：

获取子节点的值。

  • 函数原型：
ret_t conf_node_get_child_value_by_index (conf_node_t* node, uint32_t index, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
node | conf_node_t* | 节点对象。
index | uint32_t | 子节点的序数。
v | value_t* | 值(返回)。

conf_node_get_child_value_int32 函数

  • 函数功能：

获取子节点的值。

  • 函数原型：
int32_t conf_node_get_child_value_int32 (conf_node_t* node, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回值。
node | conf_node_t* | 节点对象。
name | const char* | 子节点名称。
defval | int32_t | 默认值。

conf_node_get_child_value_str 函数

  • 函数功能：

获取子节点的值。

  • 函数原型：
const char* conf_node_get_child_value_str (conf_node_t* node, const char* name, const char* defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回值。
node | conf_node_t* | 节点对象。
name | const char* | 子节点名称。
defval | const char* | 默认值。

conf_node_get_first_child 函数

  • 函数功能：

获取第一个子节点。

  • 函数原型：
conf_node_t* conf_node_get_first_child (conf_node_t* node);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_node_t* | 返回第一个子节点。
node | conf_node_t* | 节点对象。

conf_node_get_name 函数

  • 函数功能：

获得节点的名称。

  • 函数原型：
const char* conf_node_get_name (conf_node_t* node);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回节点名称。
node | conf_node_t* | 节点对象。

conf_node_get_value 函数

  • 函数功能：

获取节点的值。

  • 函数原型：
ret_t conf_node_get_value (conf_node_t* node, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
node | conf_node_t* | 节点对象。
v | value_t* | 值(返回)。

conf_node_set_first_child 函数

  • 函数功能：

设置第一个子节点。

  • 函数原型：
ret_t conf_node_set_first_child (conf_node_t* node, conf_node_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
node | conf_node_t* | 节点对象。
child | conf_node_t* | 子节点对象。

conf_node_set_value 函数

  • 函数功能：

设置节点的值。

  • 函数原型：
ret_t conf_node_set_value (conf_node_t* node, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
node | conf_node_t* | 节点对象。
v | const value_t* | 值。

next 属性

下一个兄弟节点。

  • 类型：conf_node_t*

node_type 属性

节点类型。

  • 类型：uint8_t

parent 属性

父节点。

  • 类型：conf_node_t*

value_type 属性

值的类型。

  • 类型：uint8_t


conf_node_type_t

概述

节点类型。

常量

名称 | 说明
CONF_NODE_NONE | 无效节点。
CONF_NODE_OBJECT | 对象节点。
CONF_NODE_ARRAY | 数组节点。
CONF_NODE_SIMPLE | 简单节点。


conf_node_value_t

概述

节点值的类型。

常量

名称 | 说明
CONF_NODE_VALUE_NONE | 无效类型。
CONF_NODE_VALUE_BOOL | bool_t类型。
CONF_NODE_VALUE_INT8 | int8_t类型。
CONF_NODE_VALUE_UINT8 | uint8_t类型。
CONF_NODE_VALUE_INT16 | int16_t类型。
CONF_NODE_VALUE_UINT16 | uint16_t类型。
CONF_NODE_VALUE_INT32 | int32_t类型。
CONF_NODE_VALUE_UINT32 | uint32_t类型。
CONF_NODE_VALUE_INT64 | int64_t类型。
CONF_NODE_VALUE_UINT64 | uint64_t类型。
CONF_NODE_VALUE_FLOAT32 | float类型。
CONF_NODE_VALUE_DOUBLE | double类型。
CONF_NODE_VALUE_STRING | 字符串类型。
CONF_NODE_VALUE_WSTRING | 宽字符串类型。
CONF_NODE_VALUE_SMALL_STR | 短字符(len<=7)串类型。
CONF_NODE_VALUE_NODE | 节点类型。


conf_obj_t

概述

conf对象。

函数

函数名称 | 说明
conf_obj_create |
conf_obj_create_ex |
conf_obj_create_sub_object | 根据路径创建一个子对象。
conf_obj_get_doc | 获取doc对象，用于更高级的操作。
conf_obj_save | 保存文档。
conf_obj_set_readonly | 设置为只读模式。

conf_obj_create 函数

  • 函数功能：

  • 函数原型：
tk_object_t* conf_obj_create (conf_doc_save_t save, conf_doc_load_t load, const char* url, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
save | conf_doc_save_t | 保存函数。
load | conf_doc_load_t | 加载函数。
url | const char* | 路径。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_obj_create_ex 函数

  • 函数功能：

  • 函数原型：
tk_object_t* conf_obj_create_ex (conf_doc_save_t save, conf_doc_load_t load, const char* url, bool_t create_if_not_exist, bool_t use_extend_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
save | conf_doc_save_t | 保存函数。
load | conf_doc_load_t | 加载函数。
url | const char* | 路径。
create_if_not_exist | bool_t | 如果不存在是否创建。
use_extend_type | bool_t | 是否使用拓展类型。

conf_obj_create_sub_object 函数

  • 函数功能：

根据路径创建一个子对象。

  • 函数原型：
tk_object_t* conf_obj_create_sub_object (tk_object_t* conf, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
conf | tk_object_t* | 配置对象。
path | const char* | 路径。

conf_obj_get_doc 函数

  • 函数功能：

获取doc对象，用于更高级的操作。

  • 函数原型：
conf_doc_t* conf_obj_get_doc (tk_object_t* conf);
  • 参数说明：
参数 | 类型 | 说明
返回值 | conf_doc_t* | 返回doc对象。
conf | tk_object_t* | conf对象。

conf_obj_save 函数

  • 函数功能：

保存文档。

  • 函数原型：
ret_t conf_obj_save (tk_object_t* conf);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
conf | tk_object_t* | conf对象。

conf_obj_set_readonly 函数

  • 函数功能：

设置为只读模式。

  • 函数原型：
ret_t conf_obj_set_readonly (tk_object_t* conf, bool_t readonly);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
conf | tk_object_t* | conf对象。
readonly | bool_t | 只读模式。


conf_ubjson_t

概述

conf json对象。

示例

char filename[MAX_PATH + 1] = {0};
path_prepend_temp_path(filename, "test.ubjson");

const char *ubjson_data1 = "{"
"\"root\":{"
"\"name\":\"awplc\","
"\"age\":18,"
"\"weight\":60.5"
"}"
"}";

// 将JSON保存为UBJSON
tk_object_t *json = conf_json_load_from_buff(ubjson_data1, strlen(ubjson_data1), FALSE);
ENSURE(conf_ubjson_save_as(json, filename) == RET_OK);
ENSURE(file_exist(filename) == TRUE);

// 从文件加载
tk_object_t *ubjson = conf_ubjson_load(filename, FALSE);

// 获取数据。
ENSURE(tk_str_eq(tk_object_get_prop_str(ubjson, "root.name"), "awplc"));
ENSURE(tk_object_get_prop_int(ubjson, "root.age", 0) == 18);
ENSURE(tk_object_get_prop_double(ubjson, "root.weight", 0) == 60.5);

// 设置数据
ENSURE(tk_object_set_prop_int(ubjson, "root.age", 20) == RET_OK);
ENSURE(tk_object_get_prop_int(ubjson, "root.age", 0) == 20);

// 保存到文件
ENSURE(conf_ubjson_save_as(ubjson, filename) == RET_OK);
ENSURE(file_exist(filename) == TRUE);

// 销毁对象
TK_OBJECT_UNREF(ubjson);

函数

函数名称 | 说明
conf_ubjson_create | 创建一个空的conf对象。
conf_ubjson_load | 从指定URL加载UBJSON对象。
conf_ubjson_load_from_buff | 从内存加载UBJSON对象。
conf_ubjson_save_as | 将doc对象保存到指定URL。
conf_ubjson_save_to_buff | 将obj保存为UBJSON格式到内存。

conf_ubjson_create 函数

  • 函数功能：

创建一个空的conf对象。

  • 函数原型：
tk_object_t* conf_ubjson_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。

conf_ubjson_load 函数

  • 函数功能：

从指定URL加载UBJSON对象。

  • 函数原型：
tk_object_t* conf_ubjson_load (const char* url, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
url | const char* | 路径(通常是文件路径)。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_ubjson_load_from_buff 函数

  • 函数功能：

从内存加载UBJSON对象。

  • 函数原型：
tk_object_t* conf_ubjson_load_from_buff (const void* buff, uint32_t size, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
buff | const void* | 数据。
size | uint32_t | 数据长度。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_ubjson_save_as 函数

  • 函数功能：

将doc对象保存到指定URL。

  • 函数原型：
ret_t conf_ubjson_save_as (tk_object_t* obj, const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
url | const char* | 保存的位置。

conf_ubjson_save_to_buff 函数

  • 函数功能：

将obj保存为UBJSON格式到内存。

  • 函数原型：
ret_t conf_ubjson_save_to_buff (tk_object_t* obj, wbuffer_t* wb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
wb | wbuffer_t* | 返回结果(不要初始化，使用完成后要调用wbuffer_deinit)。


conf_xml_t

概述

conf xml对象。

示例

char filename[MAX_PATH + 1] = {0};
path_prepend_temp_path(filename, "test.xml");

const char *xml_data1 = "<root><name>awplc</name><age>18</age><weight>60.5</weight></root>";
ENSURE(file_write(filename, xml_data1, strlen(xml_data1)) == RET_OK);

// 从文件加载
tk_object_t *xml = conf_xml_load(filename, FALSE);

// 获取数据。注意：从文本节点获取数据，需要加上@text
ENSURE(tk_str_eq(tk_object_get_prop_str(xml, "root.name.@text"), "awplc"));
ENSURE(tk_object_get_prop_int(xml, "root.age.@text", 0) == 18);
ENSURE(tk_object_get_prop_double(xml, "root.weight.@text", 0) == 60.5);

// 销毁对象
TK_OBJECT_UNREF(xml);

// 从内存加载
const char *xml_data2 = "<root name=\"awplc\" age=\"18\" weight=\"60.5\"></root>";
xml = conf_xml_load_from_buff(xml_data2, strlen(xml_data2), FALSE);

// 获取数据
ENSURE(tk_str_eq(tk_object_get_prop_str(xml, "root.name"), "awplc"));
ENSURE(tk_object_get_prop_int(xml, "root.age", 0) == 18);
ENSURE(tk_object_get_prop_double(xml, "root.weight", 0) == 60.5);

// 设置数据
ENSURE(tk_object_set_prop_int(xml, "root.age", 20) == RET_OK);
ENSURE(tk_object_get_prop_int(xml, "root.age", 0) == 20);

// 保存到文件
ENSURE(conf_xml_save_as(xml, filename) == RET_OK);
ENSURE(file_exist(filename) == TRUE);

// 销毁对象
TK_OBJECT_UNREF(xml);

函数

函数名称 | 说明
conf_xml_create | 创建一个空的conf对象。
conf_xml_load | 从指定URL加载XML对象。
conf_xml_load_from_buff | 从内存加载XML对象。
conf_xml_save_as | 将doc对象保存到指定URL。
conf_xml_save_to_buff | 将obj保存为XML格式到内存。

conf_xml_create 函数

  • 函数功能：

创建一个空的conf对象。

  • 函数原型：
tk_object_t* conf_xml_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。

conf_xml_load 函数

  • 函数功能：

从指定URL加载XML对象。

  • 函数原型：
tk_object_t* conf_xml_load (const char* url, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
url | const char* | 路径(通常是文件路径)。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_xml_load_from_buff 函数

  • 函数功能：

从内存加载XML对象。

  • 函数原型：
tk_object_t* conf_xml_load_from_buff (const void* buff, uint32_t size, bool_t create_if_not_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
buff | const void* | 数据。
size | uint32_t | 数据长度。
create_if_not_exist | bool_t | 如果不存在是否创建。

conf_xml_save_as 函数

  • 函数功能：

将doc对象保存到指定URL。

  • 函数原型：
ret_t conf_xml_save_as (tk_object_t* obj, const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
url | const char* | 保存的位置。

conf_xml_save_to_buff 函数

  • 函数功能：

将obj保存为XML格式到内存。

  • 函数原型：
ret_t conf_xml_save_to_buff (tk_object_t* obj, wbuffer_t* wb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
wb | wbuffer_t* | 返回结果(不要初始化，使用完成后要调用wbuffer_deinit)。


crc_t

概述

crc相关函数。

函数

函数名称 | 说明
tk_chksum | 计算检验和。
tk_chksum_byte | 计算单子节的检验和。
tk_crc16 | 计算crc16。
tk_crc16_byte | 计算单子节的crc16。
tk_crc16_modbus | 计算crc16(MODBUS)。
tk_crc32 | 计算crc32。
tk_crc32_byte | 计算单子节的crc32。
tk_crc32_file | 计算文件的crc32哈希值。

tk_chksum 函数

  • 函数功能：

计算检验和。

  • 函数原型：
uint16_t tk_chksum (uint16_t sum, const uint8_t* data, int size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回计算结果。
sum | uint16_t | 初始值(一般用INITCHECKSUM)
data | const uint8_t* | 数据。
size | int | 数据长度。

tk_chksum_byte 函数

  • 函数功能：

计算单子节的检验和。

  • 函数原型：
uint16_t tk_chksum_byte (uint16_t sum, uint8_t data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回计算结果。
sum | uint16_t | 初始值(一般用0，或者之前的值)
data | uint8_t | 数据。

tk_crc16 函数

  • 函数功能：

计算crc16。

  • 函数原型：
uint16_t tk_crc16 (uint16_t crc, const uint8_t* data, int size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回计算结果。
crc | uint16_t | 初始值(一般用PPPINITFCS16)
data | const uint8_t* | 数据。
size | int | 数据长度。

tk_crc16_byte 函数

  • 函数功能：

计算单子节的crc16。

  • 函数原型：
uint16_t tk_crc16_byte (uint16_t crc, uint8_t data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回计算结果。
crc | uint16_t | 初始值(一般用PPPINITFCS16，或者之前的值)
data | uint8_t | 数据。

tk_crc16_modbus 函数

  • 函数功能：

计算crc16(MODBUS)。

  • 函数原型：
uint16_t tk_crc16_modbus (const uint8_t* data, int size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回计算结果。
data | const uint8_t* | 数据。
size | int | 数据长度。

tk_crc32 函数

  • 函数功能：

计算crc32。

  • 函数原型：
uint32_t tk_crc32 (uint32_t crc, const uint8_t* data, int size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回计算结果。
crc | uint32_t | 初始值(一般用PPPINITFCS32)
data | const uint8_t* | 数据。
size | int | 数据长度。

tk_crc32_byte 函数

  • 函数功能：

计算单子节的crc32。

  • 函数原型：
uint32_t tk_crc32_byte (uint32_t crc, uint8_t data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回计算结果。
crc | uint32_t | 初始值(一般用PPPINITFCS32，或者之前的值)
data | uint8_t | 数据。

tk_crc32_file 函数

  • 函数功能：

计算文件的crc32哈希值。

  • 函数原型：
uint32_t tk_crc32_file (const char* filename, uint32_t block_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回计算结果。
filename | const char* | 文件名。
block_size | uint32_t | 数据块长度。


csv_file_object_t

概述

将cvs file包装成object对象。

示例

char filename[MAX_PATH + 1] = {0};
path_prepend_temp_path(filename, "test.csv");

const char *csv_data1 = "name,age,weight\n"
"awplc,18,60.5\n";
ENSURE(file_write(filename, csv_data1, strlen(csv_data1)) == RET_OK);

// 从文件加载
tk_object_t *csv = csv_file_object_load(filename, ',');

// 获取数据: 通过属性名
ENSURE(tk_str_eq(tk_object_get_prop_str(csv, "[1].name"), "awplc"));
ENSURE(tk_object_get_prop_int(csv, "[1].age", 0) == 18);
ENSURE(tk_object_get_prop_double(csv, "[1].weight", 0) == 60.5);

// 获取数据: 通过属性索引
ENSURE(tk_str_eq(tk_object_get_prop_str(csv, "[1].0"), "awplc"));
ENSURE(tk_object_get_prop_int(csv, "[1].1", 0) == 18);
ENSURE(tk_object_get_prop_double(csv, "[1].2", 0) == 60.5);

// 销毁对象
TK_OBJECT_UNREF(csv);

// 从内存加载
csv = csv_file_object_load_from_buff(csv_data1, strlen(csv_data1), ',');

// 获取数据: 通过属性名
ENSURE(tk_str_eq(tk_object_get_prop_str(csv, "[1].name"), "awplc"));
ENSURE(tk_object_get_prop_int(csv, "[1].age", 0) == 18);
ENSURE(tk_object_get_prop_double(csv, "[1].weight", 0) == 60.5);

// 获取数据: 通过属性索引
ENSURE(tk_str_eq(tk_object_get_prop_str(csv, "[1].0"), "awplc"));
ENSURE(tk_object_get_prop_int(csv, "[1].1", 0) == 18);
ENSURE(tk_object_get_prop_double(csv, "[1].2", 0) == 60.5);

// 设置数据
ENSURE(tk_object_set_prop_int(csv, "[1].age", 20) == RET_OK);
ENSURE(tk_object_get_prop_int(csv, "[1].age", 0) == 20);

// 保存到文件
ENSURE(csv_file_object_save_as(csv, filename) == RET_OK);
ENSURE(file_exist(filename) == TRUE);

// 销毁对象
TK_OBJECT_UNREF(csv);

函数

函数名称 | 说明
csv_file_object_create | 将csv_file对象包装成object。
csv_file_object_get_csv | 获取csv对象。
csv_file_object_load | 从指定文件加载CSV对象。
csv_file_object_load_from_buff | 从内存加载CSV对象。
csv_file_object_save_as | 将doc对象保存到指定文件。
csv_file_object_save_to_buff | 将obj保存为CSV格式到内存。

csv_file_object_create 函数

  • 函数功能：

将csv_file对象包装成object。

  • 函数原型：
tk_object_t* csv_file_object_create (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回对象。
csv | csv_file_t* | csv对象(由object释放)。

csv_file_object_get_csv 函数

  • 函数功能：

获取csv对象。

  • 函数原型：
csv_file_t* csv_file_object_get_csv (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | csv_file_t* | 返回csv对象。
obj | tk_object_t* | obj对象。

csv_file_object_load 函数

  • 函数功能：

从指定文件加载CSV对象。

  • 函数原型：
tk_object_t* csv_file_object_load (const char* filename, char sep);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
filename | const char* | 文件名。
sep | char | 分隔符。

csv_file_object_load_from_buff 函数

  • 函数功能：

从内存加载CSV对象。

  • 函数原型：
tk_object_t* csv_file_object_load_from_buff (const void* buff, uint32_t size, char sep);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回配置对象。
buff | const void* | 数据。
size | uint32_t | 数据长度。
sep | char | 分隔符。

csv_file_object_save_as 函数

  • 函数功能：

将doc对象保存到指定文件。

  • 函数原型：
ret_t csv_file_object_save_as (tk_object_t* obj, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
filename | const char* | 文件名。

csv_file_object_save_to_buff 函数

  • 函数功能：

将obj保存为CSV格式到内存。

  • 函数原型：
ret_t csv_file_object_save_to_buff (tk_object_t* obj, wbuffer_t* wb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败
obj | tk_object_t* | doc对象。
wb | wbuffer_t* | 返回结果(不要初始化，使用完成后要调用wbuffer_deinit)。


csv_file_t

概述

操作CSV文件。

函数

函数名称 | 说明
csv_file_append_row | 追加一行。
csv_file_clear | 保存。
csv_file_create | 根据文件创建csv对象。
csv_file_create_empty | 创建空的csv对象。
csv_file_create_with_buff | 根据buff创建csv对象。
csv_file_destroy | 销毁csv对象。
csv_file_get | 获取指定行列的数据。
csv_file_get_checked_rows | 获取checked行数(包括标题)。
csv_file_get_cols | 获取列数。
csv_file_get_rows | 获取行数(包括标题)。
csv_file_get_title | 获取标题(不存在则返回NULL)。
csv_file_insert_row | 插入一行。
csv_file_is_row_checked | 判断指定行是否勾选。
csv_file_load_buff | 从内存加载csv。
csv_file_load_file | 从文件加载csv。
csv_file_load_file | 保存。
csv_file_reload | 丢弃内存中的修改，重新加载当前文件。
csv_file_remove_checked_rows | 删除全部勾选的行。
csv_file_remove_row | 删除指定行。
csv_file_save | 保存。
csv_file_save_to_buff | 保存。
csv_file_set | 修改指定行列的数据。
csv_file_set_filter | 设置过滤函数。
csv_file_set_row_checked | 勾选指定行。

属性

属性名称 | 类型 | 说明
has_title | bool_t | 是否有标题。

csv_file_append_row 函数

  • 函数功能：

追加一行。

  • 函数原型：
ret_t csv_file_append_row (csv_file_t* csv, const char* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
data | const char* | 数据。

csv_file_clear 函数

  • 函数功能：

保存。

  • 函数原型：
ret_t csv_file_clear (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。

csv_file_create 函数

  • 函数功能：

根据文件创建csv对象。

  • 函数原型：
csv_file_t* csv_file_create (const char* filename, char sep);
  • 参数说明：
参数 | 类型 | 说明
返回值 | csv_file_t* | 返回csv对象。
filename | const char* | 文件名。
sep | char | 分隔符。

csv_file_create_empty 函数

  • 函数功能：

创建空的csv对象。

  • 函数原型：
csv_file_t* csv_file_create_empty (char sep, csv_file_filter_t filter, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | csv_file_t* | 返回csv对象。
sep | char | 分隔符。
filter | csv_file_filter_t | 过滤函数。
ctx | void* | 过滤函数的上下文。

csv_file_create_with_buff 函数

  • 函数功能：

根据buff创建csv对象。

  • 函数原型：
csv_file_t* csv_file_create_with_buff (const char* buff, uint32_t size, char sep);
  • 参数说明：
参数 | 类型 | 说明
返回值 | csv_file_t* | 返回csv对象。
buff | const char* | 数据。
size | uint32_t | 数据长度。
sep | char | 分隔符。

csv_file_destroy 函数

  • 函数功能：

销毁csv对象。

  • 函数原型：
ret_t csv_file_destroy (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。

csv_file_get 函数

  • 函数功能：

获取指定行列的数据。

  • 函数原型：
const char* csv_file_get (csv_file_t* csv, uint32_t row, uint32_t col);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回数据。
csv | csv_file_t* | csv对象。
row | uint32_t | 行号。
col | uint32_t | 列号。

csv_file_get_checked_rows 函数

  • 函数功能：

获取checked行数(包括标题)。

  • 函数原型：
uint32_t csv_file_get_checked_rows (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回checked行数。
csv | csv_file_t* | csv对象。

csv_file_get_cols 函数

  • 函数功能：

获取列数。

  • 函数原型：
uint32_t csv_file_get_cols (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回列数。
csv | csv_file_t* | csv对象。

csv_file_get_rows 函数

  • 函数功能：

获取行数(包括标题)。

  • 函数原型：
uint32_t csv_file_get_rows (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回行数。
csv | csv_file_t* | csv对象。

csv_file_get_title 函数

  • 函数功能：

获取标题(不存在则返回NULL)。

  • 函数原型：
const char* csv_file_get_title (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回标题。
csv | csv_file_t* | csv对象。

csv_file_insert_row 函数

  • 函数功能：

插入一行。

  • 函数原型：
ret_t csv_file_insert_row (csv_file_t* csv, uint32_t row, const char* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
row | uint32_t | 行号。
data | const char* | 数据。

csv_file_is_row_checked 函数

  • 函数功能：

判断指定行是否勾选。

  • 函数原型：
bool_t csv_file_is_row_checked (csv_file_t* csv, uint32_t row);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示勾选，否则表示没勾选。
csv | csv_file_t* | csv对象。
row | uint32_t | 行号。

csv_file_load_buff 函数

  • 函数功能：

从内存加载csv。

  • 函数原型：
ret_t csv_file_load_buff (csv_file_t* csv, const char* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
buff | const char* | 数据。
size | uint32_t | 数据长度。

csv_file_load_file 函数

  • 函数功能：

从文件加载csv。

  • 函数原型：
ret_t csv_file_load_file (csv_file_t* csv, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
filename | const char* | 文件名。

csv_file_load_file 函数

  • 函数功能：

保存。

  • 函数原型：
ret_t csv_file_load_file (csv_file_t* csv, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
filename | const char* | 文件名。

csv_file_reload 函数

  • 函数功能：

丢弃内存中的修改，重新加载当前文件。

  • 函数原型：
ret_t csv_file_reload (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。

csv_file_remove_checked_rows 函数

  • 函数功能：

删除全部勾选的行。

  • 函数原型：
ret_t csv_file_remove_checked_rows (csv_file_t* csv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。

csv_file_remove_row 函数

  • 函数功能：

删除指定行。

  • 函数原型：
ret_t csv_file_remove_row (csv_file_t* csv, uint32_t row);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
row | uint32_t | 行号。

csv_file_save 函数

  • 函数功能：

保存。

  • 函数原型：
ret_t csv_file_save (csv_file_t* csv, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
filename | const char* | 文件名。

csv_file_save_to_buff 函数

  • 函数功能：

保存。

  • 函数原型：
ret_t csv_file_save_to_buff (csv_file_t* csv, wbuffer_t* buff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
buff | wbuffer_t* | 保存结果数据。

csv_file_set 函数

  • 函数功能：

修改指定行列的数据。

  • 函数原型：
ret_t csv_file_set (csv_file_t* csv, uint32_t row, uint32_t col, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
row | uint32_t | 行号。
col | uint32_t | 列号。
value | const char* | 值。

csv_file_set_filter 函数

  • 函数功能：

设置过滤函数。

  • 函数原型：
ret_t csv_file_set_filter (csv_file_t* csv, csv_file_filter_t filter, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
filter | csv_file_filter_t | 过滤函数。
ctx | void* | 过滤函数的上下文。

csv_file_set_row_checked 函数

  • 函数功能：

勾选指定行。

  • 函数原型：
ret_t csv_file_set_row_checked (csv_file_t* csv, uint32_t row, bool_t checked);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
csv | csv_file_t* | csv对象。
row | uint32_t | 行号。
checked | bool_t | 是否勾选。

has_title 属性

是否有标题。

  • 类型：bool_t


custom_props_t

概述

widget自定义属性集合。

函数

函数名称 | 说明
custom_props_create | 创建custom_props对象
custom_props_destroy | 销毁属性集合。
custom_props_get | 获取属性的值。
custom_props_set | 设置属性的值。

custom_props_create 函数

  • 函数功能：

创建custom_props对象

  • 函数原型：
custom_props_t* custom_props_create (uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | custom_props_t* | custom_props对象。
capacity | uint32_t | 初始容量。

custom_props_destroy 函数

  • 函数功能：

销毁属性集合。

  • 函数原型：
ret_t custom_props_destroy (custom_props_t props);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
props | custom_props_t | 属性集合对象。

custom_props_get 函数

  • 函数功能：

获取属性的值。

  • 函数原型：
ret_t custom_props_get (custom_props_t props, char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
props | custom_props_t | 属性集合对象。
name | char* | 属性的名称。
v | value_t* | 用于返回属性的值。

custom_props_set 函数

  • 函数功能：

设置属性的值。

  • 函数原型：
ret_t custom_props_set (custom_props_t props, char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
props | custom_props_t | 属性集合对象。
name | char* | 属性的名称。
v | value_t* | 属性的值。


custom_prop_t

概述

widget自定义属性。


darray_t

概述

动态数组，根据元素个数动态调整数组的容量。

用darray_init初始化时，用darray_deinit释放。如：

darray_t darray;
darray_init(&darray, 10, destroy, compare);
...
darray_deinit(&darray);

用darray_create创建时，用darray_destroy销毁。如：

darray_t* darray = darray_create(10, destroy, compare);
...
darray_destroy(darray);

函数

函数名称 | 说明
darray_bsearch | 二分查找(确保数组有序)。
darray_bsearch_index | 二分查找(确保数组有序)。
darray_clear | 清除全部元素。
darray_count | 返回满足条件元素的个数。
darray_create | 创建darray对象。
darray_deinit | 清除全部元素，并释放elms。
darray_destroy | 销毁darray对象。
darray_find | 查找第一个满足条件的元素。
darray_find_all | 查找全部满足条件的元素。
darray_find_ex | 查找第一个满足条件的元素。
darray_find_index | 查找第一个满足条件的元素，并返回位置。
darray_find_index_ex | 查找第一个满足条件的元素，并返回位置。
darray_foreach | 遍历元素。
darray_get | 获取指定序数的元素。
darray_head | 返回第一个元素。
darray_init | 初始化darray对象。
darray_insert | 插入一个元素。
darray_pop | 弹出最后一个元素。
darray_push | 在尾巴追加一个元素。
darray_push_unique | 如果不存在，在尾巴追加一个元素。
darray_remove | 删除第一个满足条件的元素。
darray_remove_all | 删除全部满足条件的元素。
darray_remove_ex | 删除第一个满足条件的元素。
darray_remove_index | 删除指定位置的元素。
darray_remove_range | 删除指定范围的元素。
darray_replace | 设置指定序数的元素(销毁旧的数据)。
darray_set | 设置指定序数的元素(不销毁旧的数据)。
darray_sort | 排序。
darray_sorted_insert | 插入一个元素到有序数组。
darray_tail | 返回最后一个元素。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 数组的容量大小。
compare | tk_compare_t | 元素比较函数。
destroy | tk_destroy_t | 元素销毁函数。
elms | void** | 数组中的元素。
size | uint32_t | 数组中元素的个数。

darray_bsearch 函数

  • 函数功能：

二分查找(确保数组有序)。

  • 函数原型：
void* darray_bsearch (darray_t* darray, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 如果找到，返回满足条件的对象，否则返回NULL。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

darray_bsearch_index 函数

  • 函数功能：

二分查找(确保数组有序)。

  • 函数原型：
int32_t darray_bsearch_index (darray_t* darray, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果找到，返回满足条件的对象的位置，否则返回-1。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

darray_clear 函数

  • 函数功能：

清除全部元素。

  • 函数原型：
ret_t darray_clear (darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。

darray_count 函数

  • 函数功能：

返回满足条件元素的个数。

  • 函数原型：
int32_t darray_count (darray_t* darray, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回元素个数。
darray | darray_t* | 单向链表对象。
ctx | void* | 比较函数的上下文。

darray_create 函数

  • 函数功能：

创建darray对象。

  • 函数原型：
darray_t* darray_create (uint32_t capacity, tk_destroy_t destroy, tk_compare_t compare);
  • 参数说明：
参数 | 类型 | 说明
返回值 | darray_t* | 数组对象。
capacity | uint32_t | 数组的初始容量。
destroy | tk_destroy_t | 元素销毁函数。
compare | tk_compare_t | 元素比较函数。

darray_deinit 函数

  • 函数功能：

清除全部元素，并释放elms。

  • 函数原型：
ret_t darray_deinit (darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。

darray_destroy 函数

  • 函数功能：

销毁darray对象。

  • 函数原型：
ret_t darray_destroy (darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。

darray_find 函数

  • 函数功能：

查找第一个满足条件的元素。

  • 函数原型：
void* darray_find (darray_t* darray, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 如果找到，返回满足条件的对象，否则返回NULL。
darray | darray_t* | 数组对象。
ctx | void* | 比较函数的上下文。

darray_find_all 函数

  • 函数功能：

查找全部满足条件的元素。

darray_t matched;
darray_init(&matched, 0, NULL, NULL);
darray_find_all(darray, mycmp, myctx, &matched);
...
darray_deinit(&matched);
  • 函数原型：
ret_t darray_find_all (darray_t* darray, tk_compare_t cmp, void* ctx, darray_t* matched);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。
matched | darray_t* | 返回满足条件的元素。

darray_find_ex 函数

  • 函数功能：

查找第一个满足条件的元素。

  • 函数原型：
void* darray_find_ex (darray_t* darray, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 如果找到，返回满足条件的对象，否则返回NULL。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

darray_find_index 函数

  • 函数功能：

查找第一个满足条件的元素，并返回位置。

  • 函数原型：
int32_t darray_find_index (darray_t* darray, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果找到，返回满足条件的对象的位置，否则返回-1。
darray | darray_t* | 数组对象。
ctx | void* | 比较函数的上下文。

darray_find_index_ex 函数

  • 函数功能：

查找第一个满足条件的元素，并返回位置。

  • 函数原型：
int32_t darray_find_index_ex (darray_t* darray, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果找到，返回满足条件的对象的位置，否则返回-1。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

darray_foreach 函数

  • 函数功能：

遍历元素。

  • 函数原型：
ret_t darray_foreach (darray_t* darray, tk_visit_t visit, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
visit | tk_visit_t | 遍历函数。
ctx | void* | 遍历函数的上下文。

darray_get 函数

  • 函数功能：

获取指定序数的元素。

  • 函数原型：
void* darray_get (darray_t* darray, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回满足条件的对象，否则返回NULL。
darray | darray_t* | 数组对象。
index | uint32_t | 序数。

darray_head 函数

  • 函数功能：

返回第一个元素。

  • 函数原型：
void* darray_head (darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
darray | darray_t* | 数组对象。

darray_init 函数

  • 函数功能：

初始化darray对象。

  • 函数原型：
darray_t* darray_init (darray_t* darray, uint32_t capacity, tk_destroy_t destroy, tk_compare_t compare);
  • 参数说明：
参数 | 类型 | 说明
返回值 | darray_t* | 数组对象。
darray | darray_t* | 数组对象。
capacity | uint32_t | 数组的初始容量。
destroy | tk_destroy_t | 元素销毁函数。
compare | tk_compare_t | 元素比较函数。

darray_insert 函数

  • 函数功能：

插入一个元素。

  • 函数原型：
ret_t darray_insert (darray_t* darray, uint32_t index, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
index | uint32_t | 位置序数。
data | void* | 待插入的元素。

darray_pop 函数

  • 函数功能：

弹出最后一个元素。

  • 函数原型：
void* darray_pop (darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
darray | darray_t* | 数组对象。

darray_push 函数

  • 函数功能：

在尾巴追加一个元素。

  • 函数原型：
ret_t darray_push (darray_t* darray, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
data | void* | 待追加的元素。

darray_push_unique 函数

  • 函数功能：

如果不存在，在尾巴追加一个元素。

  • 函数原型：
ret_t darray_push_unique (darray_t* darray, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
data | void* | 待追加的元素。

darray_remove 函数

  • 函数功能：

删除第一个满足条件的元素。

  • 函数原型：
ret_t darray_remove (darray_t* darray, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
ctx | void* | 比较函数的上下文。

darray_remove_all 函数

  • 函数功能：

删除全部满足条件的元素。

  • 函数原型：
ret_t darray_remove_all (darray_t* darray, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

darray_remove_ex 函数

  • 函数功能：

删除第一个满足条件的元素。

  • 函数原型：
ret_t darray_remove_ex (darray_t* darray, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

darray_remove_index 函数

  • 函数功能：

删除指定位置的元素。

  • 函数原型：
ret_t darray_remove_index (darray_t* darray, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
index | uint32_t | 位置序数。

darray_remove_range 函数

  • 函数功能：

删除指定范围的元素。 删除范围为[start, end)

  • 函数原型：
ret_t darray_remove_range (darray_t* darray, uint32_t start, uint32_t end);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
start | uint32_t | 起始位置。
end | uint32_t | 结束位置。

darray_replace 函数

  • 函数功能：

设置指定序数的元素(销毁旧的数据)。

  • 函数原型：
ret_t darray_replace (darray_t* darray, uint32_t index, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
index | uint32_t | 序数。
data | void* | 数据。

darray_set 函数

  • 函数功能：

设置指定序数的元素(不销毁旧的数据)。

  • 函数原型：
ret_t darray_set (darray_t* darray, uint32_t index, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
index | uint32_t | 序数。
data | void* | 数据。

darray_sort 函数

  • 函数功能：

排序。

  • 函数原型：
ret_t darray_sort (darray_t* darray, tk_compare_t cmp);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。

darray_sorted_insert 函数

  • 函数功能：

插入一个元素到有序数组。

  • 函数原型：
ret_t darray_sorted_insert (darray_t* darray, void* data, tk_compare_t cmp, bool_t replace_if_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
darray | darray_t* | 数组对象。
data | void* | 待插入的元素。
cmp | tk_compare_t | 元素比较函数。
replace_if_exist | bool_t | 如果存在是否替换。

darray_tail 函数

  • 函数功能：

返回最后一个元素。

  • 函数原型：
void* darray_tail (darray_t* darray);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
darray | darray_t* | 数组对象。

capacity 属性

数组的容量大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

compare 属性

元素比较函数。

  • 类型：tk_compare_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

destroy 属性

元素销毁函数。

  • 类型：tk_destroy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

elms 属性

数组中的元素。

  • 类型：void**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

数组中元素的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


data_discard_policy_t

概述

缓存不够时丢弃数据的策略。

常量

名称 | 说明
DATA_DISCARD_OLD | 丢弃旧的数据。
DATA_DISCARD_NEW | 丢弃新的数据。


data_reader_asset_t

概述

基于资源实现的 data_reader。通过 data_reader_factory 创建 reader 时，URL的格式如下(请用函数data_reader_asset_build_url生成)：

asset://type/name

函数

函数名称 | 说明
data_reader_asset_build_url | 构造内存URL。
data_reader_asset_create | 创建基于asset的data reader。

data_reader_asset_build_url 函数

  • 函数功能：

构造内存URL。

  • 函数原型：
const char* data_reader_asset_build_url (const char* name, asset_type_t type, char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回URL。
name | const char* | 资源的名称。
type | asset_type_t | 资源的类型。
url | char* | 生成的URL。

data_reader_asset_create 函数

  • 函数功能：

创建基于asset的data reader。

不要直接调用，而是注册到 data_reader_factory后，通过data_reader_factory调用。

  • 函数原型：
data_reader_t* data_reader_asset_create (const char* assetname);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_reader_t* | 返回data reader对象。
assetname | const char* | 资源的名称。


data_reader_factory_t

概述

data reader工厂。

函数

函数名称 | 说明
data_reader_factory | 获取缺省的data reader工厂对象。
data_reader_factory_create | 创建data reader工厂对象。
data_reader_factory_create_reader | 创建指定类型的data reader对象。
data_reader_factory_destroy | 析构并释放data reader工厂对象。
data_reader_factory_register | 注册data reader创建函数。
data_reader_factory_set | 设置缺省的data reader工厂对象。

data_reader_factory 函数

  • 函数功能：

获取缺省的data reader工厂对象。

  • 函数原型：
data_reader_factory_t* data_reader_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_reader_factory_t* | 返回data reader工厂对象。

data_reader_factory_create 函数

  • 函数功能：

创建data reader工厂对象。

  • 函数原型：
data_reader_factory_t* data_reader_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_reader_factory_t* | 返回data reader工厂对象。

data_reader_factory_create_reader 函数

  • 函数功能：

创建指定类型的data reader对象。

  • 函数原型：
data_reader_t* data_reader_factory_create_reader (data_reader_factory_t* factory, const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_reader_t* | 返回data reader对象。
factory | data_reader_factory_t* | data reader工厂对象。
url | const char* | URL。

data_reader_factory_destroy 函数

  • 函数功能：

析构并释放data reader工厂对象。

  • 函数原型：
ret_t data_reader_factory_destroy (data_reader_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | data_reader_factory_t* | data reader工厂对象。

data_reader_factory_register 函数

  • 函数功能：

注册data reader创建函数。

  • 函数原型：
ret_t data_reader_factory_register (data_reader_factory_t* factory, const char* protocol, data_reader_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | data_reader_factory_t* | reader工厂对象。
protocol | const char* | 协议(如file)。
create | data_reader_create_t | data reader创建函数。

data_reader_factory_set 函数

  • 函数功能：

设置缺省的data reader工厂对象。

  • 函数原型：
ret_t data_reader_factory_set (data_reader_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | data_reader_factory_t* | data reader工厂对象。


data_reader_file_t

概述

基于文件实现的 data_reader。通过 data_reader_factory 创建 reader 时，URL的格式如下(请用函数data_reader_file_build_url生成)：

file://filename

函数

函数名称 | 说明
data_reader_file_create | 创建基于文件的data reader。

data_reader_file_create 函数

  • 函数功能：

创建基于文件的data reader。 不要直接调用，而是注册到 data_reader_factory后，通过data_reader_factory调用。

  • 函数原型：
data_reader_t* data_reader_file_create (const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_reader_t* | 返回data reader对象。
filename | const char* | 文件名。


data_reader_mem_t

概述

基于内存实现的 data_reader。通过 data_reader_factory 创建 reader 时，URL的格式如下(请用函数data_reader_mem_build_url生成)：

mem://addr:size

函数

函数名称 | 说明
data_reader_mem_build_url | 构造内存URL。
data_reader_mem_create | 创建基于内存的 data reader。

data_reader_mem_build_url 函数

  • 函数功能：

构造内存URL。

  • 函数原型：
const char* data_reader_mem_build_url (const void* buffer, uint32_t size, char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回URL。
buffer | const void* | 内存的地址。
size | uint32_t | 内存的长度。
url | char* | 生成的URL。

data_reader_mem_create 函数

  • 函数功能：

创建基于内存的 data reader。

不要直接调用，而是注册到 data_reader_factory后，通过data_reader_factory调用。

  • 函数原型：
data_reader_t* data_reader_mem_create (const char* memname);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_reader_t* | 返回data reader对象。
memname | const char* | 内存地址和大小的字符串格式表示 。


data_reader_t

概述

数据读取接口。

>对可读的媒介，如内存、文件、flash、资源和其它媒介提供一个统一的读取接口。

函数

函数名称 | 说明
data_reader_destroy | 销毁reader对象。
data_reader_get_size | 获取数据长度。
data_reader_read | 在指定位置读取数据。
data_reader_read_all | 从指定的URL读取全部数据。

data_reader_destroy 函数

  • 函数功能：

销毁reader对象。

  • 函数原型：
ret_t data_reader_destroy (data_reader_t* reader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
reader | data_reader_t* | reader对象。

data_reader_get_size 函数

  • 函数功能：

获取数据长度。

  • 函数原型：
uint64_t data_reader_get_size (data_reader_t* reader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回数据长度。
reader | data_reader_t* | reader对象。

data_reader_read 函数

  • 函数功能：

在指定位置读取数据。

  • 函数原型：
int32_t data_reader_read (data_reader_t* reader, uint64_t offset, void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取数据的长度。
reader | data_reader_t* | reader对象。
offset | uint64_t | 偏移量。
data | void* | 用于读取数据的缓冲区。
size | uint32_t | 最大读取数据长度。

data_reader_read_all 函数

  • 函数功能：

从指定的URL读取全部数据。

  • 函数原型：
void* data_reader_read_all (const char* url, uint32_t* size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回全部数据，调用者需要调用TKMEM_FREE释放返回值。
url | const char* | URL。
size | uint32_t* | 返回数据长度。


data_writer_factory_t

概述

data writer工厂。

函数

函数名称 | 说明
data_writer_factory | 获取缺省的data writer工厂对象。
data_writer_factory_create | 创建data writer工厂对象。
data_writer_factory_create_writer | 创建指定类型的data writer对象。
data_writer_factory_destroy | 析构并释放data writer工厂对象。
data_writer_factory_register | 注册data writer创建函数。
data_writer_factory_set | 设置缺省的data writer工厂对象。

data_writer_factory 函数

  • 函数功能：

获取缺省的data writer工厂对象。

  • 函数原型：
data_writer_factory_t* data_writer_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_writer_factory_t* | 返回data writer工厂对象。

data_writer_factory_create 函数

  • 函数功能：

创建data writer工厂对象。

  • 函数原型：
data_writer_factory_t* data_writer_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_writer_factory_t* | 返回data writer工厂对象。

data_writer_factory_create_writer 函数

  • 函数功能：

创建指定类型的data writer对象。

  • 函数原型：
data_writer_t* data_writer_factory_create_writer (data_writer_factory_t* factory, const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_writer_t* | 返回data writer对象。
factory | data_writer_factory_t* | data writer工厂对象。
url | const char* | URL。

data_writer_factory_destroy 函数

  • 函数功能：

析构并释放data writer工厂对象。

  • 函数原型：
ret_t data_writer_factory_destroy (data_writer_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | data_writer_factory_t* | data writer工厂对象。

data_writer_factory_register 函数

  • 函数功能：

注册data writer创建函数。

  • 函数原型：
ret_t data_writer_factory_register (data_writer_factory_t* factory, const char* protocol, data_writer_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | data_writer_factory_t* | writer工厂对象。
protocol | const char* | 协议(如file)。
create | data_writer_create_t | data writer创建函数。

data_writer_factory_set 函数

  • 函数功能：

设置缺省的data writer工厂对象。

  • 函数原型：
ret_t data_writer_factory_set (data_writer_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | data_writer_factory_t* | data writer工厂对象。


data_writer_file_t

概述

基于文件实现的 data_writer。通过 data_writer_factory 创建 writer 时，URL的格式如下：

file://filename

函数

函数名称 | 说明
data_writer_file_create | 创建基于文件的data writer。

data_writer_file_create 函数

  • 函数功能：

创建基于文件的data writer。

不要直接调用，而是注册到 data_writer_factory后，通过data_writer_factory调用

  • 函数原型：
data_writer_t* data_writer_file_create (const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_writer_t* | 返回data writer对象。
filename | const char* | 文件名。


data_writer_t

概述

数据写入接口。

>对可写的媒介，如内存、文件、flash和其它媒介提供一个统一的写入接口。

函数

函数名称 | 说明
data_writer_clear | 清除指定URL的数据。
data_writer_destroy | 销毁writer对象。
data_writer_flush | flush数据。
data_writer_truncate | 截去指定长度之后的数据。
data_writer_write | 在指定位置写入数据。
data_writer_write_all | 写入全部数据。

data_writer_clear 函数

  • 函数功能：

清除指定URL的数据。

  • 函数原型：
ret_t data_writer_clear (const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | const char* | URL。

data_writer_destroy 函数

  • 函数功能：

销毁writer对象。

  • 函数原型：
ret_t data_writer_destroy (data_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | data_writer_t* | writer对象。

data_writer_flush 函数

  • 函数功能：

flush数据。

  • 函数原型：
ret_t data_writer_flush (data_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | data_writer_t* | writer对象。

data_writer_truncate 函数

  • 函数功能：

截去指定长度之后的数据。

  • 函数原型：
ret_t data_writer_truncate (data_writer_t* writer, uint64_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | data_writer_t* | writer对象。
size | uint64_t | 保留长度。

data_writer_write 函数

  • 函数功能：

在指定位置写入数据。

  • 函数原型：
int32_t data_writer_write (data_writer_t* writer, uint64_t offset, const void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取数据的长度。
writer | data_writer_t* | writer对象。
offset | uint64_t | 偏移量。
data | const void* | 数据缓冲区。
size | uint32_t | 数据长度。

data_writer_write_all 函数

  • 函数功能：

写入全部数据。

  • 函数原型：
int32_t data_writer_write_all (const char* url, const void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际写入数据的长度。
url | const char* | URL。
data | const void* | 数据缓冲区。
size | uint32_t | 数据长度。


data_writer_wbuffer_t

概述

基于内存实现的 data_writer。通过 data_writer_factory 创建 writer 时，URL的格式如下(请用函数data_writer_wbuffer_build_url生成)：

wbuffer://addr

函数

函数名称 | 说明
data_writer_wbuffer_build_url | 构造wbuffer的URL。
data_writer_wbuffer_create | 创建基于wbuffer的data writer。

data_writer_wbuffer_build_url 函数

  • 函数功能：

构造wbuffer的URL。

  • 函数原型：
const char* data_writer_wbuffer_build_url (wbuffer_t* wbuffer, char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回URL。
wbuffer | wbuffer_t* | wbuffer对象。
url | char* | 生成的URL。

data_writer_wbuffer_create 函数

  • 函数功能：

创建基于wbuffer的data writer。

不要直接调用，而是注册到 data_writer_factory后，通过data_writer_factory调用

  • 函数原型：
data_writer_t* data_writer_wbuffer_create (const char* wbuffer_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | data_writer_t* | 返回data writer对象。
wbuffer_name | const char* | wbuffer地址的字符串格式表示 。


date_time_format_t

概述

格式化日期时间。

格式规则： * Y 代表年(完整显示) * M 代表月(1-12) * D 代表日(1-31) * h 代表时(0-23) * H 代表时(0-11) * m 代表分(0-59) * s 代表秒(0-59) * w 代表星期(0-6) * W 代表星期的英文缩写(支持翻译) * T 代表时段AM/PM(支持翻译) * YY 代表年(只显示末两位) * MM 代表月(01-12) * DD 代表日(01-31) * hh 代表时(00-23) * HH 代表时(00-11) * mm 代表分(00-59) * ss 代表秒(00-59) * MMM 代表月的英文缩写(支持翻译)

如 日期时间为：2018/11/12 9:10:20 * “Y/M/D”显示为”2018/11/12” * “Y-M-D”显示为”2018-11-12” * “Y-M-D h:m:s”显示为”2018-11-12 9:10:20” * “Y-M-D hh:mm:ss”显示为”2018-11-12 09:10:20”

函数

函数名称 | 说明
wstr_format_date_time | 格式化date_time。
wstr_format_time | 格式化time。

wstr_format_date_time 函数

  • 函数功能：

格式化date_time。

  • 函数原型：
ret_t wstr_format_date_time (wstr_t* str, const char* format, const date_time_t* dt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | 输出字符串。
format | const char* | 格式。
dt | const date_time_t* | 时间。

wstr_format_time 函数

  • 函数功能：

格式化time。

  • 函数原型：
ret_t wstr_format_time (wstr_t* str, const char* format, uint64_t time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | 输出字符串。
format | const char* | 格式。
time | uint64_t | 时间。


date_time_t

概述

日期时间。

> 在嵌入式平台中，在系统初始时，需要调用date_time_global_init设置实际获取/设置系统时间的函数。

函数

函数名称 | 说明
date_time_add_delta | 加上一个偏移量(s)。
date_time_create | 创建date_time对象，并初始为当前日期和时间(一般供脚本语言中使用)。
date_time_destroy | 销毁date_time对象(一般供脚本语言中使用)。
date_time_from_time | 从time转换而来(按GMT转换)。
date_time_get_days | 获取指定年份月份的天数。
date_time_get_month_name | 获取指定月份的英文名称(简写)。
date_time_get_wday | 获取指定日期是周几(0-6, Sunday = 0)。。
date_time_get_wday_name | 获取周几的英文名称(简写)。
date_time_global_init_ex | 时间日期全局初始化。
date_time_init | 初始为当前日期和时间。
date_time_is_leap | 是否是闰年。
date_time_set | 设置当前时间。
date_time_set_day | 设置日。
date_time_set_hour | 设置小时。
date_time_set_minute | 设置分钟。
date_time_set_month | 设置月。
date_time_set_second | 设置秒。
date_time_set_year | 设置年。
date_time_to_time | 转换成time(按GMT转换)。

属性

属性名称 | 类型 | 说明
day | int32_t | 日(1-31)。
hour | int32_t | 时(0 - 23)。
minute | int32_t | 分(0 - 59)。
month | int32_t | 月(1-12)。
second | int32_t | 秒(0 - 59)。
wday | int32_t | 星期几(0-6, Sunday = 0)。
year | int32_t | 年。

date_time_add_delta 函数

  • 函数功能：

加上一个偏移量(s)。

  • 函数原型：
ret_t date_time_add_delta (date_time_t* dt, int64_t delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
delta | int64_t | 偏移量(s)。

date_time_create 函数

  • 函数功能：

创建date_time对象，并初始为当前日期和时间(一般供脚本语言中使用)。

  • 函数原型：
date_time_t* date_time_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | date_time_t* | 返回date_time对象。

date_time_destroy 函数

  • 函数功能：

销毁date_time对象(一般供脚本语言中使用)。

  • 函数原型：
ret_t date_time_destroy (date_time_t* dt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。

date_time_from_time 函数

  • 函数功能：

从time转换而来(按GMT转换)。

  • 函数原型：
ret_t date_time_from_time (date_time_t* dt, int64_t time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
time | int64_t | 时间。

date_time_get_days 函数

  • 函数功能：

获取指定年份月份的天数。

  • 函数原型：
int32_t date_time_get_days (uint32_t year, uint32_t month);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回大于0表示天数，否则表示失败。
year | uint32_t | 年份。
month | uint32_t | 月份(1-12)。

date_time_get_month_name 函数

  • 函数功能：

获取指定月份的英文名称(简写)。

  • 函数原型：
const char* date_time_get_month_name (uint32_t month);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定月份的英文名称(简写)。
month | uint32_t | 月份(1-12)。

date_time_get_wday 函数

  • 函数功能：

获取指定日期是周几(0-6, Sunday = 0)。。

  • 函数原型：
int32_t date_time_get_wday (uint32_t year, uint32_t month, uint32_t day);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回大于等于0表示周几(0-6)，否则表示失败。
year | uint32_t | 年份。
month | uint32_t | 月份(1-12)。
day | uint32_t | 日(1-31)。

date_time_get_wday_name 函数

  • 函数功能：

获取周几的英文名称(简写)。

  • 函数原型：
const char* date_time_get_wday_name (uint32_t wday);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定周几的英文名称(简写)。
wday | uint32_t | 星期几(0-6, Sunday = 0)。

date_time_global_init_ex 函数

  • 函数功能：

时间日期全局初始化。

嵌入式平台需要提供并设置获取当前日期和时间的函数，否则相关的功能(如时钟控件)将无法正常工作。

  • 函数原型：
ret_t date_time_global_init_ex (const date_time_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vt | const date_time_vtable_t* | 日期和时间的相关函数的实现。

date_time_init 函数

  • 函数功能：

初始为当前日期和时间。

  • 函数原型：
date_time_t* date_time_init (date_time_t* dt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | date_time_t* | 返回date_time对象。
dt | date_time_t* | date_time对象。

date_time_is_leap 函数

  • 函数功能：

是否是闰年。

  • 函数原型：
bool_t date_time_is_leap (uint32_t year);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示否。
year | uint32_t | 年份。

date_time_set 函数

  • 函数功能：

设置当前时间。

  • 函数原型：
ret_t date_time_set (date_time_t* dt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。

date_time_set_day 函数

  • 函数功能：

设置日。

  • 函数原型：
ret_t date_time_set_day (date_time_t* dt, uint32_t day);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
day | uint32_t | 日。

date_time_set_hour 函数

  • 函数功能：

设置小时。

  • 函数原型：
ret_t date_time_set_hour (date_time_t* dt, uint32_t hour);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
hour | uint32_t | 小时。

date_time_set_minute 函数

  • 函数功能：

设置分钟。

  • 函数原型：
ret_t date_time_set_minute (date_time_t* dt, uint32_t minute);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
minute | uint32_t | 分钟。

date_time_set_month 函数

  • 函数功能：

设置月。

  • 函数原型：
ret_t date_time_set_month (date_time_t* dt, uint32_t month);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
month | uint32_t | 月。

date_time_set_second 函数

  • 函数功能：

设置秒。

  • 函数原型：
ret_t date_time_set_second (date_time_t* dt, uint32_t second);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
second | uint32_t | 秒。

date_time_set_year 函数

  • 函数功能：

设置年。

  • 函数原型：
ret_t date_time_set_year (date_time_t* dt, uint32_t year);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dt | date_time_t* | date_time对象。
year | uint32_t | 年。

date_time_to_time 函数

  • 函数功能：

转换成time(按GMT转换)。

  • 函数原型：
int64_t date_time_to_time (date_time_t* dt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回time。
dt | date_time_t* | date_time对象。

day 属性

日(1-31)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

hour 属性

时(0 - 23)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

minute 属性

分(0 - 59)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

month 属性

月(1-12)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

second 属性

秒(0 - 59)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

wday 属性

星期几(0-6, Sunday = 0)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

year 属性

年。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


debugger_breaked_event_t

概述

调试器中断运行的事件。

函数

函数名称 | 说明
debugger_breaked_event_cast | 把event对象转debugger_breaked_event_t对象。
debugger_breaked_event_init | 初始调试器中断运行的事件。

属性

属性名称 | 类型 | 说明
line | uint32_t | 中断运行的行号。

debugger_breaked_event_cast 函数

  • 函数功能：

把event对象转debugger_breaked_event_t对象。

  • 函数原型：
debugger_breaked_event_t* debugger_breaked_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_breaked_event_t* | 返回event对象。
event | event_t* | event对象。

debugger_breaked_event_init 函数

  • 函数功能：

初始调试器中断运行的事件。

  • 函数原型：
event_t* debugger_breaked_event_init (debugger_breaked_event_t* event, uint32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | debugger_breaked_event_t* | event对象。
line | uint32_t | 中断运行的行号。

line 属性

中断运行的行号。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_client_t

概述

调试器客户端。

函数

函数名称 | 说明
debugger_client_cast | 类型转换。
debugger_client_create | 创建调试器对象。
debugger_client_dispatch | 分发一个服务端推送的事件。
debugger_client_wait_for_completed | 等待完成事件。

属性

属性名称 | 类型 | 说明
io | tk_iostream_t* | 与服务器通信的stream对象。

debugger_client_cast 函数

  • 函数功能：

类型转换。

  • 函数原型：
debugger_client_t* debugger_client_cast (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_client_t* | 返回debugger对象。
debugger | debugger_t* | debugger对象。

debugger_client_create 函数

  • 函数功能：

创建调试器对象。

  • 函数原型：
debugger_t* debugger_client_create (tk_iostream_t* io);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回debugger对象。
io | tk_iostream_t* | io对象。

debugger_client_dispatch 函数

  • 函数功能：

分发一个服务端推送的事件。

  • 函数原型：
ret_t debugger_client_dispatch (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_client_wait_for_completed 函数

  • 函数功能：

等待完成事件。

  • 函数原型：
ret_t debugger_client_wait_for_completed (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

io 属性

与服务器通信的stream对象。

  • 类型：tk_iostream_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_client_tcp_t

概述

调试器TCP客户端。

函数

函数名称 | 说明
debugger_client_tcp_create | 创建调试器TCP客户端对象。

debugger_client_tcp_create 函数

  • 函数功能：

创建调试器TCP客户端对象。

  • 函数原型：
debugger_t* debugger_client_tcp_create (const char* host, uint32_t port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回debugger对象。
host | const char* | 目标主机。
port | uint32_t | 目标端口。


debugger_error_event_t

概述

程序错误事件。

函数

函数名称 | 说明
debugger_error_event_cast | 把event对象转debugger_error_event_t对象。
debugger_error_event_init | 初始程序错误的事件。

属性

属性名称 | 类型 | 说明
line | uint32_t | 出现错误的行号。
message | const char* | 错误消息。

debugger_error_event_cast 函数

  • 函数功能：

把event对象转debugger_error_event_t对象。

  • 函数原型：
debugger_error_event_t* debugger_error_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_error_event_t* | 返回event对象。
event | event_t* | event对象。

debugger_error_event_init 函数

  • 函数功能：

初始程序错误的事件。

  • 函数原型：
event_t* debugger_error_event_init (debugger_error_event_t* event, uint32_t line, const char* message);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | debugger_error_event_t* | event对象。
line | uint32_t | 出现错误的行号。
message | const char* | 错误信息。

line 属性

出现错误的行号。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

message 属性

错误消息。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_factory_t

概述

@annotaion [“fake”] 调试器工厂

函数

函数名称 | 说明
debugger_factory_attach_debugger | 创建调试器。
debugger_factory_deinit | 释放资源。
debugger_factory_init | 初始化工厂。
debugger_factory_launch_debugger | 创建调试器。
debugger_factory_reg | 注册创建函数。

debugger_factory_attach_debugger 函数

  • 函数功能：

创建调试器。

  • 函数原型：
debugger_t* debugger_factory_attach_debugger (const char* lang, const char* code_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回调试器对象。
lang | const char* | 语言类型。
code_id | const char* | 代码的ID。

debugger_factory_deinit 函数

  • 函数功能：

释放资源。

  • 函数原型：
ret_t debugger_factory_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

debugger_factory_init 函数

  • 函数功能：

初始化工厂。

  • 函数原型：
ret_t debugger_factory_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

debugger_factory_launch_debugger 函数

  • 函数功能：

创建调试器。

  • 函数原型：
debugger_t* debugger_factory_launch_debugger (const char* lang, const binary_data_t* code);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回调试器对象。
lang | const char* | 语言类型。
code | const binary_data_t* | 代码。

debugger_factory_reg 函数

  • 函数功能：

注册创建函数。

  • 函数原型：
ret_t debugger_factory_reg (const char* lang, debugger_fscript_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lang | const char* | 语言类型。
create | debugger_fscript_create_t | 创建函数。


debugger_frame_changed_event_t

概述

用户切换到调用堆栈指定的frame的事件。

函数

函数名称 | 说明
debugger_frame_changed_event_cast | 把event对象转debugger_frame_changed_event_t对象。
debugger_frame_changed_event_init | 初始化

属性

属性名称 | 类型 | 说明
func | const char* | 函数名。
line | uint32_t | 行号。

debugger_frame_changed_event_cast 函数

  • 函数功能：

把event对象转debugger_frame_changed_event_t对象。

  • 函数原型：
debugger_frame_changed_event_t* debugger_frame_changed_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_frame_changed_event_t* | 返回event对象。
event | event_t* | event对象。

debugger_frame_changed_event_init 函数

  • 函数功能：

初始化

  • 函数原型：
event_t* debugger_frame_changed_event_init (debugger_frame_changed_event_t* event, const char* func, uint32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | debugger_frame_changed_event_t* | event对象。
func | const char* | 函数名。
line | uint32_t | 行号。

func 属性

函数名。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

line 属性

行号。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_fscript_t

概述

fscript调试器

函数

函数名称 | 说明
debugger_fscript_cast | 类型转换。
debugger_fscript_create | 创建调试器对象。
debugger_fscript_get_start_line | 获取第一行被执行的代码的行号。
debugger_fscript_set_code | 设置代码。
debugger_fscript_set_fscript | 设置fscript对象。

debugger_fscript_cast 函数

  • 函数功能：

类型转换。

  • 函数原型：
debugger_fscript_t* debugger_fscript_cast (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_fscript_t* | 返回debugger对象。
debugger | debugger_t* | debugger对象。

debugger_fscript_create 函数

  • 函数功能：

创建调试器对象。

  • 函数原型：
debugger_t* debugger_fscript_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回debugger对象。

debugger_fscript_get_start_line 函数

  • 函数功能：

获取第一行被执行的代码的行号。

  • 函数原型：
int32_t debugger_fscript_get_start_line (fscript_t* fscript);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回行号。
fscript | fscript_t* | fscript对象。

debugger_fscript_set_code 函数

  • 函数功能：

设置代码。

  • 函数原型：
ret_t debugger_fscript_set_code (debugger_t* debugger, const binary_data_t* code, bool_t changed);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
code | const binary_data_t* | 代码。
changed | bool_t | 是否重新加载。

debugger_fscript_set_fscript 函数

  • 函数功能：

设置fscript对象。

  • 函数原型：
ret_t debugger_fscript_set_fscript (debugger_t* debugger, fscript_t* fscript);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
fscript | fscript_t* | 脚本对象。


debugger_global_t

概述

@annotaion [“fake”] 调试器全局函数。

函数

函数名称 | 说明
debugger_global_deinit | 禁用调试器。
debugger_global_init | 启用调试器。

debugger_global_deinit 函数

  • 函数功能：

禁用调试器。

  • 函数原型：
ret_t debugger_global_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

debugger_global_init 函数

  • 函数功能：

启用调试器。

  • 函数原型：
ret_t debugger_global_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


debugger_lldb_t

概述

调试器LLDB客户端(使用DAP协议与lldb-vscode连接)。

函数

函数名称 | 说明
debugger_lldb_create | 创建调试器TCP客户端对象。

debugger_lldb_create 函数

  • 函数功能：

创建调试器TCP客户端对象。

  • 函数原型：
debugger_t* debugger_lldb_create (const char* host, uint32_t port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回debugger对象。
host | const char* | 目标主机。
port | uint32_t | 目标端口。


debugger_log_event_t

概述

调试器打印日志的事件。

函数

函数名称 | 说明
debugger_log_event_cast | 把event对象转debugger_log_event_t对象。
debugger_log_event_init | 初始调试器打印日志的事件。

属性

属性名称 | 类型 | 说明
line | int32_t | 打印日志的行号(<0表示原生代码打印的日志)。
message | const char* | 日志消息。

debugger_log_event_cast 函数

  • 函数功能：

把event对象转debugger_log_event_t对象。

  • 函数原型：
debugger_log_event_t* debugger_log_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_log_event_t* | 返回event对象。
event | event_t* | event对象。

debugger_log_event_init 函数

  • 函数功能：

初始调试器打印日志的事件。

  • 函数原型：
event_t* debugger_log_event_init (debugger_log_event_t* event, uint32_t line, const char* message);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | debugger_log_event_t* | event对象。
line | uint32_t | 打印日志的行号。
message | const char* | 日志。

line 属性

打印日志的行号(<0表示原生代码打印的日志)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

message 属性

日志消息。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_program_state_t

概述

被调试程序的状态。

常量

名称 | 说明
DEBUGGER_PROGRAM_STATE_NONE | 初始状态。
DEBUGGER_PROGRAM_STATE_PAUSED | 停止状态(断点/异常等)。
DEBUGGER_PROGRAM_STATE_RUNNING | 运行状态(断点/异常等)。
DEBUGGER_PROGRAM_STATE_TERMINATED | 终止状态(断点/异常等)。


debugger_req_t

概述

调试器请求头。

属性

属性名称 | 类型 | 说明
code | uint32_t | 请求码。
data | uint32_t | 数据。
size | uint32_t | 数据长度(除请求头外)。
version | uint32_t | 版本号。

code 属性

请求码。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

data 属性

数据。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

数据长度(除请求头外)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

version 属性

版本号。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_req_type_t

概述

请求的消息类型。

常量

名称 | 说明
DEBUGGER_REQ_ATTACH | attach请求码。
DEBUGGER_REQ_STOP | 停止运行请求码。
DEBUGGER_REQ_PAUSE | 暂停运行请求码。
DEBUGGER_REQ_IS_PAUSED | 查询是否处于暂停状态请求码。
DEBUGGER_REQ_STEP_IN | 运行进入函数请求码。
DEBUGGER_REQ_STEP_OUT | 运行退出函数请求码。
DEBUGGER_REQ_STEP_OVER | 运行下一步请求码。
DEBUGGER_REQ_STEP_LOOP_OVER | 运行下一行请求码。（跳转循环）
DEBUGGER_REQ_CONTINUE | 运行到下一个断点请求码。
DEBUGGER_REQ_SET_BREAK_POINT | 设置断点请求码。
DEBUGGER_REQ_REMOVE_BREAK_POINT | 移除断点请求码。
DEBUGGER_REQ_CLEAR_BREAK_POINTS | 清除断点请求码。
DEBUGGER_REQ_GET_SELF | 获取self对象请求码。
DEBUGGER_REQ_GET_LOCAL | 获取局部变量和函数参数对象请求码。
DEBUGGER_REQ_GET_GLOBAL | 获取global对象请求码。
DEBUGGER_REQ_GET_CODE | 获取源代码请求码。
DEBUGGER_REQ_GET_DEBUGGERS | 获取调试器列表。
DEBUGGER_REQ_GET_BREAK_POINTS | 获取断点列表。
DEBUGGER_REQ_GET_CALLSTACK | 获取callstack请求码。
DEBUGGER_REQ_UPDATE_CODE | 更新源代码请求码。
DEBUGGER_REQ_LAUNCH | 执行代码请求码。
DEBUGGER_REQ_DEINIT | 断开调试器请求码。
DEBUGGER_REQ_RESTART | 重新运行运行请求码。


debugger_resp_t

概述

调试器响应头。

属性

属性名称 | 类型 | 说明
code | uint32_t | 响应码。
error | uint32_t | 错误码(定义同ret_t)。
size | uint32_t | 数据长度(除请求头外)。
version | uint32_t | 版本号。

code 属性

响应码。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

error 属性

错误码(定义同ret_t)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

数据长度(除请求头外)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

version 属性

版本号。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


debugger_resp_type_t

概述

响应/推送的消息类型。

常量

名称 | 说明
DEBUGGER_RESP_ATTACH | attach响应码。
DEBUGGER_RESP_STOP | 停止运行响应码。
DEBUGGER_RESP_IS_PAUSED | 查询是否处于暂停状态响应码。
DEBUGGER_RESP_PAUSE | 暂停运行响应码。
DEBUGGER_RESP_STEP_IN | 运行进入函数响应码。
DEBUGGER_RESP_STEP_OUT | 运行退出函数响应码。
DEBUGGER_RESP_STEP_OVER | 运行下一步响应码。
DEBUGGER_RESP_STEP_LOOP_OVER | 运行下一行响应码。（跳出循环）
DEBUGGER_RESP_CONTINUE | 运行到下一个断点响应码。
DEBUGGER_RESP_SET_BREAK_POINT | 设置断点响应码。
DEBUGGER_RESP_REMOVE_BREAK_POINT | 移除断点响应码。
DEBUGGER_RESP_CLEAR_BREAK_POINTS | 清除断点响应码。
DEBUGGER_RESP_GET_SELF | 获取self对象响应码。
DEBUGGER_RESP_GET_LOCAL | 获取局部变量和函数参数对象响应码。
DEBUGGER_RESP_GET_GLOBAL | 获取global对象响应码。
DEBUGGER_RESP_GET_CODE | 获取源代码响应码。
DEBUGGER_RESP_GET_DEBUGGERS | 获取调试器列表响应码。
DEBUGGER_RESP_GET_BREAK_POINTS | 获取断点列表响应码。
DEBUGGER_RESP_GET_CALLSTACK | 获取callstack响应码。
DEBUGGER_RESP_UPDATE_CODE | 更新源代码响应码。
DEBUGGER_RESP_LAUNCH | 执行代码响应码。
DEBUGGER_RESP_DEINIT | 断开调试器响应码。
DEBUGGER_RESP_MSG_LOG | 程序打印日志的响应码/事件码。
DEBUGGER_RESP_MSG_ERROR | 程序出现错误的响应码/事件码。
DEBUGGER_RESP_MSG_BREAKED | 程序中断的响应码/事件码。
DEBUGGER_RESP_MSG_FRAME_CHANGED | 用户切换调用堆栈的frame.
DEBUGGER_RESP_MSG_COMPLETED | 程序执行完成的响应码/事件码。


debugger_server_t

概述

@annotaion [“fake”] 调试器服务器。

函数

函数名称 | 说明
debugger_server_find_debugger | 查找调试器对象。
debugger_server_is_running | 判断服务是否在运行。
debugger_server_set_single_mode | 设置为单一debugger模式。
debugger_server_set_single_mode_ex | 设置为单一debugger模式。
debugger_server_start | 启用调试器服务。
debugger_server_stop | 停用调试器服务。
debugger_server_wait | 等待调试器服务退出。

debugger_server_find_debugger 函数

  • 函数功能：

查找调试器对象。

  • 函数原型：
debugger_t* debugger_server_find_debugger (const char* code_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_t* | 返回debugger对象或者NULL。
code_id | const char* | 代码ID。

debugger_server_is_running 函数

  • 函数功能：

判断服务是否在运行。

  • 函数原型：
bool_t debugger_server_is_running ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示在运行，否则表示没有运行。

debugger_server_set_single_mode 函数

  • 函数功能：

设置为单一debugger模式。

  • 函数原型：
ret_t debugger_server_set_single_mode (bool_t single_mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
single_mode | bool_t | 单一debugger模式

debugger_server_set_single_mode_ex 函数

  • 函数功能：

设置为单一debugger模式。

  • 函数原型：
ret_t debugger_server_set_single_mode_ex (bool_t single_mode, const char* lang, const char* code_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
single_mode | bool_t | 单一debugger模式
lang | const char* | 语言。
code_id | const char* | 代码ID。

debugger_server_start 函数

  • 函数功能：

启用调试器服务。

  • 函数原型：
ret_t debugger_server_start (tk_iostream_t* io);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
io | tk_iostream_t* | IO对象，用于和客户端通信。

debugger_server_stop 函数

  • 函数功能：

停用调试器服务。

  • 函数原型：
ret_t debugger_server_stop ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

debugger_server_wait 函数

  • 函数功能：

等待调试器服务退出。

  • 函数原型：
ret_t debugger_server_wait ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


debugger_server_tcp_t

概述

调试器TCP服务端。

函数

函数名称 | 说明
debugger_server_tcp_deinit | 停止调试器服务。
debugger_server_tcp_init | 初始化调试器服务。
debugger_server_tcp_is_inited | 检查是否已经初始化。
debugger_server_tcp_start | 启动调试器服务。
debugger_server_tcp_start_async | 启动调试器服务。

debugger_server_tcp_deinit 函数

  • 函数功能：

停止调试器服务。

  • 函数原型：
ret_t debugger_server_tcp_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

debugger_server_tcp_init 函数

  • 函数功能：

初始化调试器服务。

  • 函数原型：
ret_t debugger_server_tcp_init (uint32_t port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
port | uint32_t | 监听端口。

debugger_server_tcp_is_inited 函数

  • 函数功能：

检查是否已经初始化。

  • 函数原型：
bool_t debugger_server_tcp_is_inited ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示已经初始化，否则表示没有。

debugger_server_tcp_start 函数

  • 函数功能：

启动调试器服务。 接收客户端请求，并启动服务。

  • 函数原型：
ret_t debugger_server_tcp_start ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

debugger_server_tcp_start_async 函数

  • 函数功能：

启动调试器服务。 接收客户端请求，并启动服务。

  • 函数原型：
ret_t debugger_server_tcp_start_async ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


debugger_t

概述

调试器接口。

函数

函数名称 | 说明
debugger_attach | 附近到指定的代码片段。
debugger_clear_break_points | 清除全部断点。
debugger_continue | 执行到下一个断点。
debugger_deinit | 释放资源。
debugger_dispatch_messages | dispatch_messages(仅适用于客户端)
debugger_get_break_points | 获取断点列表。
debugger_get_callstack | 获取callstack。
debugger_get_code | 获取代码。
debugger_get_debuggers | 获取调试器列表。
debugger_get_global | 获取全局对象。
debugger_get_local | 获取局部变量对象。
debugger_get_self | 获取self对象。
debugger_get_state | 获取调试状态。
debugger_get_threads | 获取线程(仅用于调试原生程序，脚本不支持)。
debugger_get_var | 获取变量的详细信息。
debugger_is_paused | 查看当前是否处于暂停状态。
debugger_is_paused_or_running | 查看当前是否处于暂停运行状态。
debugger_is_running | 查看当前是否处于运行状态。
debugger_launch | 执行代码。
debugger_lock | 锁定debugger对象。
debugger_match | 检查code_id是否与当前debugger匹配。
debugger_pause | 暂停运行。
debugger_remove_break_point | 清除断点。
debugger_remove_break_point_ex | 清除断点。
debugger_restart | 重新运行。
debugger_set_break_point | 设置断点。
debugger_set_break_point_ex | 设置断点。
debugger_set_current_frame | 从callstack中选择当前的frame。
debugger_set_state | 设置状态。
debugger_step_in | 进入函数。
debugger_step_loop_over | 执行下一条语句(跳过循环)
debugger_step_out | 执行到函数结束。
debugger_step_over | 执行到下一行代码。（不进入函数）
debugger_stop | 终止程序运行。
debugger_unlock | 解锁debugger对象。
debugger_update_code | 更新代码。

debugger_attach 函数

  • 函数功能：

附近到指定的代码片段。

  • 函数原型：
ret_t debugger_attach (debugger_t* debugger, const char* lang, const char* code_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
lang | const char* | 代码的语言。
code_id | const char* | 代码的ID。

debugger_clear_break_points 函数

  • 函数功能：

清除全部断点。

  • 函数原型：
ret_t debugger_clear_break_points (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_continue 函数

  • 函数功能：

执行到下一个断点。 处于暂停状态才能执行本命令。

  • 函数原型：
ret_t debugger_continue (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_deinit 函数

  • 函数功能：

释放资源。

  • 函数原型：
ret_t debugger_deinit (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_dispatch_messages 函数

  • 函数功能：

dispatch_messages(仅适用于客户端)

  • 函数原型：
ret_t debugger_dispatch_messages (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_get_break_points 函数

  • 函数功能：

获取断点列表。

  • 函数原型：
ret_t debugger_get_break_points (debugger_t* debugger, binary_data_t* break_points);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
break_points | binary_data_t* | 断点列表(每行一个)。

debugger_get_callstack 函数

  • 函数功能：

获取callstack。

  • 函数原型：
ret_t debugger_get_callstack (debugger_t* debugger, binary_data_t* callstack);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
callstack | binary_data_t* | callstack。

debugger_get_code 函数

  • 函数功能：

获取代码。

  • 函数原型：
ret_t debugger_get_code (debugger_t* debugger, binary_data_t* code);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
code | binary_data_t* | 代码。

debugger_get_debuggers 函数

  • 函数功能：

获取调试器列表。

  • 函数原型：
ret_t debugger_get_debuggers (debugger_t* debugger, binary_data_t* debuggers);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
debuggers | binary_data_t* | 调试器列表(每行一个)。

debugger_get_global 函数

  • 函数功能：

获取全局对象。 处于暂停状态才能执行本命令。 返回数据结构请参考：https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Variables

  • 函数原型：
tk_object_t* debugger_get_global (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回全局对象。
debugger | debugger_t* | debugger对象。

debugger_get_local 函数

  • 函数功能：

获取局部变量对象。 返回数据结构请参考：https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Variables 处于暂停状态才能执行本命令。

  • 函数原型：
tk_object_t* debugger_get_local (debugger_t* debugger, uint32_t frame_index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回局部变量对象。
debugger | debugger_t* | debugger对象。
frame_index | uint32_t | frame序数(0开始)。

debugger_get_self 函数

  • 函数功能：

获取self对象。 返回数据结构请参考：https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Variables 处于暂停状态才能执行本命令。

  • 函数原型：
tk_object_t* debugger_get_self (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回self对象。
debugger | debugger_t* | debugger对象。

debugger_get_state 函数

  • 函数功能：

获取调试状态。

  • 函数原型：
debugger_program_state_t debugger_get_state (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | debugger_program_state_t | 返回调试状态。
debugger | debugger_t* | debugger对象。

debugger_get_threads 函数

  • 函数功能：

获取线程(仅用于调试原生程序，脚本不支持)。 返回数据结构请参考: https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Threads 处于暂停状态才能执行本命令。

  • 函数原型：
tk_object_t* debugger_get_threads (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回全局对象。
debugger | debugger_t* | debugger对象。

debugger_get_var 函数

  • 函数功能：

获取变量的详细信息。 返回数据结构请参考：https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Variables

处于暂停状态才能执行本命令。 可以为路径，如: * a.name 为结构a下的成员name。 * a.names[1].first为结构a下的成员names数组中第二个元素下的first成员。

  • 函数原型：
tk_object_t* debugger_get_var (debugger_t* debugger, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回全局对象。
debugger | debugger_t* | debugger对象。
path | const char* | 变量名或路径。为空或NULL时，返回全部变量。

debugger_is_paused 函数

  • 函数功能：

查看当前是否处于暂停状态。

  • 函数原型：
bool_t debugger_is_paused (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示处于暂停运行状态。
debugger | debugger_t* | debugger对象。

debugger_is_paused_or_running 函数

  • 函数功能：

查看当前是否处于暂停运行状态。

  • 函数原型：
bool_t debugger_is_paused_or_running (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示处于暂停运行状态。
debugger | debugger_t* | debugger对象。

debugger_is_running 函数

  • 函数功能：

查看当前是否处于运行状态。

  • 函数原型：
bool_t debugger_is_running (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示处于暂停运行状态。
debugger | debugger_t* | debugger对象。

debugger_launch 函数

  • 函数功能：

执行代码。

  • 函数原型：
ret_t debugger_launch (debugger_t* debugger, const char* lang, const binary_data_t* code);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
lang | const char* | 代码的语言。
code | const binary_data_t* | 代码。

debugger_lock 函数

  • 函数功能：

锁定debugger对象。

  • 函数原型：
ret_t debugger_lock (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_match 函数

  • 函数功能：

检查code_id是否与当前debugger匹配。

  • 函数原型：
bool_t debugger_match (debugger_t* debugger, const char* code_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示匹配到。
debugger | debugger_t* | debugger对象。
code_id | const char* | 代码ID。

debugger_pause 函数

  • 函数功能：

暂停运行。 暂停后才能执行next/step_xxx等函数。

  • 函数原型：
ret_t debugger_pause (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_remove_break_point 函数

  • 函数功能：

清除断点。

  • 函数原型：
ret_t debugger_remove_break_point (debugger_t* debugger, uint32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
line | uint32_t | 代码行号。

debugger_remove_break_point_ex 函数

  • 函数功能：

清除断点。

  • 函数原型：
ret_t debugger_remove_break_point_ex (debugger_t* debugger, const char* position);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
position | const char* | 位置(函数名或文件名:行号)。

debugger_restart 函数

  • 函数功能：

重新运行。

  • 函数原型：
ret_t debugger_restart (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_set_break_point 函数

  • 函数功能：

设置断点。

  • 函数原型：
ret_t debugger_set_break_point (debugger_t* debugger, uint32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
line | uint32_t | 代码行号。

debugger_set_break_point_ex 函数

  • 函数功能：

设置断点。

  • 函数原型：
ret_t debugger_set_break_point_ex (debugger_t* debugger, const char* position);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
position | const char* | 位置(函数名或文件名:行号)。

debugger_set_current_frame 函数

  • 函数功能：

从callstack中选择当前的frame。 处于暂停状态才能执行本命令。

  • 函数原型：
ret_t debugger_set_current_frame (debugger_t* debugger, uint32_t frame_index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
frame_index | uint32_t | frame序数(0表示当前)

debugger_set_state 函数

  • 函数功能：

设置状态。

  • 函数原型：
ret_t debugger_set_state (debugger_t* debugger, debugger_program_state_t state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
state | debugger_program_state_t | 状态。

debugger_step_in 函数

  • 函数功能：

进入函数。 处于暂停状态才能执行本命令。

  • 函数原型：
ret_t debugger_step_in (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_step_loop_over 函数

  • 函数功能：

执行下一条语句(跳过循环) 处于暂停状态才能执行本命令。

  • 函数原型：
ret_t debugger_step_loop_over (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_step_out 函数

  • 函数功能：

执行到函数结束。 处于暂停状态才能执行本命令。

  • 函数原型：
ret_t debugger_step_out (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_step_over 函数

  • 函数功能：

执行到下一行代码。（不进入函数） 处于暂停状态才能执行本命令。

  • 函数原型：
ret_t debugger_step_over (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_stop 函数

  • 函数功能：

终止程序运行。

  • 函数原型：
ret_t debugger_stop (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_unlock 函数

  • 函数功能：

解锁debugger对象。

  • 函数原型：
ret_t debugger_unlock (debugger_t* debugger);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。

debugger_update_code 函数

  • 函数功能：

更新代码。

  • 函数原型：
ret_t debugger_update_code (debugger_t* debugger, const binary_data_t* code);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
debugger | debugger_t* | debugger对象。
code | const binary_data_t* | 代码。


dialog_client_t

概述

对话框客户区控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

dialog_client_t是widget_t的子类控件，widget_t的函数均适用于dialog_client_t控件。

在xml中使用”dialog_client”标签创建dialog_client。如：

<dialog anim_hint="center_scale(duration=300)" x="c" y="m" w="80%" h="160" text="Dialog">
<dialog_title x="0" y="0" w="100%" h="30" text="Hello AWTK" />
<dialog_client x="0" y="bottom" w="100%" h="-30">
<label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
<button name="quit" x="10" y="bottom:10" w="40%" h="30" text="确定"/>
<button name="quit" x="right:10" y="bottom:10" w="40%" h="30" text="取消"/>
</dialog_client>
</dialog>

在c代码中，用dialog_create_simple创建对话框时，自动创建dialog客户区对象。

函数

函数名称 | 说明
dialog_client_cast | 转换为dialog_client对象(供脚本语言使用)。
dialog_client_create | 创建dialog客户区对象。
dialog_client_get_widget_vtable | 获取 dialog_client 虚表。

dialog_client_cast 函数

  • 函数功能：

转换为dialog_client对象(供脚本语言使用)。

  • 函数原型：
widget_t* dialog_client_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog_client对象。
widget | widget_t* | dialog_client对象。

dialog_client_create 函数

  • 函数功能：

创建dialog客户区对象。

  • 函数原型：
widget_t* dialog_client_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

dialog_client_get_widget_vtable 函数

  • 函数功能：

获取 dialog_client 虚表。

  • 函数原型：
const widget_vtable_t* dialog_client_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 dialog_client 虚表。


dialog_highlighter_default_t

概述

缺省对话框高亮策略。

本策略在背景上画一层半透明的蒙版来高亮(突出)对话框本身。 对于性能不高的平台，建议将start_alpha和end_alpha设为相同。

函数

函数名称 | 说明
dialog_highlighter_default_create | 创建缺省的对话框高亮策略。

属性

属性名称 | 类型 | 说明
end_alpha | uint8_t | 结束alpha，打开对话框的动画结束(直到对话框被关闭)时的alpha值。
start_alpha | uint8_t | 起始alpha，打开对话框的动画开始时的alpha值。
system_bar_alpha | uint8_t | 由于在没有过度动画的情况下，截图中已经包括黑色色块，为了让 system_bar 也同步高亮部分的色块透明。
system_bar_bottom_clip_rects | darray_t | 截图的底部 system_bar 显示裁减区列表
system_bar_top_clip_rects | darray_t | 截图的顶部 system_bar 显示裁减区列表
update_background | bool_t | 是否刷新底层窗口的截图。
win_mask_rect_list | slist_t | 窗口 mask 区域

dialog_highlighter_default_create 函数

  • 函数功能：

创建缺省的对话框高亮策略。

  • 函数原型：
dialog_highlighter_t* dialog_highlighter_default_create (tk_object_t* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | dialog_highlighter_t* | 返回对话框高亮策略对象。
args | tk_object_t* | 参数。

end_alpha 属性

结束alpha，打开对话框的动画结束(直到对话框被关闭)时的alpha值。

  • 类型：uint8_t

start_alpha 属性

起始alpha，打开对话框的动画开始时的alpha值。

  • 类型：uint8_t

system_bar_alpha 属性

由于在没有过度动画的情况下，截图中已经包括黑色色块，为了让 system_bar 也同步高亮部分的色块透明。

  • 类型：uint8_t

system_bar_bottom_clip_rects 属性

截图的底部 system_bar 显示裁减区列表

  • 类型：darray_t

system_bar_top_clip_rects 属性

截图的顶部 system_bar 显示裁减区列表

  • 类型：darray_t

update_background 属性

是否刷新底层窗口的截图。

  • 类型：bool_t

win_mask_rect_list 属性

窗口 mask 区域

  • 类型：slist_t


dialog_highlighter_factory_t

概述

对话框高亮策略工厂。

函数

函数名称 | 说明
dialog_highlighter_factory | 获取缺省的对话框高亮策略工厂对象。
dialog_highlighter_factory_create | 创建对话框高亮策略工厂对象。
dialog_highlighter_factory_create_highlighter | 创建指定类型的对话框高亮策略对象。
dialog_highlighter_factory_destroy | 析构并释放对话框高亮策略工厂对象。
dialog_highlighter_factory_register | 注册对话框高亮策略创建函数。
dialog_highlighter_factory_set | 设置缺省的对话框高亮策略工厂对象。

dialog_highlighter_factory 函数

  • 函数功能：

获取缺省的对话框高亮策略工厂对象。

  • 函数原型：
dialog_highlighter_factory_t* dialog_highlighter_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | dialog_highlighter_factory_t* | 返回对话框高亮策略工厂对象。

dialog_highlighter_factory_create 函数

  • 函数功能：

创建对话框高亮策略工厂对象。

  • 函数原型：
dialog_highlighter_factory_t* dialog_highlighter_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | dialog_highlighter_factory_t* | 返回对话框高亮策略工厂对象。

dialog_highlighter_factory_create_highlighter 函数

  • 函数功能：

创建指定类型的对话框高亮策略对象。

  • 函数原型：
dialog_highlighter_t* dialog_highlighter_factory_create_highlighter (dialog_highlighter_factory_t* factory, const char* args, widget_t* dialog);
  • 参数说明：
参数 | 类型 | 说明
返回值 | dialog_highlighter_t* | 返回窗口动画对象。
factory | dialog_highlighter_factory_t* | 对话框高亮策略工厂对象。
args | const char* | 参数。如default(alpha=90)
dialog | widget_t* | 对话框对象。

dialog_highlighter_factory_destroy 函数

  • 函数功能：

析构并释放对话框高亮策略工厂对象。

  • 函数原型：
ret_t dialog_highlighter_factory_destroy (dialog_highlighter_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | dialog_highlighter_factory_t* | 对话框高亮策略工厂对象。

dialog_highlighter_factory_register 函数

  • 函数功能：

注册对话框高亮策略创建函数。

  • 函数原型：
ret_t dialog_highlighter_factory_register (dialog_highlighter_factory_t* factory, const char* type, dialog_highlighter_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | dialog_highlighter_factory_t* | highlighter工厂对象。
type | const char* | 对话框高亮策略类型。
create | dialog_highlighter_create_t | 对话框高亮策略创建函数。

dialog_highlighter_factory_set 函数

  • 函数功能：

设置缺省的对话框高亮策略工厂对象。

  • 函数原型：
ret_t dialog_highlighter_factory_set (dialog_highlighter_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | dialog_highlighter_factory_t* | 对话框高亮策略工厂对象。


dialog_highlighter_t

概述

对话框高亮策略。

> 高亮策略的基本思路是对背景进行处理，比如将背景变暗或变模糊。

函数

函数名称 | 说明
dialog_highlighter_create | 创建对话框高亮策略对象。
dialog_highlighter_destroy | 销毁对话框高亮策略对象。
dialog_highlighter_draw | 绘制背景。
dialog_highlighter_draw_mask | 绘制背景高亮部分。
dialog_highlighter_get_alpha | 获取高亮的透明度。
dialog_highlighter_is_dynamic | 是否是动态绘制(方便外层优化)。
dialog_highlighter_prepare | 初始化。在绘制完背景，在截图前调用。
dialog_highlighter_prepare_ex | 初始化。在绘制完背景，在截图前调用。
dialog_highlighter_set_bg | 设置背景图片。
dialog_highlighter_set_bg_clip_rect | 设置背景图片的显示裁剪区。
dialog_highlighter_set_system_bar_alpha | 设置 sytem_bar 的高亮透明值。
dialog_highlighter_set_win | 设置底层窗口。
dialog_highlighter_system_bar_bottom_append_clip_rect | 增加底部 system_bar 的显示裁剪区
dialog_highlighter_system_bar_top_append_clip_rect | 增加顶部 system_bar 的显示裁剪区

属性

属性名称 | 类型 | 说明
canvas | canvas_t* | 画布。
clip_rect | rect_t | 截图的显示裁减区
dialog | widget_t* | 对应的对话框。
img | bitmap_t | 底层窗口的截图。
used_by_others | bool_t | 是否给了别的窗口使用。
win | widget_t* | 底层窗口。

dialog_highlighter_create 函数

  • 函数功能：

创建对话框高亮策略对象。

供子类构造函数用。

  • 函数原型：
dialog_highlighter_t* dialog_highlighter_create (const dialog_highlighter_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | dialog_highlighter_t* | 返回对话框高亮策略对象
vt | const dialog_highlighter_vtable_t* | 虚表对象。

dialog_highlighter_destroy 函数

  • 函数功能：

销毁对话框高亮策略对象。

  • 函数原型：
ret_t dialog_highlighter_destroy (dialog_highlighter_t* h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。

dialog_highlighter_draw 函数

  • 函数功能：

绘制背景。

  • 函数原型：
ret_t dialog_highlighter_draw (dialog_highlighter_t* h, float_t percent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
percent | float_t | 动画进度(0-1)，1表示打开已经完成。

dialog_highlighter_draw_mask 函数

  • 函数功能：

绘制背景高亮部分。

  • 函数原型：
ret_t dialog_highlighter_draw_mask (dialog_highlighter_t* h, canvas_t* c, float_t percent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
c | canvas_t* | 画布。
percent | float_t | 高亮的百分比。

dialog_highlighter_get_alpha 函数

  • 函数功能：

获取高亮的透明度。

  • 函数原型：
uint8_t dialog_highlighter_get_alpha (dialog_highlighter_t* h, float_t percent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回透明度。
h | dialog_highlighter_t* | 对话框高亮策略对象。
percent | float_t | 高亮的百分比。

dialog_highlighter_is_dynamic 函数

  • 函数功能：

是否是动态绘制(方便外层优化)。

  • 函数原型：
bool_t dialog_highlighter_is_dynamic (dialog_highlighter_t* h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示动态绘制，否则表示不是动态绘制。
h | dialog_highlighter_t* | 对话框高亮策略对象。

dialog_highlighter_prepare 函数

  • 函数功能：

初始化。在绘制完背景，在截图前调用。

  • 函数原型：
ret_t dialog_highlighter_prepare (dialog_highlighter_t* h, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
c | canvas_t* | 画布。

dialog_highlighter_prepare_ex 函数

  • 函数功能：

初始化。在绘制完背景，在截图前调用。

  • 函数原型：
ret_t dialog_highlighter_prepare_ex (dialog_highlighter_t* h, canvas_t* c, canvas_t* canvas_offline);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
c | canvas_t* | 画布。
canvas_offline | canvas_t* | 离线画布。

dialog_highlighter_set_bg 函数

  • 函数功能：

设置背景图片。

  • 函数原型：
ret_t dialog_highlighter_set_bg (dialog_highlighter_t* h, bitmap_t* img);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
img | bitmap_t* | 背景截图。

dialog_highlighter_set_bg_clip_rect 函数

  • 函数功能：

设置背景图片的显示裁剪区。

  • 函数原型：
ret_t dialog_highlighter_set_bg_clip_rect (dialog_highlighter_t* h, rect_t* clip_rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
clip_rect | rect_t* | 背景显示裁剪区。

dialog_highlighter_set_system_bar_alpha 函数

  • 函数功能：

设置 sytem_bar 的高亮透明值。

  • 函数原型：
ret_t dialog_highlighter_set_system_bar_alpha (dialog_highlighter_t* h, uint8_t alpha);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
alpha | uint8_t | 设置 sytem_bar 的高亮透明值。

dialog_highlighter_set_win 函数

  • 函数功能：

设置底层窗口。

  • 函数原型：
ret_t dialog_highlighter_set_win (dialog_highlighter_t* h, widget_t* win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
win | widget_t* | 底层窗口。

dialog_highlighter_system_bar_bottom_append_clip_rect 函数

  • 函数功能：

增加底部 system_bar 的显示裁剪区

  • 函数原型：
ret_t dialog_highlighter_system_bar_bottom_append_clip_rect (dialog_highlighter_t* h, rect_t* rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
rect | rect_t* | 裁剪区域

dialog_highlighter_system_bar_top_append_clip_rect 函数

  • 函数功能：

增加顶部 system_bar 的显示裁剪区

  • 函数原型：
ret_t dialog_highlighter_system_bar_top_append_clip_rect (dialog_highlighter_t* h, rect_t* rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
h | dialog_highlighter_t* | 对话框高亮策略对象。
rect | rect_t* | 裁剪区域

canvas 属性

画布。

  • 类型：canvas_t*

clip_rect 属性

截图的显示裁减区

  • 类型：rect_t

dialog 属性

对应的对话框。

  • 类型：widget_t*

img 属性

底层窗口的截图。

  • 类型：bitmap_t

used_by_others 属性

是否给了别的窗口使用。

  • 类型：bool_t

win 属性

底层窗口。

  • 类型：widget_t*


dialog_highlighter_type_t

概述

@type string 内置的对话框高亮策略。

常量

名称 | 说明
DIALOG_HIGHLIGHTER_DEFAULT | 缺省的对话框高亮策略。


dialog_quit_code_t

概述

对话框退出码。

一般用作dialog_quit函数的参数。

常量

名称 | 说明
DIALOG_QUIT_NONE | 对话框被强行关闭或不关心关闭原因。
DIALOG_QUIT_OK | 点击“OK”按钮关闭。
DIALOG_QUIT_YES | 点击“YES”按钮关闭。
DIALOG_QUIT_CANCEL | 点击“CANCEL”按钮关闭。
DIALOG_QUIT_NO | 点击“NO”按钮关闭。
DIALOG_QUIT_OTHER | 点击其它按钮关闭。


dialog_t

概述

对话框。 对话框是一种特殊的窗口，大小和位置可以自由设置。

AWTK中的对话框可以是模态的，也可以是非模态的。

如果dialog有透明或半透效果则不支持窗口动画。

由于浏览器中无法实现主循环嵌套，因此无法实现模态对话框。 如果希望自己写的AWTK应用程序可以在浏览器(包括各种小程序)中运行或演示， 请避免使用模态对话框。

对话框通常由对话框标题和对话框客户区两部分组成：

dialog_t是window_base_t的子类控件，window_base_t的函数均适用于dialog_t控件。

在xml中使用”dialog”标签创建对话框。如：

<dialog anim_hint="center_scale(duration=300)" x="c" y="m" w="80%" h="160" text="Dialog">
<dialog_title x="0" y="0" w="100%" h="30" text="Hello AWTK" />
<dialog_client x="0" y="bottom" w="100%" h="-30">
<label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
<button name="quit" x="10" y="bottom:10" w="40%" h="30" text="确定"/>
<button name="quit" x="right:10" y="bottom:10" w="40%" h="30" text="取消"/>
</dialog_client>
</dialog>

如果你不需要对话框的标题，可以这样写：

<dialog anim_hint="center_scale(duration=300)" x="c" y="m" w="80%" h="160" text="Dialog">
<label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
<button name="quit" x="10" y="bottom:10" w="40%" h="30" text="确定"/>
<button name="quit" x="right:10" y="bottom:10" w="40%" h="30" text="取消"/>
</dialog>

打开非模态对话框时，其用法与普通窗口一样。打开非模态对话框时，还需要调用dialog_modal。

widget_t* dlg = dialog_open(name);

ret = dialog_modal(dlg);

关闭模态对话框用dialog_quit

static ret_t on_dialog_btn_click(void* ctx, event_t* evt) {
widget_t* win = widget_get_window(WIDGET(evt->target));
int code = (char*)ctx - (char*)NULL;

dialog_quit(win, code);

return RET_OK;
}

关闭非模态对话框用window_close。

static ret_t on_dialog_btn_click(void* ctx, event_t* evt) {
widget_t* win = widget_get_window(WIDGET(evt->target));
int code = (char*)ctx - (char*)NULL;

window_close(win);

return RET_OK;
}

更多用法请参考： dialog.xml

完整C代码示例请参考：

  • 非模态对话框

  • 模态对话框

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default">
<normal border_color="#606060" />
</style>

更多用法请参考： [theme default] (https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L324)

函数

函数名称 | 说明
dialog_cast | 转换dialog对象(供脚本语言使用)。
dialog_confirm | 显示『确认』对话框。
dialog_create | 创建dialog对象。
dialog_create_simple | 创建dialog对象，同时创建title/client。
dialog_create_with_ok_cancel | 创建一个带有OK/Cancel按钮的对话框。
dialog_get_client | 获取client控件。
dialog_get_title | 获取title控件。
dialog_get_widget_vtable | 获取 dialog 虚表。
dialog_info | 显示『提示信息』对话框。
dialog_is_modal | 检查对话框是否为模态对话框。
dialog_is_quited | 检查对话框是否已经退出模态。
dialog_modal | 模态显示对话框。
dialog_open | 从资源文件中加载并创建Dialog对象。
dialog_quit | 退出模态显示，关闭对话框。
dialog_set_title | 设置对话框的标题文本。
dialog_simple_show | 根据所选标题，内容与主题等创建一个对话框。
dialog_toast | 显示『短暂提示信息』对话框。
dialog_warn | 显示『警告』对话框。

属性

属性名称 | 类型 | 说明
highlight | char* | 对话框高亮策略。

dialog_cast 函数

  • 函数功能：

转换dialog对象(供脚本语言使用)。

  • 函数原型：
widget_t* dialog_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog对象。
widget | widget_t* | dialog对象。

dialog_confirm 函数

  • 函数功能：

显示『确认』对话框。

窗体样式由dialog_confirm.xml文件决定。

  • 函数原型：
ret_t dialog_confirm (const char* title, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示确认，否则表示取消。
title | const char* | 标题。
text | const char* | 文本内容。

dialog_create 函数

  • 函数功能：

创建dialog对象。

  • 函数原型：
widget_t* dialog_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

dialog_create_simple 函数

  • 函数功能：

创建dialog对象，同时创建title/client。

  • 函数原型：
widget_t* dialog_create_simple (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

dialog_create_with_ok_cancel 函数

  • 函数功能：

创建一个带有OK/Cancel按钮的对话框。

  • 函数原型：
widget_t* dialog_create_with_ok_cancel (const char* stitle, uint32_t w, uint32_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 成功返回dialog对象，失败返回NULL。
stitle | const char* | 标题。
w | uint32_t | 宽度。
h | uint32_t | 高度。

dialog_get_client 函数

  • 函数功能：

获取client控件。

  • 函数原型：
widget_t* dialog_get_client (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | client对象。
widget | widget_t* | dialog对象。

dialog_get_title 函数

  • 函数功能：

获取title控件。

  • 函数原型：
widget_t* dialog_get_title (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | title对象。
widget | widget_t* | dialog对象。

dialog_get_widget_vtable 函数

  • 函数功能：

获取 dialog 虚表。

  • 函数原型：
const widget_vtable_t* dialog_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 dialog 虚表。

dialog_info 函数

  • 函数功能：

显示『提示信息』对话框。

窗体样式由dialog_info.xml文件决定。

  • 函数原型：
ret_t dialog_info (const char* title, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
title | const char* | 标题。
text | const char* | 文本内容。

dialog_is_modal 函数

  • 函数功能：

检查对话框是否为模态对话框。

  • 函数原型：
bool_t dialog_is_modal (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是模态对话框，否则表示不是。
widget | widget_t* | dialog对象。

dialog_is_quited 函数

  • 函数功能：

检查对话框是否已经退出模态。

  • 函数原型：
bool_t dialog_is_quited (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示已经退出，否则表示没有。
widget | widget_t* | dialog对象。

dialog_modal 函数

  • 函数功能：

模态显示对话框。 dialog_modal返回后，dialog对象将在下一个idle函数中回收。 也就是在dialog_modal调用完成后仍然可以访问dialog中控件，直到本次事件结束。 调用该函数会使线程进入阻塞状态，需要调用dialog_quit来解除阻塞。

  • 函数原型：
dialog_quit_code_t dialog_modal (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | dialog_quit_code_t | 返回退出码，值为dialog_quit函数中传入的参数。
widget | widget_t* | dialog对象。

dialog_open 函数

  • 函数功能：

从资源文件中加载并创建Dialog对象。

本函数在ui_loader/ui_builder_default里实现。

  • 函数原型：
widget_t* dialog_open (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
name | const char* | dialog的名称。

dialog_quit 函数

  • 函数功能：

退出模态显示，关闭对话框。

比如，在对话框中关闭按钮的事件处理函数中，调用本函数关闭对话框。

  • 函数原型：
ret_t dialog_quit (widget_t* widget, uint32_t code);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | dialog对象。
code | uint32_t | 退出码，作为dialog_modal的返回值(参考：dialog_quit_code_t)。

dialog_set_title 函数

  • 函数功能：

设置对话框的标题文本。

  • 函数原型：
ret_t dialog_set_title (widget_t* widget, const char* title);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | dialog对象。
title | const char* | 标题。

dialog_toast 函数

  • 函数功能：

显示『短暂提示信息』对话框。

窗体样式由dialog_toast.xml文件决定。

  • 函数原型：
ret_t dialog_toast (const char* text, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text | const char* | 文本内容。
duration | uint32_t | 显示时间(单位为毫秒)。

dialog_warn 函数

  • 函数功能：

显示『警告』对话框。

窗体样式由dialog_warn.xml文件决定。

  • 函数原型：
ret_t dialog_warn (const char* title, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
title | const char* | 标题。
text | const char* | 文本内容。

highlight 属性

对话框高亮策略。

请参考 对话框高亮策略

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


dialog_title_t

概述

对话框标题控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

dialog_title_t是widget_t的子类控件，widget_t的函数均适用于dialog_title_t控件。

在xml中使用”dialog_title”标签创建dialog_title。如：

<dialog anim_hint="center_scale(duration=300)" x="c" y="m" w="80%" h="160" text="Dialog">
<dialog_title x="0" y="0" w="100%" h="30" text="Hello AWTK" />
<dialog_client x="0" y="bottom" w="100%" h="-30">
<label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
<button name="quit" x="10" y="bottom:10" w="40%" h="30" text="确定"/>
<button name="quit" x="right:10" y="bottom:10" w="40%" h="30" text="取消"/>
</dialog_client>
</dialog>

在c代码中，用dialog_create_simple创建对话框时，自动创建dialog标题对象。

函数

函数名称 | 说明
dialog_title_cast | 转换为dialog_title对象(供脚本语言使用)。
dialog_title_create | 创建dialog对象。
dialog_title_get_widget_vtable | 获取 dialog_title 虚表。

dialog_title_cast 函数

  • 函数功能：

转换为dialog_title对象(供脚本语言使用)。

  • 函数原型：
widget_t* dialog_title_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog_title对象。
widget | widget_t* | dialog_title对象。

dialog_title_create 函数

  • 函数功能：

创建dialog对象。

  • 函数原型：
widget_t* dialog_title_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dialog对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

dialog_title_get_widget_vtable 函数

  • 函数功能：

获取 dialog_title 虚表。

  • 函数原型：
const widget_vtable_t* dialog_title_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 dialog_title 虚表。


digit_clock_t

概述

数字时钟控件。

digit_clock_t是widget_t的子类控件，widget_t的函数均适用于digit_clock_t控件。

在xml中使用”digit_clock”标签创建数字时钟控件。如：

<digit_clock format="YY/MM/DD h:mm:ss"/>

更多用法请参考：digit_clock.xml

在c代码中使用函数digit_clock_create创建数字时钟控件。如：

widget_t* tc = digit_clock_create(win, 10, 10, 240, 30);
digit_clock_set_format(tc, "YY/MM/DD h:mm:ss");

完整示例请参考：digit_clock demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default">
<normal text_color="black" />
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
digit_clock_cast | 转换为digit_clock对象(供脚本语言使用)。
digit_clock_create | 创建digit_clock对象
digit_clock_get_widget_vtable | 获取 digit_clock 虚表。
digit_clock_set_format | 设置显示格式。

属性

属性名称 | 类型 | 说明
format | char* | 显示格式。

digit_clock_cast 函数

  • 函数功能：

转换为digit_clock对象(供脚本语言使用)。

  • 函数原型：
widget_t* digit_clock_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | digit_clock对象。
widget | widget_t* | digit_clock对象。

digit_clock_create 函数

  • 函数功能：

创建digit_clock对象

  • 函数原型：
widget_t* digit_clock_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

digit_clock_get_widget_vtable 函数

  • 函数功能：

获取 digit_clock 虚表。

  • 函数原型：
const widget_vtable_t* digit_clock_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 digit_clock 虚表。

digit_clock_set_format 函数

  • 函数功能：

设置显示格式。

  • 函数原型：
ret_t digit_clock_set_format (widget_t* widget, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
format | const char* | 格式。

format 属性

显示格式。

  • Y 代表年(完整显示)
  • M 代表月(1-12)
  • D 代表日(1-31)
  • h 代表时(0-23)
  • H 代表时(0-11)
  • m 代表分(0-59)
  • s 代表秒(0-59)
  • w 代表星期(0-6)
  • W 代表星期的英文缩写(支持翻译)
  • T 代表时段AM/PM(支持翻译)
  • YY 代表年(只显示末两位)
  • MM 代表月(01-12)
  • DD 代表日(01-31)
  • hh 代表时(00-23)
  • HH 代表时(00-11)
  • mm 代表分(00-59)
  • ss 代表秒(00-59)
  • MMM 代表月的英文缩写(支持翻译)

如 日期时间为：2018/11/12 9:10:20 * “Y/M/D”显示为”2018/11/12” * “Y-M-D”显示为”2018-11-12” * “Y-M-D h:m:s”显示为”2018-11-12 9:10:20” * “Y-M-D hh:mm:ss”显示为”2018-11-12 09:10:20”

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


dirty_rects_t

概述

支持多个脏矩形。

在通常情况下，脏矩形的个数并不多，而且一般都是不重叠的， 所以为了降低计算开销、避免内存分配和简化实现。这里采用下列措施：

  • 如果新的脏矩形是独立的，直接加入进来。
  • 如果新的脏矩形与某个脏矩形有重叠，则合并到该脏矩形。
  • 如果脏矩形的个数超出最大个数则进行合并。

函数

函数名称 | 说明
dirty_rects_add | 增加脏矩形。
dirty_rects_deinit | 释放dirty_rects对象。
dirty_rects_fix | 脏矩形之间可能重叠，合并重叠的脏矩形。
dirty_rects_init | 初始化dirty_rects对象。
dirty_rects_remove | 删除指定序数的矩形。
dirty_rects_reset | 重置dirty_rects对象。
dirty_rects_set_debug | 设置是否开启调试模式。
dirty_rects_set_disable_multiple | 设置是否关闭多脏矩形模式(方便对比测试和调试)。
dirty_rects_set_profile | 设置是否开启profile模式。

属性

属性名称 | 类型 | 说明
max | rect_t | 最大脏矩形。
nr | uint32_t | 个数。
rects | rect_t* | 脏矩形。

dirty_rects_add 函数

  • 函数功能：

增加脏矩形。

  • 函数原型：
ret_t dirty_rects_add (dirty_rects_t* dirty_rects, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。
r | const rect_t* | 脏矩形。

dirty_rects_deinit 函数

  • 函数功能：

释放dirty_rects对象。

  • 函数原型：
ret_t dirty_rects_deinit (dirty_rects_t* dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。

dirty_rects_fix 函数

  • 函数功能：

脏矩形之间可能重叠，合并重叠的脏矩形。

  • 函数原型：
ret_t dirty_rects_fix (dirty_rects_t* dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。

dirty_rects_init 函数

  • 函数功能：

初始化dirty_rects对象。

  • 函数原型：
ret_t dirty_rects_init (dirty_rects_t* dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。

dirty_rects_remove 函数

  • 函数功能：

删除指定序数的矩形。

  • 函数原型：
ret_t dirty_rects_remove (dirty_rects_t* dirty_rects, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。
index | uint32_t | 序数。

dirty_rects_reset 函数

  • 函数功能：

重置dirty_rects对象。

  • 函数原型：
ret_t dirty_rects_reset (dirty_rects_t* dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。

dirty_rects_set_debug 函数

  • 函数功能：

设置是否开启调试模式。

  • 函数原型：
ret_t dirty_rects_set_debug (dirty_rects_t* dirty_rects, bool_t debug);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。
debug | bool_t | 是否开启调试模式。

dirty_rects_set_disable_multiple 函数

  • 函数功能：

设置是否关闭多脏矩形模式(方便对比测试和调试)。

  • 函数原型：
ret_t dirty_rects_set_disable_multiple (dirty_rects_t* dirty_rects, bool_t disable_multiple);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。
disable_multiple | bool_t | 是否关闭多脏矩形模式。

dirty_rects_set_profile 函数

  • 函数功能：

设置是否开启profile模式。

  • 函数原型：
ret_t dirty_rects_set_profile (dirty_rects_t* dirty_rects, bool_t profile);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dirty_rects | dirty_rects_t* | dirty_rects对象。
profile | bool_t | 是否开启profile模式。

max 属性

最大脏矩形。

  • 类型：rect_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

nr 属性

个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

rects 属性

脏矩形。

  • 类型：rect_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


done_event_t

概述

执行完成事件。

函数

函数名称 | 说明
done_event_cast | 把event对象转done_event_t对象。
done_event_init | 初始done event。

属性

属性名称 | 类型 | 说明
result | ret_t | 执行结果。

done_event_cast 函数

  • 函数功能：

把event对象转done_event_t对象。

  • 函数原型：
done_event_t* done_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | done_event_t* | 返回event对象。
event | event_t* | event对象。

done_event_init 函数

  • 函数功能：

初始done event。

  • 函数原型：
event_t* done_event_init (done_event_t* event, ret_t result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | done_event_t* | event对象。
result | ret_t | 结果。

result 属性

执行结果。

  • 类型：ret_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


draggable_t

概述

将draggable放入目标控件，即可让目标控件或当前窗口可以被拖动。

draggable_t是widget_t的子类控件，widget_t的函数均适用于draggable_t控件。

在xml中使用”draggable”标签创建draggable控件。如：

<button text="Drag Me" w="80" h="40" x="10" y="10">
<draggable />
</button>

拖动对话框标题时移动对话框：

<dialog_title x="0" y="0" w="100%" h="30" text="Hello AWTK" >
<draggable drag_window="true"/>
</dialog_title>

更多用法请参考： draggable.xml

在c代码中使用函数draggable_create创建按钮控件。如：

widget_t* draggable = draggable_create(target, 0, 0, 0, 0);

> draggable本身不可见，故无需style。

函数

函数名称 | 说明
draggable_cast | 转换为draggable对象(供脚本语言使用)。
draggable_create | 创建draggable对象
draggable_get_widget_vtable | 获取 draggable 虚表。
draggable_set_allow_out_of_screen | 设置是否无范围限制拖动。
draggable_set_bottom | 设置bottom。
draggable_set_drag_native_window | 设置drag_native_window。
draggable_set_drag_parent | 设置drag_parent。
draggable_set_drag_window | 设置drag_window。
draggable_set_horizontal_only | 设置horizontal_only。
draggable_set_left | 设置left。
draggable_set_right | 设置right。
draggable_set_top | 设置top。
draggable_set_vertical_only | 设置vertical_only。

属性

属性名称 | 类型 | 说明
allow_out_of_screen | bool_t | 支持超出原生窗口边界拖动。（无法完全移出原生窗口，同时优先受到拖动范围限制的影响）
bottom | int32_t | 拖动范围的底部限制。缺省为父控件的底部。
drag_native_window | bool_t | 拖动原生窗口。
drag_parent | uint32_t | 拖动父控件。0表示直系父控件，1表示父控件的父控件，依次类推。
drag_window | bool_t | 拖动窗口而不是父控件。比如放在对话框的titlebar上，拖动titlebar其实是希望拖动对话框。
horizontal_only | bool_t | 只允许水平拖动。
left | int32_t | 拖动范围的左边限制。缺省为父控件的左边。
right | int32_t | 拖动范围的右边限制。缺省为父控件的右边边。
top | int32_t | 拖动范围的顶部限制。缺省为父控件的顶部。
vertical_only | bool_t | 只允许垂直拖动。

draggable_cast 函数

  • 函数功能：

转换为draggable对象(供脚本语言使用)。

  • 函数原型：
widget_t* draggable_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | draggable对象。
widget | widget_t* | draggable对象。

draggable_create 函数

  • 函数功能：

创建draggable对象

  • 函数原型：
widget_t* draggable_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

draggable_get_widget_vtable 函数

  • 函数功能：

获取 draggable 虚表。

  • 函数原型：
const widget_vtable_t* draggable_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 draggable 虚表。

draggable_set_allow_out_of_screen 函数

  • 函数功能：

设置是否无范围限制拖动。 备注：可以让窗口拖动到外面去。

  • 函数原型：
ret_t draggable_set_allow_out_of_screen (widget_t* widget, bool_t allow_out_of_screen);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
allow_out_of_screen | bool_t | 是否无范围限制拖动。

draggable_set_bottom 函数

  • 函数功能：

设置bottom。

  • 函数原型：
ret_t draggable_set_bottom (widget_t* widget, int32_t bottom);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
bottom | int32_t | 拖动范围的底部限制。缺省为父控件的底部。

draggable_set_drag_native_window 函数

  • 函数功能：

设置drag_native_window。

  • 函数原型：
ret_t draggable_set_drag_native_window (widget_t* widget, bool_t drag_native_window);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
drag_native_window | bool_t | 是否拖动原生窗口。

draggable_set_drag_parent 函数

  • 函数功能：

设置drag_parent。 拖动窗口而不是父控件。比如放在对话框的titlebar上，拖动titlebar其实是希望拖动对话框。

  • 函数原型：
ret_t draggable_set_drag_parent (widget_t* widget, uint32_t drag_parent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
drag_parent | uint32_t | 0表示直系父控件，1表示父控件的父控件，依次类推。

draggable_set_drag_window 函数

  • 函数功能：

设置drag_window。 拖动窗口而不是父控件。比如放在对话框的titlebar上，拖动titlebar其实是希望拖动对话框。

  • 函数原型：
ret_t draggable_set_drag_window (widget_t* widget, bool_t drag_window);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
drag_window | bool_t | 是否拖动窗口。

draggable_set_horizontal_only 函数

  • 函数功能：

设置horizontal_only。

  • 函数原型：
ret_t draggable_set_horizontal_only (widget_t* widget, bool_t horizontal_only);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
horizontal_only | bool_t | 只允许水平拖动。

draggable_set_left 函数

  • 函数功能：

设置left。

  • 函数原型：
ret_t draggable_set_left (widget_t* widget, int32_t left);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
left | int32_t | 拖动范围的左边限制。缺省为父控件的左边。

draggable_set_right 函数

  • 函数功能：

设置right。

  • 函数原型：
ret_t draggable_set_right (widget_t* widget, int32_t right);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
right | int32_t | 拖动范围的右边限制。缺省为父控件的右边边。

draggable_set_top 函数

  • 函数功能：

设置top。

  • 函数原型：
ret_t draggable_set_top (widget_t* widget, int32_t top);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
top | int32_t | 拖动范围的顶部限制。缺省为父控件的顶部。

draggable_set_vertical_only 函数

  • 函数功能：

设置vertical_only。

  • 函数原型：
ret_t draggable_set_vertical_only (widget_t* widget, bool_t vertical_only);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
vertical_only | bool_t | 只允许垂直拖动。

allow_out_of_screen 属性

支持超出原生窗口边界拖动。（无法完全移出原生窗口，同时优先受到拖动范围限制的影响）

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

bottom 属性

拖动范围的底部限制。缺省为父控件的底部。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

drag_native_window 属性

拖动原生窗口。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

drag_parent 属性

拖动父控件。0表示直系父控件，1表示父控件的父控件，依次类推。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

drag_window 属性

拖动窗口而不是父控件。比如放在对话框的titlebar上，拖动titlebar其实是希望拖动对话框。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

horizontal_only 属性

只允许水平拖动。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

left 属性

拖动范围的左边限制。缺省为父控件的左边。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

right 属性

拖动范围的右边限制。缺省为父控件的右边边。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

top 属性

拖动范围的顶部限制。缺省为父控件的顶部。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

vertical_only 属性

只允许垂直拖动。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


dragger_t

概述

dragger控件。

目前主要用于scrollbar里的滑块。

函数

函数名称 | 说明
dragger_cast | 转换为dragger对象(供脚本语言使用)。
dragger_create | 创建dragger对象。
dragger_get_widget_vtable | 获取 dragger 虚表。
dragger_set_range | 设置拖动的范围。

属性

属性名称 | 类型 | 说明
x_max | xy_t | x坐标的最大值。
x_min | xy_t | x坐标的最小值。
y_max | xy_t | y坐标的最大值。
y_min | xy_t | y坐标的最小值。

事件

事件名称 | 类型 | 说明
EVT_DRAG_START | event_t | 开始拖动事件。
EVT_DRAG | event_t | 拖动事件。
EVT_DRAG_END | event_t | 结束拖动事件。

dragger_cast 函数

  • 函数功能：

转换为dragger对象(供脚本语言使用)。

  • 函数原型：
widget_t* dragger_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | dragger对象。
widget | widget_t* | dragger对象。

dragger_create 函数

  • 函数功能：

创建dragger对象。

  • 函数原型：
widget_t* dragger_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

dragger_get_widget_vtable 函数

  • 函数功能：

获取 dragger 虚表。

  • 函数原型：
const widget_vtable_t* dragger_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 dragger 虚表。

dragger_set_range 函数

  • 函数功能：

设置拖动的范围。

  • 函数原型：
ret_t dragger_set_range (widget_t* widget, xy_t x_min, xy_t y_min, xy_t x_max, xy_t y_max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | dragger控件。
x_min | xy_t | x坐标最小值。
y_min | xy_t | y坐标最小值。
x_max | xy_t | x坐标最大值。
y_max | xy_t | y坐标最大值。

x_max 属性

x坐标的最大值。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

x_min 属性

x坐标的最小值。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

y_max 属性

y坐标的最大值。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

y_min 属性

y坐标的最小值。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


drop_file_event_t

概述

文件拖入事件。

函数

函数名称 | 说明
drop_file_event_cast | 把event对象转drop_file_event_t对象。
drop_file_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
filename | const char* | 文件名。

drop_file_event_cast 函数

  • 函数功能：

把event对象转drop_file_event_t对象。

  • 函数原型：
drop_file_event_t* drop_file_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | drop_file_event_t* | event 对象。
event | event_t* | event对象。

drop_file_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* drop_file_event_init (drop_file_event_t* event, void* target, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | drop_file_event_t* | event对象。
target | void* | 事件目标。
filename | const char* | 文件名。

filename 属性

文件名。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


easing_t

概述

动画趋势类。

函数

函数名称 | 说明
easing_get | 获取对应类型的操作函数。
easing_register | 注册指定名称的动画趋势。

easing_get 函数

  • 函数功能：

获取对应类型的操作函数。

  • 函数原型：
easing_func_t easing_get (easing_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | easing_func_t | 返回对应的操作函数地址。
type | easing_type_t | 类型。

easing_register 函数

  • 函数功能：

注册指定名称的动画趋势。

  • 函数原型：
uint32_t easing_register (const char* type_name, easing_func_t easing_func);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回对应类型。
type_name | const char* | 类型名称。
easing_func | easing_func_t | 动画趋势函数。


easing_type_t

概述

缓动作动画常量定义。

常量

名称 | 说明
EASING_LINEAR | EASING_LINEAR。
EASING_QUADRATIC_IN | EASING_QUADRATIC_IN
EASING_QUADRATIC_OUT | EASING_QUADRATIC_OUT
EASING_QUADRATIC_INOUT | EASING_QUADRATIC_INOUT
EASING_CUBIC_IN | EASING_CUBIC_IN
EASING_CUBIC_OUT | EASING_CUBIC_OUT
EASING_SIN_IN | EASING_SIN_IN
EASING_SIN_OUT | EASING_SIN_OUT
EASING_SIN_INOUT | EASING_SIN_OUT
EASING_POW_IN | EASING_POW_IN
EASING_POW_OUT | EASING_POW_OUT
EASING_POW_INOUT | EASING_POW_INOUT
EASING_CIRCULAR_IN | EASING_CIRCULAR_IN
EASING_CIRCULAR_OUT | EASING_CIRCULAR_OUT
EASING_CIRCULAR_INOUT | EASING_CIRCULAR_INOUT
EASING_ELASTIC_IN | EASING_ELASTIC_IN
EASING_ELASTIC_OUT | EASING_ELASTIC_OUT
EASING_ELASTIC_INOUT | EASING_ELASTIC_INOUT
EASING_BACK_IN | EASING_BACK_IN
EASING_BACK_OUT | EASING_BACK_OUT
EASING_BACK_INOUT | EASING_BACK_INOUT
EASING_BOUNCE_IN | EASING_BOUNCE_IN
EASING_BOUNCE_OUT | EASING_BOUNCE_OUT
EASING_BOUNCE_INOUT | EASING_BOUNCE_INOUT


edit_t

概述

单行编辑器控件。

在基于SDL的平台，单行编辑器控件使用平台原生的输入法，对于嵌入式平台使用内置的输入法。

在使用内置的输入法时，软键盘由输入类型决定，开发者可以自定义软键盘的界面。

edit_t是widget_t的子类控件，widget_t的函数均适用于edit_t控件。

edit_t本身可以做为容器，放入按钮等控件。有几个特殊的子控件：

  • 名为”clear”的按钮。点击时清除编辑器中的内容。
  • 名为”inc”的按钮。点击时增加编辑器的值，用于实现类似于spinbox的功能。
  • 名为”dec”的按钮。点击时减少编辑器的值，用于实现类似于spinbox的功能。
  • 名为”visible”的复选框。勾选时显示密码，反之不显示密码。

在xml中使用”edit”标签创建编辑器控件。如：

<edit x="c" y="m" w="80" h="30"
tips="age" input_type="uint" min="0" max="150" step="1" auto_fix="true" style="number" />

XXX：需要在min/max/step之前设置input_type。

更多用法请参考： edit.xml

在c代码中使用函数edit_create创建编辑器控件。如：

widget_t* edit = edit_create(win, 10, 10, 128, 30);
widget_set_text(edit, L"OK");

创建之后，可以用widget_set_text或widget_set_text_utf8设置文本内容。

完整示例请参考： edit demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default" border_color="#a0a0a0"  text_color="black" text_align_h="left">
<normal     bg_color="#f0f0f0" />
<focused    bg_color="#f0f0f0" border_color="black"/>
<disable    bg_color="gray" text_color="#d0d0d0" />
<error      bg_color="#f0f0f0" text_color="red" />
<empty      bg_color="#f0f0f0" text_color="#a0a0a0" />
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
edit_cast | 转换为edit对象(供脚本语言使用)。
edit_create | 创建edit对象
edit_get_cursor | 获取输入框的光标位置。
edit_get_double | 获取double类型的值。
edit_get_int | 获取int类型的值。
edit_get_selected_text | 获取选中的文本。
edit_get_widget_vtable | 获取 edit 虚表。
edit_set_action_text | 设置软键盘上action按钮的文本。
edit_set_auto_fix | 设置编辑器是否为自动改正。
edit_set_cancelable | 设置编辑器是否为可撤销修改。
edit_set_close_im_when_blured | 设置编辑器是否在失去焦点时关闭输入法。
edit_set_cursor | 设置输入框的光标位置。
edit_set_dec_value | 设置减少值的回调函数。
edit_set_double | 设置double类型的值。
edit_set_double_ex | 设置double类型的值。
edit_set_fix_value | 设置修正输入内容的回调函数。
edit_set_float_limit | 设置为浮点数输入及取值范围。
edit_set_focus | 设置为焦点。
edit_set_inc_value | 设置增加值的回调函数。
edit_set_input_type | 设置编辑器的输入类型。
edit_set_int | 设置int类型的值。
edit_set_int_limit | 设置为整数输入及取值范围。
edit_set_is_valid_char | 设置输入字符检查函数。
edit_set_is_valid_value | 设置输入内容检查函数。
edit_set_keyboard | 设置自定义软键盘名称。
edit_set_open_im_when_focused | 设置编辑器是否在获得焦点时打开输入法。
edit_set_password_visible | 当编辑器输入类型为密码时，设置密码是否可见。
edit_set_pre_delete | 设置预删除处理的回调函数。
edit_set_pre_input | 设置预输入处理的回调函数。
edit_set_readonly | 设置编辑器是否为只读。
edit_set_select | 选择指定范围的文本。
edit_set_select_none_when_focused | 设置编辑器是否在获得焦点时不选中文本。
edit_set_text_limit | 设置为文本输入及其长度限制，不允许输入超过max个字符，少于min个字符时进入error状态。
edit_set_tips | 设置编辑器的输入提示。
edit_set_tr_tips | 获取翻译之后的文本，然后调用edit_set_tips。

属性

属性名称 | 类型 | 说明
action_text | char* | 软键盘上action按钮的文本。内置取值有：
auto_fix | bool_t | 输入无效时，是否自动改正。
cancelable | bool_t | 是否支持撤销编辑。如果为TRUE，在失去焦点之前可以撤销所有修改(恢复获得焦点之前的内容)。
close_im_when_blured | bool_t | 是否在失去焦点时关闭输入法(默认是)。
input_type | input_type_t | 输入类型。
keyboard | char* | 自定义软键盘名称。AWTK优先查找keyboard属性设置的键盘文件名（该键盘的XML文件需要在default\raw\ui目录下存在），如果没有指定keyboard，就找input_type设置的键盘类型。如果指定为空字符串，则表示不需要软键盘。
max | double | 最大值或最大长度。
min | double | 最小值或最小长度。
open_im_when_focused | bool_t | 获得焦点时打开输入法。
password_visible | bool_t | 密码是否可见。
readonly | bool_t | 编辑器是否为只读。
select_none_when_focused | bool_t | 获得焦点时不选中文本。
step | double | 步长。
tips | char* | 输入提示。
tr_tips | char* | 保存用于翻译的提示信息。

事件

事件名称 | 类型 | 说明
EVT_VALUE_CHANGING | value_change_event_t | 文本正在改变事件(编辑中)。
EVT_VALUE_CHANGED | value_change_event_t | 文本改变事件(编辑完成或设置文本时触发)。
EVT_IM_ACTION | event_t | 软键盘Action点击事件。

edit_cast 函数

  • 函数功能：

转换为edit对象(供脚本语言使用)。

  • 函数原型：
widget_t* edit_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | edit对象。
widget | widget_t* | edit对象。

edit_create 函数

  • 函数功能：

创建edit对象

  • 函数原型：
widget_t* edit_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

edit_get_cursor 函数

  • 函数功能：

获取输入框的光标位置。

  • 函数原型：
uint32_t edit_get_cursor (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回光标位置。
widget | widget_t* | widget对象。

edit_get_double 函数

  • 函数功能：

获取double类型的值。

  • 函数原型：
double edit_get_double (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回double的值。
widget | widget_t* | widget对象。

edit_get_int 函数

  • 函数功能：

获取int类型的值。

  • 函数原型：
int32_t edit_get_int (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回int的值。
widget | widget_t* | widget对象。

edit_get_selected_text 函数

  • 函数功能：

获取选中的文本。 使用完后需调用 TKMEM_FREE() 进行释放文本占有内存。

  • 函数原型：
char* edit_get_selected_text (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回选中文本。
widget | widget_t* | widget对象。

edit_get_widget_vtable 函数

  • 函数功能：

获取 edit 虚表。

  • 函数原型：
const widget_vtable_t* edit_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 edit 虚表。

edit_set_action_text 函数

  • 函数功能：

设置软键盘上action按钮的文本。

  • 函数原型：
ret_t edit_set_action_text (widget_t* widget, const char* action_text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
action_text | const char* | 软键盘上action按钮的文本。

edit_set_auto_fix 函数

  • 函数功能：

设置编辑器是否为自动改正。

  • 函数原型：
ret_t edit_set_auto_fix (widget_t* widget, bool_t auto_fix);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
auto_fix | bool_t | 自动改正。

edit_set_cancelable 函数

  • 函数功能：

设置编辑器是否为可撤销修改。

  • 函数原型：
ret_t edit_set_cancelable (widget_t* widget, bool_t cancelable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
cancelable | bool_t | 是否为可撤销修。

edit_set_close_im_when_blured 函数

  • 函数功能：

设置编辑器是否在失去焦点时关闭输入法。

  • 函数原型：
ret_t edit_set_close_im_when_blured (widget_t* widget, bool_t close_im_when_blured);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
close_im_when_blured | bool_t | 是否是否在失去焦点时关闭输入法。在失去焦点时关闭输入法。

edit_set_cursor 函数

  • 函数功能：

设置输入框的光标位置。

  • 函数原型：
ret_t edit_set_cursor (widget_t* widget, uint32_t cursor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
cursor | uint32_t | 光标位置。

edit_set_dec_value 函数

  • 函数功能：

设置减少值的回调函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_dec_value (widget_t* widget, edit_dec_value_t dec_value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
dec_value | edit_dec_value_t | 减少值的回调函数。

edit_set_double 函数

  • 函数功能：

设置double类型的值。

  • 函数原型：
ret_t edit_set_double (widget_t* widget, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
value | double | 值。

edit_set_double_ex 函数

  • 函数功能：

设置double类型的值。

  • 函数原型：
ret_t edit_set_double_ex (widget_t* widget, const char* format, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
format | const char* | 格式(缺省为”%2.2lf”)。
value | double | 值。

edit_set_fix_value 函数

  • 函数功能：

设置修正输入内容的回调函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_fix_value (widget_t* widget, edit_fix_value_t fix_value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
fix_value | edit_fix_value_t | 修正输入内容的回调函数。

edit_set_float_limit 函数

  • 函数功能：

设置为浮点数输入及取值范围。

  • 函数原型：
ret_t edit_set_float_limit (widget_t* widget, double min, double max, double step);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
min | double | 最小值。
max | double | 最大值。
step | double | 步长。

edit_set_focus 函数

  • 函数功能：

设置为焦点。

  • 函数原型：
ret_t edit_set_focus (widget_t* widget, bool_t focus);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
focus | bool_t | 是否为焦点。

edit_set_inc_value 函数

  • 函数功能：

设置增加值的回调函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_inc_value (widget_t* widget, edit_inc_value_t inc_value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
inc_value | edit_inc_value_t | 增加值的回调函数。

edit_set_input_type 函数

  • 函数功能：

设置编辑器的输入类型。

  • 函数原型：
ret_t edit_set_input_type (widget_t* widget, input_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
type | input_type_t | 输入类型。

edit_set_int 函数

  • 函数功能：

设置int类型的值。

  • 函数原型：
ret_t edit_set_int (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
value | int32_t | 值。

edit_set_int_limit 函数

  • 函数功能：

设置为整数输入及取值范围。

  • 函数原型：
ret_t edit_set_int_limit (widget_t* widget, int32_t min, int32_t max, uint32_t step);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
min | int32_t | 最小值。
max | int32_t | 最大值。
step | uint32_t | 步长。

edit_set_is_valid_char 函数

  • 函数功能：

设置输入字符检查函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_is_valid_char (widget_t* widget, edit_is_valid_char_t is_valid_char);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
is_valid_char | edit_is_valid_char_t | 检查输入字符是否有效的回调函数。

edit_set_is_valid_value 函数

  • 函数功能：

设置输入内容检查函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_is_valid_value (widget_t* widget, edit_is_valid_value_t is_valid_value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
is_valid_value | edit_is_valid_value_t | 检查输入内容是否有效的回调函数。

edit_set_keyboard 函数

  • 函数功能：

设置自定义软键盘名称。

  • 函数原型：
ret_t edit_set_keyboard (widget_t* widget, const char* keyboard);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
keyboard | const char* | 键盘名称(相应UI资源必须存在)。

edit_set_open_im_when_focused 函数

  • 函数功能：

设置编辑器是否在获得焦点时打开输入法。

  • 设置默认焦点时，打开窗口时不弹出软键盘。
  • 用键盘切换焦点时，编辑器获得焦点时不弹出软键盘。
  • 函数原型：
ret_t edit_set_open_im_when_focused (widget_t* widget, bool_t open_im_when_focused);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
open_im_when_focused | bool_t | 是否在获得焦点时打开输入法。

edit_set_password_visible 函数

  • 函数功能：

当编辑器输入类型为密码时，设置密码是否可见。

  • 函数原型：
ret_t edit_set_password_visible (widget_t* widget, bool_t password_visible);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
password_visible | bool_t | 密码是否可见。

edit_set_pre_delete 函数

  • 函数功能：

设置预删除处理的回调函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_pre_delete (widget_t* widget, edit_pre_delete_t pre_delete);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
pre_delete | edit_pre_delete_t | 预删除处理的回调函数(删除时保留分隔符)。

edit_set_pre_input 函数

  • 函数功能：

设置预输入处理的回调函数。 如果内置函数不能满足需求时，可以设置自定义的检查函数。

  • 函数原型：
ret_t edit_set_pre_input (widget_t* widget, edit_pre_input_t pre_input);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
pre_input | edit_pre_input_t | 预输入处理的回调函数(处理一些特殊的键)。

edit_set_readonly 函数

  • 函数功能：

设置编辑器是否为只读。

  • 函数原型：
ret_t edit_set_readonly (widget_t* widget, bool_t readonly);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
readonly | bool_t | 只读。

edit_set_select 函数

  • 函数功能：

选择指定范围的文本。

  • 函数原型：
ret_t edit_set_select (widget_t* widget, uint32_t start, uint32_t end);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
start | uint32_t | 起始偏移。
end | uint32_t | 结束偏移。

edit_set_select_none_when_focused 函数

  • 函数功能：

设置编辑器是否在获得焦点时不选中文本。

  • 函数原型：
ret_t edit_set_select_none_when_focused (widget_t* widget, bool_t select_none_when_focused);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
select_none_when_focused | bool_t | 是否在获得焦点时不选中文本。

edit_set_text_limit 函数

  • 函数功能：

设置为文本输入及其长度限制，不允许输入超过max个字符，少于min个字符时进入error状态。

  • 函数原型：
ret_t edit_set_text_limit (widget_t* widget, uint32_t min, uint32_t max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
min | uint32_t | 最小长度。
max | uint32_t | 最大长度。

edit_set_tips 函数

  • 函数功能：

设置编辑器的输入提示。

  • 函数原型：
ret_t edit_set_tips (widget_t* widget, const char* tips);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
tips | const char* | 输入提示。

edit_set_tr_tips 函数

  • 函数功能：

获取翻译之后的文本，然后调用edit_set_tips。

  • 函数原型：
ret_t edit_set_tr_tips (widget_t* widget, const char* tr_tips);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
tr_tips | const char* | 提示信息。

action_text 属性

软键盘上action按钮的文本。内置取值有：

  • next 将焦点切换到下一个控件。
  • done 完成，关闭软键盘。

也可以使用其它文本，比如send表示发送。这个需要自己实现相应的功能，处理EVT_IM_ACTION事件即可。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_fix 属性

输入无效时，是否自动改正。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

cancelable 属性

是否支持撤销编辑。如果为TRUE，在失去焦点之前可以撤销所有修改(恢复获得焦点之前的内容)。

  • 1.一般配合keyboard的”cancel”按钮使用。
  • 2.为TRUE时，如果内容有变化，会设置编辑器的状态为changed，所以此时编辑器需要支持changed状态的style。
  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

close_im_when_blured 属性

是否在失去焦点时关闭输入法(默认是)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

input_type 属性

输入类型。

  • 类型：input_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

keyboard 属性

自定义软键盘名称。AWTK优先查找keyboard属性设置的键盘文件名（该键盘的XML文件需要在default\raw\ui目录下存在），如果没有指定keyboard，就找input_type设置的键盘类型。如果指定为空字符串，则表示不需要软键盘。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max 属性

最大值或最大长度。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

min 属性

最小值或最小长度。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

open_im_when_focused 属性

获得焦点时打开输入法。

主要用于没有指针设备的情况，否则每次切换焦点时都打开输入法。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

password_visible 属性

密码是否可见。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

readonly 属性

编辑器是否为只读。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

select_none_when_focused 属性

获得焦点时不选中文本。

主要用于没有指针设备的情况，否则软键盘无法取消选中文本。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

step 属性

步长。 作为数值型编辑器时，一次增加和减少时的数值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

tips 属性

输入提示。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

tr_tips 属性

保存用于翻译的提示信息。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


emitter_t

概述

事件分发器, 用于实现观察者模式。

函数

函数名称 | 说明
emitter_cast | 转换为emitter对象(供脚本语言使用)。
emitter_create | 创建emitter对象。
emitter_deinit | 析构。
emitter_destroy | 销毁。
emitter_disable | 禁用。
emitter_dispatch | 分发事件。如果当前分发的回调函数返回RET_REMOVE，该回调函数将被移出。
emitter_dispatch_simple_event | 分发事件。
emitter_enable | 启用。
emitter_exist | 判断指定的事件和回调函数是否已经注册。
emitter_find | 通过ID查找emitter_item_t，主要用于辅助测试。
emitter_forward | 分发事件
emitter_forward_retarget | 分发事件。并将e->target强制设置为ctx。
emitter_init | 初始化emitter对象。
emitter_off | 注销指定事件的处理函数。
emitter_off_by_ctx | 注销指定事件的处理函数。
emitter_off_by_func | 注销指定事件的处理函数。
emitter_off_by_tag | 注销指定事件的处理函数。
emitter_on | 注册指定事件的处理函数。
emitter_on_with_tag | 注册指定事件的处理函数。
emitter_set_on_destroy | 设置一个回调函数，在emitter被销毁时调用(方便脚本语言去释放回调函数)。
emitter_size | 获取注册的回调函数个数，主要用于辅助测试。

属性

属性名称 | 类型 | 说明
disable | int32_t | 禁用标志。禁用时dispatch无效。

emitter_cast 函数

  • 函数功能：

转换为emitter对象(供脚本语言使用)。

主要给脚本语言使用。

  • 函数原型：
emitter_t* emitter_cast (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | emitter_t* | 对象。
emitter | emitter_t* | emitter对象。

emitter_create 函数

  • 函数功能：

创建emitter对象。

  • 函数原型：
emitter_t* emitter_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | emitter_t* | 对象。

emitter_deinit 函数

  • 函数功能：

析构。

  • 函数原型：
ret_t emitter_deinit (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。

emitter_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t emitter_destroy (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。

emitter_disable 函数

  • 函数功能：

禁用。

禁用后emitter_dispatch无效，但可以注册和注销。

  • 函数原型：
ret_t emitter_disable (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。

emitter_dispatch 函数

  • 函数功能：

分发事件。如果当前分发的回调函数返回RET_REMOVE，该回调函数将被移出。 禁用状态下，本函数不做任何事情。

  • 函数原型：
ret_t emitter_dispatch (emitter_t* emitter, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 如果当前分发的回调函数返回RET_STOP，dispatch中断分发，并返回RET_STOP，否则返回RET_OK。
emitter | emitter_t* | emitter对象。
e | event_t* | 事件对象。

emitter_dispatch_simple_event 函数

  • 函数功能：

分发事件。 对emitter_dispatch的包装，分发一个简单的事件。 如果当前分发的回调函数返回RET_STOP，dispatch中断分发，并返回RET_STOP，否则返回RET_OK。

  • 函数原型：
ret_t emitter_dispatch_simple_event (emitter_t* emitter, uint32_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t |
emitter | emitter_t* | emitter对象。
type | uint32_t | 事件类型。

emitter_enable 函数

  • 函数功能：

启用。

  • 函数原型：
ret_t emitter_enable (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。

emitter_exist 函数

  • 函数功能：

判断指定的事件和回调函数是否已经注册。

  • 函数原型：
bool_t emitter_exist (emitter_t* emitter, uint32_t etype, event_func_t handler, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示已经注册，否则表示没有注册。
emitter | emitter_t* | emitter对象。
etype | uint32_t | 事件类型。
handler | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

emitter_find 函数

  • 函数功能：

通过ID查找emitter_item_t，主要用于辅助测试。

  • 函数原型：
emitter_item_t* emitter_find (emitter_t* emitter, uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | emitter_item_t* | 若存在,返回id对应的emitter_item_t，否则返回NULL。
emitter | emitter_t* | emitter对象。
id | uint32_t | emitter_on返回的ID。

emitter_forward 函数

  • 函数功能：

分发事件

  • 函数原型：
ret_t emitter_forward (void* ctx, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ctx | void* | emitter对象。
e | event_t* | 分发的事件。

emitter_forward_retarget 函数

  • 函数功能：

分发事件。并将e->target强制设置为ctx。

  • 函数原型：
ret_t emitter_forward_retarget (void* ctx, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ctx | void* | emitter对象。
e | event_t* | 分发的事件。

emitter_init 函数

  • 函数功能：

初始化emitter对象。

  • 函数原型：
emitter_t* emitter_init (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | emitter_t* | 对象。
emitter | emitter_t* | emitter对象。

emitter_off 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t emitter_off (emitter_t* emitter, uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。
id | uint32_t | emitter_on返回的ID。

emitter_off_by_ctx 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t emitter_off_by_ctx (emitter_t* emitter, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。
ctx | void* | 事件处理函数上下文。

emitter_off_by_func 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t emitter_off_by_func (emitter_t* emitter, uint32_t etype, event_func_t handler, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。
etype | uint32_t | 事件类型。
handler | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

emitter_off_by_tag 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t emitter_off_by_tag (emitter_t* emitter, uint32_t tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。
tag | uint32_t | tag。

emitter_on 函数

  • 函数功能：

注册指定事件的处理函数。

  • 函数原型：
uint32_t emitter_on (emitter_t* emitter, uint32_t etype, event_func_t handler, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于emitter_off。
emitter | emitter_t* | emitter对象。
etype | uint32_t | 事件类型。
handler | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

emitter_on_with_tag 函数

  • 函数功能：

注册指定事件的处理函数。

  • 函数原型：
uint32_t emitter_on_with_tag (emitter_t* emitter, uint32_t etype, event_func_t handler, void* ctx, uint32_t tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于emitter_off。
emitter | emitter_t* | emitter对象。
etype | uint32_t | 事件类型。
handler | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。
tag | uint32_t | tag。

emitter_set_on_destroy 函数

  • 函数功能：

设置一个回调函数，在emitter被销毁时调用(方便脚本语言去释放回调函数)。

  • 函数原型：
ret_t emitter_set_on_destroy (emitter_t* emitter, uint32_t id, tk_destroy_t on_destroy, void* on_destroy_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
emitter | emitter_t* | emitter对象。
id | uint32_t | emitter_on返回的ID。
on_destroy | tk_destroy_t | 回调函数。
on_destroy_ctx | void* | 回调函数上下文。

emitter_size 函数

  • 函数功能：

获取注册的回调函数个数，主要用于辅助测试。

  • 函数原型：
uint32_t emitter_size (emitter_t* emitter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 回调函数个数。
emitter | emitter_t* | emitter对象。

disable 属性

禁用标志。禁用时dispatch无效。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


encoding_name_t

概述

编码名称。

常量

名称 | 说明
ENCODING_UTF8 | UTF-8。
ENCODING_UTF16 | UTF-16。
ENCODING_UTF32 | UTF-32。
ENCODING_GBK | GBK。
ENCODING_BIG | BIG5-2003。
ENCODING_GB2312 | GB_2312-80。
ENCODING_GB18030 | GB18030。


encoding_t

概述

encoding conversion

示例：

函数

函数名称 | 说明
encoding_convert | 字符集转换。
encoding_gbk_to_utf8 | 将gbk转换成utf8编码。
encoding_utf8_to_gbk | 将utf8转换成gbk编码。

encoding_convert 函数

  • 函数功能：

字符集转换。

  • 函数原型：
ret_t encoding_convert (encoding_name_t from, const char* from_str, uint32_t from_size, encoding_name_t to, char* to_str, uint32_t to_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
from | encoding_name_t | 源字符串的编码名称。
from_str | const char* | 源字符串。
from_size | uint32_t | 源字符串的长度。
to | encoding_name_t | 目标字符串的编码名称。
to_str | char* | 目标字符串。
to_size | uint32_t | 目标字符串的最大长度。

encoding_gbk_to_utf8 函数

  • 函数功能：

将gbk转换成utf8编码。

  • 函数原型：
ret_t encoding_gbk_to_utf8 (const char* from_str, uint32_t from_size, char* to_str, uint32_t to_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
from_str | const char* | 源字符串(gbk)。
from_size | uint32_t | 源字符串的长度。
to_str | char* | 目标字符串(utf8)。
to_size | uint32_t | 目标字符串的最大长度。

encoding_utf8_to_gbk 函数

  • 函数功能：

将utf8转换成gbk编码。

  • 函数原型：
ret_t encoding_utf8_to_gbk (const char* from_str, uint32_t from_size, char* to_str, uint32_t to_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
from_str | const char* | 源字符串(utf8)。
from_size | uint32_t | 源字符串的长度。
to_str | char* | 目标字符串(gbk)。
to_size | uint32_t | 目标字符串的最大长度。


endian_t

概述

字节顺序转换相关函数。

示例

uint16_t a = 0x1234;
ENSURE(is_little_endian());
ENSURE(int16_endian_invert(a) == 0x3412);
ENSURE(int16_from_big_endian(a) == 0x3412);
ENSURE(int16_to_big_endian(a) == 0x3412);

int32_t b = 0x12345678;
ENSURE(int32_endian_invert(b) == 0x78563412);
ENSURE(int32_from_big_endian(b) == 0x78563412);
ENSURE(int32_to_big_endian(b) == 0x78563412);

int64_t c = 0x1234567890ABCDEF;
ENSURE(int64_endian_invert(c) == 0xEFCDAB9078563412);
ENSURE(int64_from_big_endian(c) == 0xEFCDAB9078563412);
ENSURE(int64_to_big_endian(c) == 0xEFCDAB9078563412);

float f1 = 1.23;
float f2 = float_endian_invert(f1);
ENSURE(float_from_big_endian(f2) == f1);
float f3 = float_from_big_endian(f2);
ENSURE(float_to_big_endian(f3) == f2);

double d1 = 1.2345678;
double d2 = double_endian_invert(d1);
ENSURE(double_from_big_endian(d2) == d1);
double d3 = double_from_big_endian(d2);
ENSURE(double_to_big_endian(d3) == d2);

函数

函数名称 | 说明
double_endian_invert | double浮点数大小端模式转换。
double_from_big_endian | double浮点数转换为小端模式。
double_to_big_endian | double浮点数转换为大端模式。
float_endian_invert | float浮点数大小端模式转换。
float_from_big_endian | float浮点数转换为小端模式。
float_to_big_endian | float浮点数转换为大端模式。
int16_endian_invert | 16 整数大小端模式转换。
int16_from_big_endian | 16 整数转换为小端模式。
int16_to_big_endian | 16 整数转换为大端模式。
int32_endian_invert | 32 整数大小端模式转换。
int32_from_big_endian | 32 整数转换为小端模式。
int32_to_big_endian | 32 整数转换为大端模式。
int64_endian_invert | 64 整数大小端模式转换。
int64_from_big_endian | 64 整数转换为小端模式。
int64_to_big_endian | 64 整数转换为大端模式。
is_little_endian | 检查当前系统是否是小端模式。

double_endian_invert 函数

  • 函数功能：

double浮点数大小端模式转换。

  • 函数原型：
double double_endian_invert (double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回转换后的数据。
value | double | 输入数据。

double_from_big_endian 函数

  • 函数功能：

double浮点数转换为小端模式。

  • 函数原型：
double double_from_big_endian (double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回转换后的数据。
value | double | 输入数据。

double_to_big_endian 函数

  • 函数功能：

double浮点数转换为大端模式。

  • 函数原型：
double double_to_big_endian (double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回转换后的数据。
value | double | 输入数据。

float_endian_invert 函数

  • 函数功能：

float浮点数大小端模式转换。

  • 函数原型：
float float_endian_invert (float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回转换后的数据。
value | float | 输入数据。

float_from_big_endian 函数

  • 函数功能：

float浮点数转换为小端模式。

  • 函数原型：
float float_from_big_endian (float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回转换后的数据。
value | float | 输入数据。

float_to_big_endian 函数

  • 函数功能：

float浮点数转换为大端模式。

  • 函数原型：
float float_to_big_endian (float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 返回转换后的数据。
value | float | 输入数据。

int16_endian_invert 函数

  • 函数功能：

16 整数大小端模式转换。

  • 函数原型：
int16_t int16_endian_invert (int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int16_t | 返回转换后的数据。
value | int16_t | 输入数据。

int16_from_big_endian 函数

  • 函数功能：

16 整数转换为小端模式。

  • 函数原型：
int16_t int16_from_big_endian (int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int16_t | 返回转换后的数据。
value | int16_t | 输入数据。

int16_to_big_endian 函数

  • 函数功能：

16 整数转换为大端模式。

  • 函数原型：
int16_t int16_to_big_endian (int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int16_t | 返回转换后的数据。
value | int16_t | 输入数据。

int32_endian_invert 函数

  • 函数功能：

32 整数大小端模式转换。

  • 函数原型：
int32_t int32_endian_invert (int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回转换后的数据。
value | int32_t | 输入数据。

int32_from_big_endian 函数

  • 函数功能：

32 整数转换为小端模式。

  • 函数原型：
int32_t int32_from_big_endian (int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回转换后的数据。
value | int32_t | 输入数据。

int32_to_big_endian 函数

  • 函数功能：

32 整数转换为大端模式。

  • 函数原型：
int32_t int32_to_big_endian (int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回转换后的数据。
value | int32_t | 输入数据。

int64_endian_invert 函数

  • 函数功能：

64 整数大小端模式转换。

  • 函数原型：
int64_t int64_endian_invert (int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回转换后的数据。
value | int64_t | 输入数据。

int64_from_big_endian 函数

  • 函数功能：

64 整数转换为小端模式。

  • 函数原型：
int64_t int64_from_big_endian (int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回转换后的数据。
value | int64_t | 输入数据。

int64_to_big_endian 函数

  • 函数功能：

64 整数转换为大端模式。

  • 函数原型：
int64_t int64_to_big_endian (int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回转换后的数据。
value | int64_t | 输入数据。

is_little_endian 函数

  • 函数功能：

检查当前系统是否是小端模式。

  • 函数原型：
bool_t is_little_endian ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。


enum_helper

概述

函数

函数名称 | 说明
asset_type_find_by_value | 获取资源类型枚值和名称的对应关系。
find_item | 获取特定枚值和名称的对应关系。
find_item_by_value | 获取特定枚值和名称的对应关系。
input_type_find | 获取输入类型值和名称的对应关系。
keys_type_find | 获取按键值和名称的对应关系。
keys_type_find_by_value | 获取按键值和名称的对应关系。
keys_type_set_custom_keys | 设置自定义键值表。

asset_type_find_by_value 函数

  • 函数功能：

获取资源类型枚值和名称的对应关系。

  • 函数原型：
const key_type_value_t* asset_type_find_by_value (uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const key_type_value_t* | 返回资源类型枚值和名称的对应关系。
value | uint32_t | 资源的类型。

find_item 函数

  • 函数功能：

获取特定枚值和名称的对应关系。

  • 函数原型：
const key_type_value_t* find_item (const key_type_value_t* items, uint32_t nr, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const key_type_value_t* | 返回资源类型枚值和名称的对应关系。
items | const key_type_value_t* | 特定枚举值对应列表。
nr | uint32_t | 列表长度。
name | const char* | 名称。

find_item_by_value 函数

  • 函数功能：

获取特定枚值和名称的对应关系。

  • 函数原型：
const key_type_value_t* find_item_by_value (const key_type_value_t* items, uint32_t nr, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const key_type_value_t* | 返回资源类型枚值和名称的对应关系。
items | const key_type_value_t* | 特定枚举值对应列表。
nr | uint32_t | 列表长度。
value | uint32_t | 资源的类型。

input_type_find 函数

  • 函数功能：

获取输入类型值和名称的对应关系。

  • 函数原型：
const key_type_value_t* input_type_find (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const key_type_value_t* | 返回输入类型值和名称的对应关系。
name | const char* | 输入类型名。

keys_type_find 函数

  • 函数功能：

获取按键值和名称的对应关系。

  • 函数原型：
const key_type_value_t* keys_type_find (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const key_type_value_t* | 返回按键值和名称的对应关系。
name | const char* | 按键名。

keys_type_find_by_value 函数

  • 函数功能：

获取按键值和名称的对应关系。

  • 函数原型：
const key_type_value_t* keys_type_find_by_value (uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const key_type_value_t* | 返回按键值和名称的对应关系。
value | uint32_t | 按键值。

keys_type_set_custom_keys 函数

  • 函数功能：

设置自定义键值表。 请确保键值表的生命周期在程序运行期一直存在，不要传入局部变量。

  • 函数原型：
ret_t keys_type_set_custom_keys (const key_type_value_t* table, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
table | const key_type_value_t* | 键值表(NULL清除之前的设置)。
nr | uint32_t | 键值表的长度。


error_event_t

概述

执行完成事件。

函数

函数名称 | 说明
error_event_cast | 把event对象转error_event_t对象。
error_event_init | 初始error event。

属性

属性名称 | 类型 | 说明
code | int32_t | 错误码。
message | const char* | 错误信息。

error_event_cast 函数

  • 函数功能：

把event对象转error_event_t对象。

  • 函数原型：
error_event_t* error_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | error_event_t* | 返回event对象。
event | event_t* | event对象。

error_event_init 函数

  • 函数功能：

初始error event。

  • 函数原型：
event_t* error_event_init (error_event_t* event, int32_t code, const char* message);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | error_event_t* | event对象。
code | int32_t | 错误码。
message | const char* | 错误消息。

code 属性

错误码。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

message 属性

错误信息。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


eval_t

概述

表达式。

函数

函数名称 | 说明
eval_default_hooks | 获取内置函数。
eval_execute | 计算表达式的值。
eval_result_to_string | 将错误码转换成字符串。
expr_value_clear | 清除值。
expr_value_get_number | 获取浮点数值。
expr_value_get_string | 获取字符串。
expr_value_init | 初始化值。
expr_value_set_number | 设置浮点数值。
expr_value_set_string | 设置字符串。
tk_expr_eval | 计算表达式返回浮点数。
tk_expr_eval_str | 计算表达式返回字符串。

eval_default_hooks 函数

  • 函数功能：

获取内置函数。

  • 函数原型：
const EvalHooks* eval_default_hooks ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const EvalHooks* | 回调函数列表。

eval_execute 函数

  • 函数功能：

计算表达式的值。

  • 函数原型：
EvalResult eval_execute (const char* expr, const EvalHooks* hooks, void* ctx, ExprValue* output);
  • 参数说明：
参数 | 类型 | 说明
返回值 | EvalResult | 返回EVAL_RESULT_OK表示成功，否则表示失败。
expr | const char* | 表达式
hooks | const EvalHooks* | 回调函数。
ctx | void* | 回调函数的上下文。
output | ExprValue* | 计算结果。

eval_result_to_string 函数

  • 函数功能：

将错误码转换成字符串。

  • 函数原型：
const char* eval_result_to_string (EvalResult result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对应的字符串。
result | EvalResult | 值。

expr_value_clear 函数

  • 函数功能：

清除值。

  • 函数原型：
void expr_value_clear (ExprValue* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回void。
v | ExprValue* | 值对象。

expr_value_get_number 函数

  • 函数功能：

获取浮点数值。

  • 函数原型：
double expr_value_get_number (const ExprValue* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回浮点数值。
v | const ExprValue* | 值对象。

expr_value_get_string 函数

  • 函数功能：

获取字符串。

  • 函数原型：
const char* expr_value_get_string (const ExprValue* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串。
v | const ExprValue* | 值对象。

expr_value_init 函数

  • 函数功能：

初始化值。

  • 函数原型：
void expr_value_init (ExprValue* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回void。
v | ExprValue* | 值对象。

expr_value_set_number 函数

  • 函数功能：

设置浮点数值。

  • 函数原型：
EvalResult expr_value_set_number (ExprValue* v, double val);
  • 参数说明：
参数 | 类型 | 说明
返回值 | EvalResult | 返回EVAL_RESULT_OK表示成功，否则表示失败。
v | ExprValue* | 值对象。
val | double | 浮点数的值。

expr_value_set_string 函数

  • 函数功能：

设置字符串。

  • 函数原型：
EvalResult expr_value_set_string (ExprValue* v, const char* str, size_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | EvalResult | 返回EVAL_RESULT_OK表示成功，否则表示失败。
v | ExprValue* | 值对象。
str | const char* | 字符串。
len | size_t | 字符串长度。

tk_expr_eval 函数

  • 函数功能：

计算表达式返回浮点数。

  • 函数原型：
double tk_expr_eval (const char* expor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回结果。
expor | const char* | 表达式

tk_expr_eval_str 函数

  • 函数功能：

计算表达式返回字符串。

  • 函数原型：
const char* tk_expr_eval_str (const char* expor, char* result, uint32_t );
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回结果。
expor | const char* | 表达式
result | char* | 结果字符串
 | uint32_t | 。


event_base_type_t

概述

类型常量定义。

常量

名称 | 说明
EVT_NONE | 无效事件名称。
EVT_PROP_WILL_CHANGE | 对象的属性即将改变的事件名(prop_change_event_t)。
EVT_PROP_CHANGED | 对象的属性改变的事件名(prop_change_event_t)。
EVT_ITEMS_WILL_CHANGE | 即将增加和删除集合中的项目(event_t)。
EVT_ITEMS_CHANGED | 完成增加和删除集合中的项目(event_t)。
EVT_PROPS_CHANGED | 对象的属性改变的事件名(props_event_t)。
EVT_PROGRESS | 进度状态(progress_event_t)。
EVT_DESTROY | 对象销毁事件名(event_t)。


event_recorder_player_t

概述

事件录制与重放，用于辅助自动测试和压力测试。

函数

函数名称 | 说明
event_recorder_player_start_play | 开始事件重放。
event_recorder_player_start_record | 开始事件记录。
event_recorder_player_stop_play | 停止事件重放。
event_recorder_player_stop_record | 停止事件记录。

event_recorder_player_start_play 函数

  • 函数功能：

开始事件重放。

  • 函数原型：
ret_t event_recorder_player_start_play (const char* filename, uint32_t times);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 存放事件的文件名。
times | uint32_t | 循环播放的次数。

event_recorder_player_start_record 函数

  • 函数功能：

开始事件记录。

  • 函数原型：
ret_t event_recorder_player_start_record (const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 用于保存事件的文件名。

event_recorder_player_stop_play 函数

  • 函数功能：

停止事件重放。

  • 函数原型：
ret_t event_recorder_player_stop_play ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

event_recorder_player_stop_record 函数

  • 函数功能：

停止事件记录。

  • 函数原型：
ret_t event_recorder_player_stop_record ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


event_source_fd_t

概述

fd事件源。用于文件、管道和套接字。

函数

函数名称 | 说明
event_source_fd_create | 创建fd事件源。

event_source_fd_create 函数

  • 函数功能：

创建fd事件源。

  • 函数原型：
event_source_t* event_source_fd_create (int fd, event_source_on_event_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_source_t* | 返回事件源对象。
fd | int | 可以用select等待的文件描述符。
on_event | event_source_on_event_t | 用户的事件处理函数。
ctx | void* | on_event函数的上下文。


event_source_idle_t

概述

idle事件源。

函数

函数名称 | 说明
event_source_idle_create | 创建idle事件源。

event_source_idle_create 函数

  • 函数功能：

创建idle事件源。

  • 函数原型：
event_source_t* event_source_idle_create (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_source_t* | 返回事件源对象。
idle_manager | idle_manager_t* | 定时器管理器对象。


event_source_manager_default_t

概述

缺省的事件源管理器。

函数

函数名称 | 说明
event_source_manager_default_create | 创建事件源管理器。

event_source_manager_default_create 函数

  • 函数功能：

创建事件源管理器。

  • 函数原型：
event_source_manager_t* event_source_manager_default_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_source_manager_t* | 返回事件源管理器对象。


event_source_manager_t

概述

事件源管理器。

函数

函数名称 | 说明
event_source_manager_add | 增加事件源对象。
event_source_manager_deinit | ~初始化。
event_source_manager_destroy | 销毁事件源管理器。
event_source_manager_dispatch | 分发事件。
event_source_manager_get_wakeup_time | 获取wakeup时间(ms)
event_source_manager_init | 初始化。
event_source_manager_remove | 移除事件源对象。
event_source_manager_remove_by_tag | 移除所有tag相同的事件源对象。
event_source_manager_set_min_sleep_time | 设置默认最小睡眠时间。

event_source_manager_add 函数

  • 函数功能：

增加事件源对象。

  • 函数原型：
ret_t event_source_manager_add (event_source_manager_t* manager, event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。
source | event_source_t* | event_source对象。

event_source_manager_deinit 函数

  • 函数功能：

~初始化。

  • 函数原型：
ret_t event_source_manager_deinit (event_source_manager_t* manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。

event_source_manager_destroy 函数

  • 函数功能：

销毁事件源管理器。

  • 函数原型：
ret_t event_source_manager_destroy (event_source_manager_t* manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。

event_source_manager_dispatch 函数

  • 函数功能：

分发事件。

  • 函数原型：
ret_t event_source_manager_dispatch (event_source_manager_t* manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。

event_source_manager_get_wakeup_time 函数

  • 函数功能：

获取wakeup时间(ms)

  • 函数原型：
uint32_t event_source_manager_get_wakeup_time (event_source_manager_t* manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回wakeup时间(ms)。
manager | event_source_manager_t* | event_source_manager对象。

event_source_manager_init 函数

  • 函数功能：

初始化。

  • 函数原型：
ret_t event_source_manager_init (event_source_manager_t* manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。

event_source_manager_remove 函数

  • 函数功能：

移除事件源对象。

  • 函数原型：
ret_t event_source_manager_remove (event_source_manager_t* manager, event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。
source | event_source_t* | event_source对象。

event_source_manager_remove_by_tag 函数

  • 函数功能：

移除所有tag相同的事件源对象。

  • 函数原型：
ret_t event_source_manager_remove_by_tag (event_source_manager_t* manager, void* tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。
tag | void* | tag。

event_source_manager_set_min_sleep_time 函数

  • 函数功能：

设置默认最小睡眠时间。

  • 函数原型：
ret_t event_source_manager_set_min_sleep_time (event_source_manager_t* manager, uint32_t sleep_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
manager | event_source_manager_t* | event_source_manager对象。
sleep_time | uint32_t | 默认最小睡眠时间(毫秒)。


event_source_t

概述

表示一个事件源。

事件源有下列两种方式：

  • 对于有文件描述符的事件源(如socket)，get_fd返回一个有效的文件描述符。
  • 对于定时器，则get_wakeup_time返回下次唤醒的时间。

函数

函数名称 | 说明
event_source_check | 对于没有文件描述符的事件源，需要自己检查是否准备就绪。
event_source_dispatch | 分发事件。
event_source_get_fd | 获取文件描述符。
event_source_get_wakeup_time | 获取唤醒时间(ms)。
event_source_set_tag | 设置tag，方便通过tag一次移除多个事件源。

event_source_check 函数

  • 函数功能：

对于没有文件描述符的事件源，需要自己检查是否准备就绪。

  • 函数原型：
ret_t event_source_check (event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
source | event_source_t* | event_source对象。

event_source_dispatch 函数

  • 函数功能：

分发事件。

  • 函数原型：
ret_t event_source_dispatch (event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
source | event_source_t* | event_source对象。

event_source_get_fd 函数

  • 函数功能：

获取文件描述符。

  • 函数原型：
int32_t event_source_get_fd (event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回文件描述符。
source | event_source_t* | event_source对象。

event_source_get_wakeup_time 函数

  • 函数功能：

获取唤醒时间(ms)。

  • 函数原型：
uint32_t event_source_get_wakeup_time (event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回唤醒时间(ms)。
source | event_source_t* | event_source对象。

event_source_set_tag 函数

  • 函数功能：

设置tag，方便通过tag一次移除多个事件源。

  • 函数原型：
ret_t event_source_set_tag (event_source_t* source, void* tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
source | event_source_t* | event_source对象。
tag | void* | tag。


event_source_timer_t

概述

timer事件源。

函数

函数名称 | 说明
event_source_timer_create | 创建timer事件源。

event_source_timer_create 函数

  • 函数功能：

创建timer事件源。

  • 函数原型：
event_source_t* event_source_timer_create (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_source_t* | 返回事件源对象。
timer_manager | timer_manager_t* | 定时器管理器对象。


event_t

概述

事件基类。

函数

函数名称 | 说明
event_cast | 转换为event对象。
event_clone | clone事件对象。
event_create | 创建event对象。
event_destroy | 销毁事件对象。
event_from_name | 将事件名转换成事件的值。
event_get_type | 获取event类型。
event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
native_window_handle | void* | 原生窗口句柄。
size | uint32_t | 结构体的大小。
target | void* | 事件发生的目标对象。
time | uint64_t | 事件发生的时间点（该时间点并非真实时间）。
type | uint32_t | 类型。

event_cast 函数

  • 函数功能：

转换为event对象。

供脚本语言使用

  • 函数原型：
event_t* event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | event_t* | event对象。

event_clone 函数

  • 函数功能：

clone事件对象。

  • 函数原型：
event_t* event_clone (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回事件对象。
event | event_t* | event对象。

event_create 函数

  • 函数功能：

创建event对象。

主要给脚本语言使用。

  • 函数原型：
event_t* event_create (uint32_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回事件对象。
type | uint32_t | 事件类型。

event_destroy 函数

  • 函数功能：

销毁事件对象。

主要给脚本语言使用。

  • 函数原型：
ret_t event_destroy (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
event | event_t* | event对象。

event_from_name 函数

  • 函数功能：

将事件名转换成事件的值。

  • 函数原型：
int32_t event_from_name (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回事件的值。
name | const char* | 事件名。

event_get_type 函数

  • 函数功能：

获取event类型。

  • 函数原型：
uint32_t event_get_type (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回event类型。
event | event_t* | event对象。

event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t event_init (uint32_t type, void* target);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t | 事件对象。
type | uint32_t | 事件类型。
target | void* | 目标对象。

native_window_handle 属性

原生窗口句柄。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

结构体的大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

target 属性

事件发生的目标对象。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

time 属性

事件发生的时间点（该时间点并非真实时间）。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

type 属性

类型。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


event_type_t

概述

类型常量定义。

常量

名称 | 说明
EVT_POINTER_DOWN | 指针按下事件名(pointer_event_t)。
EVT_POINTER_DOWN_BEFORE_CHILDREN | 指针按下事件名，在子控件处理之前触发(pointer_event_t)。
EVT_POINTER_MOVE | 指针移动事件名(pointer_event_t)。
EVT_POINTER_MOVE_BEFORE_CHILDREN | 指针移动事件名，在子控件处理之前触发(pointer_event_t)。
EVT_POINTER_UP | 指针抬起事件名(pointer_event_t)。
EVT_POINTER_UP_BEFORE_CHILDREN | 指针抬起事件名，在子控件处理之前触发(pointer_event_t)。
EVT_WHEEL | 滚轮事件名(wheel_event_t)。
EVT_WHEEL_BEFORE_CHILDREN | 鼠标滚轮事件名，在子控件处理之前触发(wheel_event_t)。
EVT_POINTER_DOWN_ABORT | 取消前一个指针按下事件名(pointer_event_t)。
EVT_CONTEXT_MENU | 右键/长按弹出上下文菜单的事件名(pointer_event_t)。
EVT_POINTER_ENTER | 指针进入事件名(pointer_event_t)。
EVT_POINTER_LEAVE | 指针离开事件名(pointer_event_t)。
EVT_LONG_PRESS | 长按事件名(pointer_event_t)。
EVT_CLICK | 点击事件名(pointer_event_t)。
EVT_DOUBLE_CLICK | 双击事件名(pointer_event_t)。
EVT_FOCUS | 得到焦点事件名(event_t)。
EVT_BLUR | 失去焦点事件名(event_t)。
EVT_KEY_DOWN | 键按下事件名(key_event_t)。
EVT_KEY_LONG_PRESS | 键长按事件名(key_event_t)。
EVT_KEY_DOWN_BEFORE_CHILDREN | 键按下事件名，在子控件处理之前触发(key_event_t)。
EVT_KEY_REPEAT | 按键repeat事件名(key_event_t)。
EVT_KEY_UP | 键抬起事件名(key_event_t)。
EVT_KEY_UP_BEFORE_CHILDREN | 键抬起事件名，在子控件处理之前触发(key_event_t)。
EVT_WILL_MOVE | 即将移动Widget的事件名(event_t)。
EVT_MOVE | 移动Widget的事件名(event_t)。
EVT_WILL_RESIZE | 即将调整Widget大小的事件名(event_t)。
EVT_RESIZE | 调整Widget大小的事件名(event_t)。
EVT_WILL_MOVE_RESIZE | 即将调整Widget大小/位置的事件名(event_t)。
EVT_MOVE_RESIZE | 调整Widget大小/位置的事件名(event_t)。
EVT_VALUE_WILL_CHANGE | 控件的值即将改变的事件名(value_change_event_t)。
EVT_VALUE_CHANGED | 控件的值改变的事件名(value_change_event_t)。
EVT_VALUE_CHANGING | 控件的值持续改变(如编辑器正在编辑)的事件名(value_change_event_t)。
EVT_PAINT | 绘制的事件名(paint_event_t)。
EVT_BEFORE_PAINT | 即将绘制的事件名(paint_event_t)。
EVT_AFTER_PAINT | 绘制完成的事件名(paint_event_t)。
EVT_PAINT_DONE | 绘制完成(canvas状态已经恢复)的事件名(paint_event_t)。
EVT_LOCALE_CHANGED | locale改变的事件(event_t)。
EVT_ANIM_START | 控件动画开始事件(event_t)。
EVT_ANIM_STOP | 控件动画被主动停止的事件(event_t)。
EVT_ANIM_PAUSE | 控件动画被暂停的事件(event_t)。
EVT_ANIM_ONCE | 控件动画yoyo/repeat时，完成一次的事件(event_t)。
EVT_ANIM_END | 控件动画完成事件(event_t)。
EVT_WINDOW_LOAD | 窗口加载完成事件(event_t)。
EVT_WIDGET_LOAD | 控件加载完成事件(event_t)。
EVT_WINDOW_WILL_OPEN | 窗口即将打开事件(event_t)。如果有窗口动画，在窗口动画开始前触发。如果没有窗口动画，在窗口被加载后的下一次循环中触发。
EVT_WINDOW_OPEN | 窗口打开事件(event_t)。如果有窗口动画，在窗口动画完成时触发。如果没有窗口动画，在窗口被加载后的下一次循环中触发。
EVT_WINDOW_TO_BACKGROUND | 窗口被切换到后台事件(event_t)。打开新窗口时，当前窗口被切换到后台时，对当前窗口触发本事件。
EVT_WINDOW_TO_FOREGROUND | 窗口被切换到前台事件(event_t)。关闭当前窗口时，前一个窗口被切换到前台时，对前一个窗口触发本事件。
EVT_WINDOW_CLOSE | 窗口关闭事件。
EVT_REQUEST_CLOSE_WINDOW | 请求关闭窗口的事件(event_t)。
EVT_TOP_WINDOW_CHANGED | 顶层窗口改变的事件(window_event_t)。
EVT_IM_START | 输入法启动(event_t)。
EVT_IM_STOP | 输入法停止(event_t)。
EVT_IM_COMMIT | 输入法提交输入的文本事件(im_commit_event_t)。
EVT_IM_CLEAR | 清除编辑器内容(event_t)。
EVT_IM_CANCEL | 取消编辑，恢复之前的内容(event_t)。
EVT_IM_PREEDIT | 进入预编辑状态(event_t)。
EVT_IM_PREEDIT_CONFIRM | 确认预编辑内容，退出预编辑状态(event_t)。
EVT_IM_PREEDIT_ABORT | 删除预编辑内容，退出预编辑状态event_t)。
EVT_IM_SHOW_CANDIDATES | 输入法请求显示候选字事件(im_candidates_event_t)。
EVT_IM_SHOW_PRE_CANDIDATES | 输入法请求显示预候选字事件(im_candidates_event_t)。
EVT_IM_LANG_CHANGED | 输入法语言改变事件(event_t)。
EVT_IM_ACTION | 软键盘Action点击事件(event_t)。
EVT_IM_ACTION_INFO | 请求更新软键盘上的Action按钮的信息(im_action_button_info_event_t)。
EVT_DRAG_START | 开始拖动(event_t)。
EVT_DRAG | 拖动(event_t)。
EVT_DRAG_END | 结束拖动(event_t)。
EVT_RESET | Reset(event_t)。
EVT_SCREEN_SAVER | 在指定的时间内，没有用户输入事件，由窗口管理器触发。
EVT_LOW_MEMORY | 内存不足(event_t)。
EVT_OUT_OF_MEMORY | 内存耗尽(event_t)。
EVT_ORIENTATION_WILL_CHANGED | 屏幕即将旋转(event_t)。
EVT_ORIENTATION_CHANGED | 屏幕旋转(event_t)。
EVT_WIDGET_CREATED | 控件创建事件(event_t)。
EVT_REQUEST_QUIT_APP | 请求退出应用程序事件。点击原生窗口关闭按钮时，通过窗口管理器触发，注册该事件并返回RET_STOP，可以阻止窗口关闭。
EVT_THEME_WILL_CHANGE | 即将改变主题(event_t)。
EVT_THEME_CHANGED | 主题变化(event_t)。
EVT_WIDGET_ADD_CHILD | 控件加载新的子控件(event_t)。
EVT_WIDGET_REMOVE_CHILD | 控件移除子控件(event_t)。
EVT_SCROLL_START | scroll view开始滚动(event_t)。
EVT_SCROLL | scroll view滚动(event_t)。
EVT_SCROLL_END | scroll view结束滚动(event_t)。
EVT_MULTI_GESTURE | 多点触摸手势(multi_gesture_event_t)。
EVT_PAGE_CHANGED | 页面改变了(event_t)。
EVT_PAGE_CHANGING | 页面正在改变(offset_change_event_t)。
EVT_ASSET_MANAGER_LOAD_ASSET | 资源管理加载某个资源(assets_event_t)。
EVT_ASSET_MANAGER_UNLOAD_ASSET | 资源管理卸载某个资源(assets_event_t)。
EVT_ASSET_MANAGER_CLEAR_CACHE | 资源管理移除同种资源缓存(assets_event_t)。
EVT_TIMER | 定时器(event_t)。
EVT_DATA | 数据到来(event_t)。
EVT_CONNECT | 客户连接到来(event_t)。
EVT_MODEL_CHANGE | 模型变化。用于fscript实现窗口间通讯(model_event_t)。
EVT_SYSTEM | SDL系统事件(system_event_t)。
EVT_DROP_FILE | SDL文件拖入事件(drop_file_event_t)。
EVT_LOCALE_INFOS_LOAD_INFO | locale_infos加载某个本地化信息(event_t)。
EVT_LOCALE_INFOS_UNLOAD_INFO | locale_infos卸载某个本地化信息(event_t)。
EVT_REQ_START | event queue其它请求编号起始值。
EVT_USER_START | 用户定义事件起始值。
EVT_NONE | 无效事件名称。
EVT_PROP_WILL_CHANGE | 对象的属性即将改变的事件名(prop_change_event_t)。
EVT_PROP_CHANGED | 对象的属性改变的事件名(prop_change_event_t)。
EVT_CMD_WILL_EXEC | 对象即将执行命令(cmd_exec_event_t)。
EVT_CMD_EXECED | 对象完成执行命令(cmd_exec_event_t)。
EVT_CMD_CAN_EXEC | 对象命令是否能执行指定的命令(cmd_exec_event_t)。
EVT_ITEMS_WILL_CHANGE | 即将增加和删除集合中的项目(event_t)。
EVT_ITEMS_CHANGED | 完成增加和删除集合中的项目(event_t)。
EVT_PROPS_CHANGED | 对象的属性改变的事件名(props_event_t)。
EVT_PROGRESS | 进度状态(progress_event_t)。
EVT_DONE | 完成(done_event_t)。
EVT_ERROR | 错误(error_event_t)。
EVT_DESTROY | 对象销毁事件名(event_t)。


ext_widgets_t

概述

扩展控件。

函数

函数名称 | 说明
tk_ext_widgets_init | 初始化AWTK扩展控件。

tk_ext_widgets_init 函数

  • 函数功能：

初始化AWTK扩展控件。

  • 函数原型：
ret_t tk_ext_widgets_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


fb_item_t

概述

文件或目录的信息。

属性

属性名称 | 类型 | 说明
atime | uint64_t | 最后一次访问时间。
ctime | uint64_t | 创建时间。
is_dir | bool_t | 是否是目录。
is_reg_file | bool_t | 是否是常规文件。
mtime | uint64_t | 最后修改时间。
name | char* | 名称。
size | uint64_t | 文件大小。

atime 属性

最后一次访问时间。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ctime 属性

创建时间。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

is_dir 属性

是否是目录。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

is_reg_file 属性

是否是常规文件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

mtime 属性

最后修改时间。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

文件大小。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


file_browser_t

概述

文件浏览器模型。

函数

函数名称 | 说明
file_browser_create | 创建file_browser对象
file_browser_create_dir | 在当前目录下创建指定子目录。
file_browser_create_file | 在当前目录下创建指定文件。
file_browser_destroy | 销毁file_browser对象
file_browser_enter | 进入当前目录下的指定子目录。
file_browser_get_item | 获取指定项序数的项目。
file_browser_get_items_nr | 获取当前目录下文件项个数。
file_browser_refresh | 刷新。
file_browser_remove | 删除当前目录下的指定子目录或文件。
file_browser_set_compare | 设置排序用的比较函数。
file_browser_set_cwd | 设置当前目录。
file_browser_set_filter | 设置过滤函数。
file_browser_set_ignore_hidden_files | 设置是否忽略隐藏文件。
file_browser_set_top_dir | 设置顶层目录。
file_browser_sort_by_mtime | 按修改时间排序。
file_browser_sort_by_name | 按名称排序。
file_browser_sort_by_size | 按大小排序。
file_browser_sort_by_type | 按类型排序。
file_browser_up | 返回上一级目录。

属性

属性名称 | 类型 | 说明
cwd | char* | 当前路径。
top_dir | char* | 最顶层目录。到达本目录后，不允许往上。

file_browser_create 函数

  • 函数功能：

创建file_browser对象

  • 函数原型：
file_browser_t* file_browser_create (fs_t* fs);
  • 参数说明：
参数 | 类型 | 说明
返回值 | file_browser_t* | 对象。
fs | fs_t* | 文件系统对象。

file_browser_create_dir 函数

  • 函数功能：

在当前目录下创建指定子目录。

  • 函数原型：
ret_t file_browser_create_dir (file_browser_t* fb, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
name | const char* | 当前目录下的子目录名。

file_browser_create_file 函数

  • 函数功能：

在当前目录下创建指定文件。

  • 函数原型：
ret_t file_browser_create_file (file_browser_t* fb, const char* name, const void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
name | const char* | 当前目录下的文件名。
buff | const void* | 文件内容。
size | uint32_t | 文件内容的长度。

file_browser_destroy 函数

  • 函数功能：

销毁file_browser对象

  • 函数原型：
ret_t file_browser_destroy (file_browser_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。

file_browser_enter 函数

  • 函数功能：

进入当前目录下的指定子目录。

  • 函数原型：
ret_t file_browser_enter (file_browser_t* fb, const char* dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
dir | const char* | 当前目录下的子目录名。

file_browser_get_item 函数

  • 函数功能：

获取指定项序数的项目。

  • 函数原型：
fb_item_t* file_browser_get_item (file_browser_t* fb, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fb_item_t* | 返回指定项序数的项目。
fb | file_browser_t* | file browser对象。
index | uint32_t | 序数。

file_browser_get_items_nr 函数

  • 函数功能：

获取当前目录下文件项个数。

  • 函数原型：
uint32_t file_browser_get_items_nr (file_browser_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回当前目录下文件项个数。
fb | file_browser_t* | file browser对象。

file_browser_refresh 函数

  • 函数功能：

刷新。

  • 函数原型：
ret_t file_browser_refresh (file_browser_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。

file_browser_remove 函数

  • 函数功能：

删除当前目录下的指定子目录或文件。

  • 函数原型：
ret_t file_browser_remove (file_browser_t* fb, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
name | const char* | 当前目录下的子目录名/文件名。

file_browser_set_compare 函数

  • 函数功能：

设置排序用的比较函数。

  • 函数原型：
ret_t file_browser_set_compare (file_browser_t* fb, tk_compare_t compare);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
compare | tk_compare_t | 排序用的比较函数。

file_browser_set_cwd 函数

  • 函数功能：

设置当前目录。

  • 函数原型：
ret_t file_browser_set_cwd (file_browser_t* fb, const char* cwd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
cwd | const char* | 当前目录。

file_browser_set_filter 函数

  • 函数功能：

设置过滤函数。

  • 函数原型：
ret_t file_browser_set_filter (file_browser_t* fb, tk_filter_t filter, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
filter | tk_filter_t | 过滤函数。
ctx | void* | 过滤函数的上下文。

file_browser_set_ignore_hidden_files 函数

  • 函数功能：

设置是否忽略隐藏文件。

  • 函数原型：
ret_t file_browser_set_ignore_hidden_files (file_browser_t* fb, bool_t ignore_hidden_files);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
ignore_hidden_files | bool_t | 是否忽略隐藏文件。

file_browser_set_top_dir 函数

  • 函数功能：

设置顶层目录。

  • 函数原型：
ret_t file_browser_set_top_dir (file_browser_t* fb, const char* top_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
top_dir | const char* | 顶层目录。

file_browser_sort_by_mtime 函数

  • 函数功能：

按修改时间排序。

  • 函数原型：
ret_t file_browser_sort_by_mtime (file_browser_t* fb, bool_t ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
ascending | bool_t | 按升序排。

file_browser_sort_by_name 函数

  • 函数功能：

按名称排序。

  • 函数原型：
ret_t file_browser_sort_by_name (file_browser_t* fb, bool_t ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
ascending | bool_t | 按升序排。

file_browser_sort_by_size 函数

  • 函数功能：

按大小排序。

  • 函数原型：
ret_t file_browser_sort_by_size (file_browser_t* fb, bool_t ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
ascending | bool_t | 按升序排。

file_browser_sort_by_type 函数

  • 函数功能：

按类型排序。

  • 函数原型：
ret_t file_browser_sort_by_type (file_browser_t* fb, bool_t ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。
ascending | bool_t | 按升序排。

file_browser_up 函数

  • 函数功能：

返回上一级目录。

  • 函数原型：
ret_t file_browser_up (file_browser_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fb | file_browser_t* | file browser对象。

cwd 属性

当前路径。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

top_dir 属性

最顶层目录。到达本目录后，不允许往上。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


file_browser_view_t

概述

文件管理/浏览/选择控件。

file_browser_view_t是widget_t的子类控件，widget_t的函数均适用于file_browser_view_t控件。

考虑到文件浏览器界面呈现的多样性，界面呈现工作完全有子控件来完成。

file_browser_view_t负责关联文件/文件夹数据到子控件上，子控件需要特定的规范命名。

  • 名为 “cwd” 的子控件用于显示当前路径。

  • 名为 “selected_file” 的子控件用于显示当前选择的文件。

  • 名为 “file” 的子控件用于显示文件项的模板控件。

  • 名为 “folder” 的子控件用于显示文件夹项的模板控件。

  • 名为 “return_up” 的子控件用于返回上一级文件夹的模板控件。

  • 名为 “container” 的子控件为容器控件，通常是scrollview。

  • 名为 “name” 的子控件用于显示文件和文件夹的名称(放在列表项目内)。

  • 名为 “size” 的子控件用于显示文件和文件夹的大小(放在列表项目内)。

  • 名为 “mtime” 的子控件用于显示文件和文件夹的修改时间(放在列表项目内)。

  • 名为 “ctime” 的子控件用于显示文件和文件夹的创建时间(放在列表项目内)。

  • 名为 “icon” 的子控件用于显示文件和文件夹的图标(放在列表项目内)。

  • 类型为 “check_button” 的子控件用于选择(放在列表项目内)。

完整示例请参考：

https://github.com/zlgopen/awtk/blob/master/design/default/ui/file_chooser_for_open.xml

函数

函数名称 | 说明
file_browser_view_cast | 转换为file_browser_view对象(供脚本语言使用)。
file_browser_view_create | 创建file_browser_view对象
file_browser_view_create_dir | 在当前文件夹创建子文件夹。
file_browser_view_create_file | 在当前文件夹创建文件。
file_browser_view_get_cwd | 获取当前路径。
file_browser_view_get_selected_items | 返回当前选中的项目。
file_browser_view_get_widget_vtable | 获取 file_browser_view 虚表。
file_browser_view_reload | 重新加载。
file_browser_view_set_even_item_style | 设置 偶数项样式。
file_browser_view_set_filter | 设置 过滤规则。
file_browser_view_set_ignore_hidden_files | 设置 忽略隐藏文件。
file_browser_view_set_init_dir | 设置 初始文件夹。
file_browser_view_set_odd_item_style | 设置 奇数项样式。
file_browser_view_set_show_check_button | 设置 是否显示checkbutton。
file_browser_view_set_sort_ascending | 设置 是否为升序排序。
file_browser_view_set_sort_by | 设置 排序方式。可选值(name, size, mtime, type)。
file_browser_view_set_top_dir | 设置 顶层文件夹。

属性

属性名称 | 类型 | 说明
even_item_style | char* | 偶数项样式。
filter | char* | 过滤规则。
ignore_hidden_files | bool_t | 是否忽略隐藏文件。
init_dir | char* | 初始文件夹。
odd_item_style | char* | 奇数项样式。
show_check_button | bool_t | 是否显示checkbutton。
sort_ascending | bool_t | 是否为升序排序。
sort_by | char* | 排序方式。可选值(name, size, mtime, type)。
top_dir | char* | 最顶层目录。到达本目录后，不允许往上。

事件

事件名称 | 类型 | 说明
EVT_VALUE_CHANGED | value_change_event_t | 值(当前显示目录)改变事件。

file_browser_view_cast 函数

  • 函数功能：

转换为file_browser_view对象(供脚本语言使用)。

  • 函数原型：
widget_t* file_browser_view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | file_browser_view对象。
widget | widget_t* | file_browser_view对象。

file_browser_view_create 函数

  • 函数功能：

创建file_browser_view对象

  • 函数原型：
widget_t* file_browser_view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

file_browser_view_create_dir 函数

  • 函数功能：

在当前文件夹创建子文件夹。

  • 函数原型：
ret_t file_browser_view_create_dir (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
name | const char* | 子文件夹名。

file_browser_view_create_file 函数

  • 函数功能：

在当前文件夹创建文件。

  • 函数原型：
ret_t file_browser_view_create_file (widget_t* widget, const char* name, const char* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
name | const char* | 文件名。
data | const char* | 数据。
size | uint32_t | 数据长度。

file_browser_view_get_cwd 函数

  • 函数功能：

获取当前路径。

  • 函数原型：
const char* file_browser_view_get_cwd (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回当前路径。
widget | widget_t* | widget对象。

file_browser_view_get_selected_items 函数

  • 函数功能：

返回当前选中的项目。

在返回数组中，每个元素是一个fb_item_t对象。 调用者无需释放返回值，返回值只在当次调用有效。

  • 函数原型：
darray_t* file_browser_view_get_selected_items (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | darray_t* | 返回当前选中的项目。
widget | widget_t* | widget对象。

file_browser_view_get_widget_vtable 函数

  • 函数功能：

获取 file_browser_view 虚表。

  • 函数原型：
const widget_vtable_t* file_browser_view_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 file_browser_view 虚表。

file_browser_view_reload 函数

  • 函数功能：

重新加载。

  • 函数原型：
ret_t file_browser_view_reload (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

file_browser_view_set_even_item_style 函数

  • 函数功能：

设置 偶数项样式。

  • 函数原型：
ret_t file_browser_view_set_even_item_style (widget_t* widget, const char* even_item_style);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
even_item_style | const char* | 奇数项样式。

file_browser_view_set_filter 函数

  • 函数功能：

设置 过滤规则。 files_only 表示只列出文件，dir_only 表示只列出目录，其它表示只列出满足扩展名文件集合(如：.jpg.png.gif)。

  • 函数原型：
ret_t file_browser_view_set_filter (widget_t* widget, const char* filter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
filter | const char* | 过滤规则。

file_browser_view_set_ignore_hidden_files 函数

  • 函数功能：

设置 忽略隐藏文件。

  • 函数原型：
ret_t file_browser_view_set_ignore_hidden_files (widget_t* widget, bool_t ignore_hidden_files);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
ignore_hidden_files | bool_t | 忽略隐藏文件。

file_browser_view_set_init_dir 函数

  • 函数功能：

设置 初始文件夹。

  • 函数原型：
ret_t file_browser_view_set_init_dir (widget_t* widget, const char* init_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
init_dir | const char* | 初始文件夹。

file_browser_view_set_odd_item_style 函数

  • 函数功能：

设置 奇数项样式。

  • 函数原型：
ret_t file_browser_view_set_odd_item_style (widget_t* widget, const char* odd_item_style);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
odd_item_style | const char* | 奇数项样式。

file_browser_view_set_show_check_button 函数

  • 函数功能：

设置 是否显示checkbutton。

  • 函数原型：
ret_t file_browser_view_set_show_check_button (widget_t* widget, bool_t show_check_button);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
show_check_button | bool_t | 是否显示checkbutton。

file_browser_view_set_sort_ascending 函数

  • 函数功能：

设置 是否为升序排序。

  • 函数原型：
ret_t file_browser_view_set_sort_ascending (widget_t* widget, bool_t sort_ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
sort_ascending | bool_t | 是否为升序排序。

file_browser_view_set_sort_by 函数

  • 函数功能：

设置 排序方式。可选值(name, size, mtime, type)。

  • 函数原型：
ret_t file_browser_view_set_sort_by (widget_t* widget, const char* sort_by);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
sort_by | const char* | 排序方式。可选值(name, size, mtime, type)。

file_browser_view_set_top_dir 函数

  • 函数功能：

设置 顶层文件夹。

  • 函数原型：
ret_t file_browser_view_set_top_dir (widget_t* widget, const char* top_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
top_dir | const char* | 初始文件夹。

even_item_style 属性

偶数项样式。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

filter 属性

过滤规则。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

ignore_hidden_files 属性

是否忽略隐藏文件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

init_dir 属性

初始文件夹。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

odd_item_style 属性

奇数项样式。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

show_check_button 属性

是否显示checkbutton。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

sort_ascending 属性

是否为升序排序。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

sort_by 属性

排序方式。可选值(name, size, mtime, type)。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

top_dir 属性

最顶层目录。到达本目录后，不允许往上。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


file_chooser_t

概述

文件/目录选择器

函数

函数名称 | 说明
file_chooser_cast | 转换为file_chooser对象(供脚本语言使用)。
file_chooser_choose_file_for_open | 为了打开而选择文件。
file_chooser_choose_file_for_save | 为了保存而选择文件。
file_chooser_choose_folder | 选择目录。
file_chooser_create | 创建file_chooser对象
file_chooser_destroy | 销毁file_chooser对象(选择完成后自动调用)。
file_chooser_get_dir | 获取目录。
file_chooser_get_filename | 获取文件名。
file_chooser_is_aborted | 用户是否取消了选择。
file_chooser_set_filter | 设置过滤规则。
file_chooser_set_init_dir | 设置初始目录。
file_chooser_set_top_dir | 设置初始目录。

属性

属性名称 | 类型 | 说明
aborted | bool_t | 是否取消了选择。
cwd | str_t | 当前路径。
filename | str_t | 当前选择的文件。
filter | char* | 过滤规则。
init_dir | char* | 初始目录。
on_done | tk_on_done_t | 接受结果的回调函数。
on_done_ctx | void* | 用户数据。
top_dir | char* | 最顶层目录。到达本目录后，不允许往上。

file_chooser_cast 函数

  • 函数功能：

转换为file_chooser对象(供脚本语言使用)。

  • 函数原型：
file_chooser_t* file_chooser_cast (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | file_chooser_t* | 对象。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_choose_file_for_open 函数

  • 函数功能：

为了打开而选择文件。

  • 函数原型：
ret_t file_chooser_choose_file_for_open (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_choose_file_for_save 函数

  • 函数功能：

为了保存而选择文件。

  • 函数原型：
ret_t file_chooser_choose_file_for_save (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_choose_folder 函数

  • 函数功能：

选择目录。

  • 函数原型：
ret_t file_chooser_choose_folder (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_create 函数

  • 函数功能：

创建file_chooser对象

  • 函数原型：
file_chooser_t* file_chooser_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | file_chooser_t* | 对象。

file_chooser_destroy 函数

  • 函数功能：

销毁file_chooser对象(选择完成后自动调用)。

  • 函数原型：
ret_t file_chooser_destroy (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_get_dir 函数

  • 函数功能：

获取目录。

  • 函数原型：
const char* file_chooser_get_dir (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回选择的目录。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_get_filename 函数

  • 函数功能：

获取文件名。

  • 函数原型：
const char* file_chooser_get_filename (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回选择的文件名。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_is_aborted 函数

  • 函数功能：

用户是否取消了选择。

  • 函数原型：
bool_t file_chooser_is_aborted (file_chooser_t* chooser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回用户是否取消了选择。
chooser | file_chooser_t* | file_chooser对象。

file_chooser_set_filter 函数

  • 函数功能：

设置过滤规则。 files_only 表示只列出文件，dir_only 表示只列出目录，其它表示只列出满足扩展名文件集合(如：.jpg.png.gif)。

  • 函数原型：
ret_t file_chooser_set_filter (file_chooser_t* chooser, const char* filter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。
filter | const char* | 过滤规则。

file_chooser_set_init_dir 函数

  • 函数功能：

设置初始目录。

  • 函数原型：
ret_t file_chooser_set_init_dir (file_chooser_t* chooser, const char* init_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。
init_dir | const char* | 初始目录

file_chooser_set_top_dir 函数

  • 函数功能：

设置初始目录。

  • 函数原型：
ret_t file_chooser_set_top_dir (file_chooser_t* chooser, const char* top_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
chooser | file_chooser_t* | file_chooser对象。
top_dir | const char* | 初始目录

aborted 属性

是否取消了选择。

  • 类型：bool_t

cwd 属性

当前路径。

  • 类型：str_t

filename 属性

当前选择的文件。

  • 类型：str_t

filter 属性

过滤规则。

  • 类型：char*

init_dir 属性

初始目录。

  • 类型：char*

on_done 属性

接受结果的回调函数。

  • 类型：tk_on_done_t

on_done_ctx 属性

用户数据。

  • 类型：void*

top_dir 属性

最顶层目录。到达本目录后，不允许往上。

  • 类型：char*


file_dialog_t

概述

文件对话框。

函数

函数名称 | 说明
tk_choose_file | 选择单个文件，用完后请调用TKMEM_FREE销毁返回的字符串。
tk_choose_file_for_save | 选择单个文件用于保存，用完后请调用TKMEM_FREE销毁返回的字符串。
tk_choose_files | 多选文件，用完后请调用darray_destroy销毁返回的数组。
tk_choose_folder | 选择单个目录，用完后请调用TKMEM_FREE销毁返回的字符串。

tk_choose_file 函数

  • 函数功能：

选择单个文件，用完后请调用TKMEM_FREE销毁返回的字符串。

  • 函数原型：
char* tk_choose_file (const char* filters, const char* init_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回NULL表示失败，返回非NULL为文件名。
filters | const char* | 过滤规则(文件扩展名列表,如:”.c.cpp.cxx”)。
init_dir | const char* | 初始目录。

tk_choose_file_for_save 函数

  • 函数功能：

选择单个文件用于保存，用完后请调用TKMEM_FREE销毁返回的字符串。

  • 函数原型：
char* tk_choose_file_for_save (const char* filters, const char* init_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回NULL表示失败，返回非NULL为文件名。
filters | const char* | 过滤规则(文件扩展名列表,如:”.c.cpp.cxx”)。
init_dir | const char* | 初始目录。

tk_choose_files 函数

  • 函数功能：

多选文件，用完后请调用darray_destroy销毁返回的数组。

  • 函数原型：
darray_t* tk_choose_files (const char* filters, const char* init_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | darray_t* | 返回NULL表示失败，返回非NULL为文件名列表。
filters | const char* | 过滤规则(文件扩展名列表,如:”.c.cpp.cxx”)。
init_dir | const char* | 初始目录。

tk_choose_folder 函数

  • 函数功能：

选择单个目录，用完后请调用TKMEM_FREE销毁返回的字符串。

  • 函数原型：
char* tk_choose_folder (const char* init_dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回NULL表示失败，返回非NULL为文件名。
init_dir | const char* | 初始目录。


file_receiver_t

概述

文件接收方。

> 可用注册EVT_PROGRESS事件，以获取传输的进度状态。

函数

函数名称 | 说明
file_receiver_create | 创建receiver对象。
file_receiver_destroy | 销毁receiver对象。
file_receiver_run | 开始传输文件。

file_receiver_create 函数

  • 函数功能：

创建receiver对象。

  • 函数原型：
file_receiver_t* file_receiver_create (uint32_t block_size, const char* productid);
  • 参数说明：
参数 | 类型 | 说明
返回值 | file_receiver_t* | 返回receiver对象。
block_size | uint32_t | 一次传输块的大小。
productid | const char* | 产品名称(有时可用于发送方发送不同的固件，暂时没用)。

file_receiver_destroy 函数

  • 函数功能：

销毁receiver对象。

  • 函数原型：
ret_t file_receiver_destroy (file_receiver_t* receiver);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
receiver | file_receiver_t* | receiver对象。

file_receiver_run 函数

  • 函数功能：

开始传输文件。

  • 函数原型：
ret_t file_receiver_run (file_receiver_t* receiver, tk_iostream_t* io, tk_ostream_t* target, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
receiver | file_receiver_t* | receiver对象。
io | tk_iostream_t* | 数据传输流。
target | tk_ostream_t* | 用于写入接收到的文件数据。
filename | const char* | 文件名(期望接收的文件名)。


file_sender_t

概述

文件发送方。

> 可用注册EVT_PROGRESS事件，以获取传输的进度状态。

函数

函数名称 | 说明
file_sender_create | 创建sender对象。
file_sender_destroy | 销毁sender对象。
file_sender_run | 开始传输文件。

file_sender_create 函数

  • 函数功能：

创建sender对象。

  • 函数原型：
file_sender_t* file_sender_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | file_sender_t* | 返回sender对象。

file_sender_destroy 函数

  • 函数功能：

销毁sender对象。

  • 函数原型：
ret_t file_sender_destroy (file_sender_t* sender);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sender | file_sender_t* | sender对象。

file_sender_run 函数

  • 函数功能：

开始传输文件。

  • 函数原型：
ret_t file_sender_run (file_sender_t* sender, tk_iostream_t* io, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sender | file_sender_t* | sender对象。
io | tk_iostream_t* | 数据传输流。
filename | const char* | 文件名。


file_transfer_ack_t

概述

确认包(sender<-receiver)。

属性

属性名称 | 类型 | 说明
offset | uint32_t | 确认收到的数据偏移量。
size | uint32_t | 确认收到的数据长度。
type | uint32_t | 包的类型。

offset 属性

确认收到的数据偏移量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

size 属性

确认收到的数据长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

type 属性

包的类型。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是


file_transfer_data_t

概述

文件数据包(sender->receiver)。

属性

属性名称 | 类型 | 说明
crc | uint32_t | 本次传输文件数据的CRC。
offset | uint32_t | 本次传输文件数据的偏移量。
size | uint32_t | 本次传输文件数据的长度。
type | uint32_t | 包的类型。

crc 属性

本次传输文件数据的CRC。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

offset 属性

本次传输文件数据的偏移量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

size 属性

本次传输文件数据的长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

type 属性

包的类型。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是


file_transfer_meta_t

概述

文件元数据包(sender->receiver)。

属性

属性名称 | 类型 | 说明
name | char* | 即将传输文件的名称。
size | uint32_t | 即将传输文件的长度。
type | uint32_t | 包的类型。

name 属性

即将传输文件的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

size 属性

即将传输文件的长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

type 属性

包的类型。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是


file_transfer_packet_type_t

概述

文件传输包的类型。

常量

名称 | 说明
FILE_TRANSFER_PACKET_META | 文件元数据包(sender->receiver)。
FILE_TRANSFER_PACKET_DATA | 文件数据包(sender->receiver)。
FILE_TRANSFER_PACKET_ACK | 文件数据确认包(sender<-receiver)。
FILE_TRANSFER_PACKET_NACK | 文件数据错误确认包(sender<-receiver)。
FILE_TRANSFER_PACKET_REQ | 请求开始传输包(sender<-receiver)。


file_transfer_req_t

概述

请求开始传输包(sender<-receiver)。

属性

属性名称 | 类型 | 说明
block_size | uint32_t | 一次传输包的大小。
filename | char* | 请求传输的文件名。
productid | char* | 请求方的产品ID(有时可用于发送方发送不同的固件，暂时没用)
type | uint32_t | 包的类型。

block_size 属性

一次传输包的大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

filename 属性

请求传输的文件名。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

productid 属性

请求方的产品ID(有时可用于发送方发送不同的固件，暂时没用)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

type 属性

包的类型。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是


flowcontrol_t

概述

串口流控。

常量

名称 | 说明
flowcontrol_none | 无。
flowcontrol_software | 软件。
flowcontrol_hardware | 硬件。


font_loader_bitmap_t

概述

bitmap字体加载器。

bitmap字体是用工具预先生成位图字体数据，优势是速度快，不占用内存，缺点是字体大小固定。 适合低端嵌入式平台。

tools/font_gen用于把矢量字体(如truetype)转换成位图字体。

函数

函数名称 | 说明
font_loader_bitmap | 获取bitmap字体加载器对象。

font_loader_bitmap 函数

  • 函数功能：

获取bitmap字体加载器对象。

  • 函数原型：
font_loader_t* font_loader_bitmap ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_loader_t* | 返回字体加载器对象。


font_loader_ft_t

概述

freetype字体加载器。

freetype主要用于加载矢量字体(如truetype)，它功能强大，效果优异，与stb字体加载器相比，缺点是代码量比较大。 如果flash空间够大，优先使用freetype，否则使用stb。

函数

函数名称 | 说明
font_loader_ft | 获取freetype字体加载器对象。

font_loader_ft 函数

  • 函数功能：

获取freetype字体加载器对象。

  • 函数原型：
font_loader_t* font_loader_ft ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_loader_t* | 返回字体加载器对象。


font_loader_stb_t

概述

stb字体加载器。

stb主要用于加载矢量字体(如truetype)，它功能强大，体积小巧。

函数

函数名称 | 说明
font_loader_stb | 获取stb字体加载器对象。
font_loader_stb_mono | 获取stb mono字体加载器对象。
font_stb_create | 创建stb字体对象。
font_stb_mono_create | 创建stb mono字体对象。
fscript_app_conf_register | 注册app_conf函数。
fscript_array_get_fscript_array_vt | 获取 fscript array 的虚表。
fscript_array_register | 注册typed array函数。
fscript_bits_register | 注册数学函数。
fscript_crc_register | 注册crc16/crc32/cksum等函数。
fscript_date_time_register | 注册date time函数。
fscript_endian_register | 注册大端小断转换函数等函数。
fscript_ext_init | 注册扩展函数。
fscript_fs_register | 注册文件系统函数。
fscript_iostream_file_register | 注册iostream_file相关函数。
fscript_iostream_inet_register | 注册iostream_inet相关函数。
fscript_iostream_register | 注册iostream相关函数。
fscript_iostream_serial_register | 注册iostream_serial相关函数。
fscript_istream_register | 注册istream相关等函数。
fscript_json_register | 注册json函数。
fscript_math_register | 注册数学函数。

font_loader_stb 函数

  • 函数功能：

获取stb字体加载器对象。

  • 函数原型：
font_loader_t* font_loader_stb ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_loader_t* | 返回字体加载器对象。

font_loader_stb_mono 函数

  • 函数功能：

获取stb mono字体加载器对象。

  • 函数原型：
font_loader_t* font_loader_stb_mono ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_loader_t* | 返回字体加载器对象。

font_stb_create 函数

  • 函数功能：

创建stb字体对象。

  • 函数原型：
font_t* font_stb_create (const char* name, const uint8_t* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_t* | 返回字体对象。
name | const char* | 字体名称。
buff | const uint8_t* | 字体数据。
size | uint32_t | 字体数据长度。

font_stb_mono_create 函数

  • 函数功能：

创建stb mono字体对象。

  • 函数原型：
font_t* font_stb_mono_create (const char* name, const uint8_t* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_t* | 返回字体对象。
name | const char* | 字体名称。
buff | const uint8_t* | 字体数据。
size | uint32_t | 字体数据长度。

fscript_app_conf_register 函数

  • 函数功能：

注册app_conf函数。

  • 函数原型：
ret_t fscript_app_conf_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_array_get_fscript_array_vt 函数

  • 函数功能：

获取 fscript array 的虚表。

  • 函数原型：
const fscript_array_vtable_t* fscript_array_get_fscript_array_vt (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const fscript_array_vtable_t* | 成功返回虚表指针，失败返回 NULL。
obj | tk_object_t* | obj对象。

fscript_array_register 函数

  • 函数功能：

注册typed array函数。

  • 函数原型：
ret_t fscript_array_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_bits_register 函数

  • 函数功能：

注册数学函数。

  • 函数原型：
ret_t fscript_bits_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_crc_register 函数

  • 函数功能：

注册crc16/crc32/cksum等函数。

  • 函数原型：
ret_t fscript_crc_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_date_time_register 函数

  • 函数功能：

注册date time函数。

  • 函数原型：
ret_t fscript_date_time_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_endian_register 函数

  • 函数功能：

注册大端小断转换函数等函数。

  • 函数原型：
ret_t fscript_endian_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_ext_init 函数

  • 函数功能：

注册扩展函数。

  • 函数原型：
ret_t fscript_ext_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_fs_register 函数

  • 函数功能：

注册文件系统函数。

  • 函数原型：
ret_t fscript_fs_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_iostream_file_register 函数

  • 函数功能：

注册iostream_file相关函数。

  • 函数原型：
ret_t fscript_iostream_file_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_iostream_inet_register 函数

  • 函数功能：

注册iostream_inet相关函数。

  • 函数原型：
ret_t fscript_iostream_inet_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_iostream_register 函数

  • 函数功能：

注册iostream相关函数。

  • 函数原型：
ret_t fscript_iostream_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_iostream_serial_register 函数

  • 函数功能：

注册iostream_serial相关函数。

  • 函数原型：
ret_t fscript_iostream_serial_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_istream_register 函数

  • 函数功能：

注册istream相关等函数。

  • 函数原型：
ret_t fscript_istream_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_json_register 函数

  • 函数功能：

注册json函数。

  • 函数原型：
ret_t fscript_json_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_math_register 函数

  • 函数功能：

注册数学函数。

  • 函数原型：
ret_t fscript_math_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


font_loader_t

概述

字体加载接口。

函数

函数名称 | 说明
font_loader_load | 加载字体。

font_loader_load 函数

  • 函数功能：

加载字体。

  • 函数原型：
font_t* font_loader_load (font_loader_t* loader, const char* name, const uint8_t* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_t* | 成功返回font，失败返回NULL。
loader | font_loader_t* | loader对象。
name | const char* | 字体名字。
buff | const uint8_t* | 字体数据。
size | uint32_t | 字体数据长度。


font_managers_t

概述

在某些情况下，需要多个资源管理器。比如在手表系统里，每个应用或表盘，可能放在独立的资源包中， 此时优先加载应用自己的资源，如果没有就加载系统的资源。

函数

函数名称 | 说明
font_manager_fallback_get_font_default |
font_managers_ref | 获取指定小应用程序(applet)的字体管理器。
font_managers_unload_all | 卸载全部字体。
font_managers_unref | 释放指定小应用程序(applet)的字体管理器。

font_manager_fallback_get_font_default 函数

  • 函数功能：

  • 函数原型：
font_t* font_manager_fallback_get_font_default (void* ctx, const char* name, font_size_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_t* | 返回字体对象。
ctx | void* | 上下文。
name | const char* | 名称。
size | font_size_t | 大小。

font_managers_ref 函数

  • 函数功能：

获取指定小应用程序(applet)的字体管理器。

  • 函数原型：
font_manager_t* font_managers_ref (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_manager_t* | 返回asset manager对象。
name | const char* | 小应用程序(applet)的名称。

font_managers_unload_all 函数

  • 函数功能：

卸载全部字体。

  • 函数原型：
ret_t font_managers_unload_all ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

font_managers_unref 函数

  • 函数功能：

释放指定小应用程序(applet)的字体管理器。

  • 函数原型：
ret_t font_managers_unref (font_manager_t* imm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | font_manager_t* | 字体管理器对象。


font_manager_t

概述

字体管理器，负责字体的加载和缓存管理。 (如果使用nanovg，字体由nanovg内部管理)

函数

函数名称 | 说明
font_manager | 获取缺省的字体管理器。
font_manager_add_font | 向缓存中加入字体。
font_manager_create | 创建字体管理器。
font_manager_deinit | 析构字体管理器。
font_manager_destroy | 析构并释放字体管理器。
font_manager_get_font | 从缓存中查找字体，如果没找到，再加载字体，并缓存。
font_manager_init | 初始化字体管理器。
font_manager_lookup | 查找字体。
font_manager_set | 设置缺省的字体管理器。
font_manager_set_assets_manager | 设置资源管理器对象
font_manager_set_fallback_get_font | 设置一个函数，该函数在找不到字体时加载后补字体。
font_manager_shrink_cache | 清除最久没有被使用的缓冲字模。
font_manager_unload_all | 卸载全部字体。
font_manager_unload_font | 卸载指定的字体。

属性

属性名称 | 类型 | 说明

font_manager 函数

  • 函数功能：

获取缺省的字体管理器。

  • 函数原型：
font_manager_t* font_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_manager_t* | 返回字体管理器对象。

font_manager_add_font 函数

  • 函数功能：

向缓存中加入字体。

  • 函数原型：
ret_t font_manager_add_font (font_manager_t* fm, font_t* font);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。
font | font_t* | 字体。

font_manager_create 函数

  • 函数功能：

创建字体管理器。

  • 函数原型：
font_manager_t* font_manager_create (font_loader_t* loader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_manager_t* | 返回字体管理器对象。
loader | font_loader_t* | 字体加载器。

font_manager_deinit 函数

  • 函数功能：

析构字体管理器。

  • 函数原型：
ret_t font_manager_deinit (font_manager_t* fm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。

font_manager_destroy 函数

  • 函数功能：

析构并释放字体管理器。

  • 函数原型：
ret_t font_manager_destroy (font_manager_t* fm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。

font_manager_get_font 函数

  • 函数功能：

从缓存中查找字体，如果没找到，再加载字体，并缓存。

  • 函数原型：
font_t* font_manager_get_font (font_manager_t* fm, const char* name, font_size_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_t* | 返回字体对象。
fm | font_manager_t* | 字体管理器对象。
name | const char* | 字体名，为NULL时使用缺省字体。
size | font_size_t | 字体的大小。

font_manager_init 函数

  • 函数功能：

初始化字体管理器。

  • 函数原型：
font_manager_t* font_manager_init (font_manager_t* fm, font_loader_t* loader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_manager_t* | 返回字体管理器对象。
fm | font_manager_t* | 字体管理器对象。
loader | font_loader_t* | 字体加载器。

font_manager_lookup 函数

  • 函数功能：

查找字体。

  • 函数原型：
font_t* font_manager_lookup (font_manager_t* fm, const char* name, font_size_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_t* | 返回字体对象。
fm | font_manager_t* | 字体管理器对象。
name | const char* | 字体名称。
size | font_size_t | 字体大小。

font_manager_set 函数

  • 函数功能：

设置缺省的字体管理器。

  • 函数原型：
ret_t font_manager_set (font_manager_t* fm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。

font_manager_set_assets_manager 函数

  • 函数功能：

设置资源管理器对象

之所以需要设置资源管理器对象，而不是使用缺省的资源管理器对象，是因为在designer中有两个字体管理器：

  • 一个用于designer本身加载字体。

  • 一个用于被设计的窗口加载字体。

这两个字体管理器需要从不同的路径加载资源。

  • 函数原型：
ret_t font_manager_set_assets_manager (font_manager_t* fm, assets_manager_t* assets_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。
assets_manager | assets_manager_t* | 资源管理器。

font_manager_set_fallback_get_font 函数

  • 函数功能：

设置一个函数，该函数在找不到字体时加载后补字体。

  • 函数原型：
ret_t font_manager_set_fallback_get_font (font_manager_t* fm, font_manager_get_font_t fallback_get_font, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。
fallback_get_font | font_manager_get_font_t | 回调函数。
ctx | void* | 回调函数的上下文。

font_manager_shrink_cache 函数

  • 函数功能：

清除最久没有被使用的缓冲字模。

  • 函数原型：
ret_t font_manager_shrink_cache (font_manager_t* fm, uint32_t cache_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。
cache_size | uint32_t | 每种字体保留缓存字模的个数。

font_manager_unload_all 函数

  • 函数功能：

卸载全部字体。

  • 函数原型：
ret_t font_manager_unload_all (font_manager_t* fm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。

font_manager_unload_font 函数

  • 函数功能：

卸载指定的字体。

  • 函数原型：
ret_t font_manager_unload_font (font_manager_t* fm, const char* name, font_size_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fm | font_manager_t* | 字体管理器对象。
name | const char* | 字体名，为NULL时使用缺省字体。
size | font_size_t | 字体的大小(矢量字体指定为0即可)。


font_t

概述

代表一种字体。

函数

函数名称 | 说明
font_destroy | 销毁font对象。
font_get_glyph | 获取指定字符和大小的字模。
font_get_vmetrics | 获取字体的高度信息。
font_match | 检查当前字体是否与指定名称和大小相匹配。
font_shrink_cache | 清除最近没使用的字模。

font_destroy 函数

  • 函数功能：

销毁font对象。

  • 函数原型：
ret_t font_destroy (font_t* font);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
font | font_t* | font对象。

font_get_glyph 函数

  • 函数功能：

获取指定字符和大小的字模。

  • 函数原型：
ret_t font_get_glyph (font_t* font, wchar_t chr, font_size_t font_size, glyph_t* glyph);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
font | font_t* | font对象。
chr | wchar_t | 字符。
font_size | font_size_t | 字体大小。
glyph | glyph_t* | 返回字模数据。

font_get_vmetrics 函数

  • 函数功能：

获取字体的高度信息。

  • 函数原型：
font_vmetrics_t font_get_vmetrics (font_t* font, font_size_t font_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_vmetrics_t | 返回字体的高度信息。
font | font_t* | font对象。
font_size | font_size_t | 字体大小。

font_match 函数

  • 函数功能：

检查当前字体是否与指定名称和大小相匹配。

  • 函数原型：
bool_t font_match (font_t* font, const char* font_name, font_size_t font_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示成功，FALSE表示失败。
font | font_t* | font对象。
font_name | const char* | 字体名称。
font_size | font_size_t | 字体大小。

font_shrink_cache 函数

  • 函数功能：

清除最近没使用的字模。

  • 函数原型：
ret_t font_shrink_cache (font_t* font, uint32_t cache_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
font | font_t* | font对象。
cache_size | uint32_t | 保留缓存字模的个数。


fps_t

概述

用于计算FPS(帧率)。

函数

函数名称 | 说明
fps_get | 获取FPS(帧率)。
fps_inc | 增加帧数。
fps_init | 初始化。

fps_get 函数

  • 函数功能：

获取FPS(帧率)。

  • 函数原型：
uint32_t fps_get (fps_t* fps);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回FPS(帧率)。
fps | fps_t* | fps对象。

fps_inc 函数

  • 函数功能：

增加帧数。

  • 函数原型：
ret_t fps_inc (fps_t* fps);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fps | fps_t* | fps对象。

fps_init 函数

  • 函数功能：

初始化。

  • 函数原型：
ret_t fps_init (fps_t* fps);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fps | fps_t* | fps对象。


fscript_args_t

概述

扩展函数的参数。

属性

属性名称 | 类型 | 说明
args | value_t* | 参数列表。
capacity | uint16_t | 目前最大容量。
size | uint16_t | 参数个数。

args 属性

参数列表。

  • 类型：value_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

capacity 属性

目前最大容量。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

参数个数。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


fscript_function_def_t

概述

脚本函数定义。

属性

属性名称 | 类型 | 说明
body | fscript_func_call_t* | 函数体。
name | char* | 函数名。
params | darray_t | 参数列表。

body 属性

函数体。

  • 类型：fscript_func_call_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

函数名。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

params 属性

参数列表。

  • 类型：darray_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


fscript_func_call_t

概述

函数描述。

函数

函数名称 | 说明
fscript_ensure_locals | export for debugger
fscript_exec_func_default | 执行函数的默认实现。
fscript_find_func | 查找函数。
fscript_get_code_id | 获取code_id。
fscript_set_hooks | 设置回调函数。
fscript_set_self_hooks | 设置 fscript 对象的回调函数。
fscript_set_var_default | 设置变量的默认实现。

属性

属性名称 | 类型 | 说明
col | uint16_t | 对应源代码列号。
ctx | void* | 函数需要的上下文。
func | fscript_func_t | 函数指针。
row | uint16_t | 对应源代码行号。

fscript_ensure_locals 函数

  • 函数功能：

export for debugger

  • 函数原型：
ret_t fscript_ensure_locals (fscript_t* fscript);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。

fscript_exec_func_default 函数

  • 函数功能：

执行函数的默认实现。

  • 函数原型：
ret_t fscript_exec_func_default (fscript_t* fscript, fscript_func_call_t* iter, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
iter | fscript_func_call_t* | 当前函数。
result | value_t* | 返回结果。

fscript_find_func 函数

  • 函数功能：

查找函数。

  • 函数原型：
fscript_func_t fscript_find_func (fscript_t* fscript, const char* name, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fscript_func_t | 返回函数指针，NULL表示失败。
fscript | fscript_t* | 脚本引擎对象。
name | const char* | 函数名。
size | uint32_t | 函数名长度。

fscript_get_code_id 函数

  • 函数功能：

获取code_id。

  • 函数原型：
char* fscript_get_code_id (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回code_id，有调用者释放返回的字符串。
str | const char* | 代码。

fscript_set_hooks 函数

  • 函数功能：

设置回调函数。

  • 函数原型：
ret_t fscript_set_hooks (const fscript_hooks_t* hooks);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hooks | const fscript_hooks_t* | 回调函数。

fscript_set_self_hooks 函数

  • 函数功能：

设置 fscript 对象的回调函数。

  • 函数原型：
ret_t fscript_set_self_hooks (fscript_t* fscript, const fscript_hooks_t* hooks);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | fscript 对象。
hooks | const fscript_hooks_t* | 回调函数。

fscript_set_var_default 函数

  • 函数功能：

设置变量的默认实现。

  • 函数原型：
ret_t fscript_set_var_default (fscript_t* fscript, const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
name | const char* | 变量名。
value | const value_t* | 值。

col 属性

对应源代码列号。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ctx 属性

函数需要的上下文。 目前主要保持自定义函数的实现。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

func 属性

函数指针。

  • 类型：fscript_func_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

row 属性

对应源代码行号。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


fscript_module_t

概述

用require加载外部模块。

函数

函数名称 | 说明
fargs_get_data_and_size | 从参数中获取数据和长度。
fscript_module_cast | 转换为fscript_module对象。
fscript_module_create | 创建对象。
fscript_module_register | 注册module函数。
fscript_object_register | 注册object函数。
fscript_ostream_register | 注册ostream相关函数。
fscript_rbuffer_register | 注册rbuffer相关函数。
fscript_typed_array_register | 注册typed array函数。
fscript_wbuffer_register | 注册wbuffer相关函数。
fscript_widget_register | 注册widget函数。

fargs_get_data_and_size 函数

  • 函数功能：

从参数中获取数据和长度。

  • 函数原型：
ret_t fargs_get_data_and_size (fscript_args_t* args, const uint8_t** ret_data, uint32_t* ret_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
args | fscript_args_t* | 参数。
ret_data | const uint8_t** | 返回数据。
ret_size | uint32_t* | 返回数据的长度。

fscript_module_cast 函数

  • 函数功能：

转换为fscript_module对象。

  • 函数原型：
fscript_module_t* fscript_module_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fscript_module_t* | fscript_module对象。
obj | tk_object_t* | fscript_module对象。

fscript_module_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* fscript_module_create (const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
url | const char* | URL(用于读取数据)

fscript_module_register 函数

  • 函数功能：

注册module函数。

  • 函数原型：
ret_t fscript_module_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_object_register 函数

  • 函数功能：

注册object函数。

  • 函数原型：
ret_t fscript_object_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_ostream_register 函数

  • 函数功能：

注册ostream相关函数。

  • 函数原型：
ret_t fscript_ostream_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_rbuffer_register 函数

  • 函数功能：

注册rbuffer相关函数。

  • 函数原型：
ret_t fscript_rbuffer_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_typed_array_register 函数

  • 函数功能：

注册typed array函数。

  • 函数原型：
ret_t fscript_typed_array_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_wbuffer_register 函数

  • 函数功能：

注册wbuffer相关函数。

  • 函数原型：
ret_t fscript_wbuffer_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_widget_register 函数

  • 函数功能：

注册widget函数。

  • 函数原型：
ret_t fscript_widget_register ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


fscript_parser_error_t

概述

解析错误信息。

函数

函数名称 | 说明
fscript_parser_error_deinit | 释放error对象中的资源。

属性

属性名称 | 类型 | 说明
col | int | 出现错误的代码列。
message | char* | 错误信息。
offset | int | 出现错误的代码偏移。
row | int | 出现错误的代码行。
token | char* | 当前的token。

fscript_parser_error_deinit 函数

  • 函数功能：

释放error对象中的资源。

  • 函数原型：
ret_t fscript_parser_error_deinit (fscript_parser_error_t* error);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
error | fscript_parser_error_t* | 解析错误信息。

col 属性

出现错误的代码列。

  • 类型：int
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

message 属性

错误信息。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

offset 属性

出现错误的代码偏移。

  • 类型：int
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

row 属性

出现错误的代码行。

  • 类型：int
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

token 属性

当前的token。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


fscript_t

概述

一个简易的函数式脚本引擎。 用法请参考：https://github.com/zlgopen/awtk/blob/master/docs/fscript.md

函数

函数名称 | 说明
fscript_clean | 使用lua或其它脚本来运行fscript时，本函数用于清理不必要的数据结构。
fscript_create | 创建引擎对象，并解析代码。
fscript_create_ex | 创建引擎对象，并解析代码。
fscript_deinit | 清除引擎对象的数据。
fscript_destroy | 销毁引擎对象。
fscript_eval | 执行一段脚本。
fscript_exec | 执行解析后的代码。
fscript_get_global_object | 获取fscript的全局对象。
fscript_global_deinit | 全局释放。
fscript_global_init | 全局初始化。
fscript_init | 初始化引擎对象，并解析代码。
fscript_register_const_double | 注册浮点数常量。
fscript_register_const_int | 注册整数常量。
fscript_register_const_value | 注册常量。
fscript_register_func | 注册全局自定义函数。
fscript_register_funcs | 注册全局自定义函数。
fscript_reload | 重新加载代码。
fscript_set_error | 用于扩展函数设置遇到的错误。
fscript_set_global_object | 用于替换默认的全局对象。
fscript_set_on_error | 设置错误处理函数。
fscript_set_print_func | 设置打印日志的函数。
fscript_syntax_check | 解析代码，分析是否有语法错误。
tk_expr_eval | 对fscript的简单包装。

属性

属性名称 | 类型 | 说明
error_code | ret_t | 运行时错误码。
error_col | int32_t | 运行时错误的列号。
error_message | char* | 运行时错误信息。
error_row | int32_t | 运行时错误的行号。
lines | uint16_t | 代码总行数。
obj | tk_object_t* | 脚本执行上下文。
str | str_t | C语言实现函数可以使用这个变量，可以有效避免内存分配。

fscript_clean 函数

  • 函数功能：

使用lua或其它脚本来运行fscript时，本函数用于清理不必要的数据结构。

  • 函数原型：
ret_t fscript_clean (fscript_t* fscript);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。

fscript_create 函数

  • 函数功能：

创建引擎对象，并解析代码。

  • 函数原型：
fscript_t* fscript_create (tk_object_t* obj, const char* script);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fscript_t* | 返回fscript对象。
obj | tk_object_t* | 脚本执行上下文。
script | const char* | 脚本代码。

fscript_create_ex 函数

  • 函数功能：

创建引擎对象，并解析代码。

  • 函数原型：
fscript_t* fscript_create_ex (tk_object_t* obj, const char* script, bool_t keep_func_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fscript_t* | 返回fscript对象。
obj | tk_object_t* | 脚本执行上下文。
script | const char* | 脚本代码。
keep_func_name | bool_t | 是否在func_call结构后保存函数名。

fscript_deinit 函数

  • 函数功能：

清除引擎对象的数据。

  • 函数原型：
ret_t fscript_deinit (fscript_t* fscript);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。

fscript_destroy 函数

  • 函数功能：

销毁引擎对象。

  • 函数原型：
ret_t fscript_destroy (fscript_t* fscript);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。

fscript_eval 函数

  • 函数功能：

执行一段脚本。

  • 函数原型：
ret_t fscript_eval (tk_object_t* obj, const char* script, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 脚本执行上下文。
script | const char* | 脚本代码。
result | value_t* | 执行结果(调用者需要用value_reset函数清除result)。

fscript_exec 函数

  • 函数功能：

执行解析后的代码。

  • 函数原型：
ret_t fscript_exec (fscript_t* fscript, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
result | value_t* | 执行结果(调用者需要用value_reset函数清除result)。

fscript_get_global_object 函数

  • 函数功能：

获取fscript的全局对象。

  • 函数原型：
tk_object_t* fscript_get_global_object ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回fscript的全局对象。

fscript_global_deinit 函数

  • 函数功能：

全局释放。

  • 函数原型：
ret_t fscript_global_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_global_init 函数

  • 函数功能：

全局初始化。

  • 函数原型：
ret_t fscript_global_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

fscript_init 函数

  • 函数功能：

初始化引擎对象，并解析代码。

  • 函数原型：
fscript_t* fscript_init (fscript_t* fscript, tk_object_t* obj, const char* script, const char* first_call_name, bool_t keep_func_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fscript_t* | 返回fscript对象。
fscript | fscript_t* | 初始化 fscript 对象。
obj | tk_object_t* | 脚本执行上下文。
script | const char* | 脚本代码。
first_call_name | const char* | 第一个函数的名字。
keep_func_name | bool_t | 是否在func_call结构后保存函数名。

fscript_register_const_double 函数

  • 函数功能：

注册浮点数常量。

  • 函数原型：
ret_t fscript_register_const_double (const char* name, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 常量名。
value | double | 数据。

fscript_register_const_int 函数

  • 函数功能：

注册整数常量。

  • 函数原型：
ret_t fscript_register_const_int (const char* name, int value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 常量名。
value | int | 数据。

fscript_register_const_value 函数

  • 函数功能：

注册常量。

  • 函数原型：
ret_t fscript_register_const_value (const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 常量名。
value | const value_t* | 数据。

fscript_register_func 函数

  • 函数功能：

注册全局自定义函数。

  • 函数原型：
ret_t fscript_register_func (const char* name, fscript_func_t func);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 函数名(无需加函数前缀)。
func | fscript_func_t | 函数指针。

fscript_register_funcs 函数

  • 函数功能：

注册全局自定义函数。

  • 函数原型：
ret_t fscript_register_funcs (const general_factory_table_t* table);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
table | const general_factory_table_t* | 函数表。

fscript_reload 函数

  • 函数功能：

重新加载代码。

  • 函数原型：
ret_t fscript_reload (fscript_t* fscript, const char* script);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
script | const char* | 脚本代码。

fscript_set_error 函数

  • 函数功能：

用于扩展函数设置遇到的错误。

  • 函数原型：
ret_t fscript_set_error (fscript_t* fscript, ret_t code, const char* func, const char* message);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
code | ret_t | 错误码。
func | const char* | 函数名。
message | const char* | 错误消息。

fscript_set_global_object 函数

  • 函数功能：

用于替换默认的全局对象。 仅限于在系统初始化时调用。

  • 函数原型：
ret_t fscript_set_global_object (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 全局对象。

fscript_set_on_error 函数

  • 函数功能：

设置错误处理函数。

  • 函数原型：
ret_t fscript_set_on_error (fscript_t* fscript, fscript_on_error_t on_error, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
on_error | fscript_on_error_t | 错误处理函数。
ctx | void* | 错误处理函数的上下文。

fscript_set_print_func 函数

  • 函数功能：

设置打印日志的函数。

  • 函数原型：
ret_t fscript_set_print_func (fscript_t* fscript, fscript_func_t print);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fscript | fscript_t* | 脚本引擎对象。
print | fscript_func_t | 打印日志的函数。

fscript_syntax_check 函数

  • 函数功能：

解析代码，分析是否有语法错误。

示例：

fscript_parser_error_t error;
fscript_syntax_check(obj, "1+1", &error);
fscript_parser_error_deinit(&error);
  • 函数原型：
ret_t fscript_syntax_check (tk_object_t* obj, const char* script, fscript_parser_error_t* error);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 脚本执行上下文。
script | const char* | 脚本代码。
error | fscript_parser_error_t* | 用于返回错误信息。

tk_expr_eval 函数

  • 函数功能：

对fscript的简单包装。

  • 函数原型：
double tk_expr_eval (const char* expr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回表达式的值。
expr | const char* | 表达式。

error_code 属性

运行时错误码。

  • 类型：ret_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

error_col 属性

运行时错误的列号。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

error_message 属性

运行时错误信息。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

error_row 属性

运行时错误的行号。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lines 属性

代码总行数。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

obj 属性

脚本执行上下文。

  • 类型：tk_object_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

str 属性

C语言实现函数可以使用这个变量，可以有效避免内存分配。

  • 类型：str_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


fs_dir_t

概述

文件夹接口。

函数

函数名称 | 说明
fs_dir_close | 关闭文件夹对象。
fs_dir_read | 读取文件夹对象。
fs_dir_rewind | 重置文件夹读取位置到开始。

fs_dir_close 函数

  • 函数功能：

关闭文件夹对象。

  • 函数原型：
ret_t fs_dir_close (fs_dir_t* dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dir | fs_dir_t* | 文件夹对象。

fs_dir_read 函数

  • 函数功能：

读取文件夹对象。

  • 函数原型：
ret_t fs_dir_read (fs_dir_t* dir, fs_item_t* item);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dir | fs_dir_t* | 文件夹对象。
item | fs_item_t* | 返回一项。

fs_dir_rewind 函数

  • 函数功能：

重置文件夹读取位置到开始。

  • 函数原型：
ret_t fs_dir_rewind (fs_dir_t* dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dir | fs_dir_t* | 文件夹对象。


fs_file_t

概述

文件接口。

示例：

int32_t ret = 0;
const char* file_name = "test.txt";
int32_t len = file_get_size(file_name);
uint8_t* buff = (uint8_t*)TKMEM_ALLOC(len + 1);
return_value_if_fail(buff != NULL, NULL);

fs_file_t* fp = fs_open_file(os_fs(), file_name, "rb");
if (fp != NULL) {
ret = fs_file_read(fp, buff, len);
fs_file_close(fp);
}

函数

函数名称 | 说明
fs_file_close | 关闭文件。
fs_file_eof | 判断文件是否结束。
fs_file_printf | 写入文件。
fs_file_read | 读取文件。
fs_file_read_line | 读取一行文本。
fs_file_seek | 定位读写指针到指定的位置。
fs_file_size | 获取文件大小。
fs_file_stat | 获取文件信息。
fs_file_sync | 同步文件到磁盘。
fs_file_tell | 获取文件当前读写位置。
fs_file_truncate | 清除文件内容。
fs_file_write | 写入文件。

fs_file_close 函数

  • 函数功能：

关闭文件。

  • 函数原型：
ret_t fs_file_close (fs_file_t* file);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
file | fs_file_t* | 文件对象。

fs_file_eof 函数

  • 函数功能：

判断文件是否结束。

  • 函数原型：
bool_t fs_file_eof (fs_file_t* file);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示结束，否则表示没结束。
file | fs_file_t* | 文件对象。

fs_file_printf 函数

  • 函数功能：

写入文件。

  • 函数原型：
int32_t fs_file_printf (fs_file_t* file, const char* const format_str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际写入的字节数。
file | fs_file_t* | 文件对象。
format_str | const char* const | 格式化字符串。

fs_file_read 函数

  • 函数功能：

读取文件。

  • 函数原型：
int32_t fs_file_read (fs_file_t* file, void* buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取的字节数。
file | fs_file_t* | 文件对象。
buffer | void* | 用于返回数据的缓冲区。
size | uint32_t | 缓冲区大小。

fs_file_read_line 函数

  • 函数功能：

读取一行文本。 需要用二进制格式打开，否则Windows下，系统会修改换行符。

  • 函数原型：
int32_t fs_file_read_line (fs_file_t* file, char* buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取的字节数。
file | fs_file_t* | 文件对象。
buffer | char* | 用于返回数据的缓冲区。
size | uint32_t | 缓冲区大小。

fs_file_seek 函数

  • 函数功能：

定位读写指针到指定的位置。

  • 函数原型：
ret_t fs_file_seek (fs_file_t* file, int32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
file | fs_file_t* | 文件对象。
offset | int32_t | 数据长度。

fs_file_size 函数

  • 函数功能：

获取文件大小。

  • 函数原型：
int64_t fs_file_size (fs_file_t* file);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回文件大小。
file | fs_file_t* | 文件对象。

fs_file_stat 函数

  • 函数功能：

获取文件信息。

  • 函数原型：
ret_t fs_file_stat (fs_file_t* file, fs_stat_info_t* fst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
file | fs_file_t* | 文件对象。
fst | fs_stat_info_t* | 文件状态信息。

fs_file_sync 函数

  • 函数功能：

同步文件到磁盘。

  • 函数原型：
ret_t fs_file_sync (fs_file_t* file);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
file | fs_file_t* | 文件对象。

fs_file_tell 函数

  • 函数功能：

获取文件当前读写位置。

  • 函数原型：
int64_t fs_file_tell (fs_file_t* file);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回文件当前读写位置。
file | fs_file_t* | 文件对象。

fs_file_truncate 函数

  • 函数功能：

清除文件内容。

  • 函数原型：
ret_t fs_file_truncate (fs_file_t* file, int32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
file | fs_file_t* | 文件对象。
offset | int32_t | 数据长度。

fs_file_write 函数

  • 函数功能：

写入文件。

  • 函数原型：
int32_t fs_file_write (fs_file_t* file, const void* buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际写入的字节数。
file | fs_file_t* | 文件对象。
buffer | const void* | 数据缓冲区。
size | uint32_t | 数据长度。


fs_item_t

概述

代表目录或文件。

属性

属性名称 | 类型 | 说明
is_dir | bool_t | 是否是目录。
is_link | bool_t | 是否是符号链接。
is_reg_file | bool_t | 是否是普通文件。
name | char* | 名称。

is_dir 属性

是否是目录。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

is_link 属性

是否是符号链接。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

is_reg_file 属性

是否是普通文件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


fs_stat_info_t

概述

文件状态信息。

属性

属性名称 | 类型 | 说明
atime | uint64_t | 最后访问时间。
ctime | uint64_t | 创建时间。
is_dir | bool_t | 是否为目录。
is_link | bool_t | 是否为链接。
is_reg_file | bool_t | 是否普通文件。
mtime | uint64_t | 最后修改时间。
size | uint64_t | 文件大小。

atime 属性

最后访问时间。

  • 类型：uint64_t

ctime 属性

创建时间。

  • 类型：uint64_t

is_dir 属性

是否为目录。

  • 类型：bool_t

is_link 属性

是否为链接。

  • 类型：bool_t

is_reg_file 属性

是否普通文件。

  • 类型：bool_t

mtime 属性

最后修改时间。

  • 类型：uint64_t

size 属性

文件大小。

  • 类型：uint64_t


fs_t

概述

文件系统接口。

函数

函数名称 | 说明
dir_exist | 判断目录是否存在。
file_exist | 判断文件是否存在。
file_get_size | 获取文件大小。
file_read | 读取文件的全部内容。
file_read_part | 从某个位置读取文件。
file_remove | 刪除文件。
file_write | 写入文件。
fs_build_user_storage_file_name | 生成一个保存数据文件的完整路径的文件名。
fs_change_dir | 修改当前目录。
fs_copy_dir | 拷贝目录。
fs_copy_dir_ex | 拷贝目录。
fs_copy_file | 拷贝文件。
fs_create_dir | 创建目录。
fs_create_dir_r | 递归创建目录。
fs_dir_exist | 判断目录是否存在。
fs_dir_is_empty | 判断目录是否为空。
fs_dir_rename | 目录重命名。
fs_file_exist | 判断文件是否存在。
fs_file_rename | 文件重命名。
fs_foreach_file | 遍历指定目录下全部常规文件。
fs_get_cwd | 获取当前所在目录。
fs_get_disk_info | 获取文件系统信息。
fs_get_exe | 获取可执行文件所在目录。
fs_get_file_size | 获取文件大小。
fs_get_temp_path | 获取临时目录。
fs_get_user_storage_path | 获取home目录或者应用程序可以写入数据的目录。
fs_open_dir | 打开目录。
fs_open_file | 打开文件。
fs_remove_dir | 刪除目录。
fs_remove_dir_r | 递归刪除目录。
fs_remove_file | 刪除文件。
fs_stat | 获取文件信息。
os_fs | 获取缺省的文件系统对象。

dir_exist 函数

  • 函数功能：

判断目录是否存在。

  • 函数原型：
bool_t dir_exist (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示成功，否则表示失败。
name | const char* | 目录名。

file_exist 函数

  • 函数功能：

判断文件是否存在。

  • 函数原型：
bool_t file_exist (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示成功，否则表示失败。
name | const char* | 文件名。

file_get_size 函数

  • 函数功能：

获取文件大小。

  • 函数原型：
int32_t file_get_size (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回非负表示文件大小，否则表示失败。
name | const char* | 文件名。

file_read 函数

  • 函数功能：

读取文件的全部内容。

  • 函数原型：
void* file_read (const char* name, uint32_t* size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回读取的数据，需要调用TKMEM_FREE释放。
name | const char* | 文件名。
size | uint32_t* | 返回实际读取的长度。

file_read_part 函数

  • 函数功能：

从某个位置读取文件。

  • 函数原型：
int32_t file_read_part (const char* name, void* buff, uint32_t size, uint32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取的字节数。
name | const char* | 文件名。
buff | void* | 数据缓冲区。
size | uint32_t | 数据长度。
offset | uint32_t | 偏移量。

file_remove 函数

  • 函数功能：

刪除文件。

  • 函数原型：
ret_t file_remove (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 文件名。

file_write 函数

  • 函数功能：

写入文件。

  • 函数原型：
ret_t file_write (const char* name, const void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 文件名。
buff | const void* | 数据缓冲区。
size | uint32_t | 数据长度。

fs_build_user_storage_file_name 函数

  • 函数功能：

生成一个保存数据文件的完整路径的文件名。

  • 函数原型：
ret_t fs_build_user_storage_file_name (char* filename, const char* appname, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | char* | 用于返回完整路径的文件名。
appname | const char* | 应用程序的名称。
name | const char* | 文件名(不包括路径)。

fs_change_dir 函数

  • 函数功能：

修改当前目录。

  • 函数原型：
ret_t fs_change_dir (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_copy_dir 函数

  • 函数功能：

拷贝目录。

  • 函数原型：
ret_t fs_copy_dir (fs_t* fs, const char* src, const char* dst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
src | const char* | 源目录。
dst | const char* | 目标目录。

fs_copy_dir_ex 函数

  • 函数功能：

拷贝目录。

  • 函数原型：
ret_t fs_copy_dir_ex (fs_t* fs, const char* src, const char* dst, bool_t overwrite);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
src | const char* | 源目录。
dst | const char* | 目标目录。
overwrite | bool_t | 是否覆盖。

fs_copy_file 函数

  • 函数功能：

拷贝文件。

  • 函数原型：
ret_t fs_copy_file (fs_t* fs, const char* src, const char* dst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
src | const char* | 源文件名。
dst | const char* | 目标文件名。

fs_create_dir 函数

  • 函数功能：

创建目录。

  • 函数原型：
ret_t fs_create_dir (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_create_dir_r 函数

  • 函数功能：

递归创建目录。

  • 函数原型：
ret_t fs_create_dir_r (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_dir_exist 函数

  • 函数功能：

判断目录是否存在。

  • 函数原型：
bool_t fs_dir_exist (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_dir_is_empty 函数

  • 函数功能：

判断目录是否为空。

  • 函数原型：
bool_t fs_dir_is_empty (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示目录为空，否则表示目录不为空。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_dir_rename 函数

  • 函数功能：

目录重命名。

  • 函数原型：
ret_t fs_dir_rename (fs_t* fs, const char* name, const char* new_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 旧目录名称。
new_name | const char* | 新目录名称。

fs_file_exist 函数

  • 函数功能：

判断文件是否存在。

  • 函数原型：
bool_t fs_file_exist (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 文件名。

fs_file_rename 函数

  • 函数功能：

文件重命名。

  • 函数原型：
ret_t fs_file_rename (fs_t* fs, const char* name, const char* new_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 旧文件名。
new_name | const char* | 新文件名。

fs_foreach_file 函数

  • 函数功能：

遍历指定目录下全部常规文件。 示例:

static ret_t on_file(void* ctx, const void* data) {
const char* filename = (const char*)data;
const char* extname = (const char*)ctx;

if (tk_str_end_with(filename, extname)) {
log_debug("%s\n", filename);
}
return RET_OK;
}
...
fs_foreach_file("tests/testdata", on_file, (void*)".json");
  • 函数原型：
ret_t fs_foreach_file (const char* path, tk_visit_t on_file, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回TRUE表示成功，否则表示失败。
path | const char* | 目录。
on_file | tk_visit_t | 回调函数(完整文件名通过data参数传入)。
ctx | void* | 回调函数上下文。

fs_get_cwd 函数

  • 函数功能：

获取当前所在目录。

  • 函数原型：
ret_t fs_get_cwd (fs_t* fs, char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
path | char* | 保存当前所在目录的路径。

fs_get_disk_info 函数

  • 函数功能：

获取文件系统信息。

  • 函数原型：
ret_t fs_get_disk_info (fs_t* fs, const char* volume, int32_t* free_kb, int32_t* total_kb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回不是-1表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
volume | const char* | 卷名。
free_kb | int32_t* | 用于返回空闲空间大小(KB)
total_kb | int32_t* | 用于返回总共空间大小(KB)

fs_get_exe 函数

  • 函数功能：

获取可执行文件所在目录。

  • 函数原型：
ret_t fs_get_exe (fs_t* fs, char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
path | char* | 保存可执行文件的路径。

fs_get_file_size 函数

  • 函数功能：

获取文件大小。

  • 函数原型：
int32_t fs_get_file_size (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回不是-1表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 文件名。

fs_get_temp_path 函数

  • 函数功能：

获取临时目录。

  • 函数原型：
ret_t fs_get_temp_path (fs_t* fs, char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
path | char* | 保存路径。

fs_get_user_storage_path 函数

  • 函数功能：

获取home目录或者应用程序可以写入数据的目录。

  • 函数原型：
ret_t fs_get_user_storage_path (fs_t* fs, char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
path | char* | 保存路径。

fs_open_dir 函数

  • 函数功能：

打开目录。

  • 函数原型：
fs_dir_t* fs_open_dir (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fs_dir_t* | 返回非NULL表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_open_file 函数

  • 函数功能：

打开文件。

  • 函数原型：
fs_file_t* fs_open_file (fs_t* fs, const char* name, const char* mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | fs_file_t* | 返回非NULL表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 文件名。
mode | const char* | 打开方式，取值请参考POSIX的fopen函数相应的参数。

fs_remove_dir 函数

  • 函数功能：

刪除目录。

  • 函数原型：
ret_t fs_remove_dir (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_remove_dir_r 函数

  • 函数功能：

递归刪除目录。

  • 函数原型：
ret_t fs_remove_dir_r (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 目录名称。

fs_remove_file 函数

  • 函数功能：

刪除文件。

  • 函数原型：
ret_t fs_remove_file (fs_t* fs, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 文件名。

fs_stat 函数

  • 函数功能：

获取文件信息。

  • 函数原型：
ret_t fs_stat (fs_t* fs, const char* name, fs_stat_info_t* fst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
fs | fs_t* | 文件系统对象，一般赋值为os_fs()。
name | const char* | 文件名。
fst | fs_stat_info_t* | 文件状态信息。

os_fs 函数

  • 函数功能：

获取缺省的文件系统对象。

  • 函数原型：
fs_t* os_fs ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | fs_t* | 返回文件系统对象。


func_call_parser_t

概述

从字符串中解析出函数调用需要的参数。

func_call => func_name '(' params ')'
params => param ',' params
param => name '=' value
func_name => ID
name = ID
value = int | float | ID

如:move(x=10, y=20) 如:rename(old_name=aa, new_name=bb)

函数

函数名称 | 说明
func_call_parse | 解析参数，并将结果生成一个object对象。
func_call_parser_deinit | 重置parser。
func_call_parser_init | 初始化parser对象。
func_call_parser_parse | 开始解析。

func_call_parse 函数

  • 函数功能：

解析参数，并将结果生成一个object对象。

调用者负责释放返回的object对象。

  • 函数原型：
tk_object_t* func_call_parse (const char* str, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
str | const char* | 要解析的字符串。
size | uint32_t | 字符串长度。

func_call_parser_deinit 函数

  • 函数功能：

重置parser。

  • 函数原型：
ret_t func_call_parser_deinit (func_call_parser_t* parser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
parser | func_call_parser_t* | parser对象。

func_call_parser_init 函数

  • 函数功能：

初始化parser对象。

  • 函数原型：
func_call_parser_t* func_call_parser_init (func_call_parser_t* parser, const char* str, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | func_call_parser_t* | parser对象本身。
parser | func_call_parser_t* | parser对象。
str | const char* | 要解析的字符串。
size | uint32_t | 字符串长度。

func_call_parser_parse 函数

  • 函数功能：

开始解析。

  • 函数原型：
ret_t func_call_parser_parse (func_call_parser_t* parser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
parser | func_call_parser_t* | parser对象。


func_desc_t

概述

函数描述。

属性

属性名称 | 类型 | 说明
args | const arg_desc_t** | 函数参数描述。
desc | const char* | 描述。
exec | func_exec_t | 函数指针。
name | const char* | 名称。
return_value | const value_desc_t* | 函数返回值描述。

args 属性

函数参数描述。

  • 类型：const arg_desc_t**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

desc 属性

描述。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

exec 属性

函数指针。

  • 类型：func_exec_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

return_value 属性

函数返回值描述。

  • 类型：const value_desc_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


g2d_t

概述

2D加速接口。

函数

函数名称 | 说明
g2d_blend_image | 把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放。
g2d_blend_image_rotate | 把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放以及旋转。
g2d_copy_image | 把图片指定的区域拷贝到framebuffer中。
g2d_fill_rect | 用颜色填充指定的区域。
g2d_rotate_image | 把图片指定的区域进行旋转并拷贝到framebuffer相应的区域，本函数主要用于辅助实现横屏和竖屏的切换，一般支持90度旋转即可。
g2d_rotate_image_ex | 把图片指定的区域进行旋转。

g2d_blend_image 函数

  • 函数功能：

把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放。 1.硬件不支持缩放，则返回NOT_IMPL。 2.硬件不支持全局alpha，global_alpha!=0xff时返回NOT_IMPL。

  • 函数原型：
ret_t g2d_blend_image (bitmap_t* fb, bitmap_t* img, const rect_t* dst, const rect_t* src, uint8_t global_alpha);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
fb | bitmap_t* | framebuffer对象。
img | bitmap_t* | 图片对象。
dst | const rect_t* | 目的区域。
src | const rect_t* | 源区域。
global_alpha | uint8_t | 全局alpha。

g2d_blend_image_rotate 函数

  • 函数功能：

把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放以及旋转。

  • 函数原型：
ret_t g2d_blend_image_rotate (bitmap_t* dst, bitmap_t* src, const rectf_t* dst_r, const rectf_t* src_r, uint8_t alpha, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
dst_r | const rectf_t* | 目的区域。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
src_r | const rectf_t* | 源区域。
alpha | uint8_t | 全局alpha。
o | lcd_orientation_t | 旋转角度(一般支持90度即可，旋转方向为逆时针)。

g2d_copy_image 函数

  • 函数功能：

把图片指定的区域拷贝到framebuffer中。

  • 函数原型：
ret_t g2d_copy_image (bitmap_t* fb, bitmap_t* img, const rect_t* src, xy_t dx, xy_t dy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
fb | bitmap_t* | framebuffer对象。
img | bitmap_t* | 图片对象。
src | const rect_t* | 要拷贝的区域。
dx | xy_t | 目标位置的x坐标。
dy | xy_t | 目标位置的y坐标。

g2d_fill_rect 函数

  • 函数功能：

用颜色填充指定的区域。

  • 函数原型：
ret_t g2d_fill_rect (bitmap_t* fb, const rect_t* dst, color_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
fb | bitmap_t* | framebuffer对象。
dst | const rect_t* | 要填充的目标区域。
c | color_t | 颜色。

g2d_rotate_image 函数

  • 函数功能：

把图片指定的区域进行旋转并拷贝到framebuffer相应的区域，本函数主要用于辅助实现横屏和竖屏的切换，一般支持90度旋转即可。

  • 函数原型：
ret_t g2d_rotate_image (bitmap_t* fb, bitmap_t* img, const rect_t* src, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
fb | bitmap_t* | framebuffer对象。
img | bitmap_t* | 图片对象。
src | const rect_t* | 要旋转并拷贝的区域。
o | lcd_orientation_t | 旋转角度(一般支持90度即可)。

g2d_rotate_image_ex 函数

  • 函数功能：

把图片指定的区域进行旋转。

  • 函数原型：
ret_t g2d_rotate_image_ex (bitmap_t* dst, bitmap_t* src, const rect_t* src_r, xy_t dx, xy_t dy, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
src_r | const rect_t* | 要旋转并拷贝的区域。
dx | xy_t | 目标位置的x坐标。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
dy | xy_t | 目标位置的y坐标。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
o | lcd_orientation_t | 旋转角度(一般支持90度即可，旋转方向为逆时针)。


gauge_pointer_t

概述

仪表指针控件。

仪表指针就是一张旋转的图片，图片可以是普通图片也可以是SVG图片。

在嵌入式平台上，对于旋转的图片，SVG图片的效率比位图高数倍，所以推荐使用SVG图片。

gauge_pointer_t是widget_t的子类控件，widget_t的函数均适用于gauge_pointer_t控件。

在xml中使用”gauge_pointer”标签创建仪表指针控件。如：

<gauge_pointer x="c" y="50" w="24" h="140" value="-128" image="gauge_pointer" />

更多用法请参考： gauge.xml

在c代码中使用函数gauge_pointer_create创建仪表指针控件。如：

widget_t* gauge_pointer = gauge_pointer_create(gauge, 10, 10, 100, 30);
gauge_pointer_set_image(gauge_pointer, "gauge_pointer");

> 创建之后，需要用gauge_pointer_set_image设置仪表指针图片。

函数

函数名称 | 说明
gauge_pointer_cast | 转换为gauge_pointer对象(供脚本语言使用)。
gauge_pointer_create | 创建gauge_pointer对象
gauge_pointer_get_widget_vtable | 获取 gauge_pointer 虚表。
gauge_pointer_set_anchor | 设置指针的旋转锚点。
gauge_pointer_set_angle | 设置指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。
gauge_pointer_set_image | 设置指针的图片。

属性

属性名称 | 类型 | 说明
anchor_x | char* | 图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
anchor_y | char* | 图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
angle | float_t | 指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。
image | char* | 指针图片。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(角度)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(角度)改变事件。

gauge_pointer_cast 函数

  • 函数功能：

转换为gauge_pointer对象(供脚本语言使用)。

  • 函数原型：
widget_t* gauge_pointer_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | gauge_pointer对象。
widget | widget_t* | gauge_pointer对象。

gauge_pointer_create 函数

  • 函数功能：

创建gauge_pointer对象

  • 函数原型：
widget_t* gauge_pointer_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

gauge_pointer_get_widget_vtable 函数

  • 函数功能：

获取 gauge_pointer 虚表。

  • 函数原型：
const widget_vtable_t* gauge_pointer_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 gauge_pointer 虚表。

gauge_pointer_set_anchor 函数

  • 函数功能：

设置指针的旋转锚点。

  • 函数原型：
ret_t gauge_pointer_set_anchor (widget_t* widget, const char* anchor_x, const char* anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
anchor_x | const char* | 指针的锚点坐标x。(后面加上px为像素点，不加px为相对百分比坐标)
anchor_y | const char* | 指针的锚点坐标y。(后面加上px为像素点，不加px为相对百分比坐标)

gauge_pointer_set_angle 函数

  • 函数功能：

设置指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。

  • 函数原型：
ret_t gauge_pointer_set_angle (widget_t* widget, float_t angle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
angle | float_t | 指针角度。

gauge_pointer_set_image 函数

  • 函数功能：

设置指针的图片。

  • 函数原型：
ret_t gauge_pointer_set_image (widget_t* widget, const char* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
image | const char* | 指针的图片。

anchor_x 属性

图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

anchor_y 属性

图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

angle 属性

指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

指针图片。

图片须垂直向上，图片的中心点为旋转方向。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


gauge_t

概述

表盘控件。

表盘控件就是一张图片。

gauge_t是widget_t的子类控件，widget_t的函数均适用于gauge_t控件。

在xml中使用”gauge”标签创建表盘控件。如：

<gauge x="c" y="10" w="240" h="240" image="gauge_bg" >

更多用法请参考： gauge.xml

在c代码中使用函数gauge_create创建表盘控件。如：

widget_t* gauge = gauge_create(win, 10, 10, 200, 200);
gauge_set_image(gauge, "gauge_bg");

可用通过style来设置控件的显示风格，如背景和边框等。如：

<gauge>
<style name="border">
<normal border_color="#000000" bg_color="#e0e0e0" text_color="black"/>
</style>
</gauge>

更多用法请参考： theme default

函数

函数名称 | 说明
gauge_cast | 转换为gauge对象(供脚本语言使用)。
gauge_create | 创建gauge对象
gauge_get_widget_vtable | 获取 gauge 虚表。
gauge_set_draw_type | 设置图片的显示方式。
gauge_set_image | 设置背景图片的名称。

属性

属性名称 | 类型 | 说明
draw_type | image_draw_type_t | 图片的绘制方式。
image | char* | 背景图片。

gauge_cast 函数

  • 函数功能：

转换为gauge对象(供脚本语言使用)。

  • 函数原型：
widget_t* gauge_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | gauge对象。
widget | widget_t* | gauge对象。

gauge_create 函数

  • 函数功能：

创建gauge对象

  • 函数原型：
widget_t* gauge_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

gauge_get_widget_vtable 函数

  • 函数功能：

获取 gauge 虚表。

  • 函数原型：
const widget_vtable_t* gauge_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 gauge 虚表。

gauge_set_draw_type 函数

  • 函数功能：

设置图片的显示方式。

绘制方式的属性值和枚举值: image_draw_type_name_value

  • 函数原型：
ret_t gauge_set_draw_type (widget_t* widget, image_draw_type_t draw_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
draw_type | image_draw_type_t | 显示方式。

gauge_set_image 函数

  • 函数功能：

设置背景图片的名称。

  • 函数原型：
ret_t gauge_set_image (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
name | const char* | 图片名称，该图片必须存在于资源管理器。

draw_type 属性

图片的绘制方式。

  • 类型：image_draw_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

背景图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


gif_image_t

概述

GIF图片控件。

注意：GIF图片的尺寸大于控件大小时会自动缩小图片，但一般的嵌入式系统的硬件加速都不支持图片缩放， 所以缩放图片会导致性能明显下降。如果性能不满意时，请确认一下GIF图片的尺寸是否小余控件大小。

gif_image_t是image_base_t的子类控件，image_base_t的函数均适用于gif_image_t控件。

在xml中使用”gif”标签创建GIF图片控件。如：

<gif image="bee"/>

更多用法请参考： gif image

在c代码中使用函数gif_image_create创建GIF图片控件。如：

widget_t* image = gif_image_create(win, 10, 10, 200, 200);
image_set_image(image, "bee");

创建之后:

需要用widget_set_image设置图片名称。

完整示例请参考：gif image demo

可用通过style来设置控件的显示风格，如背景和边框等。如：

<gif>
<style name="border">
<normal border_color="#000000" bg_color="#e0e0e0" text_color="black"/>
</style>
</gif>

更多用法请参考：theme default

函数

函数名称 | 说明
gif_image_cast | 转换为gif_image对象(供脚本语言使用)。
gif_image_create | 创建gif_image对象
gif_image_get_widget_vtable | 获取 gif_image 虚表。
gif_image_pause | 暂停。
gif_image_play | 播放。
gif_image_set_loop | 设置循环播放次数。
gif_image_stop | 停止(并重置index为0)。

属性

属性名称 | 类型 | 说明
loop | uint32_t | 循环播放的次数。
running | bool_t | 是否正在运行。

gif_image_cast 函数

  • 函数功能：

转换为gif_image对象(供脚本语言使用)。

  • 函数原型：
widget_t* gif_image_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | gif_image对象。
widget | widget_t* | gif_image对象。

gif_image_create 函数

  • 函数功能：

创建gif_image对象

  • 函数原型：
widget_t* gif_image_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

gif_image_get_widget_vtable 函数

  • 函数功能：

获取 gif_image 虚表。

  • 函数原型：
const widget_vtable_t* gif_image_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 gif_image 虚表。

gif_image_pause 函数

  • 函数功能：

暂停。

  • 函数原型：
ret_t gif_image_pause (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | gif_image对象。

gif_image_play 函数

  • 函数功能：

播放。

  • 函数原型：
ret_t gif_image_play (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | gif_image对象。

gif_image_set_loop 函数

  • 函数功能：

设置循环播放次数。

  • 函数原型：
ret_t gif_image_set_loop (widget_t* widget, uint32_t loop);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
loop | uint32_t | 循环播放次数。

gif_image_stop 函数

  • 函数功能：

停止(并重置index为0)。

  • 函数原型：
ret_t gif_image_stop (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | gif_image对象。

loop 属性

循环播放的次数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

running 属性

是否正在运行。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


global_t

概述

TK全局对象。

函数

函数名称 | 说明
asset_loader_default_create | 创建缺省的资源加载器。
asset_loader_zip_create | 创建zip资源加载器。
asset_loader_zip_create_with_reader | 创建zip资源加载器。
tk_deinit_internal | deinit。
tk_enable_fast_lcd_portrait | 设置是否开启快速旋转功能。（开启这个功能需要定义 WITH_FAST_LCD_PORTRAIT 宏）
tk_exit | public for web
tk_get_pointer_x | 获取全局指针的X坐标。
tk_get_pointer_y | 获取全局指针的Y坐标。
tk_init | 初始化TK。
tk_init_assets | 初始化资源。
tk_init_internal | init。
tk_is_pointer_pressed | 获取全局指针是否按下。
tk_pre_init | 初始化基本功能。
tk_quit | 退出TK事件主循环。
tk_run | 进入TK事件主循环。
tk_run_in_ui_thread | 后台线程在UI线程执行指定的函数。
tk_set_lcd_orientation | 设置屏幕的旋转方向(XXX:目前仅支持0度,90度,180度和270度，旋转方向为逆时针方向)。

asset_loader_default_create 函数

  • 函数功能：

创建缺省的资源加载器。

  • 函数原型：
asset_loader_t* asset_loader_default_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_loader_t* | 返回loader对象。

asset_loader_zip_create 函数

  • 函数功能：

创建zip资源加载器。

  • 函数原型：
asset_loader_t* asset_loader_zip_create (const char* zipfile);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_loader_t* | 返回loader对象。
zipfile | const char* | zip文件名。

asset_loader_zip_create_with_reader 函数

  • 函数功能：

创建zip资源加载器。

  • 函数原型：
asset_loader_t* asset_loader_zip_create_with_reader (data_reader_t* reader, bool_t own_the_reader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | asset_loader_t* | 返回loader对象。
reader | data_reader_t* | reader对象。
own_the_reader | bool_t | 如果希望销毁loader时销毁reader，请设置为TRUE。

tk_deinit_internal 函数

  • 函数功能：

deinit。 public for test program

  • 函数原型：
ret_t tk_deinit_internal ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_enable_fast_lcd_portrait 函数

  • 函数功能：

设置是否开启快速旋转功能。（开启这个功能需要定义 WITH_FAST_LCD_PORTRAIT 宏） 备注：需要在 tk_set_lcd_orientation 函数之前调用

  • 函数原型：
ret_t tk_enable_fast_lcd_portrait (bool_t enable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
enable | bool_t | 是否开启。

tk_exit 函数

  • 函数功能：

public for web

  • 函数原型：
ret_t tk_exit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_get_pointer_x 函数

  • 函数功能：

获取全局指针的X坐标。

  • 函数原型：
int32_t tk_get_pointer_x ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回全局指针的X坐标。

tk_get_pointer_y 函数

  • 函数功能：

获取全局指针的Y坐标。

  • 函数原型：
int32_t tk_get_pointer_y ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回全局指针的X坐标。

tk_init 函数

  • 函数功能：

初始化TK。

  • 函数原型：
ret_t tk_init (wh_t w, wh_t h, app_type_t app_type, const char* app_name, const char* app_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
w | wh_t | LCD宽度。
h | wh_t | LCD高度。
app_type | app_type_t | 应用程序的类型。
app_name | const char* | 应用程序的名称(必须为常量字符串)。
app_root | const char* | 应用程序的根目录，用于定位资源文件(必须为常量字符串)。

tk_init_assets 函数

  • 函数功能：

初始化资源。

  • 函数原型：
ret_t tk_init_assets ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_init_internal 函数

  • 函数功能：

init。 public for test program

  • 函数原型：
ret_t tk_init_internal ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_is_pointer_pressed 函数

  • 函数功能：

获取全局指针是否按下。

  • 函数原型：
bool_t tk_is_pointer_pressed ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回全局指针是否按下。

tk_pre_init 函数

  • 函数功能：

初始化基本功能。 在tk_init之前，应用程序可能需要加载配置文件， 为了保证这些功能正常工作，可以先调用tk_pre_init来初始化平台、内存和data reader等等。

  • 函数原型：
ret_t tk_pre_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_quit 函数

  • 函数功能：

退出TK事件主循环。

  • 函数原型：
ret_t tk_quit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_run 函数

  • 函数功能：

进入TK事件主循环。

  • 函数原型：
ret_t tk_run ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_run_in_ui_thread 函数

  • 函数功能：

后台线程在UI线程执行指定的函数。

  • 函数原型：
ret_t tk_run_in_ui_thread (tk_callback_t func, void* ctx, bool_t wait_until_done);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
func | tk_callback_t | 函数。
ctx | void* | 回调函数的上下文。
wait_until_done | bool_t | 是否等待完成。

tk_set_lcd_orientation 函数

  • 函数功能：

设置屏幕的旋转方向(XXX:目前仅支持0度,90度,180度和270度，旋转方向为逆时针方向)。

  • 函数原型：
ret_t tk_set_lcd_orientation (lcd_orientation_t orientation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
orientation | lcd_orientation_t | 旋转方向。


glyph_cache_t

概述

glyph cache

函数

函数名称 | 说明
glyph_cache_add | 增加一个glyph对象到cache。
glyph_cache_deinit | 释放全部cache。
glyph_cache_init | 初始化glyph_cache对象。
glyph_cache_lookup | 查找glyph对象。
glyph_cache_shrink | 释放部分glyph。

glyph_cache_add 函数

  • 函数功能：

增加一个glyph对象到cache。

  • 函数原型：
ret_t glyph_cache_add (glyph_cache_t* cache, wchar_t code, font_size_t size, glyph_t* g);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cache | glyph_cache_t* | cache对象。
code | wchar_t | 字符。
size | font_size_t | 字体大小。
g | glyph_t* | glyph对象。

glyph_cache_deinit 函数

  • 函数功能：

释放全部cache。

  • 函数原型：
ret_t glyph_cache_deinit (glyph_cache_t* cache);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cache | glyph_cache_t* | cache对象。

glyph_cache_init 函数

  • 函数功能：

初始化glyph_cache对象。

  • 函数原型：
glyph_cache_t* glyph_cache_init (glyph_cache_t* cache, uint32_t capacity, tk_destroy_t destroy_glyph);
  • 参数说明：
参数 | 类型 | 说明
返回值 | glyph_cache_t* | 返回cache对象。
cache | glyph_cache_t* | cache对象。
capacity | uint32_t | 最大容量。
destroy_glyph | tk_destroy_t | 销毁函数。

glyph_cache_lookup 函数

  • 函数功能：

查找glyph对象。

  • 函数原型：
ret_t glyph_cache_lookup (glyph_cache_t* cache, wchar_t code, font_size_t size, glyph_t* g);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cache | glyph_cache_t* | cache对象。
code | wchar_t | 字符。
size | font_size_t | 字体大小。
g | glyph_t* | glyph对象(用于返回glyph)。

glyph_cache_shrink 函数

  • 函数功能：

释放部分glyph。

  • 函数原型：
ret_t glyph_cache_shrink (glyph_cache_t* cache, uint32_t cache_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cache | glyph_cache_t* | cache对象。
cache_size | uint32_t | 保留cache个数。


glyph_format_t

概述

字模格式常量定义。

常量

名称 | 说明
GLYPH_FMT_ALPHA | 每个像素占用1个字节(缺省)。
GLYPH_FMT_MONO | 每个像素占用1个比特。
GLYPH_FMT_RGBA | 每个像素占用4个字节。
GLYPH_FMT_ALPHA2 | 每个像素占用2bit。
GLYPH_FMT_ALPHA4 | 每个像素占用4bit。


glyph_t

概述

代表一个字符的字模。

函数

函数名称 | 说明
glyph_clone | 克隆glyph对象。
glyph_create | 创建glyph对象。
glyph_destroy | 销毁glyph对象。

属性

属性名称 | 类型 | 说明
advance | uint16_t | 占位宽度。
data | const uint8_t* | 数据。
format | uint8_t | 格式。
h | uint16_t | 高度。
pitch | uint8_t | pitch。
w | uint16_t | 宽度。
x | int16_t | x坐标。
y | int16_t | y坐标。

glyph_clone 函数

  • 函数功能：

克隆glyph对象。

  • 函数原型：
glyph_t* glyph_clone (glyph_t* g);
  • 参数说明：
参数 | 类型 | 说明
返回值 | glyph_t* | glyph对象。
g | glyph_t* | glyph对象。

glyph_create 函数

  • 函数功能：

创建glyph对象。

  • 函数原型：
glyph_t* glyph_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | glyph_t* | glyph对象。

glyph_destroy 函数

  • 函数功能：

销毁glyph对象。

  • 函数原型：
ret_t glyph_destroy (glyph_t* g);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
g | glyph_t* | glyph对象。

advance 属性

占位宽度。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

data 属性

数据。

  • 类型：const uint8_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

format 属性

格式。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

h 属性

高度。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

pitch 属性

pitch。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

w 属性

宽度。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

x 属性

x坐标。

  • 类型：int16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

y 属性

y坐标。

  • 类型：int16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


gradient_stop_t

概述

渐变关键点。

属性

属性名称 | 类型 | 说明
color | color_t | 颜色。
offset | float | 偏移量(0-1)。

color 属性

颜色。

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

offset 属性

偏移量(0-1)。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


gradient_t

概述

渐变。

函数

函数名称 | 说明
gradient_add_stop | 增加关键点。
gradient_deinit | 释放gradient对象。
gradient_get_color | 获取颜色。
gradient_get_first_color | 获取开始的颜色。
gradient_get_last_color | 获取结束的颜色。
gradient_get_stop | 获取关键点。
gradient_init | 初始化gradient对象。
gradient_init_from_binary | 从二进制数据初始化gradient对象。
gradient_init_from_str | 从字符串初始化gradient对象。
gradient_init_simple | 初始化gradient对象。
gradient_set_linear_degree | 设置线性渐变的角度。
gradient_set_type | 设置类型。
gradient_to_binary | 转成二进制格式。
gradient_to_str | 转换成字符串格式。

属性

属性名称 | 类型 | 说明
degree | uint32_t | 线性渐变的角度。
nr | uint32_t | stop个数。
type | gradient_type_t | 类型。

gradient_add_stop 函数

  • 函数功能：

增加关键点。

  • 函数原型：
ret_t gradient_add_stop (gradient_t* gradient, color_t color, float stop);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | gradient_t* | gradient对象。
color | color_t | 颜色。
stop | float | 位置。

gradient_deinit 函数

  • 函数功能：

释放gradient对象。

  • 函数原型：
ret_t gradient_deinit (gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | gradient_t* | gradient对象。

gradient_get_color 函数

  • 函数功能：

获取颜色。

  • 函数原型：
color_t gradient_get_color (gradient_t* gradient, float offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 返回颜色。
gradient | gradient_t* | gradient对象。
offset | float | 偏移(0-1)。

gradient_get_first_color 函数

  • 函数功能：

获取开始的颜色。

  • 函数原型：
color_t gradient_get_first_color (const gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 返回颜色。
gradient | const gradient_t* | gradient对象。

gradient_get_last_color 函数

  • 函数功能：

获取结束的颜色。

  • 函数原型：
color_t gradient_get_last_color (const gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 返回颜色。
gradient | const gradient_t* | gradient对象。

gradient_get_stop 函数

  • 函数功能：

获取关键点。

  • 函数原型：
const gradient_stop_t* gradient_get_stop (const gradient_t* gradient, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const gradient_stop_t* | 返回index指定的关键点。
gradient | const gradient_t* | gradient对象。
index | uint32_t | 序数。

gradient_init 函数

  • 函数功能：

初始化gradient对象。

  • 函数原型：
gradient_t* gradient_init (gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | gradient_t* | 返回gradient对象。
gradient | gradient_t* | gradient对象。

gradient_init_from_binary 函数

  • 函数功能：

从二进制数据初始化gradient对象。

二进制数据必须由gradient_to_binary生成。

  • 函数原型：
gradient_t* gradient_init_from_binary (gradient_t* gradient, const uint8_t* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | gradient_t* | 返回gradient对象。
gradient | gradient_t* | gradient对象。
data | const uint8_t* | 数据。
size | uint32_t | 数据长度。

gradient_init_from_str 函数

  • 函数功能：

从字符串初始化gradient对象。

字符串的格式兼容CSS，请参考相关文档。

  • 函数原型：
gradient_t* gradient_init_from_str (gradient_t* gradient, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | gradient_t* | 返回gradient对象。
gradient | gradient_t* | gradient对象。
str | const char* | 字符串。

gradient_init_simple 函数

  • 函数功能：

初始化gradient对象。

  • 函数原型：
gradient_t* gradient_init_simple (gradient_t* gradient, uint32_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | gradient_t* | 返回gradient对象。
gradient | gradient_t* | gradient对象。
color | uint32_t | 颜色。

gradient_set_linear_degree 函数

  • 函数功能：

设置线性渐变的角度。

  • 函数原型：
ret_t gradient_set_linear_degree (gradient_t* gradient, uint32_t degree);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | gradient_t* | gradient对象。
degree | uint32_t | 角度。

gradient_set_type 函数

  • 函数功能：

设置类型。

  • 函数原型：
ret_t gradient_set_type (gradient_t* gradient, gradient_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | gradient_t* | gradient对象。
type | gradient_type_t | 类型。

gradient_to_binary 函数

  • 函数功能：

转成二进制格式。

  • 函数原型：
ret_t gradient_to_binary (gradient_t* gradient, wbuffer_t* wb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | gradient_t* | gradient对象。
wb | wbuffer_t* | 二进制数据。

gradient_to_str 函数

  • 函数功能：

转换成字符串格式。

  • 函数原型：
ret_t gradient_to_str (gradient_t* gradient, str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | gradient_t* | gradient对象。
str | str_t* | 字符串。

degree 属性

线性渐变的角度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

nr 属性

stop个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

type 属性

类型。

  • 类型：gradient_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


gradient_type_t

概述

渐变色类型。

常量

名称 | 说明
GRADIENT_NONE | 无效类型。
GRADIENT_LINEAR | 线性渐变。
GRADIENT_RADIAL | 放射渐变。


graphic_buffer_t

概述

graphic_buffer。

函数

函数名称 | 说明
graphic_buffer_attach | 附件到指定的内存。
graphic_buffer_create_for_bitmap | 为位图创建缓冲区。
graphic_buffer_create_with_data | 创建缓冲区。
graphic_buffer_destroy | 销毁缓冲区。
graphic_buffer_get_physical_height | 获取 graphic_buffer 真实物理的的高度
graphic_buffer_get_physical_line_length | 获取 graphic_buffer 真实物理的的行长度
graphic_buffer_get_physical_width | 获取 graphic_buffer 真实物理的的宽度
graphic_buffer_is_valid_for | 用于检查graphic buffer的有效性。
graphic_buffer_lock_for_read | 为读取数据而锁定缓冲区。
graphic_buffer_lock_for_write | 为修改数据而锁定缓冲区。
graphic_buffer_unlock | 解锁缓冲区。

graphic_buffer_attach 函数

  • 函数功能：

附件到指定的内存。

  • 函数原型：
ret_t graphic_buffer_attach (graphic_buffer_t* buffer, void* data, uint32_t w, uint32_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buffer | graphic_buffer_t* | 图像缓冲区对象。
data | void* | 内存数据。
w | uint32_t | 宽度。
h | uint32_t | 宽度。

graphic_buffer_create_for_bitmap 函数

  • 函数功能：

为位图创建缓冲区。

  • 函数原型：
ret_t graphic_buffer_create_for_bitmap (bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
bitmap | bitmap_t* | 位图对象。

graphic_buffer_create_with_data 函数

  • 函数功能：

创建缓冲区。

为了兼容raw图像。

  • 函数原型：
graphic_buffer_t* graphic_buffer_create_with_data (const uint8_t* data, uint32_t w, uint32_t h, bitmap_format_t format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | graphic_buffer_t* | 返回缓存区。
data | const uint8_t* | 数据。
w | uint32_t | 宽度。
h | uint32_t | 宽度。
format | bitmap_format_t | 格式。

graphic_buffer_destroy 函数

  • 函数功能：

销毁缓冲区。

  • 函数原型：
ret_t graphic_buffer_destroy (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buffer | graphic_buffer_t* | 图像缓冲区对象。

graphic_buffer_get_physical_height 函数

  • 函数功能：

获取 graphic_buffer 真实物理的的高度

  • 函数原型：
uint32_t graphic_buffer_get_physical_height (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回高度。
buffer | graphic_buffer_t* | 图像缓冲区对象。

graphic_buffer_get_physical_line_length 函数

  • 函数功能：

获取 graphic_buffer 真实物理的的行长度

  • 函数原型：
uint32_t graphic_buffer_get_physical_line_length (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回行长度。
buffer | graphic_buffer_t* | 图像缓冲区对象。

graphic_buffer_get_physical_width 函数

  • 函数功能：

获取 graphic_buffer 真实物理的的宽度

  • 函数原型：
uint32_t graphic_buffer_get_physical_width (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回宽度。
buffer | graphic_buffer_t* | 图像缓冲区对象。

graphic_buffer_is_valid_for 函数

  • 函数功能：

用于检查graphic buffer的有效性。

  • 函数原型：
bool_t graphic_buffer_is_valid_for (graphic_buffer_t* buffer, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示有效，否则表示无效。
buffer | graphic_buffer_t* | 图像缓冲区对象。
bitmap | bitmap_t* | 位图对象。

graphic_buffer_lock_for_read 函数

  • 函数功能：

为读取数据而锁定缓冲区。

  • 函数原型：
uint8_t* graphic_buffer_lock_for_read (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回缓存区的首地址。
buffer | graphic_buffer_t* | 图像缓冲区对象。

graphic_buffer_lock_for_write 函数

  • 函数功能：

为修改数据而锁定缓冲区。

  • 函数原型：
uint8_t* graphic_buffer_lock_for_write (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回缓存区的首地址。
buffer | graphic_buffer_t* | 图像缓冲区对象。

graphic_buffer_unlock 函数

  • 函数功能：

解锁缓冲区。

  • 函数原型：
ret_t graphic_buffer_unlock (graphic_buffer_t* buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buffer | graphic_buffer_t* | 图像缓冲区对象。


grid_item_t

概述

grid_item。一个简单的容器控件，一般作为grid的子控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

grid_item_t是widget_t的子类控件，widget_t的函数均适用于grid_item_t控件。

在xml中使用”grid_item”标签创建grid_item。如：

<grid x="0" y="0" w="100%" h="100%" children_layout="default(c=2,r=2,m=5,s=5)">
<grid_item>
<button x="c" y="m" w="80%" h="30" name="0" text="0"/>
</grid_item>
<grid_item>
<button x="c" y="m" w="80%" h="30" name="1" text="1"/>
</grid_item>
<grid_item>
<button x="c" y="m" w="80%" h="30" name="2" text="2"/>
</grid_item>
<grid_item>
<button x="c" y="m" w="80%" h="30" name="3" text="3"/>
</grid_item>
</grid>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
grid_item_cast | 转换为grid_item对象(供脚本语言使用)。
grid_item_create | 创建grid_item对象
grid_item_get_widget_vtable | 获取 grid_item 虚表。

grid_item_cast 函数

  • 函数功能：

转换为grid_item对象(供脚本语言使用)。

  • 函数原型：
widget_t* grid_item_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | grid_item对象。
widget | widget_t* | grid_item对象。

grid_item_create 函数

  • 函数功能：

创建grid_item对象

  • 函数原型：
widget_t* grid_item_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

grid_item_get_widget_vtable 函数

  • 函数功能：

获取 grid_item 虚表。

  • 函数原型：
const widget_vtable_t* grid_item_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 grid_item 虚表。


grid_t

概述

网格。 在xml中使用”grid”标签创建控件。如：

<!-- ui -->
<grid x="c" y="50" w="100" h="100"/>

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<!-- style -->
<grid>
<style name="default" grid_color="gray" border_color="black" odd_bg_color="#f5f5f5" even_bg_color="#eeeeee">
<normal />
</style>
</grid>

函数

函数名称 | 说明
grid_cast | 转换为grid对象(供脚本语言使用)。
grid_create | 创建grid对象
grid_get_widget_vtable | 获取 grid 虚表。
grid_set_columns_definition | 设置 各列的参数。
grid_set_rows | 设置 行数。
grid_set_show_grid | 设置 是否显示网格。

属性

属性名称 | 类型 | 说明
columns_definition | char* | 各列的参数。
rows | uint32_t | 行数。
show_grid | bool_t | 是否显示网格。

grid_cast 函数

  • 函数功能：

转换为grid对象(供脚本语言使用)。

  • 函数原型：
widget_t* grid_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | grid对象。
widget | widget_t* | grid对象。

grid_create 函数

  • 函数功能：

创建grid对象

  • 函数原型：
widget_t* grid_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | grid对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

grid_get_widget_vtable 函数

  • 函数功能：

获取 grid 虚表。

  • 函数原型：
const widget_vtable_t* grid_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 grid 虚表。

grid_set_columns_definition 函数

  • 函数功能：

设置 各列的参数。

  • 函数原型：
ret_t grid_set_columns_definition (widget_t* widget, const char* columns_definition);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
columns_definition | const char* | 各列的参数。

grid_set_rows 函数

  • 函数功能：

设置 行数。

  • 函数原型：
ret_t grid_set_rows (widget_t* widget, uint32_t rows);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
rows | uint32_t | 行数。

grid_set_show_grid 函数

  • 函数功能：

设置 是否显示网格。

  • 函数原型：
ret_t grid_set_show_grid (widget_t* widget, bool_t show_grid);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
show_grid | bool_t | 是否显示网格。

columns_definition 属性

各列的参数。 各列的参数之间用英文的分号(;)分隔，每列参数的格式为：

col(w=?,left_margin=?,right_margin=?,top_maorgin=?,bottom_margin=?)

  • w 为列的宽度(必须存在)。取值在(0-1]区间时，视为grid控件宽度的比例，否则为像素宽度。 (如果为负数，将计算结果加上控件的宽度)
  • left_margin(可选，可缩写为l) 该列左边的边距。
  • right_margin(可选，可缩写为r) 该列右边的边距。
  • top_margin(可选，可缩写为t) 该列顶部的边距。
  • bottom_margin(可选，可缩写为b) 该列底部的边距。
  • margin(可选，可缩写为m) 同时指定上面4个边距。

  • fill_available(可选，可缩写为f) 填充剩余宽度(只有一列可以指定)。

  • 类型：char*

特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

rows 属性

行数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

show_grid 属性

是否显示网格。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


group_box_t

概述

分组控件。

单选按钮在同一个父控件中是互斥的，所以通常将相关的单选按钮放在一个group_box中。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

group_box_t是widget_t的子类控件，widget_t的函数均适用于group_box_t控件。

在xml中使用”group_box”标签创建group_box。如：

<group_box x="20" y="230" w="50%" h="90" children_layout="default(r=3,c=1,ym=2,s=10)" >
<radio_button name="r1" text="Book"/>
<radio_button name="r2" text="Food"/>
<radio_button name="r3" text="Pencil" value="true"/>
</group_box>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
group_box_cast | 转换为group_box对象(供脚本语言使用)。
group_box_create | 创建group_box对象
group_box_get_widget_vtable | 获取 group_box 虚表。

group_box_cast 函数

  • 函数功能：

转换为group_box对象(供脚本语言使用)。

  • 函数原型：
widget_t* group_box_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | group_box对象。
widget | widget_t* | group_box对象。

group_box_create 函数

  • 函数功能：

创建group_box对象

  • 函数原型：
widget_t* group_box_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

group_box_get_widget_vtable 函数

  • 函数功能：

获取 group_box 虚表。

  • 函数原型：
const widget_vtable_t* group_box_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 group_box 虚表。


guage_pointer_t

概述

仪表指针控件。

仪表指针就是一张旋转的图片，图片可以是普通图片也可以是SVG图片。

在嵌入式平台上，对于旋转的图片，SVG图片的效率比位图高数倍，所以推荐使用SVG图片。

guage_pointer_t是widget_t的子类控件，widget_t的函数均适用于guage_pointer_t控件。

在xml中使用”guage_pointer”标签创建仪表指针控件。如：

<guage_pointer x="c" y="50" w="24" h="140" value="-128" image="guage_pointer" />

更多用法请参考： guage.xml

在c代码中使用函数guage_pointer_create创建仪表指针控件。如：

widget_t* guage_pointer = guage_pointer_create(guage, 10, 10, 100, 30);
guage_pointer_set_image(guage_pointer, "guage_pointer");

> 创建之后，需要用guage_pointer_set_image设置仪表指针图片。

函数

函数名称 | 说明
guage_pointer_cast | 转换为guage_pointer对象(供脚本语言使用)。
guage_pointer_create | 创建guage_pointer对象
guage_pointer_set_anchor | 设置指针的旋转锚点。
guage_pointer_set_angle | 设置指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。
guage_pointer_set_image | 设置指针的图片。

属性

属性名称 | 类型 | 说明
anchor_x | char* | 图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
anchor_y | char* | 图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
angle | int32_t | 指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。
image | char* | 指针图片。

guage_pointer_cast 函数

  • 函数功能：

转换为guage_pointer对象(供脚本语言使用)。

  • 函数原型：
widget_t* guage_pointer_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | guage_pointer对象。
widget | widget_t* | guage_pointer对象。

guage_pointer_create 函数

  • 函数功能：

创建guage_pointer对象

  • 函数原型：
widget_t* guage_pointer_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

guage_pointer_set_anchor 函数

  • 函数功能：

设置指针的旋转锚点。

  • 函数原型：
ret_t guage_pointer_set_anchor (widget_t* widget, const char* anchor_x, const char* anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
anchor_x | const char* | 指针的锚点坐标x。(后面加上px为像素点，不加px为相对百分比坐标)
anchor_y | const char* | 指针的锚点坐标y。(后面加上px为像素点，不加px为相对百分比坐标)

guage_pointer_set_angle 函数

  • 函数功能：

设置指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。

  • 函数原型：
ret_t guage_pointer_set_angle (widget_t* widget, int32_t angle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
angle | int32_t | 指针角度。

guage_pointer_set_image 函数

  • 函数功能：

设置指针的图片。

  • 函数原型：
ret_t guage_pointer_set_image (widget_t* widget, const char* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
image | const char* | 指针的图片。

anchor_x 属性

图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

anchor_y 属性

图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

angle 属性

指针角度。12点钟方向为0度，顺时钟方向为正，单位为度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

指针图片。

图片须垂直向上，图片的中心点为旋转方向。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


guage_t

概述

表盘控件。

表盘控件就是一张图片。

guage_t是widget_t的子类控件，widget_t的函数均适用于guage_t控件。

在xml中使用”guage”标签创建表盘控件。如：

<guage x="c" y="10" w="240" h="240" image="guage_bg" >

更多用法请参考： guage.xml

在c代码中使用函数guage_create创建表盘控件。如：

widget_t* guage = guage_create(win, 10, 10, 200, 200);
guage_set_image(guage, "guage_bg");

可用通过style来设置控件的显示风格，如背景和边框等。如：

<guage>
<style name="border">
<normal border_color="#000000" bg_color="#e0e0e0" text_color="black"/>
</style>
</guage>

更多用法请参考： theme default

函数

函数名称 | 说明
guage_cast | 转换为guage对象(供脚本语言使用)。
guage_create | 创建guage对象
guage_set_draw_type | 设置图片的显示方式。
guage_set_image | 设置背景图片的名称。

属性

属性名称 | 类型 | 说明
draw_type | image_draw_type_t | 图片的绘制方式。
image | char* | 背景图片。

guage_cast 函数

  • 函数功能：

转换为guage对象(供脚本语言使用)。

  • 函数原型：
widget_t* guage_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | guage对象。
widget | widget_t* | guage对象。

guage_create 函数

  • 函数功能：

创建guage对象

  • 函数原型：
widget_t* guage_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

guage_set_draw_type 函数

  • 函数功能：

设置图片的显示方式。

绘制方式的属性值和枚举值: image_draw_type_name_value

  • 函数原型：
ret_t guage_set_draw_type (widget_t* widget, image_draw_type_t draw_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
draw_type | image_draw_type_t | 显示方式。

guage_set_image 函数

  • 函数功能：

设置背景图片的名称。

  • 函数原型：
ret_t guage_set_image (widget_t* widget, char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
name | char* | 图片名称，该图片必须存在于资源管理器。

draw_type 属性

图片的绘制方式。

  • 类型：image_draw_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

背景图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


hal_shell_t

概述

a shell to access network interface

函数

函数名称 | 说明
network_shell_run | 运行shell。

network_shell_run 函数

  • 函数功能：

运行shell。

  • 函数原型：
ret_t network_shell_run (network_interface_t* network_interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
network_interface | network_interface_t* | 网口对象。


hash_table_t

概述

哈希表。

用hash_table_init初始化时，用hash_table_deinit释放。如：

hash_table_t hash_table;
hash_table_init(&hash_table, 10, destroy, compare, hash);
...
hash_table_deinit(&hash_table);

用hash_table_create创建时，用hash_table_destroy销毁。如：

hash_table_t* hash_table = hash_table_create(10, destroy, compare, hash);
...
hash_table_destroy(hash_table);

示例

typedef struct _motor_t
{
int id;
int position;
int velocity;
int acceleration;
} motor_t;

motor_t *motor_create(int id)
{
motor_t *motor = new motor_t;
motor->id = id;
motor->position = 0;
motor->velocity = 0;
motor->acceleration = 0;
return motor;
}

ret_t motor_destroy(motor_t *motor)
{
delete motor;
return RET_OK;
}

int motor_compare(const void *a, const void *b)
{
motor_t *motor_a = (motor_t *)a;
motor_t *motor_b = (motor_t *)b;

return motor_a->id - motor_b->id;
}

ret_t visist_motor(void *ctx, const void *data)
{
motor_t *motor = (motor_t *)data;
log_debug("motor id: %d\n", motor->id);
return RET_OK;
}

uint32_t motor_hash(const void *data)
{
motor_t *motor = (motor_t *)data;
return motor->id;
}

void demo(void)
{
hash_table_t motors;
motor_t *motor = NULL;

// 初始化哈希表
hash_table_init(&motors, 10, (tk_destroy_t)motor_destroy, (tk_compare_t)motor_compare, motor_hash);

motor = motor_create(1);
// 将motor添加到哈希表
hash_table_add(&motors, motor, TRUE);
ENSURE(hash_table_find(&motors, NULL, motor) == motor);

motor = motor_create(2);
// 将motor添加到哈希表
hash_table_add(&motors, motor, TRUE);
ENSURE(hash_table_find(&motors, NULL, motor) == motor);

// 遍历哈希表
log_debug("motors size: %d\n", hash_table_size(&motors));
hash_table_foreach(&motors, visist_motor, NULL);

// 释放哈希表
hash_table_deinit(&motors);
}

函数

函数名称 | 说明
hash_table_add | 加入一个元素。
hash_table_clear | 清除全部元素。
hash_table_count | 返回满足条件元素的个数。
hash_table_create | 创建hash_table对象。
hash_table_deinit | 清除全部元素，并释放elms。
hash_table_destroy | 销毁hash_table对象。
hash_table_find | 查找第一个满足条件的元素。
hash_table_foreach | 遍历元素。
hash_table_hash_int | 计算int的hash值。
hash_table_hash_str | 计算字符串hash值。
hash_table_init | 初始化hash_table对象。
hash_table_remove | 删除第一个满足条件的元素。
hash_table_remove_all | 删除全部满足条件的元素。
hash_table_size | 返回全部元素个数。

属性

属性名称 | 类型 | 说明
buckets | darray_t | buckets。
compare | tk_compare_t | 元素比较函数。
destroy | tk_destroy_t | 元素销毁函数。
hash | tk_hash_t | 元素哈希函数。

hash_table_add 函数

  • 函数功能：

加入一个元素。

  • 函数原型：
ret_t hash_table_add (hash_table_t* hash_table, void* data, bool_t replace_if_exist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。
data | void* | 数据。
replace_if_exist | bool_t | 如果存在是否替换。

hash_table_clear 函数

  • 函数功能：

清除全部元素。

  • 函数原型：
ret_t hash_table_clear (hash_table_t* hash_table);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。

hash_table_count 函数

  • 函数功能：

返回满足条件元素的个数。

  • 函数原型：
int32_t hash_table_count (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回元素个数。
hash_table | hash_table_t* | 哈希表对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

hash_table_create 函数

  • 函数功能：

创建hash_table对象。

  • 函数原型：
hash_table_t* hash_table_create (uint32_t capacity, tk_destroy_t destroy, tk_compare_t compare, tk_hash_t hash);
  • 参数说明：
参数 | 类型 | 说明
返回值 | hash_table_t* | 哈希表对象。
capacity | uint32_t | 哈希表桶数。
destroy | tk_destroy_t | 元素销毁函数。
compare | tk_compare_t | 元素比较函数。
hash | tk_hash_t | 元素哈希函数。

hash_table_deinit 函数

  • 函数功能：

清除全部元素，并释放elms。

  • 函数原型：
ret_t hash_table_deinit (hash_table_t* hash_table);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。

hash_table_destroy 函数

  • 函数功能：

销毁hash_table对象。

  • 函数原型：
ret_t hash_table_destroy (hash_table_t* hash_table);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。

hash_table_find 函数

  • 函数功能：

查找第一个满足条件的元素。

  • 函数原型：
void* hash_table_find (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 如果找到，返回满足条件的对象，否则返回NULL。
hash_table | hash_table_t* | 哈希表对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

hash_table_foreach 函数

  • 函数功能：

遍历元素。

  • 函数原型：
ret_t hash_table_foreach (hash_table_t* hash_table, tk_visit_t visit, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。
visit | tk_visit_t | 遍历函数。
ctx | void* | 遍历函数的上下文。

hash_table_hash_int 函数

  • 函数功能：

计算int的hash值。

  • 函数原型：
uint32_t hash_table_hash_int (const void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回hash值。
data | const void* | 数据。

hash_table_hash_str 函数

  • 函数功能：

计算字符串hash值。

  • 函数原型：
uint32_t hash_table_hash_str (const void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回hash值。
data | const void* | 数据。

hash_table_init 函数

  • 函数功能：

初始化hash_table对象。

  • 函数原型：
hash_table_t* hash_table_init (hash_table_t* hash_table, uint32_t capacity, tk_destroy_t destroy, tk_compare_t compare, tk_hash_t hash);
  • 参数说明：
参数 | 类型 | 说明
返回值 | hash_table_t* | 哈希表对象。
hash_table | hash_table_t* | 哈希表对象。
capacity | uint32_t | 哈希表桶数。
destroy | tk_destroy_t | 元素销毁函数。
compare | tk_compare_t | 元素比较函数。
hash | tk_hash_t | 元素哈希函数。

hash_table_remove 函数

  • 函数功能：

删除第一个满足条件的元素。

  • 函数原型：
ret_t hash_table_remove (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

hash_table_remove_all 函数

  • 函数功能：

删除全部满足条件的元素。

  • 函数原型：
ret_t hash_table_remove_all (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
hash_table | hash_table_t* | 哈希表对象。
cmp | tk_compare_t | 比较函数，为NULL则使用内置的比较函数。
ctx | void* | 比较函数的上下文。

hash_table_size 函数

  • 函数功能：

返回全部元素个数。

  • 函数原型：
int32_t hash_table_size (hash_table_t* hash_table);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回元素个数。
hash_table | hash_table_t* | 哈希表对象。

buckets 属性

buckets。

  • 类型：darray_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

compare 属性

元素比较函数。

  • 类型：tk_compare_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

destroy 属性

元素销毁函数。

  • 类型：tk_destroy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

hash 属性

元素哈希函数。

  • 类型：tk_hash_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


hscrollable_t

概述

帮助实现控件左右滚动的效果。


hscroll_label_t

概述

可水平滚动的文本控件，方便实现长文本滚动。

hscroll_label_t是widget_t的子类控件，widget_t的函数均适用于hscroll_label_t控件。

更多用法请参考：hscroll_label.xml

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default" text_color="black">
<normal   />
<focused  />
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
hscroll_label_cast | 转换为hscroll_label对象(供脚本语言使用)。
hscroll_label_create | 创建hscroll_label对象
hscroll_label_get_widget_vtable | 获取 hscroll_label 虚表。
hscroll_label_set_duration | 设置duration。
hscroll_label_set_ellipses | 设置ellipses。
hscroll_label_set_loop | 设置loop。
hscroll_label_set_lull | 设置lull。
hscroll_label_set_only_focus | 设置only_focus。
hscroll_label_set_only_parent_focus | 设置only_parent_focus。
hscroll_label_set_speed | 设置speed（设置后 duration 不生效）。
hscroll_label_set_stop_at_begin | 设置stop_at_begin。
hscroll_label_set_xoffset | 设置x偏移(一般无需用户调用)。。
hscroll_label_set_yoyo | 设置yoyo。
hscroll_label_start | 启动(一般无需用户调用)。
hscroll_label_stop | 停止(一般无需用户调用)。

属性

属性名称 | 类型 | 说明
duration | int32_t | 完整的滚动一次需要的时间(ms)，缺省5000ms。
ellipses | bool_t | 文本显示不下时，在行尾显示省略号(缺省FALSE)。
loop | bool_t | loop是否循环滚动(缺省FALSE)。
lull | int32_t | 滚动之间的间歇时间(ms)，缺省3000ms。
only_focus | bool_t | 只有处于focus时才滚动(缺省否)。
only_parent_focus | bool_t | 只有父控件处于focus时才滚动(缺省否)。
speed | float_t | 滚动速度(px/ms)（设置后 duration 不生效）。
stop_at_begin | bool_t | 滚动完毕后停在文本开头(缺省FALSE)。
text_w | int32_t | 文本的宽度。
xoffset | int32_t | 偏移量。
yoyo | bool_t | 是否往返滚动(缺省FALSE)。

hscroll_label_cast 函数

  • 函数功能：

转换为hscroll_label对象(供脚本语言使用)。

  • 函数原型：
widget_t* hscroll_label_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | hscroll_label对象。
widget | widget_t* | hscroll_label对象。

hscroll_label_create 函数

  • 函数功能：

创建hscroll_label对象

  • 函数原型：
widget_t* hscroll_label_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

hscroll_label_get_widget_vtable 函数

  • 函数功能：

获取 hscroll_label 虚表。

  • 函数原型：
const widget_vtable_t* hscroll_label_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 hscroll_label 虚表。

hscroll_label_set_duration 函数

  • 函数功能：

设置duration。

  • 函数原型：
ret_t hscroll_label_set_duration (widget_t* widget, int32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
duration | int32_t | 滚动时间(ms)。

hscroll_label_set_ellipses 函数

  • 函数功能：

设置ellipses。

  • 函数原型：
ret_t hscroll_label_set_ellipses (widget_t* widget, bool_t ellipses);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
ellipses | bool_t | 是否在文本超长时在行尾显示”…”。

hscroll_label_set_loop 函数

  • 函数功能：

设置loop。

  • 函数原型：
ret_t hscroll_label_set_loop (widget_t* widget, bool_t loop);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
loop | bool_t | 是否循环滚动。

hscroll_label_set_lull 函数

  • 函数功能：

设置lull。

  • 函数原型：
ret_t hscroll_label_set_lull (widget_t* widget, int32_t lull);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
lull | int32_t | 间歇时间(ms)。

hscroll_label_set_only_focus 函数

  • 函数功能：

设置only_focus。

  • 函数原型：
ret_t hscroll_label_set_only_focus (widget_t* widget, bool_t only_focus);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
only_focus | bool_t | 是否只有处于focus时才滚动。

hscroll_label_set_only_parent_focus 函数

  • 函数功能：

设置only_parent_focus。

  • 函数原型：
ret_t hscroll_label_set_only_parent_focus (widget_t* widget, bool_t only_parent_focus);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
only_parent_focus | bool_t | 是否只有处于focus时才滚动。

hscroll_label_set_speed 函数

  • 函数功能：

设置speed（设置后 duration 不生效）。

  • 函数原型：
ret_t hscroll_label_set_speed (widget_t* widget, float_t speed);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
speed | float_t | 滚动速度(px/ms)。

hscroll_label_set_stop_at_begin 函数

  • 函数功能：

设置stop_at_begin。

  • 函数原型：
ret_t hscroll_label_set_stop_at_begin (widget_t* widget, bool_t stop_at_begin);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
stop_at_begin | bool_t | 是否在滚动完毕后停在文本结尾。

hscroll_label_set_xoffset 函数

  • 函数功能：

设置x偏移(一般无需用户调用)。。

  • 函数原型：
ret_t hscroll_label_set_xoffset (widget_t* widget, int32_t xoffset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
xoffset | int32_t | x偏移。

hscroll_label_set_yoyo 函数

  • 函数功能：

设置yoyo。

  • 函数原型：
ret_t hscroll_label_set_yoyo (widget_t* widget, bool_t yoyo);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
yoyo | bool_t | 是否往返滚动。

hscroll_label_start 函数

  • 函数功能：

启动(一般无需用户调用)。

  • 函数原型：
ret_t hscroll_label_start (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

hscroll_label_stop 函数

  • 函数功能：

停止(一般无需用户调用)。

  • 函数原型：
ret_t hscroll_label_stop (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

duration 属性

完整的滚动一次需要的时间(ms)，缺省5000ms。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

ellipses 属性

文本显示不下时，在行尾显示省略号(缺省FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

loop 属性

loop是否循环滚动(缺省FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

lull 属性

滚动之间的间歇时间(ms)，缺省3000ms。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

only_focus 属性

只有处于focus时才滚动(缺省否)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

only_parent_focus 属性

只有父控件处于focus时才滚动(缺省否)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

speed 属性

滚动速度(px/ms)（设置后 duration 不生效）。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

stop_at_begin 属性

滚动完毕后停在文本开头(缺省FALSE)。 注：loop为FALSE时才可用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

text_w 属性

文本的宽度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

xoffset 属性

偏移量。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

yoyo 属性

是否往返滚动(缺省FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


icon_at_type_t

概述

图标所在的位置。

常量

名称 | 说明
ICON_AT_AUTO | 自动选择位置。
ICON_AT_LEFT | 水平左边，垂直居中。
ICON_AT_RIGHT | 水平右边，垂直居中(not used now)。
ICON_AT_TOP | 水平居中，垂直顶部(not used now)。
ICON_AT_BOTTOM | 水平居中，垂直低部(not used now)。
ICON_AT_CENTRE | 水平居中，垂直居中。
ICON_AT_CENTER | 水平居中，垂直居中。


idle_info_t

概述

单个idle的信息。

函数

函数名称 | 说明
idle_info_cast | 转换为idle_info对象(供脚本语言使用)。

属性

属性名称 | 类型 | 说明
ctx | void* | idle回调函数上下文。
extra_ctx | void* | idle回调函数上下文。
id | uint32_t | idle的ID
on_destroy | tk_destroy_t | idle销毁时的回调函数。
on_destroy_ctx | void* | idle销毁时的回调函数的上下文。
on_idle | idle_func_t | idle回调函数。

idle_info_cast 函数

  • 函数功能：

转换为idle_info对象(供脚本语言使用)。

  • 函数原型：
idle_info_t* idle_info_cast (idle_info_t* idle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | idle_info_t* | idle_info对象。
idle | idle_info_t* | idle_info对象。

ctx 属性

idle回调函数上下文。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

extra_ctx 属性

idle回调函数上下文。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

id 属性

idle的ID

为TK_INVALID_ID时表示无效idle。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

on_destroy 属性

idle销毁时的回调函数。

  • 类型：tk_destroy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

on_destroy_ctx 属性

idle销毁时的回调函数的上下文。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

on_idle 属性

idle回调函数。

  • 类型：idle_func_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


idle_manager_t

概述

idle_manager_t管理器。

函数

函数名称 | 说明
idle_manager | 获取缺省的idle_manager_t管理器。
idle_manager_add | 添加idle。
idle_manager_add_with_id | 添加 idle（可以指定 idle_id ，如果发现 idle_id 冲突则添加失败）。
idle_manager_add_with_type | 添加对应类型的idle。
idle_manager_add_with_type_and_id | 添加对应类型和id的idle。
idle_manager_append | 追加idle。
idle_manager_count | 返回idle的个数。
idle_manager_create | 创建idle_manager_t管理器。
idle_manager_deinit | 析构idle_manager_t管理器。
idle_manager_destroy | 析构并释放idle_manager_t管理器。
idle_manager_dispatch | 检查全部idle的函数，如果时间到期，调用相应的idle函数。
idle_manager_exist | 对应回调函数和上下文的idle是否存在。
idle_manager_find | 查找指定ID的idle。
idle_manager_get_next_idle_id | 获取下一个可用的 idle_id。
idle_manager_init | 初始化idle_manager_t管理器。
idle_manager_remove | 根据idle_id删除idle。
idle_manager_remove_all | 删除全部idle。
idle_manager_remove_all_by_ctx | 根据上下文删除所有符合条件的idle。
idle_manager_remove_all_by_ctx_and_type | 移除对应类型和上下文的所有idle。
idle_manager_set | 设置缺省的idle_manager_t管理器。

idle_manager 函数

  • 函数功能：

获取缺省的idle_manager_t管理器。

  • 函数原型：
idle_manager_t* idle_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | idle_manager_t* | 返回idle_manager_t管理器对象。

idle_manager_add 函数

  • 函数功能：

添加idle。

  • 函数原型：
uint32_t idle_manager_add (idle_manager_t* idle_manager, idle_func_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的ID，TK_INVALID_ID表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
on_idle | idle_func_t | idle回调函数。
ctx | void* | idle回调函数的上下文。

idle_manager_add_with_id 函数

  • 函数功能：

添加 idle（可以指定 idle_id ，如果发现 idle_id 冲突则添加失败）。

  • 函数原型：
uint32_t idle_manager_add_with_id (idle_manager_t* idle_manager, uint32_t id, idle_func_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的ID，TK_INVALID_ID表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
id | uint32_t | idle_id。
on_idle | idle_func_t | idle回调函数。
ctx | void* | idle回调函数的上下文。

idle_manager_add_with_type 函数

  • 函数功能：

添加对应类型的idle。

  • 函数原型：
uint32_t idle_manager_add_with_type (idle_manager_t* idle_manager, idle_func_t on_idle, void* ctx, uint16_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle_id。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
on_idle | idle_func_t | idle回调函数。
ctx | void* | 上下文。
type | uint16_t | 类型。

idle_manager_add_with_type_and_id 函数

  • 函数功能：

添加对应类型和id的idle。

  • 函数原型：
uint32_t idle_manager_add_with_type_and_id (idle_manager_t* idle_manager, uint32_t id, idle_func_t on_idle, void* ctx, uint16_t type, bool_t check_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle_id。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
id | uint32_t | id。
on_idle | idle_func_t | idle回调函数。
ctx | void* | 上下文。
type | uint16_t | 类型。
check_id | bool_t | 是否校验id。

idle_manager_append 函数

  • 函数功能：

追加idle。

  • 函数原型：
ret_t idle_manager_append (idle_manager_t* idle_manager, idle_info_t* idle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
idle | idle_info_t* | idle对象。

idle_manager_count 函数

  • 函数功能：

返回idle的个数。

  • 函数原型：
uint32_t idle_manager_count (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的个数。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_create 函数

  • 函数功能：

创建idle_manager_t管理器。

  • 函数原型：
idle_manager_t* idle_manager_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | idle_manager_t* | 返回idle_manager_t管理器对象。

idle_manager_deinit 函数

  • 函数功能：

析构idle_manager_t管理器。

  • 函数原型：
ret_t idle_manager_deinit (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_destroy 函数

  • 函数功能：

析构并释放idle_manager_t管理器。

  • 函数原型：
ret_t idle_manager_destroy (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_dispatch 函数

  • 函数功能：

检查全部idle的函数，如果时间到期，调用相应的idle函数。

  • 函数原型：
ret_t idle_manager_dispatch (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_exist 函数

  • 函数功能：

对应回调函数和上下文的idle是否存在。

  • 函数原型：
bool_t idle_manager_exist (idle_manager_t* idle_manager, idle_func_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
on_idle | idle_func_t | idle回调函数。
ctx | void* | 上下文。

idle_manager_find 函数

  • 函数功能：

查找指定ID的idle。

  • 函数原型：
const idle_info_t* idle_manager_find (idle_manager_t* idle_manager, uint32_t idle_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const idle_info_t* | 返回idle的信息。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
idle_id | uint32_t | idle_id。

idle_manager_get_next_idle_id 函数

  • 函数功能：

获取下一个可用的 idle_id。

  • 函数原型：
uint32_t idle_manager_get_next_idle_id (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的ID，TK_INVALID_ID表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_init 函数

  • 函数功能：

初始化idle_manager_t管理器。

  • 函数原型：
idle_manager_t* idle_manager_init (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | idle_manager_t* | 返回idle_manager_t管理器对象。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_remove 函数

  • 函数功能：

根据idle_id删除idle。

  • 函数原型：
ret_t idle_manager_remove (idle_manager_t* idle_manager, uint32_t idle_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
idle_id | uint32_t | idle_id。

idle_manager_remove_all 函数

  • 函数功能：

删除全部idle。

  • 函数原型：
ret_t idle_manager_remove_all (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。

idle_manager_remove_all_by_ctx 函数

  • 函数功能：

根据上下文删除所有符合条件的idle。

  • 函数原型：
ret_t idle_manager_remove_all_by_ctx (idle_manager_t* idle_manager, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
ctx | void* | idle回调函数的上下文。

idle_manager_remove_all_by_ctx_and_type 函数

  • 函数功能：

移除对应类型和上下文的所有idle。

  • 函数原型：
ret_t idle_manager_remove_all_by_ctx_and_type (idle_manager_t* idle_manager, uint16_t type, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。
type | uint16_t | 类型。
ctx | void* | 上下文。

idle_manager_set 函数

  • 函数功能：

设置缺省的idle_manager_t管理器。

  • 函数原型：
ret_t idle_manager_set (idle_manager_t* idle_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_manager | idle_manager_t* | idle_manager_t管理器对象。


idle_t

概述

idle可以看作是duration为0的定时器。

idle可以用来实现一些异步处理。

示例：

static ret_t something_on_idle(const idle_info_t* info) {
widget_t* widget = WIDGET(info->ctx);
edit_t* edit = EDIT(widget);
...
return RET_REMOVE;
}

...

idle_add(something_on_idle, edit);

> 在非GUI线程请用idle_queue。

函数

函数名称 | 说明
idle_add | 增加一个idle。
idle_count | 返回idle的个数。
idle_dispatch | 调用全部idle的函数。
idle_exist | idle是否存在。
idle_find | 查找指定ID的idle。
idle_queue | 用于非GUI线程增加一个idle，本函数向主循环的事件队列中发送一个增加idle的请求。
idle_queue_ex | 用于非GUI线程增加一个idle，本函数向主循环的事件队列中发送一个增加idle的请求。
idle_remove | 删除指定的idle。
idle_remove_all_by_ctx | 根据上下文删除所有对应的idle。
idle_set_on_destroy | 设置一个回调函数，在idle被销毁时调用(方便脚本语言去释放回调函数)。

idle_add 函数

  • 函数功能：

增加一个idle。

  • 函数原型：
uint32_t idle_add (idle_func_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的ID，0表示失败。
on_idle | idle_func_t | idle回调函数，回调函数返回RET_REPEAT，则下次继续执行，否则自动移出。
ctx | void* | idle回调函数的上下文。

idle_count 函数

  • 函数功能：

返回idle的个数。

  • 函数原型：
uint32_t idle_count ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的个数。

idle_dispatch 函数

  • 函数功能：

调用全部idle的函数。

  • 函数原型：
ret_t idle_dispatch ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

idle_exist 函数

  • 函数功能：

idle是否存在。

  • 函数原型：
bool_t idle_exist (idle_func_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
on_idle | idle_func_t | idle回调函数。
ctx | void* | idle回调函数的上下文。

idle_find 函数

  • 函数功能：

查找指定ID的idle。

  • 函数原型：
const idle_info_t* idle_find (uint32_t idle_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const idle_info_t* | 返回idle的信息。
idle_id | uint32_t | idleID。

idle_queue 函数

  • 函数功能：

用于非GUI线程增加一个idle，本函数向主循环的事件队列中发送一个增加idle的请求。

  • 函数原型：
ret_t idle_queue (idle_func_t on_idle, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
on_idle | idle_func_t | idle回调函数。
ctx | void* | idle回调函数的上下文。

idle_queue_ex 函数

  • 函数功能：

用于非GUI线程增加一个idle，本函数向主循环的事件队列中发送一个增加idle的请求。

  • 函数原型：
ret_t idle_queue_ex (idle_func_t on_idle, void* ctx, tk_destroy_t on_destroy, void* on_destroy_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
on_idle | idle_func_t | idle回调函数。
ctx | void* | idle回调函数的上下文。
on_destroy | tk_destroy_t | 回调函数。
on_destroy_ctx | void* | 回调函数上下文。

idle_remove 函数

  • 函数功能：

删除指定的idle。

  • 函数原型：
ret_t idle_remove (uint32_t idle_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_id | uint32_t | idleID。

idle_remove_all_by_ctx 函数

  • 函数功能：

根据上下文删除所有对应的idle。

  • 函数原型：
ret_t idle_remove_all_by_ctx (void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ctx | void* | idle回调函数的上下文

idle_set_on_destroy 函数

  • 函数功能：

设置一个回调函数，在idle被销毁时调用(方便脚本语言去释放回调函数)。

  • 函数原型：
ret_t idle_set_on_destroy (uint32_t idle_id, tk_destroy_t on_destroy, void* on_destroy_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
idle_id | uint32_t | idleID。
on_destroy | tk_destroy_t | 回调函数。
on_destroy_ctx | void* | 回调函数上下文。


image_animation_t

概述

图片动画控件，指定一个图片前缀，依次显示指定序列的图片，从而形成动画效果。

图片序列可以用sequence指定，也可以用start_index和end_index指定一个范围。

image_animation_t是widget_t的子类控件，widget_t的函数均适用于image_animation_t控件。

在xml中使用”image_animation”标签创建图片动画控件。如：

<image_animation image="ani" start_index="1" end_index="9" auto_play="true" interval="50"
delay="100"/>

更多用法请参考： image_animation.xml

在c代码中使用函数image_animation_create创建图片动画控件。如：

image_animation = image_animation_create(win, 10, 10, 200, 200);
image_animation_set_image(image_animation, "ani");
image_animation_set_interval(image_animation, 50);
image_animation_set_range_sequence(image_animation, 1, 9);
image_animation_play(image_animation);

完整示例请参考： image_animation demo

可用通过style来设置控件的显示风格，如背景颜色和边框等等，不过一般情况并不需要。

函数

函数名称 | 说明
image_animation_cast | 转换为image_animation对象(供脚本语言使用)。
image_animation_create | 创建image_animation对象
image_animation_get_widget_vtable | 获取 image_animation 虚表。
image_animation_is_playing | 判断是否在播放。
image_animation_next | 手动切换到下一张图片。
image_animation_pause | 暂停。
image_animation_play | 播放。
image_animation_set_auto_play | 设置是否自动播放。
image_animation_set_delay | 设置延迟播放时间(仅适用于自动播放)。
image_animation_set_format | 设置生成图片名的格式。
image_animation_set_image | 设置图片前缀。
image_animation_set_interval | 设置播放间隔时间。
image_animation_set_loop | 设置是否循环播放。
image_animation_set_range_sequence | 设置播放序列。比如image为”fire”，start_index为0, end_index为99, 将依次播放”fire0”, …,
image_animation_set_reverse | 设置是否倒序播放。
image_animation_set_sequence | 设置播放序列。比如image为”fire”，sequence为”12223”, 将依次播放”fire1”, “fire2”, “fire2”, “fire2”,
image_animation_set_show_when_done | 设置结束播放后是否保持显示最后一帧。
image_animation_set_unload_after_paint | 设置绘制完成后unload图片，以释放内存空间。
image_animation_stop | 停止(并重置index为-1)。

属性

属性名称 | 类型 | 说明
auto_play | bool_t | 是否自动播放。
delay | uint32_t | 自动播放时延迟播放的时间(毫秒)。
end_index | uint32_t | 图片结束序数。
format | char* | 索引到图片名转换时的格式，缺省为”%s%d”。
image | char* | 图片名称的前缀。
interval | uint32_t | 每张图片播放的时间(毫秒)。
loop | bool_t | 是否循环播放。
reverse | bool_t | 是否倒序播放。
sequence | char* | 播放的序列，字符可选值为数字和英文大小写字母，字符可以重复。如：0123456789或者123123abcd。
show_when_done | bool_t | 结束后是否继续显示最后一帧。
start_index | uint32_t | 图片起始序数。
unload_after_paint | bool_t | 绘制完成后unload图片，以释放内存空间。

事件

事件名称 | 类型 | 说明
EVT_ANIM_ONCE | event_t | 使能循环播放时，控件动画完成一次事件。
EVT_ANIM_END | event_t | 控件动画完成事件。

image_animation_cast 函数

  • 函数功能：

转换为image_animation对象(供脚本语言使用)。

  • 函数原型：
widget_t* image_animation_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | image_animation对象。
widget | widget_t* | image_animation对象。

image_animation_create 函数

  • 函数功能：

创建image_animation对象

  • 函数原型：
widget_t* image_animation_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

image_animation_get_widget_vtable 函数

  • 函数功能：

获取 image_animation 虚表。

  • 函数原型：
const widget_vtable_t* image_animation_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 image_animation 虚表。

image_animation_is_playing 函数

  • 函数功能：

判断是否在播放。

  • 函数原型：
bool_t image_animation_is_playing (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示否。
widget | widget_t* | image_animation对象。

image_animation_next 函数

  • 函数功能：

手动切换到下一张图片。

  • 函数原型：
ret_t image_animation_next (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。

image_animation_pause 函数

  • 函数功能：

暂停。

  • 函数原型：
ret_t image_animation_pause (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。

image_animation_play 函数

  • 函数功能：

播放。

  • 函数原型：
ret_t image_animation_play (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。

image_animation_set_auto_play 函数

  • 函数功能：

设置是否自动播放。

  • 函数原型：
ret_t image_animation_set_auto_play (widget_t* widget, bool_t auto_play);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
auto_play | bool_t | 是否自动播放。

image_animation_set_delay 函数

  • 函数功能：

设置延迟播放时间(仅适用于自动播放)。

  • 函数原型：
ret_t image_animation_set_delay (widget_t* widget, uint32_t delay);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
delay | uint32_t | 延迟播放时间(毫秒)。

image_animation_set_format 函数

  • 函数功能：

设置生成图片名的格式。

XXX:生成图片名时，第一个参数是图片名前缀，第二个是序数，只能在此前提下设置格式。

const char* format = image_animation->format ? image_animation->format : "%s%d";
tk_snprintf(name, TK_NAME_LEN, format, image_animation->image, image_animation->index);
  • 函数原型：
ret_t image_animation_set_format (widget_t* widget, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
format | const char* | 格式。

image_animation_set_image 函数

  • 函数功能：

设置图片前缀。

  • 函数原型：
ret_t image_animation_set_image (widget_t* widget, const char* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
image | const char* | 图片前缀。

image_animation_set_interval 函数

  • 函数功能：

设置播放间隔时间。

  • 函数原型：
ret_t image_animation_set_interval (widget_t* widget, uint32_t interval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
interval | uint32_t | 间隔时间(毫秒)。

image_animation_set_loop 函数

  • 函数功能：

设置是否循环播放。

  • 函数原型：
ret_t image_animation_set_loop (widget_t* widget, bool_t loop);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
loop | bool_t | 是否循环播放。

image_animation_set_range_sequence 函数

  • 函数功能：

设置播放序列。比如image为”fire”，start_index为0, end_index为99, 将依次播放”fire0”, …, “fire99”。

若指定的图片不存在，则重复上一张图片。

  • 函数原型：
ret_t image_animation_set_range_sequence (widget_t* widget, uint32_t start_index, uint32_t end_index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
start_index | uint32_t | 图片起始序数。
end_index | uint32_t | 图片结束序数。

image_animation_set_reverse 函数

  • 函数功能：

设置是否倒序播放。

  • 函数原型：
ret_t image_animation_set_reverse (widget_t* widget, bool_t reverse);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
reverse | bool_t | 是否倒序播放。

image_animation_set_sequence 函数

  • 函数功能：

设置播放序列。比如image为”fire”，sequence为”12223”, 将依次播放”fire1”, “fire2”, “fire2”, “fire2”, “fire3”。

  • 函数原型：
ret_t image_animation_set_sequence (widget_t* widget, const char* sequence);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
sequence | const char* | 播放序列。

image_animation_set_show_when_done 函数

  • 函数功能：

设置结束播放后是否保持显示最后一帧。

  • 函数原型：
ret_t image_animation_set_show_when_done (widget_t* widget, bool_t show_when_done);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
show_when_done | bool_t | 是否继续显示最后一帧。

image_animation_set_unload_after_paint 函数

  • 函数功能：

设置绘制完成后unload图片，以释放内存空间。

  • 函数原型：
ret_t image_animation_set_unload_after_paint (widget_t* widget, bool_t unload_after_paint);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。
unload_after_paint | bool_t | 是否绘制完成后unload图片。

image_animation_stop 函数

  • 函数功能：

停止(并重置index为-1)。

  • 函数原型：
ret_t image_animation_stop (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_animation对象。

auto_play 属性

是否自动播放。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

delay 属性

自动播放时延迟播放的时间(毫秒)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

end_index 属性

图片结束序数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

format 属性

索引到图片名转换时的格式，缺省为”%s%d”。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

图片名称的前缀。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

interval 属性

每张图片播放的时间(毫秒)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

loop 属性

是否循环播放。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

reverse 属性

是否倒序播放。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

sequence 属性

播放的序列，字符可选值为数字和英文大小写字母，字符可以重复。如：0123456789或者123123abcd。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

show_when_done 属性

结束后是否继续显示最后一帧。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

start_index 属性

图片起始序数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

unload_after_paint 属性

绘制完成后unload图片，以释放内存空间。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


image_base_t

概述

图片控件基类。

本类把图片相关控件的公共行为进行抽象，放到一起方便重用。目前已知的具体实现如下图：

本类是一个抽象类，不能进行实例化。请在应用程序中使用具体的类，如image_t。

如果需要显示文件系统中的图片，只需将图片名称换成实际的文件名，并加上”file://”前缀即可。如：

<image draw_type="center" image="file://./design/default/images/xx/flag_CN.png" />
<gif image="file://./design/default/images/x2/bee.gif" />
<svg image="file://./design/default/images/svg/china.bsvg" />

函数

函数名称 | 说明
image_base_cast | 转换为image_base对象(供脚本语言使用)。
image_base_get_widget_vtable | 获取 image_base 虚表。
image_base_set_anchor | 设置控件的锚点(仅在WITH_VGCANVAS定义时生效)。
image_base_set_clickable | 设置控件是否可以被点击。
image_base_set_image | 设置控件的图片名称。
image_base_set_rotation | 设置控件的旋转角度(仅在WITH_VGCANVAS定义时生效)。
image_base_set_scale | 设置控件的缩放比例(仅在WITH_VGCANVAS定义时生效)。
image_base_set_selectable | 设置控件是否可以被选中。
image_base_set_selected | 设置控件的选中状态。

属性

属性名称 | 类型 | 说明
anchor_x | float_t | 锚点X(0-1)。0在控件左边，0.5在控件中间，1在控件右边。
anchor_y | float_t | 锚点Y(0-1)。0在控件顶部，0.5在控件中间，1在控件底部。
clickable | bool_t | 点击时，是否触发EVT_CLICK事件。
image | char* | 图片的名称。
rotation | float_t | 控件的旋转角度(幅度)。
scale_x | float_t | 控件在X方向上的缩放比例。
scale_y | float_t | 控件在Y方向上的缩放比例。
selectable | bool_t | 是否设置选中状态。
selected | bool_t | 当前是否被选中。

事件

事件名称 | 类型 | 说明
EVT_CLICK | pointer_event_t | 点击事件。

image_base_cast 函数

  • 函数功能：

转换为image_base对象(供脚本语言使用)。

  • 函数原型：
widget_t* image_base_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | image_base对象。
widget | widget_t* | image_base对象。

image_base_get_widget_vtable 函数

  • 函数功能：

获取 image_base 虚表。

  • 函数原型：
const widget_vtable_t* image_base_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 image_base 虚表。

image_base_set_anchor 函数

  • 函数功能：

设置控件的锚点(仅在WITH_VGCANVAS定义时生效)。

  • 函数原型：
ret_t image_base_set_anchor (widget_t* widget, float_t anchor_x, float_t anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
anchor_x | float_t | 锚点X(0-1)。0在控件左边，0.5在控件中间，1在控件右边。
anchor_y | float_t | 锚点Y(0-1)。0在控件顶部，0.5在控件中间，1在控件底部。

image_base_set_clickable 函数

  • 函数功能：

设置控件是否可以被点击。

  • 函数原型：
ret_t image_base_set_clickable (widget_t* widget, bool_t clickable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
clickable | bool_t | 是否可以被点击。

image_base_set_image 函数

  • 函数功能：

设置控件的图片名称。

如果需要显示文件系统中的图片，只需将图片名称换成实际的文件名，并加上”file://”前缀即可。

  • 函数原型：
ret_t image_base_set_image (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
name | const char* | 图片名称，该图片必须存在于资源管理器。

image_base_set_rotation 函数

  • 函数功能：

设置控件的旋转角度(仅在WITH_VGCANVAS定义时生效)。

  • 函数原型：
ret_t image_base_set_rotation (widget_t* widget, float_t rotation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
rotation | float_t | 旋转角度(幅度)。

image_base_set_scale 函数

  • 函数功能：

设置控件的缩放比例(仅在WITH_VGCANVAS定义时生效)。

  • 函数原型：
ret_t image_base_set_scale (widget_t* widget, float_t scale_x, float_t scale_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
scale_x | float_t | X方向缩放比例。
scale_y | float_t | Y方向缩放比例。

image_base_set_selectable 函数

  • 函数功能：

设置控件是否可以被选中。

  • 函数原型：
ret_t image_base_set_selectable (widget_t* widget, bool_t selectable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
selectable | bool_t | 是否可以被选中。

image_base_set_selected 函数

  • 函数功能：

设置控件的选中状态。

  • 函数原型：
ret_t image_base_set_selected (widget_t* widget, bool_t selected);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
selected | bool_t | 是否被选中。

anchor_x 属性

锚点X(0-1)。0在控件左边，0.5在控件中间，1在控件右边。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

anchor_y 属性

锚点Y(0-1)。0在控件顶部，0.5在控件中间，1在控件底部。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

clickable 属性

点击时，是否触发EVT_CLICK事件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

图片的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

rotation 属性

控件的旋转角度(幅度)。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

scale_x 属性

控件在X方向上的缩放比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

scale_y 属性

控件在Y方向上的缩放比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

selectable 属性

是否设置选中状态。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

selected 属性

当前是否被选中。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


image_draw_type_t

概述

图片绘制方法常量定义。

常量

名称 | 说明
IMAGE_DRAW_DEFAULT | 缺省显示。将图片按原大小显示在目标矩形的左上角。
IMAGE_DRAW_CENTER | 居中显示。将图片按原大小显示在目标矩形的中央。
IMAGE_DRAW_ICON | 图标显示。同居中显示，但会根据屏幕密度调整大小。
IMAGE_DRAW_SCALE | 缩放显示。将图片缩放至目标矩形的大小(不保证宽高成比例)。
IMAGE_DRAW_SCALE_AUTO | 自动缩放显示。将图片缩放至目标矩形的宽度或高度(选取最小的比例)，并居中显示。
IMAGE_DRAW_SCALE_DOWN | 如果图片比目标矩形大，自动缩小显示，否则居中显示。
IMAGE_DRAW_SCALE_W | 宽度缩放显示。 将图片缩放至目标矩形的宽度，高度按此比例进行缩放，超出不部分不显示。
IMAGE_DRAW_SCALE_H | 高度缩放显示。将图片缩放至目标矩形的高度，宽度按此比例进行缩放，超出不部分不显示。
IMAGE_DRAW_FILL | 填充整个区域。将图片缩放至目标矩形的高度或宽度，包装填满整个目标区域，超出不部分不显示。
IMAGE_DRAW_REPEAT | 平铺显示。
IMAGE_DRAW_REPEAT_X | 水平方向平铺显示，垂直方向缩放。
IMAGE_DRAW_REPEAT_Y | 垂直方向平铺显示，水平方向缩放。
IMAGE_DRAW_REPEAT_Y_INVERSE | 垂直方向平铺显示，水平方向缩放(从底部到顶部)。
IMAGE_DRAW_PATCH9 | 9宫格显示。将图片分成等大小的9块，4个角按原大小显示在目标矩形的4个角，左右上下和中间5块分别缩放显示在对应的目标区域。
IMAGE_DRAW_PATCH3_X | 水平方向3宫格显示，垂直方向居中显示。将图片在水平方向上分成等大小的3块，左右两块按原大小显示在目标矩形的左右，中间一块缩放显示在目标区域中间剩余部分。
IMAGE_DRAW_PATCH3_Y | 垂直方向3宫格显示，水平方向居中显示。将图片在垂直方向上分成等大小的3块，上下两块按原大小显示在目标矩形的上下，中间一块缩放显示在目标区域中间剩余部分。
IMAGE_DRAW_PATCH3_X_SCALE_Y | 水平方向3宫格显示，垂直方向缩放显示。将图片在水平方向上分成等大小的3块，左右两块按原大小显示在目标矩形的左右，中间一块缩放显示在目标区域中间剩余部分。
IMAGE_DRAW_PATCH3_Y_SCALE_X | 垂直方向3宫格显示，水平方向缩放显示。将图片在垂直方向上分成等大小的3块，上下两块按原大小显示在目标矩形的上下，中间一块缩放显示在目标区域中间剩余部分。
IMAGE_DRAW_REPEAT9 | 平铺9宫格显示。将图片分成4个角和5块平铺块，4个角按原大小显示在目标矩形的4个角，其余5块会平铺对应的目标区域。
切割方法为（如下图）： |
如果图片宽度为奇数，则中间一块为一列数据，如果图片宽度为偶数，则中间一块为二列数据，其他数据分为左右块 |
如果图片高度为奇数，则中间一块为一行数据，如果图片高度为偶数，则中间一块为二行数据，其他数据分为上下块 |
中间一块数据根据上面两条规则组成4中情况，分别是一列一行数据，一列两行数据，两列一行数据和两行两列数据 |
IMAGE_DRAW_REPEAT3_X | 水平方向3宫格显示，垂直方向居中显示。将图片在水平方向上分成左右相等两块和中间一块，如果图片宽度为奇数，则中间一块为一列数据，如果图片宽度为偶数，则中间一块为二列数据，其他数据分为左右块。
左右两块按原大小显示在目标矩形的左右，中间一列像素点平铺显示在目标区域中间剩余部分。 |
IMAGE_DRAW_REPEAT3_Y | 垂直方向3宫格显示，水平方向居中显示。将图片在垂直方向上分成上下相等两块和中间一块，如果图片高度为奇数，则中间一块为一行数据，如果图片高度为偶数，则中间一块为二行数据，其他数据分为上下块
上下两块按原大小显示在目标矩形的上下，中间一块平铺显示在目标区域中间剩余部分。 |


image_loader_stb_t

概述

stb图片加载器。

stb主要用于加载jpg/png/gif等格式的图片，它功能强大，体积小巧。

函数

函数名称 | 说明
image_loader_stb | 获取stb图片加载器对象。
stb_load_image | 加载图片。

image_loader_stb 函数

  • 函数功能：

获取stb图片加载器对象。

  • 函数原型：
image_loader_t* image_loader_stb ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | image_loader_t* | 返回图片加载器对象。

stb_load_image 函数

  • 函数功能：

加载图片。

  • 函数原型：
ret_t stb_load_image (int32_t subtype, const uint8_t* buff, uint32_t buff_size, bitmap_t* image, bitmap_format_t transparent_bitmap_format, bitmap_format_t opaque_bitmap_format, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
subtype | int32_t | 资源类型。
buff | const uint8_t* | 资源数据。
buff_size | uint32_t | 资源数据长度。
image | bitmap_t* | image 对象。
transparent_bitmap_format | bitmap_format_t | 带透明通道的位图格式（只能 BITMAP_FMT_RGBA8888 和 BITMAP_FMT_RGBA8888 二选一，其他类型默认都为 BITMAP_FMT_RGBA8888）
opaque_bitmap_format | bitmap_format_t | 不透明位图格式（暂时支持 BITMAP_FMT_RGBA8888，BITMAP_FMT_RGBA8888，16 位色和 24 位色以及 mono 格式）
o | lcd_orientation_t | 旋转方向


image_loader_t

概述

图片加载接口。

函数

函数名称 | 说明
image_loader_load | 加载图片。
image_loader_load_image | 查找满足条件加载器并加载图片。
image_loader_register | 注册图片加载器。
image_loader_unregister | 注销图片加载器。

image_loader_load 函数

  • 函数功能：

加载图片。

  • 函数原型：
ret_t image_loader_load (image_loader_t* loader, const asset_info_t* asset, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
loader | image_loader_t* | loader对象。
asset | const asset_info_t* | 资源。
bitmap | bitmap_t* | 用于返回位图对象。

image_loader_load_image 函数

  • 函数功能：

查找满足条件加载器并加载图片。

  • 函数原型：
ret_t image_loader_load_image (const asset_info_t* asset, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
asset | const asset_info_t* | 资源。
bitmap | bitmap_t* | 用于返回位图对象。

image_loader_register 函数

  • 函数功能：

注册图片加载器。

  • 函数原型：
ret_t image_loader_register (image_loader_t* loader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
loader | image_loader_t* | loader对象。

image_loader_unregister 函数

  • 函数功能：

注销图片加载器。

  • 函数原型：
ret_t image_loader_unregister (image_loader_t* loader);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
loader | image_loader_t* | loader对象。


image_managers_t

概述

在某些情况下，需要多个资源管理器。比如在手表系统里，每个应用或表盘，可能放在独立的资源包中， 此时优先加载应用自己的资源，如果没有就加载系统的资源。

函数

函数名称 | 说明
image_managers_ref | 获取指定小应用程序(applet)的图片管理器。
image_managers_unload_all | 卸载全部图片。
image_managers_unref | 释放指定小应用程序(applet)的图片管理器。

image_managers_ref 函数

  • 函数功能：

获取指定小应用程序(applet)的图片管理器。

  • 函数原型：
image_manager_t* image_managers_ref (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | image_manager_t* | 返回asset manager对象。
name | const char* | 小应用程序(applet)的名称。

image_managers_unload_all 函数

  • 函数功能：

卸载全部图片。

  • 函数原型：
ret_t image_managers_unload_all ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

image_managers_unref 函数

  • 函数功能：

释放指定小应用程序(applet)的图片管理器。

  • 函数原型：
ret_t image_managers_unref (image_manager_t* imm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。


image_manager_t

概述

图片管理器。负责加载，解码和缓存图片。

函数

函数名称 | 说明
image_manager | 获取缺省的图片管理器。
image_manager_create | 创建图片管理器。
image_manager_deinit | 析构图片管理器。
image_manager_destroy | 析构并释放图片管理器。
image_manager_get_bitmap | 获取指定的图片。
image_manager_has_bitmap | 图片是否在图片管理中。
image_manager_init | 初始化图片管理器。
image_manager_preload | 预加载指定的图片。
image_manager_set | 设置缺省的图片管理器。
image_manager_set_assets_manager | 设置资源管理器对象。
image_manager_set_fallback_get_bitmap | 设置一个函数，该函数在找不到图片时加载后补图片。
image_manager_set_max_mem_size_of_cached_images | 设置图片缓存占用的最大内存。
image_manager_unload_all | 卸载全部图片。
image_manager_unload_bitmap | 从图片管理器中卸载指定的图片。
image_manager_unload_unused | 从图片管理器中卸载指定时间内没有使用的图片。
image_manager_update_specific | 更新缓存中图片的specific信息。

属性

属性名称 | 类型 | 说明

image_manager 函数

  • 函数功能：

获取缺省的图片管理器。

  • 函数原型：
image_manager_t* image_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | image_manager_t* | 返回图片管理器对象。

image_manager_create 函数

  • 函数功能：

创建图片管理器。

  • 函数原型：
image_manager_t* image_manager_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | image_manager_t* | 返回图片管理器对象。

image_manager_deinit 函数

  • 函数功能：

析构图片管理器。

  • 函数原型：
ret_t image_manager_deinit (image_manager_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | image_manager_t* | 图片管理器对象。

image_manager_destroy 函数

  • 函数功能：

析构并释放图片管理器。

  • 函数原型：
ret_t image_manager_destroy (image_manager_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | image_manager_t* | 图片管理器对象。

image_manager_get_bitmap 函数

  • 函数功能：

获取指定的图片。 先从缓存查找，如果没找到，再加载并缓存。

  • 函数原型：
ret_t image_manager_get_bitmap (image_manager_t* imm, const char* name, bitmap_t* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
name | const char* | 图片名称。
image | bitmap_t* | 用于返回图片。

image_manager_has_bitmap 函数

  • 函数功能：

图片是否在图片管理中。

  • 函数原型：
bool_t image_manager_has_bitmap (image_manager_t* imm, bitmap_t* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
imm | image_manager_t* | 图片管理器对象。
image | bitmap_t* | 图片。

image_manager_init 函数

  • 函数功能：

初始化图片管理器。

  • 函数原型：
image_manager_t* image_manager_init (image_manager_t* imm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | image_manager_t* | 返回图片管理器对象。
imm | image_manager_t* | 图片管理器对象。

image_manager_preload 函数

  • 函数功能：

预加载指定的图片。

  • 函数原型：
ret_t image_manager_preload (image_manager_t* imm, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
name | const char* | 图片名称。

image_manager_set 函数

  • 函数功能：

设置缺省的图片管理器。

  • 函数原型：
ret_t image_manager_set (image_manager_t* imm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。

image_manager_set_assets_manager 函数

  • 函数功能：

设置资源管理器对象。

之所以需要设置资源管理器对象，而不是使用缺省的资源管理器对象，是因为在designer中有两个图片管理器：

  • 一个用于designer本身加载图片。

  • 一个用于被设计的窗口加载图片。

这两个图片管理器需要从不同的路径加载资源。

  • 函数原型：
ret_t image_manager_set_assets_manager (image_manager_t* imm, assets_manager_t* assets_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
assets_manager | assets_manager_t* | 资源管理器。

image_manager_set_fallback_get_bitmap 函数

  • 函数功能：

设置一个函数，该函数在找不到图片时加载后补图片。

  • 函数原型：
ret_t image_manager_set_fallback_get_bitmap (image_manager_t* imm, image_manager_get_bitmap_t fallback_get_bitmap, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | image manager对象。
fallback_get_bitmap | image_manager_get_bitmap_t | 回调函数。
ctx | void* | 回调函数的上下文。

image_manager_set_max_mem_size_of_cached_images 函数

  • 函数功能：

设置图片缓存占用的最大内存。

  • 函数原型：
ret_t image_manager_set_max_mem_size_of_cached_images (image_manager_t* imm, uint32_t max_mem_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
max_mem_size | uint32_t | 最大缓存内存(字节数)。

image_manager_unload_all 函数

  • 函数功能：

卸载全部图片。

  • 函数原型：
ret_t image_manager_unload_all (image_manager_t* imm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。

image_manager_unload_bitmap 函数

  • 函数功能：

从图片管理器中卸载指定的图片。

  • 函数原型：
ret_t image_manager_unload_bitmap (image_manager_t* imm, bitmap_t* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
image | bitmap_t* | 图片。

image_manager_unload_unused 函数

  • 函数功能：

从图片管理器中卸载指定时间内没有使用的图片。

  • 函数原型：
ret_t image_manager_unload_unused (image_manager_t* imm, uint32_t time_delta_s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
time_delta_s | uint32_t | 时间范围，单位为秒。

image_manager_update_specific 函数

  • 函数功能：

更新缓存中图片的specific信息。

  • 函数原型：
ret_t image_manager_update_specific (image_manager_t* imm, bitmap_t* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
imm | image_manager_t* | 图片管理器对象。
image | bitmap_t* | 返回图片信息。


image_t

概述

图片控件。

用来显示一张静态图片，目前支持bmp/png/jpg等格式。

如果要显示gif文件，请用gif_image。

如果要显示svg文件，请用svg_image。

如果需要支持勾选效果，请设置selectable属性。

如果需要支持点击效果，请设置clickable属性。

image_t是image_base_t的子类控件，image_base_t的函数均适用于image_t控件。

在xml中使用”image”标签创建图片控件。如：

<image style="border" image="earth" draw_type="icon" />

更多用法请参考： image.xml

在c代码中使用函数image_create创建图片控件。如：

widget_t* image = image_create(win, 10, 10, 128, 30);
image_set_image(image, "earth");

创建之后:

需要用widget_set_image设置图片名称。

可以用image_set_draw_type设置图片的绘制方式。

绘制方式请参考image_draw_type_t

绘制方式的属性值和枚举值: image_draw_type_name_value

完整示例请参考： image demo

可用通过style来设置控件的显示风格，如背景和边框等。如：

<image>
<style name="border">
<normal border_color="#000000" bg_color="#e0e0e0" text_color="black"/>
</style>
</image>

更多用法请参考： theme default

函数

函数名称 | 说明
icon_create | 创建icon对象
image_cast | 转换为image对象(供脚本语言使用)。
image_create | 创建image对象
image_get_widget_vtable | 获取 image 虚表。
image_set_draw_type | 设置图片的绘制方式。

属性

属性名称 | 类型 | 说明
draw_type | image_draw_type_t | 图片的绘制方式(仅在没有旋转和缩放时生效)。

icon_create 函数

  • 函数功能：

创建icon对象

  • 函数原型：
widget_t* icon_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

image_cast 函数

  • 函数功能：

转换为image对象(供脚本语言使用)。

  • 函数原型：
widget_t* image_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | image对象。
widget | widget_t* | image对象。

image_create 函数

  • 函数功能：

创建image对象

  • 函数原型：
widget_t* image_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

image_get_widget_vtable 函数

  • 函数功能：

获取 image 虚表。

  • 函数原型：
const widget_vtable_t* image_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 image 虚表。

image_set_draw_type 函数

  • 函数功能：

设置图片的绘制方式。

  • 函数原型：
ret_t image_set_draw_type (widget_t* widget, image_draw_type_t draw_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
draw_type | image_draw_type_t | 绘制方式(仅在没有旋转和缩放时生效)。

draw_type 属性

图片的绘制方式(仅在没有旋转和缩放时生效)。

  • 类型：image_draw_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


image_value_t

概述

图片值控件。

可以用图片来表示如电池电量、WIFI信号强度和其它各种数值的值。

其原理如下：

  • 1.把value以format为格式转换成字符串。
  • 2.把每个字符与image(图片文件名前缀)映射成一个图片名。
  • 3.最后把这些图片显示出来。

如果设置click_add_delta为非0，那么点击时自动增加指定的增量，值超过最大值时回到最小值, 或者值超过最小值时回到最大值。

image_value_t是widget_t的子类控件，widget_t的函数均适用于image_value_t控件。

在xml中使用”image_value”标签创建图片值控件。如：

<image_value  value="0" image="num_" />

更多用法请参考： image_value

在c代码中使用函数image_value_create创建图片值控件。如：

image_value = image_value_create(win, 10, 10, 200, 200);
image_value_set_image(image_value, "num_");
image_value_set_value(image_value, 100);

完整示例请参考： image_value demo

可用通过style来设置控件的显示风格，如背景颜色和边框等等，不过一般情况并不需要。

函数

函数名称 | 说明
image_value_cast | 转换为image_value对象(供脚本语言使用)。
image_value_create | 创建image_value对象
image_value_get_widget_vtable | 获取 image_value 虚表。
image_value_set_click_add_delta | 设置点击时加上的增量。
image_value_set_format | 设置格式。
image_value_set_image | 设置图片前缀。
image_value_set_max | 设置最大值。
image_value_set_min | 设置最小值。
image_value_set_value | 设置值。

属性

属性名称 | 类型 | 说明
click_add_delta | double | 点击时加上一个增量。
format | char* | 数值到字符串转换时的格式，缺省为”%d”。
image | char* | 图片名称的前缀。
max | double | 最大值(如果设置了click_add_delta，到达最大值后回到最小值)。
min | double | 最小值(如果设置了click_add_delta，到达最小值后回到最大值)。
value | double | 值。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值即将改变事件(click_add_delta为非0时，点击触发)。
EVT_VALUE_CHANGED | value_change_event_t | 值改变事件(click_add_delta为非0时，点击触发)。

image_value_cast 函数

  • 函数功能：

转换为image_value对象(供脚本语言使用)。

  • 函数原型：
widget_t* image_value_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | image_value对象。
widget | widget_t* | image_value对象。

image_value_create 函数

  • 函数功能：

创建image_value对象

  • 函数原型：
widget_t* image_value_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

image_value_get_widget_vtable 函数

  • 函数功能：

获取 image_value 虚表。

  • 函数原型：
const widget_vtable_t* image_value_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 image_value 虚表。

image_value_set_click_add_delta 函数

  • 函数功能：

设置点击时加上的增量。

  • 函数原型：
ret_t image_value_set_click_add_delta (widget_t* widget, double click_add_delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_value对象。
click_add_delta | double | 增量。

image_value_set_format 函数

  • 函数功能：

设置格式。

  • 函数原型：
ret_t image_value_set_format (widget_t* widget, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_value对象。
format | const char* | 格式。

image_value_set_image 函数

  • 函数功能：

设置图片前缀。

  • 函数原型：
ret_t image_value_set_image (widget_t* widget, const char* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_value对象。
image | const char* | 图片前缀。

image_value_set_max 函数

  • 函数功能：

设置最大值。

  • 函数原型：
ret_t image_value_set_max (widget_t* widget, double max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_max对象。
max | double | 最大值。

image_value_set_min 函数

  • 函数功能：

设置最小值。

  • 函数原型：
ret_t image_value_set_min (widget_t* widget, double min);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_min对象。
min | double | 最小值。

image_value_set_value 函数

  • 函数功能：

设置值。

  • 函数原型：
ret_t image_value_set_value (widget_t* widget, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image_value对象。
value | double | 值。

click_add_delta 属性

点击时加上一个增量。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

format 属性

数值到字符串转换时的格式，缺省为”%d”。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

图片名称的前缀。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max 属性

最大值(如果设置了click_add_delta，到达最大值后回到最小值)。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

min 属性

最小值(如果设置了click_add_delta，到达最小值后回到最大值)。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


im_action_button_info_event_t

概述

设置软键盘上的action按钮的信息事件。

属性

属性名称 | 类型 | 说明
enable | bool_t | 软键盘上的action按钮启用。
text | const char* | 软键盘上的action按钮显示的文本。

enable 属性

软键盘上的action按钮启用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

text 属性

软键盘上的action按钮显示的文本。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


im_candidates_event_t

概述

输入法请求显示候选字的事件。

属性

属性名称 | 类型 | 说明
candidates | const char* | 可选的文本，多个文本以\0分隔。如：里\0李\0力\0离\0
candidates_nr | uint32_t | 可选的文本的个数。
selected | int32_t | 缺省选中某个候选字，小于0不选择任何候选字。

candidates 属性

可选的文本，多个文本以\0分隔。如：里\0李\0力\0离\0

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

candidates_nr 属性

可选的文本的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

selected 属性

缺省选中某个候选字，小于0不选择任何候选字。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


im_commit_event_t

概述

输入法提交输入的文本事件。

函数

函数名称 | 说明
im_commit_event_init | 初始化im_commit事件。

属性

属性名称 | 类型 | 说明
replace | bool_t | 是否替换原来的文本。
text | const char* | 提交的文本。

im_commit_event_init 函数

  • 函数功能：

初始化im_commit事件。

  • 函数原型：
event_t* im_commit_event_init (im_commit_event_t* e, const char* text, bool_t replace);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回事件对象。
e | im_commit_event_t* | 事件对象。
text | const char* | 文本。
replace | bool_t | 是否替代当前的内容。

replace 属性

是否替换原来的文本。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

text 属性

提交的文本。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


indicator_default_paint_t

概述

指示器默认绘制的类型。

常量

名称 | 说明
INDICATOR_DEFAULT_PAINT_AUTO | 自动选择。
INDICATOR_DEFAULT_PAINT_FILL_DOT | 实心圆点指示器，当前项填充selected_fg_color，其他填充fg_color。
INDICATOR_DEFAULT_PAINT_STROKE_DOT | 镂空圆点指示器，当前项填充selected_fg_color，其他镂空fg_color。
INDICATOR_DEFAULT_PAINT_FILL_RECT | 实心矩形指示器，当前项填充selected_fg_color，其他填充fg_color。
INDICATOR_DEFAULT_PAINT_STROKE_RECT | 镂空矩形指示器，当前项填充selected_fg_color，其他镂空fg_color。


input_device_status_t

概述

输入设备状态管理器。本类仅供窗口管理器内部使用。

函数

函数名称 | 说明
input_device_status_abort_all_pressed_keys | 取消全部已经按下的键。
input_device_status_init | 初始化输入设备状态管理器。
input_device_status_on_ignore_input_event | 对输入事件进行处理，已经按下的指针和键对应的抬起事件会分发给widget，其他的事件不会分发。
input_device_status_on_input_event | 对输入事件进行处理，然后分发给widget。

input_device_status_abort_all_pressed_keys 函数

  • 函数功能：

取消全部已经按下的键。

窗口切换时，旧窗口按下的键，一直不松开，会持续触发PRESS，可能会干扰新窗口的用户功能。 所在窗口切换时，abort全部已经按下的键，直到按键松开。

  • 函数原型：
ret_t input_device_status_abort_all_pressed_keys (input_device_status_t* ids);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ids | input_device_status_t* | 输入设备状态管理器对象。

input_device_status_init 函数

  • 函数功能：

初始化输入设备状态管理器。

  • 函数原型：
input_device_status_t* input_device_status_init (input_device_status_t* ids);
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_device_status_t* | 返回输入设备状态管理器对象。
ids | input_device_status_t* | 输入设备状态管理器对象。

input_device_status_on_ignore_input_event 函数

  • 函数功能：

对输入事件进行处理，已经按下的指针和键对应的抬起事件会分发给widget，其他的事件不会分发。

  • 函数原型：
ret_t input_device_status_on_ignore_input_event (input_device_status_t* ids, widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ids | input_device_status_t* | 输入设备状态管理器对象。
widget | widget_t* | 窗口管理器对象。
e | event_t* | 事件对象。

input_device_status_on_input_event 函数

  • 函数功能：

对输入事件进行处理，然后分发给widget。

  • 函数原型：
ret_t input_device_status_on_input_event (input_device_status_t* ids, widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ids | input_device_status_t* | 输入设备状态管理器对象。
widget | widget_t* | 窗口管理器对象。
e | event_t* | 事件对象。


input_engine_null_t

概述

空输入法引擎实现。

缺省输入法可以选择启用软键盘，但不启用具体的输入法引擎，此时可以选择空输入法引擎实现。

函数

函数名称 | 说明
input_engine_create | 创建空输入法引擎对象。

input_engine_create 函数

  • 函数功能：

创建空输入法引擎对象。

  • 函数原型：
input_engine_t* input_engine_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_engine_t* | 返回输入法引擎对象。


input_engine_pinyin_t

概述

拼音输入法引擎实现。

基于谷歌拼音输入法实现。

函数

函数名称 | 说明
input_engine_create | 创建拼音输入法引擎对象。

input_engine_create 函数

  • 函数功能：

创建拼音输入法引擎对象。

  • 函数原型：
input_engine_t* input_engine_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_engine_t* | 返回输入法引擎对象。


input_engine_t

概述

输入法引擎接口。

常见的实现方式有以下几种：

  • 空实现。用于不需要输入法的嵌入式平台。

  • 拼音输入法实现。用于需要输入法的嵌入式平台。

函数

函数名称 | 说明
input_engine_add_candidate | 给输入法引擎对象加入一个候选字。
input_engine_add_candidates_from_char | 根据字符类型给输入法引擎对象加入所有符合的候选字。
input_engine_add_candidates_from_string | 根据字符串给输入法引擎对象加入所有符合的候选字。
input_engine_create | 创建输入法引擎对象。
input_engine_deinit | 释放输入法引擎对象。
input_engine_destroy | 销毁输入法引擎对象。
input_engine_dispatch_candidates | 请求显示候选字。
input_engine_get_lang | 获取语言。
input_engine_init | 初始化输入法引擎对象。
input_engine_input | 输入新的按键，并更新候选字。
input_engine_reset_candidates | 重置输入法引擎对象。
input_engine_reset_input | 清除所有输入的按键组合和候选字。
input_engine_search | 根据按键组合，更新候选字，并通过输入法对象提交候选字和pre候选字。
input_engine_set_lang | 设置语言。

属性

属性名称 | 类型 | 说明

input_engine_add_candidate 函数

  • 函数功能：

给输入法引擎对象加入一个候选字。

  • 函数原型：
ret_t input_engine_add_candidate (input_engine_t* engine, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
str | const char* | 候选字。

input_engine_add_candidates_from_char 函数

  • 函数功能：

根据字符类型给输入法引擎对象加入所有符合的候选字。 备注：搜索表是二维数组，需要通过参数 c 来确定使用具体行数。

  • 函数原型：
ret_t input_engine_add_candidates_from_char (input_engine_t* engine, const wchar_t** table, char c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
table | const wchar_t** | 输入法搜索表。
c | char | 需要显示查询的字符。

input_engine_add_candidates_from_string 函数

  • 函数功能：

根据字符串给输入法引擎对象加入所有符合的候选字。

  • 函数原型：
ret_t input_engine_add_candidates_from_string (input_engine_t* engine, const table_entry_t* items, uint32_t items_nr, const char* key, bool_t exact);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
items | const table_entry_t* | 输入法搜索表。
items_nr | uint32_t | 输入法搜索表长度。
key | const char* | 需要显示查询的字符。
exact | bool_t | 是否只查询完全匹配的字符串。

input_engine_create 函数

  • 函数功能：

创建输入法引擎对象。

  • 函数原型：
input_engine_t* input_engine_create (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_engine_t* | 返回输入法引擎对象。
im | input_method_t* | 输入法对象。

input_engine_deinit 函数

  • 函数功能：

释放输入法引擎对象。

  • 函数原型：
ret_t input_engine_deinit (input_engine_t* engine);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。

input_engine_destroy 函数

  • 函数功能：

销毁输入法引擎对象。

  • 函数原型：
ret_t input_engine_destroy (input_engine_t* engine);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。

input_engine_dispatch_candidates 函数

  • 函数功能：

请求显示候选字。

  • 函数原型：
ret_t input_engine_dispatch_candidates (input_engine_t* engine, int32_t selected);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
selected | int32_t | 缺省选中候选字的序数。

input_engine_get_lang 函数

  • 函数功能：

获取语言。

  • 函数原型：
const char* input_engine_get_lang (input_engine_t* engine);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回语言。
engine | input_engine_t* | 输入法引擎对象。

input_engine_init 函数

  • 函数功能：

初始化输入法引擎对象。

  • 函数原型：
ret_t input_engine_init (input_engine_t* engine);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。

input_engine_input 函数

  • 函数功能：

输入新的按键，并更新候选字。

  • 函数原型：
ret_t input_engine_input (input_engine_t* engine, int key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
key | int | 键值。

input_engine_reset_candidates 函数

  • 函数功能：

重置输入法引擎对象。

  • 函数原型：
ret_t input_engine_reset_candidates (input_engine_t* engine);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。

input_engine_reset_input 函数

  • 函数功能：

清除所有输入的按键组合和候选字。

  • 函数原型：
ret_t input_engine_reset_input (input_engine_t* engine);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。

input_engine_search 函数

  • 函数功能：

根据按键组合，更新候选字，并通过输入法对象提交候选字和pre候选字。

  • 函数原型：
ret_t input_engine_search (input_engine_t* engine, const char* keys);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
keys | const char* | 按键组合。

input_engine_set_lang 函数

  • 函数功能：

设置语言。 有时在同一种语言环境下，也需要输入多种文字，典型的情况是同时输入中文和英文。 比如T9输入法，可以同时支持中文和英文输入，配合软键盘随时切换输入的语言。 数字、小写字母、大写字母和符合也可以视为输入的语言。 主要用于提示输入法引擎选择适当的输入方法。

  • 函数原型：
ret_t input_engine_set_lang (input_engine_t* engine, const char* lang);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
engine | input_engine_t* | 输入法引擎对象。
lang | const char* | 语言。格式为语言+国家/地区码。如：zh_cn和en_us等。


input_method_default_t

概述

缺省输入法实现。输入法会启用软键盘，但是开发者可以自定义输入法引擎。

目前可以选择不启用输入法引擎或启用拼音输入法引擎。

开发者也可以开发手写输入法或语音输入法，如果实现时遇到问题可以和我们交流。

函数

函数名称 | 说明
input_method_default_create | 创建缺省输入法对象。

input_method_default_create 函数

  • 函数功能：

创建缺省输入法对象。

  • 函数原型：
input_method_t* input_method_default_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_method_t* | 返回输入法对象。


input_method_null_t

概述

空输入法实现。

在不需要输入法的嵌入式平台使用空的输入法。

函数

函数名称 | 说明
input_method_null_create | 创建空输入法对象。

input_method_null_create 函数

  • 函数功能：

创建空输入法对象。

  • 函数原型：
input_method_t* input_method_null_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_method_t* | 返回输入法对象。


input_method_sdl_t

概述

SDL输入法实现。

SDL输入法使用平台自身的输入法引擎，一般在桌面Linux、MacOS、Windows、Android和iOS上使用。

函数

函数名称 | 说明
input_method_sdl_create | 创建SDL输入法对象。

input_method_sdl_create 函数

  • 函数功能：

创建SDL输入法对象。

  • 函数原型：
input_method_t* input_method_sdl_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_method_t* | 返回输入法对象。


input_method_t

概述

输入法接口。

常见的实现方式有以下几种：

  • 空实现。用于不需要输入法的嵌入式平台。

  • 缺省实现。用于需要输入法的嵌入式平台。

  • 基于SDL实现的平台原生输入法。用于桌面系统和手机系统。

> 输入类型请参考：input_type

函数

函数名称 | 说明
input_method | 获取全局输入法对象。
input_method_commit_text | 提交输入文本。
input_method_commit_text_ex | 提交输入文本。
input_method_create | 创建输入法对象。在具体实现中实现。
input_method_destroy | 销毁输入法对象。在具体实现中实现。
input_method_dispatch | 分发一个事件。
input_method_dispatch_action | 软键盘上的action按钮被点击时，调用本函数分发EVT_IM_ACTION事件。
input_method_dispatch_candidates | 请求显示候选字。
input_method_dispatch_key | 提交按键。
input_method_dispatch_keys | 提交按键。
input_method_dispatch_pre_candidates | 请求显示预候选字。
input_method_dispatch_preedit | 分发进入预编辑状态的事件。
input_method_dispatch_preedit_abort | 分发取消预编辑状态的事件(提交预编辑内容，退出预编辑状态)。
input_method_dispatch_preedit_confirm | 分发确认预编辑状态的事件(提交预编辑内容，退出预编辑状态)。
input_method_dispatch_to_widget | 分发一个事件当前焦点控件。
input_method_get_lang | 获取语言。
input_method_is_native | 是否是平台原生输入法。
input_method_off | 注销指定事件的处理函数。
input_method_on | 注册指定事件的处理函数。
input_method_request | 打开或关闭输入法。
input_method_set | 设置全局输入法对象。
input_method_set_lang | 设置语言。
input_method_update_action_button_info | 设置软键盘上的action按钮的信息。

属性

属性名称 | 类型 | 说明
action_button_enable | bool_t | 软键盘的上的action按钮是否可用。
action_button_text | char* | 软键盘的上的action按钮文本。
is_native | bool_t | 是否是原生输入法。
keyboard_name | char* | 软键盘资源名称。

input_method 函数

  • 函数功能：

获取全局输入法对象。

  • 函数原型：
input_method_t* input_method ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_method_t* | 成功返回输入法对象，失败返回NULL。

input_method_commit_text 函数

  • 函数功能：

提交输入文本。

  • 函数原型：
ret_t input_method_commit_text (input_method_t* im, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
text | const char* | 文本。

input_method_commit_text_ex 函数

  • 函数功能：

提交输入文本。

  • 函数原型：
ret_t input_method_commit_text_ex (input_method_t* im, bool_t replace, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
replace | bool_t | 是否替换原来的文本。
text | const char* | 文本。

input_method_create 函数

  • 函数功能：

创建输入法对象。在具体实现中实现。

  • 函数原型：
input_method_t* input_method_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | input_method_t* | 成功返回输入法对象，失败返回NULL。

input_method_destroy 函数

  • 函数功能：

销毁输入法对象。在具体实现中实现。

  • 函数原型：
ret_t input_method_destroy (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。

input_method_dispatch 函数

  • 函数功能：

分发一个事件。

  • 函数原型：
ret_t input_method_dispatch (input_method_t* im, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 控件对象。
e | event_t* | 事件。

input_method_dispatch_action 函数

  • 函数功能：

软键盘上的action按钮被点击时，调用本函数分发EVT_IM_ACTION事件。

  • 函数原型：
ret_t input_method_dispatch_action (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。

input_method_dispatch_candidates 函数

  • 函数功能：

请求显示候选字。

  • 函数原型：
ret_t input_method_dispatch_candidates (input_method_t* im, const char* strs, uint32_t nr, int32_t selected);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
strs | const char* | 候选字列表。
nr | uint32_t | 候选字个数。
selected | int32_t | 缺省选中候选字的序数。

input_method_dispatch_key 函数

  • 函数功能：

提交按键。

  • 函数原型：
ret_t input_method_dispatch_key (input_method_t* im, uint32_t key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
key | uint32_t | 键值。

input_method_dispatch_keys 函数

  • 函数功能：

提交按键。

  • 函数原型：
ret_t input_method_dispatch_keys (input_method_t* im, const char* keys);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
keys | const char* | 键值。

input_method_dispatch_pre_candidates 函数

  • 函数功能：

请求显示预候选字。

预候选字: 在有的输入法中，比如T9硬键盘输入时，按下12两个键时，预候选字会显示可用的拼音列表。 从预候选字列表中选择拼音，再查询拼音对应的候选字列表。

  • 函数原型：
ret_t input_method_dispatch_pre_candidates (input_method_t* im, const char* strs, uint32_t nr, int32_t selected);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
strs | const char* | 候选字列表。
nr | uint32_t | 候选字个数。
selected | int32_t | 缺省选中候选字的序数。

input_method_dispatch_preedit 函数

  • 函数功能：

分发进入预编辑状态的事件。

  • 函数原型：
ret_t input_method_dispatch_preedit (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。

input_method_dispatch_preedit_abort 函数

  • 函数功能：

分发取消预编辑状态的事件(提交预编辑内容，退出预编辑状态)。

  • 函数原型：
ret_t input_method_dispatch_preedit_abort (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。

input_method_dispatch_preedit_confirm 函数

  • 函数功能：

分发确认预编辑状态的事件(提交预编辑内容，退出预编辑状态)。

  • 函数原型：
ret_t input_method_dispatch_preedit_confirm (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。

input_method_dispatch_to_widget 函数

  • 函数功能：

分发一个事件当前焦点控件。

  • 函数原型：
ret_t input_method_dispatch_to_widget (input_method_t* im, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 控件对象。
e | event_t* | 事件。

input_method_get_lang 函数

  • 函数功能：

获取语言。

  • 函数原型：
const char* input_method_get_lang (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回语言。
im | input_method_t* | 输入法对象。

input_method_is_native 函数

  • 函数功能：

是否是平台原生输入法。

  • 函数原型：
bool_t input_method_is_native (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是原生输入法，否则表示不是。
im | input_method_t* | 输入法对象。

input_method_off 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t input_method_off (input_method_t* im, uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
id | uint32_t | input_method_on返回的ID。

input_method_on 函数

  • 函数功能：

注册指定事件的处理函数。

  • 函数原型：
uint32_t input_method_on (input_method_t* im, event_type_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于input_method_off。
im | input_method_t* | 输入法对象。
type | event_type_t | 事件类型。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

input_method_request 函数

  • 函数功能：

打开或关闭输入法。

  • 函数原型：
ret_t input_method_request (input_method_t* im, widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
widget | widget_t* | 焦点控件，为NULL时关闭输入法，非NULL时打开输入法。

input_method_set 函数

  • 函数功能：

设置全局输入法对象。

  • 函数原型：
ret_t input_method_set (input_method_t* im);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。

input_method_set_lang 函数

  • 函数功能：

设置语言。

有时在同一种语言环境下，也需要输入多种文字，典型的情况是同时输入中文和英文。 比如T9输入法，可以同时支持中文和英文输入，配合软键盘随时切换输入的语言。 数字、小写字母、大写字母和符合也可以视为输入的语言。 主要用于提示输入法引擎选择适当的输入方法。

  • 函数原型：
ret_t input_method_set_lang (input_method_t* im, const char* lang);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
lang | const char* | 语言。格式为语言+国家/地区码。如：zh_cn和en_us等。

input_method_update_action_button_info 函数

  • 函数功能：

设置软键盘上的action按钮的信息。

  • 函数原型：
ret_t input_method_update_action_button_info (input_method_t* im, const char* text, bool_t enable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
im | input_method_t* | 输入法对象。
text | const char* | 按钮的文本。
enable | bool_t | 按钮的是否可用。

action_button_enable 属性

软键盘的上的action按钮是否可用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

action_button_text 属性

软键盘的上的action按钮文本。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

is_native 属性

是否是原生输入法。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

keyboard_name 属性

软键盘资源名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


input_type_t

概述

输入类型常量定义。

常量

名称 | 说明
INPUT_TEXT | 文本。字符串属性值：text
INPUT_INT | 整数。字符串属性值：int
INPUT_UINT | 非负整数。字符串属性值：uint
INPUT_HEX | 16进制整数。字符串属性值：hex
INPUT_FLOAT | 浮点数。字符串属性值：float
INPUT_UFLOAT | 非负浮点数。字符串属性值：ufloat
INPUT_EMAIL | 邮件地址。字符串属性值：email
INPUT_PASSWORD | 密码。字符串属性值：password
INPUT_PHONE | 电话号码。字符串属性值：phone
INPUT_IPV4 | IP Addr V4(如：192.168.1.1)。字符串属性值：ipv4
INPUT_DATE | 日期(如：2020/02/20)。字符串属性值：date
INPUT_TIME | 时间(时分，如：12:00)。字符串属性值：time
INPUT_TIME_FULL | 时间(时分秒，如：12:00:00)。字符串属性值：time_full
INPUT_CUSTOM | 使用自定义的软键盘(如计算器等应用不希望弹出系统软键盘)。字符串属性值：custom
INPUT_CUSTOM_PASSWORD | 使用自定义的密码软键盘。字符串属性值：custom_password
INPUT_ASCII | 纯英文文本。字符串属性值：ascii


int_str_t

概述

数字-字符串类型。

负责把一个数字映射成一个字符串。

示例：

static const int_str_t color_values[] = {{1, "red"}, {2, "black"}, {3, "blue"}, {4, "white"}};
const char* value = int_str_value(color_values, 3);
int32_t name = int_str_name(color_values, "blue", 0);
printf("value = %s \n", value);
printf("name = %d \n", name);

函数

函数名称 | 说明
int_str_name | 根据value获取对应的name。
int_str_value | 根据name获取对应的value。

int_str_name 函数

  • 函数功能：

根据value获取对应的name。

  • 函数原型：
int32_t int_str_name (const int_str_t* items, const char* value, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回name。
items | const int_str_t* | int_str_t数组。
value | const char* | value。
defval | int32_t | 如果没有找到对应的name，则返回的defval默认值。

int_str_value 函数

  • 函数功能：

根据name获取对应的value。

  • 函数原型：
const char* int_str_value (const int_str_t* items, int32_t name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回value。
items | const int_str_t* | int_str_t数组。
name | int32_t | name。


keyboard_t

概述

软键盘。

软键盘是一个特殊的窗口，由编辑器通过输入法自动打开和关闭。

这里介绍一下定制软键盘的方法：

编辑器输入类型和软键盘UI资源文件的对应关系:

输入类型 | 软键盘UI资源文件
INPUT_PHONE | kb_phone.xml
INPUT_INT | kb_int.xml
INPUT_FLOAT | kb_float.xml
INPUT_UINT | kb_uint.xml
INPUT_UFLOAT | kb_ufloat.xml
INPUT_HEX | kb_hex.xml
INPUT_EMAIL | kb_ascii.xml
INPUT_PASSWORD | kb_ascii.xml
INPUT_ASCII | kb_ascii.xml
INPUT_CUSTOM | 使用自定义的键盘
其它 | kb_default.xml

keyboard中按钮子控件的名称有些特殊要求：

名称 | 功能
return | 回车键
action | 定制按钮
backspace | 删除键
tab | tab键
space | 空格键
close | 关闭软键盘
clear | 清除编辑器的内容
cancel | 恢复编辑器的内容
back | 关闭当前窗口
back_to_home | 返回home窗口
前缀key: | 键值
前缀hard_key: | 模拟物理键盘
前缀page: | 切换到页面
前缀opt: | 多个字符选择一个，点击切换到下一个，超时提交字符(用于实现九宫格输入)

示例：

  • 按键”a”，提交输入法处理。
<button repeat="300" name="key:a" text="a"/>
  • 字符”a”，直接提交到编辑器。
<button repeat="300" name="a" text="a"/>
  • 模拟物理键盘数字”1”，触发key down/up事件（可以用来选择候选字）。
<button repeat="300" name="hard_key:1" text="1"/>
  • 九宫格输入
<button repeat="300" name="opt:._@/#" text="._@/#"/>
<button repeat="300" name="opt:abc" text="abc"/>
<button repeat="300" name="opt:def" text="def"/>
  • 输入语言切换

有的输入法，同时支持输入多种语言。 比如T9，可以同时支持中文和英文输入，配合软键盘随时切换输入的语言。

可以在pages的页面里指定lang属性，切换到该页面时会设置输入法的语言。如：

<pages x="0" y="bottom" w="100%" h="-28" active="2">
<view name="lower" lang="en_us"
x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
...
</view>
<view name="chinese" lang="zh_cn"
x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
...
</view>
</pages>
  • 键盘跟随。 默认情况下，键盘从底部弹出。如果需要让键盘在编辑器附近弹出，可以指定floating属性为true。如：
<keyboard theme="keyboard" w="200" h="200" floating="true">

更多用法请参考： kb_default

函数

函数名称 | 说明
keyboard_cast | 转换为keyboard对象(供脚本语言使用)。
keyboard_close | 关闭keyboard窗口。
keyboard_create | 创建keyboard对象
keyboard_get_widget_vtable | 获取 keyboard 虚表。

keyboard_cast 函数

  • 函数功能：

转换为keyboard对象(供脚本语言使用)。

  • 函数原型：
widget_t* keyboard_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | keyboard对象。
widget | widget_t* | keyboard对象。

keyboard_close 函数

  • 函数功能：

关闭keyboard窗口。

  • 函数原型：
ret_t keyboard_close (widget_t* parent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
parent | widget_t* | keyboard对象。

keyboard_create 函数

  • 函数功能：

创建keyboard对象

  • 函数原型：
widget_t* keyboard_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

keyboard_get_widget_vtable 函数

  • 函数功能：

获取 keyboard 虚表。

  • 函数原型：
const widget_vtable_t* keyboard_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 keyboard 虚表。


keyboard_type_t

概述

键盘的类型

常量

名称 | 说明
KEYBOARD_NONE | 无键盘。
KEYBOARD_NORMAL | 正常键盘。
KEYBOARD_3KEYS | 3键(RETURN+上下键，附加数字键等)。> RETURN键用于切换模式：焦点模式下，上下键用于切换焦点，非焦点模式下，上下键用于切修改控件的值。
KEYBOARD_5KEYS | 5键(RETURN+上下左右键，附加数字键等)。> RETURN键用于切换模式：焦点模式下，上下键用于切换焦点，非焦点模式下，上下键用于切修改控件的值。


key_code_t

概述

key code。

常量

名称 | 说明
TK_KEY_RETURN | TK_KEY_RETURN
TK_KEY_ESCAPE | TK_KEY_ESCAPE
TK_KEY_BACKSPACE | TK_KEY_BACKSPACE
TK_KEY_TAB | TK_KEY_TAB
TK_KEY_SPACE | TK_KEY_SPACE
TK_KEY_EXCLAIM | TK_KEY_EXCLAIM
TK_KEY_QUOTEDBL | TK_KEY_QUOTEDBL
TK_KEY_HASH | TK_KEY_HASH
TK_KEY_PERCENT | TK_KEY_PERCENT
TK_KEY_DOLLAR | TK_KEY_DOLLAR
TK_KEY_AMPERSAND | TK_KEY_AMPERSAND
TK_KEY_QUOTE | TK_KEY_QUOTE
TK_KEY_LEFTPAREN | TK_KEY_LEFTPAREN
TK_KEY_RIGHTPAREN | TK_KEY_RIGHTPAREN
TK_KEY_ASTERISK | TK_KEY_ASTERISK
TK_KEY_PLUS | TK_KEY_PLUS
TK_KEY_COMMA | TK_KEY_COMMA
TK_KEY_MINUS | TK_KEY_MINUS
TK_KEY_PERIOD | TK_KEY_PERIOD
TK_KEY_SLASH | TK_KEY_SLASH
TK_KEY_0 | TK_KEY_0
TK_KEY_1 | TK_KEY_1
TK_KEY_2 | TK_KEY_2
TK_KEY_3 | TK_KEY_3
TK_KEY_4 | TK_KEY_4
TK_KEY_5 | TK_KEY_5
TK_KEY_6 | TK_KEY_6
TK_KEY_7 | TK_KEY_7
TK_KEY_8 | TK_KEY_8
TK_KEY_9 | TK_KEY_9
TK_KEY_COLON | TK_KEY_COLON
TK_KEY_SEMICOLON | TK_KEY_SEMICOLON
TK_KEY_LESS | TK_KEY_LESS
TK_KEY_EQUAL | TK_KEY_EQUAL
TK_KEY_GREATER | TK_KEY_GREATER
TK_KEY_QUESTION | TK_KEY_QUESTION
TK_KEY_AT | TK_KEY_AT
TK_KEY_LEFTBRACKET | TK_KEY_LEFTBRACKET
TK_KEY_BACKSLASH | TK_KEY_BACKSLASH
TK_KEY_RIGHTBRACKET | TK_KEY_RIGHTBRACKET
TK_KEY_CARET | TK_KEY_CARET
TK_KEY_UNDERSCORE | TK_KEY_UNDERSCORE
TK_KEY_BACKQUOTE | TK_KEY_BACKQUOTE
TK_KEY_a | TK_KEY_a
TK_KEY_b | TK_KEY_b
TK_KEY_c | TK_KEY_c
TK_KEY_d | TK_KEY_d
TK_KEY_e | TK_KEY_e
TK_KEY_f | TK_KEY_f
TK_KEY_g | TK_KEY_g
TK_KEY_h | TK_KEY_h
TK_KEY_i | TK_KEY_i
TK_KEY_j | TK_KEY_j
TK_KEY_k | TK_KEY_k
TK_KEY_l | TK_KEY_l
TK_KEY_m | TK_KEY_m
TK_KEY_n | TK_KEY_n
TK_KEY_o | TK_KEY_o
TK_KEY_p | TK_KEY_p
TK_KEY_q | TK_KEY_q
TK_KEY_r | TK_KEY_r
TK_KEY_s | TK_KEY_s
TK_KEY_t | TK_KEY_t
TK_KEY_u | TK_KEY_u
TK_KEY_v | TK_KEY_v
TK_KEY_w | TK_KEY_w
TK_KEY_x | TK_KEY_x
TK_KEY_y | TK_KEY_y
TK_KEY_z | TK_KEY_z
TK_KEY_A | TK_KEY_A
TK_KEY_B | TK_KEY_B
TK_KEY_C | TK_KEY_C
TK_KEY_D | TK_KEY_D
TK_KEY_E | TK_KEY_E
TK_KEY_F | TK_KEY_F
TK_KEY_G | TK_KEY_G
TK_KEY_H | TK_KEY_H
TK_KEY_I | TK_KEY_I
TK_KEY_J | TK_KEY_J
TK_KEY_K | TK_KEY_K
TK_KEY_L | TK_KEY_L
TK_KEY_M | TK_KEY_M
TK_KEY_N | TK_KEY_N
TK_KEY_O | TK_KEY_O
TK_KEY_P | TK_KEY_P
TK_KEY_Q | TK_KEY_Q
TK_KEY_R | TK_KEY_R
TK_KEY_S | TK_KEY_S
TK_KEY_T | TK_KEY_T
TK_KEY_U | TK_KEY_U
TK_KEY_V | TK_KEY_V
TK_KEY_W | TK_KEY_W
TK_KEY_X | TK_KEY_X
TK_KEY_Y | TK_KEY_Y
TK_KEY_Z | TK_KEY_Z
TK_KEY_DOT | TK_KEY_DOT
TK_KEY_DELETE | TK_KEY_DELETE
TK_KEY_LEFTBRACE | TK_KEY_LEFTBRACE
TK_KEY_RIGHTBRACE | TK_KEY_RIGHTBRACE
TK_KEY_LSHIFT | TK_KEY_LSHIFT
TK_KEY_RSHIFT | TK_KEY_RSHIFT
TK_KEY_LCTRL | TK_KEY_LCTRL
TK_KEY_RCTRL | TK_KEY_RCTRL
TK_KEY_LALT | TK_KEY_LALT
TK_KEY_RALT | TK_KEY_RALT
TK_KEY_CAPSLOCK | TK_KEY_CAPSLOCK
TK_KEY_HOME | TK_KEY_HOME
TK_KEY_END | TK_KEY_END
TK_KEY_INSERT | TK_KEY_INSERT
TK_KEY_UP | TK_KEY_UP
TK_KEY_DOWN | TK_KEY_DOWN
TK_KEY_LEFT | TK_KEY_LEFT
TK_KEY_RIGHT | TK_KEY_RIGHT
TK_KEY_PAGEUP | TK_KEY_PAGEUP
TK_KEY_PAGEDOWN | TK_KEY_PAGEDOWN
TK_KEY_F1 | TK_KEY_F1
TK_KEY_F2 | TK_KEY_F2
TK_KEY_F3 | TK_KEY_F3
TK_KEY_F4 | TK_KEY_F4
TK_KEY_F5 | TK_KEY_F5
TK_KEY_F6 | TK_KEY_F6
TK_KEY_F7 | TK_KEY_F7
TK_KEY_F8 | TK_KEY_F8
TK_KEY_F9 | TK_KEY_F9
TK_KEY_F10 | TK_KEY_F10
TK_KEY_F11 | TK_KEY_F11
TK_KEY_F12 | TK_KEY_F12
TK_KEY_MENU | TK_KEY_MENU
TK_KEY_COMMAND | TK_KEY_COMMAND
TK_KEY_BACK | TK_KEY_BACK
TK_KEY_CANCEL | TK_KEY_CANCEL
TK_KEY_KP_DIVIDE | TK_KEY_KP_DIVIDE
TK_KEY_KP_MULTIPLY | TK_KEY_KP_MULTIPLY
TK_KEY_KP_MINUS | TK_KEY_KP_MINUS
TK_KEY_KP_PLUS | TK_KEY_KP_PLUS
TK_KEY_KP_ENTER | TK_KEY_KP_ENTER
TK_KEY_KP_1 | TK_KEY_KP_1
TK_KEY_KP_2 | TK_KEY_KP_2
TK_KEY_KP_3 | TK_KEY_KP_3
TK_KEY_KP_4 | TK_KEY_KP_4
TK_KEY_KP_5 | TK_KEY_KP_5
TK_KEY_KP_6 | TK_KEY_KP_6
TK_KEY_KP_7 | TK_KEY_KP_7
TK_KEY_KP_8 | TK_KEY_KP_8
TK_KEY_KP_9 | TK_KEY_KP_9
TK_KEY_KP_0 | TK_KEY_KP_0
TK_KEY_KP_PERIOD | TK_KEY_KP_PERIOD
TK_KEY_NUMLOCKCLEAR | TK_KEY_NUMLOCKCLEAR
TK_KEY_WHEEL | TK_KEY_WHEEL


key_event_t

概述

按键事件。

函数

函数名称 | 说明
key_event_cast | 把event对象转key_event_t对象。
key_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
alt | bool_t | alt键是否按下。
capslock | bool_t | capslock键是否按下。
cmd | bool_t | left shift键是否按下。
ctrl | bool_t | right alt键是否按下。
key | uint32_t | 键值。
lalt | bool_t | left alt键是否按下。
lctrl | bool_t | left ctrl键是否按下。
lshift | bool_t | left shift键是否按下。
menu | bool_t | menu键是否按下。
numlock | bool_t | numlock键是否按下。
ralt | bool_t | right alt键是否按下。
rctrl | bool_t | right ctrl键是否按下。
rshift | bool_t | right shift键是否按下。
shift | bool_t | shift键是否按下。

key_event_cast 函数

  • 函数功能：

把event对象转key_event_t对象。

  • 函数原型：
key_event_t* key_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | key_event_t* | event对象。
event | event_t* | event对象。

key_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* key_event_init (key_event_t* event, uint32_t type, void* target, int32_t key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | key_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
key | int32_t | key的值。

alt 属性

alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

capslock 属性

capslock键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

cmd 属性

left shift键是否按下。 cmd/win键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ctrl 属性

right alt键是否按下。 ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

key 属性

键值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

lalt 属性

left alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

lctrl 属性

left ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

lshift 属性

left shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

menu 属性

menu键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

numlock 属性

numlock键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ralt 属性

right alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

rctrl 属性

right ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

rshift 属性

right shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

shift 属性

shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


label_t

概述

文本控件。用于显示一行或多行文本。

文本控件不会根据文本的长度自动换行，只有文本内容包含换行符时才会换行。

如需自动换行请使用rich_text_t控件。

label_t是widget_t的子类控件，widget_t的函数均适用于label_t控件。

在xml中使用”label”标签创建文本控件。如：

<label style="center" text="center"/>

更多用法请参考：label.xml

在c代码中使用函数label_create创建文本控件。如：

widget_t* label = label_create(win, 10, 10, 128, 30);
widget_set_text(label, L"hello awtk!");

创建之后，需要用widget_set_text或widget_set_text_utf8设置文本内容。

完整示例请参考：label demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="left">
<normal text_color="red" text_align_h="left" border_color="#a0a0a0" margin="4" />
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
label_cast | 转换为label对象(供脚本语言使用)。
label_create | 创建label对象
label_get_widget_vtable | 获取 label 虚表。
label_resize_to_content | 根据文本内容调节控件大小。
label_set_ellipses | 是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…
label_set_length | 设置显示字符的个数(小余0时全部显示)。
label_set_line_wrap | 设置是否自动换行。
label_set_max_w | 设置max_w。
label_set_word_wrap | 设置是否允许整个单词换行。(需要开启自动换行才有效果)

属性

属性名称 | 类型 | 说明
ellipses | bool_t | 是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…
length | int32_t | 显示字符的个数(小余0时全部显示)。
line_wrap | bool_t | 是否自动换行(默认FALSE)。
max_w | int32_t | 当auto_adjust_size为TRUE时，用于控制控件的最大宽度，超出该宽度后才自动换行。
word_wrap | bool_t | 是否允许整个单词换行(默认FALSE)。

label_cast 函数

  • 函数功能：

转换为label对象(供脚本语言使用)。

  • 函数原型：
widget_t* label_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | label对象。
widget | widget_t* | label对象。

label_create 函数

  • 函数功能：

创建label对象

  • 函数原型：
widget_t* label_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

label_get_widget_vtable 函数

  • 函数功能：

获取 label 虚表。

  • 函数原型：
const widget_vtable_t* label_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 label 虚表。

label_resize_to_content 函数

  • 函数功能：

根据文本内容调节控件大小。

  • 函数原型：
ret_t label_resize_to_content (widget_t* widget, uint32_t min_w, uint32_t max_w, uint32_t min_h, uint32_t max_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
min_w | uint32_t | 最小宽度。
max_w | uint32_t | 最大宽度。
min_h | uint32_t | 最小高度。
max_h | uint32_t | 最大高度。

label_set_ellipses 函数

  • 函数功能：

是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…

  • 函数原型：
ret_t label_set_ellipses (widget_t* widget, bool_t ellipses);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
ellipses | bool_t | 是否开启缩写。

label_set_length 函数

  • 函数功能：

设置显示字符的个数(小余0时全部显示)。

  • 函数原型：
ret_t label_set_length (widget_t* widget, int32_t length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
length | int32_t | 最大可显示字符个数。

label_set_line_wrap 函数

  • 函数功能：

设置是否自动换行。

  • 函数原型：
ret_t label_set_line_wrap (widget_t* widget, bool_t line_wrap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line_wrap | bool_t | 是否自动换行。

label_set_max_w 函数

  • 函数功能：

设置max_w。

  • 函数原型：
ret_t label_set_max_w (widget_t* widget, int32_t max_w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
max_w | int32_t | 最大宽度。

label_set_word_wrap 函数

  • 函数功能：

设置是否允许整个单词换行。(需要开启自动换行才有效果)

  • 函数原型：
ret_t label_set_word_wrap (widget_t* widget, bool_t word_wrap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
word_wrap | bool_t | 是否允许整个单词换行。

ellipses 属性

是否开启缩写，开启后，当文字长度操作控件长度后，自动变为… 和换行是冲突的，换行后，该属性不生效

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

length 属性

显示字符的个数(小余0时全部显示)。 主要用于动态改变显示字符的个数，来实现类似[拨号中…]的动画效果。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

line_wrap 属性

是否自动换行(默认FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max_w 属性

当auto_adjust_size为TRUE时，用于控制控件的最大宽度，超出该宽度后才自动换行。 为0表示忽略该参数。小于0时取父控件宽度加上max_w。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

word_wrap 属性

是否允许整个单词换行(默认FALSE)。 需要开启自动换行才有效果

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


lang_indicator_t

概述

输入法语言指示器。

用于显示输入法的输入语言或类型，主要用于T9输入法。

lang_indicator_t是widget_t的子类控件，widget_t的函数均适用于lang_indicator_t控件。

在xml中使用”lang_indicator”标签创建lang_indicator。如：

<lang_indicator x="0" y="0" w="100%" h="100%" children_layout="default(c=2,r=2,m=5,s=5)">
</lang_indicator>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
lang_indicator_cast | 转换为lang_indicator对象(供脚本语言使用)。
lang_indicator_create | 创建lang_indicator对象
lang_indicator_set_image | 设置缺省获得焦点的子控件(可用控件名或类型)。

属性

属性名称 | 类型 | 说明
image | char* | 如果希望用图片格式显示，本属性用于指定图片的前缀。

lang_indicator_cast 函数

  • 函数功能：

转换为lang_indicator对象(供脚本语言使用)。

  • 函数原型：
widget_t* lang_indicator_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | lang_indicator对象。
widget | widget_t* | lang_indicator对象。

lang_indicator_create 函数

  • 函数功能：

创建lang_indicator对象

  • 函数原型：
widget_t* lang_indicator_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

lang_indicator_set_image 函数

  • 函数功能：

设置缺省获得焦点的子控件(可用控件名或类型)。

  • 函数原型：
ret_t lang_indicator_set_image (widget_t* widget, const char* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
image | const char* | 缺省获得焦点的子控件(可用控件名或类型)。

image 属性

如果希望用图片格式显示，本属性用于指定图片的前缀。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


lcd_draw_mode_t

概述

LCD绘制模式常量定义。

常量

名称 | 说明
LCD_DRAW_NORMAL | 正常绘制。
LCD_DRAW_ANIMATION | 绘制窗口动画，两个窗口无重叠。在该模式下，可以直接绘制到显存，不用绘制到framebuffer中。
LCD_DRAW_ANIMATION_OVERLAP | 绘制窗口动画，两个窗口有重叠。(目前无特殊用途)。
LCD_DRAW_SWAP | 如果lcd支持swap操作，在特殊情况下，可以使用该模式提速。
LCD_DRAW_OFFLINE | 离线模式绘制(仅适用于framebuffer)。在该模式下，绘制的内容不会显示出来，但可以用take_snapshot取出来，主要用于窗口动画。


lcd_fb_dirty_rects_t

概述

lcd fb脏矩形。

函数

函数名称 | 说明
lcd_fb_dirty_rects_add_fb_info | 添加新的 fb 信息
lcd_fb_dirty_rects_deinit | 清除 lcd_fb_dirty_rects_t 对象数据
lcd_fb_dirty_rects_get_dirty_rects_by_fb | 根据 fb 来获取脏矩形对象
lcd_fb_dirty_rects_init | 初始化 lcd_fb_dirty_rects_t 对象
lcd_fb_dirty_rects_reinit | 修改 lcd_fb_dirty_rects_t 对象的宽高
lcd_fb_dirty_rects_reset_dirty_rects_by_fb | 清除对应 fb 的脏矩形列表。
lcd_fb_dirty_rects_update_all_fb_dirty_rect | 把当前脏矩形合并到所有 fb 的脏矩形中。
lcd_fb_dirty_rects_update_all_fb_dirty_rects | 把当前脏矩形列表合并到所有 fb 的脏矩形中。

lcd_fb_dirty_rects_add_fb_info 函数

  • 函数功能：

添加新的 fb 信息 如果已经存在的话，就不会重新添加

  • 函数原型：
ret_t lcd_fb_dirty_rects_add_fb_info (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, uint8_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
fb | uint8_t* | fb 地址。

lcd_fb_dirty_rects_deinit 函数

  • 函数功能：

清除 lcd_fb_dirty_rects_t 对象数据

  • 函数原型：
ret_t lcd_fb_dirty_rects_deinit (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。

lcd_fb_dirty_rects_get_dirty_rects_by_fb 函数

  • 函数功能：

根据 fb 来获取脏矩形对象

  • 函数原型：
const dirty_rects_t* lcd_fb_dirty_rects_get_dirty_rects_by_fb (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, uint8_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const dirty_rects_t* | 成功返回脏矩形对象，失败返回 NULL。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
fb | uint8_t* | fb 地址。

lcd_fb_dirty_rects_init 函数

  • 函数功能：

初始化 lcd_fb_dirty_rects_t 对象

  • 函数原型：
ret_t lcd_fb_dirty_rects_init (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, wh_t lcd_w, wh_t lcd_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
lcd_w | wh_t | lcd 的宽。
lcd_h | wh_t | lcd 的高。

lcd_fb_dirty_rects_reinit 函数

  • 函数功能：

修改 lcd_fb_dirty_rects_t 对象的宽高

  • 函数原型：
ret_t lcd_fb_dirty_rects_reinit (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, wh_t lcd_w, wh_t lcd_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
lcd_w | wh_t | lcd 的宽。
lcd_h | wh_t | lcd 的高。

lcd_fb_dirty_rects_reset_dirty_rects_by_fb 函数

  • 函数功能：

清除对应 fb 的脏矩形列表。

  • 函数原型：
ret_t lcd_fb_dirty_rects_reset_dirty_rects_by_fb (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, uint8_t* fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
fb | uint8_t* | fb 地址。

lcd_fb_dirty_rects_update_all_fb_dirty_rect 函数

  • 函数功能：

把当前脏矩形合并到所有 fb 的脏矩形中。

  • 函数原型：
ret_t lcd_fb_dirty_rects_update_all_fb_dirty_rect (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, const rect_t* dirty_rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
dirty_rect | const rect_t* | 当前脏矩形。

lcd_fb_dirty_rects_update_all_fb_dirty_rects 函数

  • 函数功能：

把当前脏矩形列表合并到所有 fb 的脏矩形中。

  • 函数原型：
ret_t lcd_fb_dirty_rects_update_all_fb_dirty_rects (lcd_fb_dirty_rects_t* lcd_fb_dirty_rects, const dirty_rects_t* dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd_fb_dirty_rects | lcd_fb_dirty_rects_t* | lcd_fb_dirty_rects_t对象。
dirty_rects | const dirty_rects_t* | 当前脏矩形列表。


lcd_mem_bgr565_t

概述

函数

函数名称 | 说明
lcd_mem_bgr565_create | 创建lcd对象。
lcd_mem_bgr565_create_double_fb | 创建double fb lcd对象。
lcd_mem_bgr565_create_single_fb | 创建single fb lcd对象。
lcd_mem_bgr565_create_three_fb | 创建three fb lcd对象。
lcd_mem_bgr565_init | 创建lcd对象。

lcd_mem_bgr565_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr565_create (wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。

lcd_mem_bgr565_create_double_fb 函数

  • 函数功能：

创建double fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr565_create_double_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。

lcd_mem_bgr565_create_single_fb 函数

  • 函数功能：

创建single fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr565_create_single_fb (wh_t w, wh_t h, uint8_t* fbuff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fbuff | uint8_t* | 帧率缓冲区。

lcd_mem_bgr565_create_three_fb 函数

  • 函数功能：

创建three fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr565_create_three_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。
next_fb | uint8_t* | 待显示的帧率缓冲区。

lcd_mem_bgr565_init 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr565_init (lcd_mem_t* lcd, wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
lcd | lcd_mem_t* | 对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。


lcd_mem_bgr888_t

概述

函数

函数名称 | 说明
lcd_mem_bgr888_create | 创建lcd对象。
lcd_mem_bgr888_create_double_fb | 创建double fb lcd对象。
lcd_mem_bgr888_create_single_fb | 创建single fb lcd对象。
lcd_mem_bgr888_create_three_fb | 创建three fb lcd对象。
lcd_mem_bgr888_init | 创建lcd对象。

lcd_mem_bgr888_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr888_create (wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。

lcd_mem_bgr888_create_double_fb 函数

  • 函数功能：

创建double fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr888_create_double_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。

lcd_mem_bgr888_create_single_fb 函数

  • 函数功能：

创建single fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr888_create_single_fb (wh_t w, wh_t h, uint8_t* fbuff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fbuff | uint8_t* | 帧率缓冲区。

lcd_mem_bgr888_create_three_fb 函数

  • 函数功能：

创建three fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr888_create_three_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。
next_fb | uint8_t* | 待显示的帧率缓冲区。

lcd_mem_bgr888_init 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgr888_init (lcd_mem_t* lcd, wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
lcd | lcd_mem_t* | 对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。


lcd_mem_bgra8888_t

概述

函数

函数名称 | 说明
lcd_mem_bgra8888_create | 创建lcd对象。
lcd_mem_bgra8888_create_double_fb | 创建double fb lcd对象。
lcd_mem_bgra8888_create_single_fb | 创建single fb lcd对象。
lcd_mem_bgra8888_create_three_fb | 创建three fb lcd对象。
lcd_mem_bgra8888_init | 创建lcd对象。

lcd_mem_bgra8888_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgra8888_create (wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。

lcd_mem_bgra8888_create_double_fb 函数

  • 函数功能：

创建double fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgra8888_create_double_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。

lcd_mem_bgra8888_create_single_fb 函数

  • 函数功能：

创建single fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgra8888_create_single_fb (wh_t w, wh_t h, uint8_t* fbuff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fbuff | uint8_t* | 帧率缓冲区。

lcd_mem_bgra8888_create_three_fb 函数

  • 函数功能：

创建three fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgra8888_create_three_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。
next_fb | uint8_t* | 待显示的帧率缓冲区。

lcd_mem_bgra8888_init 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_bgra8888_init (lcd_mem_t* lcd, wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
lcd | lcd_mem_t* | 对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。


lcd_mem_fragment_t

概述

片段的LCD。

在一些低端平台没有足够的内存提供一个完整的framebuffer，此时我们用一小块内存模拟framebuffer， 每次只画屏幕上一小块。这样可以有些避免屏幕闪烁的问题。

函数

函数名称 | 说明
lcd_mem_fragment_create | 创建lcd对象。
lcd_mem_fragment_get_buff | 获取framebuffer的地址。

lcd_mem_fragment_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_fragment_create (wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。

lcd_mem_fragment_get_buff 函数

  • 函数功能：

获取framebuffer的地址。

  • 函数原型：
uint8_t* lcd_mem_fragment_get_buff (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回framebuffer的地址。
lcd | lcd_t* | lcd对象。


lcd_mem_rgb565_t

概述

函数

函数名称 | 说明
lcd_mem_rgb565_create | 创建lcd对象。
lcd_mem_rgb565_create_double_fb | 创建double fb lcd对象。
lcd_mem_rgb565_create_single_fb | 创建single fb lcd对象。
lcd_mem_rgb565_create_three_fb | 创建three fb lcd对象。
lcd_mem_rgb565_init | 创建lcd对象。

lcd_mem_rgb565_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb565_create (wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。

lcd_mem_rgb565_create_double_fb 函数

  • 函数功能：

创建double fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb565_create_double_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。

lcd_mem_rgb565_create_single_fb 函数

  • 函数功能：

创建single fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb565_create_single_fb (wh_t w, wh_t h, uint8_t* fbuff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fbuff | uint8_t* | 帧率缓冲区。

lcd_mem_rgb565_create_three_fb 函数

  • 函数功能：

创建three fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb565_create_three_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。
next_fb | uint8_t* | 待显示的帧率缓冲区。

lcd_mem_rgb565_init 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb565_init (lcd_mem_t* lcd, wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
lcd | lcd_mem_t* | 对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。


lcd_mem_rgb888_t

概述

函数

函数名称 | 说明
lcd_mem_rgb888_create | 创建lcd对象。
lcd_mem_rgb888_create_double_fb | 创建double fb lcd对象。
lcd_mem_rgb888_create_single_fb | 创建single fb lcd对象。
lcd_mem_rgb888_create_three_fb | 创建three fb lcd对象。
lcd_mem_rgb888_init | 创建lcd对象。

lcd_mem_rgb888_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb888_create (wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。

lcd_mem_rgb888_create_double_fb 函数

  • 函数功能：

创建double fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb888_create_double_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。

lcd_mem_rgb888_create_single_fb 函数

  • 函数功能：

创建single fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb888_create_single_fb (wh_t w, wh_t h, uint8_t* fbuff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fbuff | uint8_t* | 帧率缓冲区。

lcd_mem_rgb888_create_three_fb 函数

  • 函数功能：

创建three fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb888_create_three_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。
next_fb | uint8_t* | 待显示的帧率缓冲区。

lcd_mem_rgb888_init 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgb888_init (lcd_mem_t* lcd, wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
lcd | lcd_mem_t* | 对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。


lcd_mem_rgba8888_t

概述

函数

函数名称 | 说明
lcd_mem_rgba8888_create | 创建lcd对象。
lcd_mem_rgba8888_create_double_fb | 创建double fb lcd对象。
lcd_mem_rgba8888_create_single_fb | 创建single fb lcd对象。
lcd_mem_rgba8888_create_three_fb | 创建three fb lcd对象。
lcd_mem_rgba8888_init | 创建lcd对象。

lcd_mem_rgba8888_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgba8888_create (wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。

lcd_mem_rgba8888_create_double_fb 函数

  • 函数功能：

创建double fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgba8888_create_double_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。

lcd_mem_rgba8888_create_single_fb 函数

  • 函数功能：

创建single fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgba8888_create_single_fb (wh_t w, wh_t h, uint8_t* fbuff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fbuff | uint8_t* | 帧率缓冲区。

lcd_mem_rgba8888_create_three_fb 函数

  • 函数功能：

创建three fb lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgba8888_create_three_fb (wh_t w, wh_t h, uint8_t* online_fb, uint8_t* offline_fb, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
online_fb | uint8_t* | 在线帧率缓冲区。
offline_fb | uint8_t* | 离线帧率缓冲区。
next_fb | uint8_t* | 待显示的帧率缓冲区。

lcd_mem_rgba8888_init 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_rgba8888_init (lcd_mem_t* lcd, wh_t w, wh_t h, bool_t alloc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
lcd | lcd_mem_t* | 对象。
w | wh_t | 宽度。
h | wh_t | 高度。
alloc | bool_t | 是否分配内存。


lcd_mem_special_t

概述

特殊的LCD。

通过重载flush函数来提交GUI绘制的结果到硬件。适用于：

  • lcd 硬件不支持framebuffer，如SPI接口的屏。
  • lcd 硬件支持framebuffer，但是其格式特殊，AWTK目前不支持。可以用flush进行格式转换。

函数

函数名称 | 说明
lcd_mem_deinit | 清除 lcd_mem 对象中的数据
lcd_mem_get_next_fb | 获取 lcd_mem 对象中的 next_fb
lcd_mem_get_offline_fb | 获取 lcd_mem 对象中的 offline_fb
lcd_mem_get_online_fb | 获取 lcd_mem 对象中的 online_fb
lcd_mem_set_next_fb | 设置 lcd_mem 对象中的 next_fb
lcd_mem_set_offline_fb | 设置 lcd_mem 对象中的 offline_fb
lcd_mem_set_online_fb | 设置 lcd_mem 对象中的 online_fb
lcd_mem_set_wait_vbi | 设置等待VBI事件到来的回调函数。
lcd_mem_special_create | 创建lcd对象。

lcd_mem_deinit 函数

  • 函数功能：

清除 lcd_mem 对象中的数据

  • 函数原型：
ret_t lcd_mem_deinit (lcd_mem_t* mem);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mem | lcd_mem_t* | lcd_mem 对象。

lcd_mem_get_next_fb 函数

  • 函数功能：

获取 lcd_mem 对象中的 next_fb

  • 函数原型：
uint8_t* lcd_mem_get_next_fb (lcd_mem_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回 next_fb 地址。
lcd | lcd_mem_t* | lcd_mem 对象。

lcd_mem_get_offline_fb 函数

  • 函数功能：

获取 lcd_mem 对象中的 offline_fb

  • 函数原型：
uint8_t* lcd_mem_get_offline_fb (lcd_mem_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回 offline_fb 地址。
lcd | lcd_mem_t* | lcd_mem 对象。

lcd_mem_get_online_fb 函数

  • 函数功能：

获取 lcd_mem 对象中的 online_fb

  • 函数原型：
uint8_t* lcd_mem_get_online_fb (lcd_mem_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回 online_fb 地址。
lcd | lcd_mem_t* | lcd_mem 对象。

lcd_mem_set_next_fb 函数

  • 函数功能：

设置 lcd_mem 对象中的 next_fb

  • 函数原型：
ret_t lcd_mem_set_next_fb (lcd_mem_t* lcd, uint8_t* next_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_mem_t* | lcd_mem 对象。
next_fb | uint8_t* | next_fb 地址。

lcd_mem_set_offline_fb 函数

  • 函数功能：

设置 lcd_mem 对象中的 offline_fb

  • 函数原型：
ret_t lcd_mem_set_offline_fb (lcd_mem_t* lcd, uint8_t* offline_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_mem_t* | lcd_mem 对象。
offline_fb | uint8_t* | offline_fb 地址。

lcd_mem_set_online_fb 函数

  • 函数功能：

设置 lcd_mem 对象中的 online_fb

  • 函数原型：
ret_t lcd_mem_set_online_fb (lcd_mem_t* lcd, uint8_t* online_fb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_mem_t* | lcd_mem 对象。
online_fb | uint8_t* | online_fb 地址。

lcd_mem_set_wait_vbi 函数

  • 函数功能：

设置等待VBI事件到来的回调函数。 VBI: vertical blank interrupt。用于2fb等待当前显示完成，以便把下一帧的数据从offline fb拷贝到online fb，从而避免因为同时访问online fb数据造成闪烁。

  • 函数原型：
ret_t lcd_mem_set_wait_vbi (lcd_t* lcd, lcd_mem_wait_vbi_t wait_vbi, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
wait_vbi | lcd_mem_wait_vbi_t | 回调函数。
ctx | void* | 回调函数的上下文。

lcd_mem_special_create 函数

  • 函数功能：

创建lcd对象。

  • 函数原型：
lcd_t* lcd_mem_special_create (wh_t w, wh_t h, bitmap_format_t fmt, lcd_flush_t on_flush, lcd_resize_t on_resize, lcd_destroy_t on_destroy, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | 返回lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
fmt | bitmap_format_t | 离线lcd的格式。一般用 BITMAP_FMT_BGR565 或 BITMAP_FMT_RGBA8888。
on_flush | lcd_flush_t | 回调函数，用于刷新GUI数据到实际的LCD。
on_resize | lcd_resize_t | 用于调整LCD的大小。一般用NULL即可。
on_destroy | lcd_destroy_t | lcd销毁时的回调函数。
ctx | void* | 回调函数的上下文。


lcd_mono_t

概述

单色LCD。

lcd_mono是一个特殊的Framebuffer，它用一个比特来表示一个pixel。

lcd_mono只是负责硬件无关的逻辑处理，调用者需要在创建时提供一个flush回调函数， 在flush函数中把脏矩形中的数据刷新到硬件中。

函数

函数名称 | 说明
lcd_mono_create | 创建单色LCD对象。

属性

属性名称 | 类型 | 说明
data | uint8_t* | Framebuffer首地址。

lcd_mono_create 函数

  • 函数功能：

创建单色LCD对象。

  • 函数原型：
lcd_t* lcd_mono_create (wh_t w, wh_t h, lcd_flush_t flush, lcd_destroy_t on_destroy, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_t* | lcd对象。
w | wh_t | 宽度。
h | wh_t | 高度。
flush | lcd_flush_t | 用于刷新数据到硬件的回调函数。
on_destroy | lcd_destroy_t | 销毁lcd时的回调函数。
ctx | void* | flush/on_destroy回调函数的上下文。

data 属性

Framebuffer首地址。

  • 类型：uint8_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


lcd_orientation_t

概述

LCD旋转角度。

常量

名称 | 说明
LCD_ORIENTATION_0 | LCD没有旋转。
LCD_ORIENTATION_90 | LCD旋转90度。
LCD_ORIENTATION_180 | LCD旋转180度。
LCD_ORIENTATION_270 | LCD旋转270度。


lcd_profile_t

概述

对现有LCD对象进行包装，实现对各个函数的时间统计，用于辅助定位性能瓶颈。


lcd_t

概述

显示设备抽象基类。

函数

函数名称 | 说明
lcd_begin_frame | 准备绘制。
lcd_clear_rect | 填充实心矩形。
lcd_destroy | 销毁lcd对象。
lcd_draw_glyph | 绘制字符。如果实现了measure_text/draw_text则不需要实现本函数。
lcd_draw_hline | 绘制一条水平线。
lcd_draw_image | 绘制图片。
lcd_draw_image_matrix | 绘制图片。
lcd_draw_points | 绘制一组点。
lcd_draw_text | 绘制字符。
lcd_draw_vline | 绘制一条垂直线。
lcd_end_frame | 完成绘制，同步到显示设备。
lcd_fill_rect | 绘制实心矩形。
lcd_get_clip_rect | 获取裁剪区域。
lcd_get_desired_bitmap_format | 获取期望的位图格式。绘制期望的位图格式可以提高绘制性能。
lcd_get_dirty_rect | 获取 lcd 对象的脏矩形。
lcd_get_dirty_rects | 获取 lcd 对象的脏矩形列表。
lcd_get_height | 获取高度。
lcd_get_physical_height | 获取真实物理高度。
lcd_get_physical_width | 获取真实物理宽度。
lcd_get_point_color | 获取指定点的颜色，对于基于非FrameBuffer的LCD，返回当前的fill_color。
lcd_get_text_metrics | 获取当前字体的度量信息。
lcd_get_type | 获取 lcd 类型。
lcd_get_vgcanvas | 获取矢量图canvas。
lcd_get_width | 获取宽度。
lcd_is_support_dirty_rect | 获取 lcd 对象是否支持脏矩形。
lcd_is_swappable | 判读lcd是否支持swap。
lcd_measure_text | 测量字符串占用的宽度。
lcd_resize | 基于SDL的PC软件，在SDL窗口resize时，需要调用本函数resize lcd。
lcd_set_clip_rect | 设置裁剪区域。
lcd_set_fill_color | 设置填充颜色。
lcd_set_font_name | 设置字体名称。
lcd_set_font_size | 设置字体大小。
lcd_set_global_alpha | 设置全局alpha。
lcd_set_line_length | 设置 line_length 。
lcd_set_stroke_color | 设置线条颜色。
lcd_set_text_color | 设置文本颜色。
lcd_set_vgcanvas | 设置 vgcanvas。
lcd_stroke_rect | 绘制矩形边框。

属性

属性名称 | 类型 | 说明
draw_mode | lcd_draw_mode_t | 绘制模式。
fill_color | color_t | 填充颜色
font_name | char* | 字体名称。
font_size | uint32_t | 字体大小。
global_alpha | uint8_t | 全局alpha
h | wh_t | 屏幕的高度
last_update_time | uint64_t | last update time
ratio | float_t | 屏幕密度。
stroke_color | color_t | 线条颜色
support_dirty_rect | bool_t | 是否支持脏矩形。
text_color | color_t | 文本颜色
type | lcd_type_t | LCD的类型。
w | wh_t | 屏幕的宽度

lcd_begin_frame 函数

  • 函数功能：

准备绘制。

  • 函数原型：
ret_t lcd_begin_frame (lcd_t* lcd, const dirty_rects_t* dirty_rects, lcd_draw_mode_t draw_mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
dirty_rects | const dirty_rects_t* | 需要绘制的区域。
draw_mode | lcd_draw_mode_t | 绘制模式，如果可能，直接画到显存而不是离线的framebuffer。

lcd_clear_rect 函数

  • 函数功能：

填充实心矩形。

  • 函数原型：
ret_t lcd_clear_rect (lcd_t* lcd, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

lcd_destroy 函数

  • 函数功能：

销毁lcd对象。

  • 函数原型：
ret_t lcd_destroy (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。

lcd_draw_glyph 函数

  • 函数功能：

绘制字符。如果实现了measure_text/draw_text则不需要实现本函数。

  • 函数原型：
ret_t lcd_draw_glyph (lcd_t* lcd, glyph_t* glyph, const rect_t* src, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
glyph | glyph_t* | 字模
src | const rect_t* | 只绘制指定区域的部分。
x | xy_t | x坐标。
y | xy_t | y坐标。

lcd_draw_hline 函数

  • 函数功能：

绘制一条水平线。

  • 函数原型：
ret_t lcd_draw_hline (lcd_t* lcd, xy_t x, xy_t y, wh_t w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 直线宽度。

lcd_draw_image 函数

  • 函数功能：

绘制图片。

  • 函数原型：
ret_t lcd_draw_image (lcd_t* lcd, bitmap_t* img, const rectf_t* src, const rectf_t* dst);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
img | bitmap_t* | 图片。
src | const rectf_t* | 只绘制指定区域的部分。
dst | const rectf_t* | 绘制到目标区域。

lcd_draw_image_matrix 函数

  • 函数功能：

绘制图片。

  • 函数原型：
ret_t lcd_draw_image_matrix (lcd_t* lcd, draw_image_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
info | draw_image_info_t* | 绘制参数。

lcd_draw_points 函数

  • 函数功能：

绘制一组点。

  • 函数原型：
ret_t lcd_draw_points (lcd_t* lcd, point_t* points, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
points | point_t* | 要绘制的点集合。
nr | uint32_t | 点的个数。

lcd_draw_text 函数

  • 函数功能：

绘制字符。

  • 函数原型：
ret_t lcd_draw_text (lcd_t* lcd, const wchar_t* str, uint32_t nr, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
str | const wchar_t* | 字符串。
nr | uint32_t | 字符数。
x | xy_t | x坐标。
y | xy_t | y坐标。

lcd_draw_vline 函数

  • 函数功能：

绘制一条垂直线。

  • 函数原型：
ret_t lcd_draw_vline (lcd_t* lcd, xy_t x, xy_t y, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
h | wh_t | 直线高度。

lcd_end_frame 函数

  • 函数功能：

完成绘制，同步到显示设备。

  • 函数原型：
ret_t lcd_end_frame (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。

lcd_fill_rect 函数

  • 函数功能：

绘制实心矩形。

  • 函数原型：
ret_t lcd_fill_rect (lcd_t* lcd, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

lcd_get_clip_rect 函数

  • 函数功能：

获取裁剪区域。

  • 函数原型：
ret_t lcd_get_clip_rect (lcd_t* lcd, rect_t* rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
rect | rect_t* | 裁剪区域。

lcd_get_desired_bitmap_format 函数

  • 函数功能：

获取期望的位图格式。绘制期望的位图格式可以提高绘制性能。

  • 函数原型：
bitmap_format_t lcd_get_desired_bitmap_format (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_format_t | 返回期望的位图格式。
lcd | lcd_t* | lcd对象。

lcd_get_dirty_rect 函数

  • 函数功能：

获取 lcd 对象的脏矩形。

  • 函数原型：
ret_t lcd_get_dirty_rect (lcd_t* lcd, rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
r | rect_t* | 返回脏矩形。

lcd_get_dirty_rects 函数

  • 函数功能：

获取 lcd 对象的脏矩形列表。

  • 函数原型：
const dirty_rects_t* lcd_get_dirty_rects (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const dirty_rects_t* | 成功返回脏矩形列表，失败返回 NULL。
lcd | lcd_t* | lcd对象。

lcd_get_height 函数

  • 函数功能：

获取高度。

  • 函数原型：
wh_t lcd_get_height (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回高度。
lcd | lcd_t* | lcd对象。

lcd_get_physical_height 函数

  • 函数功能：

获取真实物理高度。

  • 函数原型：
wh_t lcd_get_physical_height (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回真实物理高度。
lcd | lcd_t* | lcd对象。

lcd_get_physical_width 函数

  • 函数功能：

获取真实物理宽度。

  • 函数原型：
wh_t lcd_get_physical_width (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回真实物理宽度。
lcd | lcd_t* | lcd对象。

lcd_get_point_color 函数

  • 函数功能：

获取指定点的颜色，对于基于非FrameBuffer的LCD，返回当前的fill_color。

  • 函数原型：
color_t lcd_get_point_color (lcd_t* lcd, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
x | xy_t | x坐标。
y | xy_t | y坐标。

lcd_get_text_metrics 函数

  • 函数功能：

获取当前字体的度量信息。

  • 函数原型：
ret_t lcd_get_text_metrics (lcd_t* lcd, float_t* ascent, float_t* descent, float_t* line_hight);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
ascent | float_t* | 用于返回ascent。
descent | float_t* | 用于返回descent。
line_hight | float_t* | 用于返回line height。

lcd_get_type 函数

  • 函数功能：

获取 lcd 类型。

  • 函数原型：
lcd_type_t lcd_get_type (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | lcd_type_t | 返回 lcd_type。
lcd | lcd_t* | lcd对象。

lcd_get_vgcanvas 函数

  • 函数功能：

获取矢量图canvas。

  • 函数原型：
vgcanvas_t* lcd_get_vgcanvas (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vgcanvas_t* | 返回矢量图canvas。
lcd | lcd_t* | lcd对象。

lcd_get_width 函数

  • 函数功能：

获取宽度。

  • 函数原型：
wh_t lcd_get_width (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回宽度。
lcd | lcd_t* | lcd对象。

lcd_is_support_dirty_rect 函数

  • 函数功能：

获取 lcd 对象是否支持脏矩形。

  • 函数原型：
bool_t lcd_is_support_dirty_rect (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示支持，否则表示不支持。
lcd | lcd_t* | lcd对象。

lcd_is_swappable 函数

  • 函数功能：

判读lcd是否支持swap。

  • 函数原型：
bool_t lcd_is_swappable (lcd_t* lcd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回是否支持swap。
lcd | lcd_t* | lcd对象。

lcd_measure_text 函数

  • 函数功能：

测量字符串占用的宽度。

  • 函数原型：
float_t lcd_measure_text (lcd_t* lcd, const wchar_t* str, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回字符串占用的宽度。
lcd | lcd_t* | lcd对象。
str | const wchar_t* | 字符串。
nr | uint32_t | 字符数。

lcd_resize 函数

  • 函数功能：

基于SDL的PC软件，在SDL窗口resize时，需要调用本函数resize lcd。 屏幕旋转时会调用本函数，调整LCD的大小。

  • 函数原型：
ret_t lcd_resize (lcd_t* lcd, wh_t w, wh_t h, uint32_t line_length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
w | wh_t | 新的宽度。
h | wh_t | 新的高度。
line_length | uint32_t | line_length。

lcd_set_clip_rect 函数

  • 函数功能：

设置裁剪区域。

  • 函数原型：
ret_t lcd_set_clip_rect (lcd_t* lcd, const rect_t* rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
rect | const rect_t* | 裁剪区域。

lcd_set_fill_color 函数

  • 函数功能：

设置填充颜色。

  • 函数原型：
ret_t lcd_set_fill_color (lcd_t* lcd, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
color | color_t | 颜色。

lcd_set_font_name 函数

  • 函数功能：

设置字体名称。

  • 函数原型：
ret_t lcd_set_font_name (lcd_t* lcd, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
name | const char* | 字体名称。

lcd_set_font_size 函数

  • 函数功能：

设置字体大小。

  • 函数原型：
ret_t lcd_set_font_size (lcd_t* lcd, uint32_t font_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
font_size | uint32_t | 字体大小。

lcd_set_global_alpha 函数

  • 函数功能：

设置全局alpha。

  • 函数原型：
ret_t lcd_set_global_alpha (lcd_t* lcd, uint8_t alpha);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
alpha | uint8_t | 全局alpha。

lcd_set_line_length 函数

  • 函数功能：

设置 line_length 。

  • 函数原型：
ret_t lcd_set_line_length (lcd_t* lcd, uint32_t line_length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
line_length | uint32_t | 一行的字节长度。

lcd_set_stroke_color 函数

  • 函数功能：

设置线条颜色。

  • 函数原型：
ret_t lcd_set_stroke_color (lcd_t* lcd, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
color | color_t | 颜色。

lcd_set_text_color 函数

  • 函数功能：

设置文本颜色。

  • 函数原型：
ret_t lcd_set_text_color (lcd_t* lcd, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
color | color_t | 颜色。

lcd_set_vgcanvas 函数

  • 函数功能：

设置 vgcanvas。

  • 函数原型：
ret_t lcd_set_vgcanvas (lcd_t* lcd, vgcanvas_t* vgcanvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
vgcanvas | vgcanvas_t* | vgcanvas对象。

lcd_stroke_rect 函数

  • 函数功能：

绘制矩形边框。

  • 函数原型：
ret_t lcd_stroke_rect (lcd_t* lcd, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
lcd | lcd_t* | lcd对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

draw_mode 属性

绘制模式。

  • 类型：lcd_draw_mode_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

fill_color 属性

填充颜色

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font_name 属性

字体名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font_size 属性

字体大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

global_alpha 属性

全局alpha

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

h 属性

屏幕的高度

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

last_update_time 属性

last update time

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ratio 属性

屏幕密度。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

stroke_color 属性

线条颜色

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

support_dirty_rect 属性

是否支持脏矩形。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

text_color 属性

文本颜色

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

type 属性

LCD的类型。

  • 类型：lcd_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

w 属性

屏幕的宽度

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


lcd_type_t

概述

LCD类型常量定义。

常量

名称 | 说明
LCD_FRAMEBUFFER | 基于FrameBuffer的LCD。
LCD_REGISTER | 基于寄存器的LCD。
LCD_VGCANVAS | 基于VGCANVS的LCD。仅在支持OpenGL时，用nanovg实现。
LCD_MONO | 单色LCD。
LCD_CLUT | 颜色表 LCD。
LCD_COMPOSITOR | 复合LCD。用于同时使用多个 LCD 的情况


line_break_check

概述

换行相关函数。

函数

函数名称 | 说明
line_break | 解析字符串，对于每一行调用on_line函数。
line_break_check | 检查两个字符之间是否允许换行。
line_break_count | 统计行数。
word_break_check | 检查两个字符之间是否允许单词分割。

line_break 函数

  • 函数功能：

解析字符串，对于每一行调用on_line函数。

  • 函数原型：
ret_t line_break (const wchar_t* str, line_break_on_line_t on_line, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | const wchar_t* | 字符串。
on_line | line_break_on_line_t | 回调函数。
ctx | void* | 回调函数的上下文。

line_break_check 函数

  • 函数功能：

检查两个字符之间是否允许换行。

  • 函数原型：
line_break_type_t line_break_check (wchar_t c1, wchar_t c2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | line_break_type_t | 返回类型。
c1 | wchar_t | 前面的字符。
c2 | wchar_t | 后面的字符。

line_break_count 函数

  • 函数功能：

统计行数。

  • 函数原型：
uint32_t line_break_count (const wchar_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回行数。
str | const wchar_t* | 字符串。

word_break_check 函数

  • 函数功能：

检查两个字符之间是否允许单词分割。

  • 函数原型：
line_break_type_t word_break_check (wchar_t c1, wchar_t c2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | line_break_type_t | 返回类型。
c1 | wchar_t | 前面的字符。
c2 | wchar_t | 后面的字符。


line_break_type_t

概述

换行类型。

常量

名称 | 说明
LINE_BREAK_MUST | 必须换行。
LINE_BREAK_ALLOW | 可以换行。
LINE_BREAK_NO | 不可以换行。


line_number_t

概述

行号。多行编辑器的行号。

line_number_t是widget_t的子类控件，widget_t的函数均适用于line_number_t控件。

在xml中使用”lin\e_number”标签创建行号控件，一般配合mledit使用。如：

<mledit x="c" y="10" h="40%" w="90%" focus="true" left_margin="36" right_margin="16"
wrap_word="true">
<line_number x="0" y="0" w="32" h="100%" value="0"/>
<scroll_bar_d x="right" y="0" w="14" h="100%" value="0"/>
</mledit>

更多用法请参考：mledit.xml

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<line_number>
<style name="default">
<normal text_color="black" bg_color="#d0d0d0" text_align_h="right"/>
</style>
</line_number>

更多用法请参考： theme default

函数

函数名称 | 说明
line_number_add_highlight_line | 增加高亮行。
line_number_cast | 转换为line_number对象(供脚本语言使用)。
line_number_clear_highlight | 清除高亮行。
line_number_create | 创建line_number对象
line_number_get_widget_vtable | 获取 line_number 虚表。
line_number_is_highlight_line | 判断指定行是否是高亮行。
line_number_set_active_line | 设置active行。
line_number_set_bottom_margin | 设置顶部边距。
line_number_set_line_height | 设置行高。
line_number_set_lines_of_each_row | 设置每一个逻辑行(row)占几个物理行(line)。
line_number_set_top_margin | 设置顶部边距。
line_number_set_yoffset | 设置y偏移。

line_number_add_highlight_line 函数

  • 函数功能：

增加高亮行。

  • 函数原型：
ret_t line_number_add_highlight_line (widget_t* widget, int32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line | int32_t | 行号。

line_number_cast 函数

  • 函数功能：

转换为line_number对象(供脚本语言使用)。

  • 函数原型：
widget_t* line_number_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | line_number对象。
widget | widget_t* | line_number对象。

line_number_clear_highlight 函数

  • 函数功能：

清除高亮行。

  • 函数原型：
ret_t line_number_clear_highlight (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

line_number_create 函数

  • 函数功能：

创建line_number对象

  • 函数原型：
widget_t* line_number_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

line_number_get_widget_vtable 函数

  • 函数功能：

获取 line_number 虚表。

  • 函数原型：
const widget_vtable_t* line_number_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 line_number 虚表。

line_number_is_highlight_line 函数

  • 函数功能：

判断指定行是否是高亮行。

  • 函数原型：
bool_t line_number_is_highlight_line (widget_t* widget, int32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则不是。
widget | widget_t* | 控件对象。
line | int32_t | 行号。

line_number_set_active_line 函数

  • 函数功能：

设置active行。

  • 函数原型：
ret_t line_number_set_active_line (widget_t* widget, int32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line | int32_t | 行号。

line_number_set_bottom_margin 函数

  • 函数功能：

设置顶部边距。

  • 函数原型：
ret_t line_number_set_bottom_margin (widget_t* widget, int32_t bottom_margin);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
bottom_margin | int32_t | 顶部边距。

line_number_set_line_height 函数

  • 函数功能：

设置行高。

  • 函数原型：
ret_t line_number_set_line_height (widget_t* widget, int32_t line_height);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line_height | int32_t | 行高。

line_number_set_lines_of_each_row 函数

  • 函数功能：

设置每一个逻辑行(row)占几个物理行(line)。

  • 函数原型：
ret_t line_number_set_lines_of_each_row (widget_t* widget, const uint32_t* lines_of_each_row, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
lines_of_each_row | const uint32_t* | 每一个逻辑行占几个物理行。
len | uint32_t | 数组大小(逻辑行数)。

line_number_set_top_margin 函数

  • 函数功能：

设置顶部边距。

  • 函数原型：
ret_t line_number_set_top_margin (widget_t* widget, int32_t top_margin);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
top_margin | int32_t | 顶部边距。

line_number_set_yoffset 函数

  • 函数功能：

设置y偏移。

  • 函数原型：
ret_t line_number_set_yoffset (widget_t* widget, int32_t yoffset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
yoffset | int32_t | 行高。


list_item_seperator_t

概述

list_item_seperator。 用来模拟实现风琴控件(accordion)和属性页分组控件。

当前控件被点击时，显示/隐藏当前控件到下一个分隔符控件之间的控件。 list_item_seperator_t是widget_t的子类控件，widget_t的函数均适用于list_item_seperator_t控件。

在xml中使用”list_item_seperator”标签创建list_item_seperator。如：

<list_item_seperator radio="true" text="Group2" h="32"/>
<list_item style="empty" children_layout="default(r=1,c=0,ym=1)">
<label w="30%" text="ASCII"/>
<edit w="70%" text="" tips="ascii" input_type="ascii" focused="true" action_text="next"/>
</list_item>
<list_item style="empty" children_layout="default(r=1,c=0,ym=1)">
<label w="30%" text="Int"/>
<edit w="70%" text="" tips="int" input_type="int"/>
</list_item>

<list_item_seperator radio="true" text="Group3" h="32"/>
<list_item style="empty" children_layout="default(r=1,c=0,ym=1)">
<label w="30%" text="Float"/>
<edit w="70%" text="" tips="float" input_type="float"/>
</list_item>
<list_item style="empty" children_layout="default(r=1,c=0,ym=1)">
<label w="30%" text="UFloat"/>
<edit w="70%" text="" tips="unsigned float" input_type="ufloat"/>
</list_item>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<list_item_seperator text_color="black" bg_color="#e0e0e0">
<style name="default" icon_at="left">
<normal  icon="collapse" />
<pressed icon="collapse" />
<over    icon="collapse" text_color="green"/>
<focused icon="collapse" text_color="green"/>
<normal_of_checked icon="expand" text_color="blue"/>
<pressed_of_checked icon="expand" text_color="blue"/>
<over_of_checked icon="expand" text_color="green"/>
<focused_of_checked icon="expand" text_color="green"/>
</style>
</list_item_seperator>

函数

函数名称 | 说明
list_item_seperator_cast | 转换为list_item_seperator对象(供脚本语言使用)。
list_item_seperator_create | 创建list_item_seperator对象

list_item_seperator_cast 函数

  • 函数功能：

转换为list_item_seperator对象(供脚本语言使用)。

  • 函数原型：
widget_t* list_item_seperator_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | list_item_seperator对象。
widget | widget_t* | list_item_seperator对象。

list_item_seperator_create 函数

  • 函数功能：

创建list_item_seperator对象

  • 函数原型：
widget_t* list_item_seperator_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度


list_item_t

概述

列表项控件。

列表项控件是一个简单的容器控件，一般作为列表视图中滚动视图的子控件。

list_item_t是widget_t的子类控件，widget_t的函数均适用于list_item_t控件。

在xml中使用”list_item”标签创建列表项控件。如：

<list_view x="0"  y="30" w="100%" h="-80" item_height="60">
<scroll_view name="view" x="0"  y="0" w="100%" h="100%">
<list_item style="odd" children_layout="default(rows=1,cols=0)">
<image draw_type="icon" w="30" image="earth"/>
<label w="-30" text="1.Hello AWTK !">
<switch x="r:10" y="m" w="60" h="20"/>
</label>
</list_item>
...
</scroll_view>
</list_view>

更多用法请参考：list_view_m.xml

在c代码中使用函数list_item_create创建列表项控件。如：

widget_t* list_item = list_item_create(scroll_view, 0, 0, 0, 0);

列表项控件大小一般由列表控制，不需指定xywh参数。

可以用style来实现可点击或不可点击的效果。如：

<style name="odd_clickable" border_color="#a0a0a0"  border="bottom" text_color="black">
<normal     bg_color="#f5f5f5" />
<pressed    bg_color="#c0c0c0" />
<over       bg_color="#f5f5f5" />
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
list_item_cast | 转换为list_item对象(供脚本语言使用)。
list_item_create | 创建list_item对象
list_item_get_widget_vtable | 获取 list_item 虚表。

事件

事件名称 | 类型 | 说明
EVT_CLICK | pointer_event_t | 点击事件。

list_item_cast 函数

  • 函数功能：

转换为list_item对象(供脚本语言使用)。

  • 函数原型：
widget_t* list_item_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | list_item对象。
widget | widget_t* | list_item对象。

list_item_create 函数

  • 函数功能：

创建list_item对象

  • 函数原型：
widget_t* list_item_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

list_item_get_widget_vtable 函数

  • 函数功能：

获取 list_item 虚表。

  • 函数原型：
const widget_vtable_t* list_item_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 list_item 虚表。


list_view_h_t

概述

水平列表视图控件。

list_view_h_t是widget_t的子类控件，widget_t的函数均适用于list_view_h_t控件。

在xml中使用”list_view_h”标签创建水平列表视图控件。如：

<list_view_h x="center"  y="10" w="90%" h="100" item_width="200" spacing="5">
<scroll_view name="view" w="100%" h="100%">
<image style="border" draw_type="auto" image="1" text="1"/>
...
</scroll_view>
</list_view_h>

注意：列表项不是作为列表视图控件的直接子控件，而是作为滚动视图的子控件。

更多用法请参考：list_view_h.xml

在c代码中使用函数list_view_h_create创建水平列表视图控件。如：

widget_t* list_view = list_view_h_create(win, 0, 0, 0, 0);

用代码构造列表视图是比较繁琐的事情，最好用XML来构造。 如果需要动态修改，可以使用widget_clone来增加列表项，使用widget_remove_child来移出列表项。

可用通过style来设置控件的显示风格，如背景颜色和边框颜色等(一般情况不需要)。

函数

函数名称 | 说明
list_view_h_cast | 转换为list_view_h对象(供脚本语言使用)。
list_view_h_create | 创建list_view_h对象
list_view_h_get_widget_vtable | 获取 list_view_h 虚表。
list_view_h_set_item_width | 设置列表项的宽度。
list_view_h_set_spacing | 设置列表项的间距。

属性

属性名称 | 类型 | 说明
item_width | int32_t | 列表项的宽度。
spacing | int32_t | 间距。

list_view_h_cast 函数

  • 函数功能：

转换为list_view_h对象(供脚本语言使用)。

  • 函数原型：
widget_t* list_view_h_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | list_view_h对象。
widget | widget_t* | list_view_h对象。

list_view_h_create 函数

  • 函数功能：

创建list_view_h对象

  • 函数原型：
widget_t* list_view_h_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

list_view_h_get_widget_vtable 函数

  • 函数功能：

获取 list_view_h 虚表。

  • 函数原型：
const widget_vtable_t* list_view_h_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 list_view_h 虚表。

list_view_h_set_item_width 函数

  • 函数功能：

设置列表项的宽度。

  • 函数原型：
ret_t list_view_h_set_item_width (widget_t* widget, int32_t item_width);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
item_width | int32_t | 列表项的宽度。

list_view_h_set_spacing 函数

  • 函数功能：

设置列表项的间距。

  • 函数原型：
ret_t list_view_h_set_spacing (widget_t* widget, int32_t spacing);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
spacing | int32_t | 列表项的间距。

item_width 属性

列表项的宽度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

spacing 属性

间距。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


list_view_t

概述

列表视图控件。

列表视图控件是一个可以垂直滚动的列表控件。

如果不需要滚动，可以用view控件配置适当的layout参数作为列表控件。

列表视图中的列表项可以固定高度，也可以使用不同高度。请参考变高列表项

列表视图控件的中可以有滚动条，也可以没有滚动条。 可以使用移动设备风格的滚动条，也可以使用桌面风格的滚动条。

list_view_t是widget_t的子类控件，widget_t的函数均适用于list_view_t控件。

在xml中使用”list_view”标签创建列表视图控件。如：

<list_view x="0"  y="30" w="100%" h="-80" item_height="60">
<scroll_view name="view" x="0"  y="0" w="100%" h="100%">
<list_item style="odd" children_layout="default(rows=1,cols=0)">
<image draw_type="icon" w="30" image="earth"/>
<label w="-30" text="1.Hello AWTK !">
<switch x="r:10" y="m" w="60" h="20"/>
</label>
</list_item>
...
</scroll_view>
</list_view>

注意：列表项不是作为列表视图控件的直接子控件，而是作为滚动视图的子控件。

更多用法请参考：list_view_m.xml

在c代码中使用函数list_view_create创建列表视图控件。如：

widget_t* list_view = list_view_create(win, 0, 0, 0, 0);

用代码构造列表视图是比较繁琐的事情，最好用XML来构造。 如果需要动态修改，可以使用widget_clone来增加列表项，使用widget_remove_child来移出列表项。

可用通过style来设置控件的显示风格，如背景颜色和边框颜色等(一般情况不需要)。

备注：list_view 下的 scroll_view 控件不支持遍历所有子控件的效果。

下面是针对 scroll_bar_d （桌面版）有效果，scroll_bar_m（移动版）没有效果。 如果 floating_scroll_bar 属性为 TRUE 和 auto_hide_scroll_bar 属性为 TRUE，scroll_view 宽默认为 list_view 的 100% 宽，鼠标在 list_view 上滚动条才显示，不在的就自动隐藏，如果 scroll_view 的高比虚拟高要大的话，滚动条变成不可见，scroll_view 宽不会变。 如果 floating_scroll_bar 属性为 TRUE 和 auto_hide_scroll_bar 属性为 FALSE ，scroll_view 宽默认为 list_view 的 100% 宽，滚动条不隐藏，如果 scroll_view 的高比虚拟高要大的话，滚动条变成不可见，scroll_view 宽不会变。 如果 floating_scroll_bar 属性为 FALSE 和 auto_hide_scroll_bar 属性为 FALSE，如果 scroll_view 的高比虚拟高要大的话，滚动条变成不可用，scroll_view 宽不会变。 如果 floating_scroll_bar 属性为 FALSE 和 auto_hide_scroll_bar 属性为 TRUE，如果 scroll_view 的高比虚拟高要大的话，滚动条变成不可见，scroll_view 宽会合并原来滚动条的宽。

函数

函数名称 | 说明
list_view_cast | 转换为list_view对象(供脚本语言使用)。
list_view_create | 创建list_view对象
list_view_get_widget_vtable | 获取 list_view 虚表。
list_view_reinit | list_view重新初始化。
list_view_set_auto_hide_scroll_bar | 设置是否自动隐藏滚动条。
list_view_set_default_item_height | 设置列表项的缺省高度。
list_view_set_floating_scroll_bar | 设置滚动条是否悬浮在 scroll_view 上面。
list_view_set_item_height | 设置列表项的高度。

属性

属性名称 | 类型 | 说明
auto_hide_scroll_bar | bool_t | 如果不需要滚动条时，自动隐藏滚动条。
default_item_height | int32_t | 列表项的缺省高度。如果item_height <= 0 而且列表项自身的高度 <= 0，则使用缺省高度。
floating_scroll_bar | bool_t | 滚动条是否悬浮在 scroll_view 上面
item_height | int32_t | 列表项的高度。如果 item_height > 0，所有列表项使用固定高度，否则使用列表项自身的高度。

list_view_cast 函数

  • 函数功能：

转换为list_view对象(供脚本语言使用)。

  • 函数原型：
widget_t* list_view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | list_view对象。
widget | widget_t* | list_view对象。

list_view_create 函数

  • 函数功能：

创建list_view对象

  • 函数原型：
widget_t* list_view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

list_view_get_widget_vtable 函数

  • 函数功能：

获取 list_view 虚表。

  • 函数原型：
const widget_vtable_t* list_view_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 list_view 虚表。

list_view_reinit 函数

  • 函数功能：

list_view重新初始化。

  • 函数原型：
ret_t list_view_reinit (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | list_view对象。

list_view_set_auto_hide_scroll_bar 函数

  • 函数功能：

设置是否自动隐藏滚动条。

  • 函数原型：
ret_t list_view_set_auto_hide_scroll_bar (widget_t* widget, bool_t auto_hide_scroll_bar);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
auto_hide_scroll_bar | bool_t | 是否自动隐藏滚动条。

list_view_set_default_item_height 函数

  • 函数功能：

设置列表项的缺省高度。

  • 函数原型：
ret_t list_view_set_default_item_height (widget_t* widget, int32_t default_item_height);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
default_item_height | int32_t | 列表项的高度。

list_view_set_floating_scroll_bar 函数

  • 函数功能：

设置滚动条是否悬浮在 scroll_view 上面。

  • 函数原型：
ret_t list_view_set_floating_scroll_bar (widget_t* widget, bool_t floating_scroll_bar);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
floating_scroll_bar | bool_t | 滚动条是否悬浮在 scroll_view 上面。

list_view_set_item_height 函数

  • 函数功能：

设置列表项的高度。

  • 函数原型：
ret_t list_view_set_item_height (widget_t* widget, int32_t item_height);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
item_height | int32_t | 列表项的高度。

auto_hide_scroll_bar 属性

如果不需要滚动条时，自动隐藏滚动条。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

default_item_height 属性

列表项的缺省高度。如果item_height <= 0 而且列表项自身的高度 <= 0，则使用缺省高度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

floating_scroll_bar 属性

滚动条是否悬浮在 scroll_view 上面

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

item_height 属性

列表项的高度。如果 item_height > 0，所有列表项使用固定高度，否则使用列表项自身的高度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


locale_infos_t

概述

在某些情况下，需要多个资源管理器。比如在手表系统里，每个应用或表盘，可能放在独立的资源包中， 此时优先加载应用自己的资源，如果没有就加载系统的资源。

函数

函数名称 | 说明
locale_infos_change | 设置全部locale_info的当前国家和语言。
locale_infos_off | 注销指定事件的处理函数。
locale_infos_on | 注册指定事件的处理函数。
locale_infos_ref | 获取指定小应用程序(applet)的locale_info。
locale_infos_reload_all | 重新加载全部字符串资源。
locale_infos_unref | 释放指定小应用程序(applet)的locale_info。

locale_infos_change 函数

  • 函数功能：

设置全部locale_info的当前国家和语言。

  • 函数原型：
ret_t locale_infos_change (const char* language, const char* country);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
language | const char* | 语言。
country | const char* | 国家或地区。

locale_infos_off 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t locale_infos_off (uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
id | uint32_t | locale_infos_on返回的ID。

locale_infos_on 函数

  • 函数功能：

注册指定事件的处理函数。

  • 函数原型：
uint32_t locale_infos_on (event_type_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于locale_infos_off。
type | event_type_t | 事件类型，目前有EVT_LOCALE_INFOS_LOAD_INFO、EVT_LOCALE_INFOS_UNLOAD_INFO。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

locale_infos_ref 函数

  • 函数功能：

获取指定小应用程序(applet)的locale_info。

  • 函数原型：
locale_info_t* locale_infos_ref (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | locale_info_t* | 返回locale_info对象。
name | const char* | 小应用程序(applet)的名称。

locale_infos_reload_all 函数

  • 函数功能：

重新加载全部字符串资源。

  • 函数原型：
ret_t locale_infos_reload_all ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

locale_infos_unref 函数

  • 函数功能：

释放指定小应用程序(applet)的locale_info。

  • 函数原型：
ret_t locale_infos_unref (locale_info_t* locale_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。


locale_info_t

概述

本地化信息。提供字符串翻译数据管理，当前语言改变的事件通知等等。

函数

函数名称 | 说明
locale_info | 获取缺省locale_info。
locale_info_change | 设置当前的国家和语言。
locale_info_create | 创建locale_info。
locale_info_create_ex | 创建locale_info。
locale_info_destroy | 释放全部资源并销毁locale_info对象。
locale_info_off | 注销指定事件的处理函数。
locale_info_on | 注册指定事件的处理函数。
locale_info_reload | 重新加载字符串资源。
locale_info_set | 设置缺省locale_info。
locale_info_set_assets_manager | 设置资源管理器对象。
locale_info_set_custom_tr | 设置自定义的候补翻译函数。
locale_info_set_fallback_tr | 设置候补翻译函数。
locale_info_set_fallback_tr2 | 设置候补翻译函数。
locale_info_tr | 翻译字符串。

属性

属性名称 | 类型 | 说明
country | char* | 国家或地区。如：CN
language | char* | 语言。如：zh

locale_info 函数

  • 函数功能：

获取缺省locale_info。

  • 函数原型：
locale_info_t* locale_info ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | locale_info_t* | 返回locale_info对象。

locale_info_change 函数

  • 函数功能：

设置当前的国家和语言。

  • 函数原型：
ret_t locale_info_change (locale_info_t* locale_info, const char* language, const char* country);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。
language | const char* | 语言。
country | const char* | 国家或地区。

locale_info_create 函数

  • 函数功能：

创建locale_info。

  • 函数原型：
locale_info_t* locale_info_create (const char* language, const char* country);
  • 参数说明：
参数 | 类型 | 说明
返回值 | locale_info_t* | 返回locale_info对象。
language | const char* | 语言。
country | const char* | 国家或地区。

locale_info_create_ex 函数

  • 函数功能：

创建locale_info。

  • 函数原型：
locale_info_t* locale_info_create_ex (const char* language, const char* country, assets_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | locale_info_t* | 返回locale_info对象。
language | const char* | 语言。
country | const char* | 国家或地区。
am | assets_manager_t* | 资源管理器。

locale_info_destroy 函数

  • 函数功能：

释放全部资源并销毁locale_info对象。

  • 函数原型：
ret_t locale_info_destroy (locale_info_t* locale_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。

locale_info_off 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t locale_info_off (locale_info_t* locale_info, uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。
id | uint32_t | locale_info_on返回的ID。

locale_info_on 函数

  • 函数功能：

注册指定事件的处理函数。

  • 函数原型：
uint32_t locale_info_on (locale_info_t* locale_info, event_type_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于locale_info_off。
locale_info | locale_info_t* | locale_info对象。
type | event_type_t | 事件类型，目前固定为EVT_LOCALE_CHANGED。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

locale_info_reload 函数

  • 函数功能：

重新加载字符串资源。

  • 函数原型：
ret_t locale_info_reload (locale_info_t* locale_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。

locale_info_set 函数

  • 函数功能：

设置缺省locale_info。

  • 函数原型：
ret_t locale_info_set (locale_info_t* locale_info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。

locale_info_set_assets_manager 函数

  • 函数功能：

设置资源管理器对象。

  • 函数原型：
ret_t locale_info_set_assets_manager (locale_info_t* locale_info, assets_manager_t* assets_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。
assets_manager | assets_manager_t* | 资源管理器。

locale_info_set_custom_tr 函数

  • 函数功能：

设置自定义的候补翻译函数。 有时我们需要优先加载用户自定义的翻译，加载失败才加载系统缺省的，可用设置一个函数去实现这类功能。

  • 函数原型：
ret_t locale_info_set_custom_tr (locale_info_t* locale_info, locale_info_tr_with_context_t tr, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。
tr | locale_info_tr_with_context_t | 自定义的翻译函数。
ctx | void* | 翻译函数的上下文。

locale_info_set_fallback_tr 函数

  • 函数功能：

设置候补翻译函数。

  • 函数原型：
ret_t locale_info_set_fallback_tr (locale_info_t* locale_info, locale_info_tr_t tr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。
tr | locale_info_tr_t | fallback翻译函数。

locale_info_set_fallback_tr2 函数

  • 函数功能：

设置候补翻译函数。

  • 函数原型：
ret_t locale_info_set_fallback_tr2 (locale_info_t* locale_info, locale_info_tr_with_context_t tr, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
locale_info | locale_info_t* | locale_info对象。
tr | locale_info_tr_with_context_t | fallback翻译函数。
ctx | void* | 翻译函数的上下文。

locale_info_tr 函数

  • 函数功能：

翻译字符串。

  • 函数原型：
const char* locale_info_tr (locale_info_t* locale_info, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回翻译之后的字符串。
locale_info | locale_info_t* | locale_info对象。
text | const char* | 待翻译的文本。

country 属性

国家或地区。如：CN

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

language 属性

语言。如：zh

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


log_level_t

概述

LOG的级别。

常量

名称 | 说明
LOG_LEVEL_DEBUG | DEBUG
LOG_LEVEL_INFO | INFO
LOG_LEVEL_WARN | WARN
LOG_LEVEL_ERROR | ERROR


log_t

概述

log。

函数

函数名称 | 说明
log_debug | 输出调试信息。
log_error | 输出错误信息。
log_get_log_level | 获取log的级别。
log_info | 输出参考信息。
log_notify_debugger | 用于debugger拦截日志，发送给客户端。
log_set_debugger_hook | 设置调试器的钩子函数。
log_set_log_level | 设置log的级别。
log_warn | 输出警告信息。

log_debug 函数

  • 函数功能：

输出调试信息。 变参函数。

log_debug("debug message\n");
  • 函数原型：
void log_debug (const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无返回值。
format | const char* | 格式或信息。

log_error 函数

  • 函数功能：

输出错误信息。 变参函数。

log_error("error message\n");
  • 函数原型：
void log_error (const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无返回值。
format | const char* | 格式或信息。

log_get_log_level 函数

  • 函数功能：

获取log的级别。

  • 函数原型：
log_level_t log_get_log_level ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | log_level_t | 返回log的级别。

log_info 函数

  • 函数功能：

输出参考信息。 变参函数。

log_info("info message\n");
  • 函数原型：
void log_info (const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无返回值。
format | const char* | 格式或信息。

log_notify_debugger 函数

  • 函数功能：

用于debugger拦截日志，发送给客户端。 变参函数。

  • 函数原型：
ret_t log_notify_debugger (const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
format | const char* | 格式或信息。

log_set_debugger_hook 函数

  • 函数功能：

设置调试器的钩子函数。

  • 函数原型：
ret_t log_set_debugger_hook (tk_debugger_log_t log, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | tk_debugger_log_t | 回调函数。
ctx | void* | 回调函数的上下文。

log_set_log_level 函数

  • 函数功能：

设置log的级别。

  • 函数原型：
ret_t log_set_log_level (log_level_t log_level);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log_level | log_level_t | log的级别。

log_warn 函数

  • 函数功能：

输出警告信息。 变参函数。

log_warn("warn message\n");
  • 函数原型：
void log_warn (const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无返回值。
format | const char* | 格式或信息。


main_loop_t

概述

主循环接口。

函数

函数名称 | 说明
main_loop | 获取当前main_loop对象
main_loop_add_event_source | 添加event_source。
main_loop_get_event_source_manager | 获取event source manager
main_loop_remove_event_source | 删除event_source。
main_loop_remove_event_source_by_tag | 删除event_source。
main_loop_step | 执行一次迭代。

main_loop 函数

  • 函数功能：

获取当前main_loop对象

  • 函数原型：
main_loop_t* main_loop ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | main_loop_t* | 返回main_loop对象。

main_loop_add_event_source 函数

  • 函数功能：

添加event_source。

  • 函数原型：
ret_t main_loop_add_event_source (main_loop_t* l, event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
l | main_loop_t* | main_loop对象。
source | event_source_t* | event_source对象。

main_loop_get_event_source_manager 函数

  • 函数功能：

获取event source manager

  • 函数原型：
event_source_manager_t* main_loop_get_event_source_manager (main_loop_t* l);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_source_manager_t* | 返回event source manager对象。
l | main_loop_t* | main_loop对象。

main_loop_remove_event_source 函数

  • 函数功能：

删除event_source。

  • 函数原型：
ret_t main_loop_remove_event_source (main_loop_t* l, event_source_t* source);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
l | main_loop_t* | main_loop对象。
source | event_source_t* | event_source对象。

main_loop_remove_event_source_by_tag 函数

  • 函数功能：

删除event_source。

  • 函数原型：
ret_t main_loop_remove_event_source_by_tag (main_loop_t* l, void* tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
l | main_loop_t* | main_loop对象。
tag | void* | tag。

main_loop_step 函数

  • 函数功能：

执行一次迭代。

  • 函数原型：
ret_t main_loop_step (main_loop_t* l);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
l | main_loop_t* | main_loop对象。


matrix_t

概述

2D矩阵对象。

函数

函数名称 | 说明
matrix_identity | 重置矩阵对象为单位矩阵。
matrix_init | 初始化矩阵对象。
matrix_invert | 求矩阵的逆。
matrix_is_invertible | 判断matrix是否可逆。
matrix_multiply | 矩阵相乘。
matrix_rotate | 旋转。
matrix_scale | 缩放。
matrix_set | 设置矩阵的参数。
matrix_transform_point | 对点进行变换。
matrix_transform_pointf | 对点进行变换。
matrix_translate | 平移。

matrix_identity 函数

  • 函数功能：

重置矩阵对象为单位矩阵。

  • 函数原型：
matrix_t* matrix_identity (matrix_t* m);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。

matrix_init 函数

  • 函数功能：

初始化矩阵对象。

  • 函数原型：
matrix_t* matrix_init (matrix_t* m);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。

matrix_invert 函数

  • 函数功能：

求矩阵的逆。

  • 函数原型：
matrix_t* matrix_invert (matrix_t* m);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。

matrix_is_invertible 函数

  • 函数功能：

判断matrix是否可逆。

  • 函数原型：
bool_t matrix_is_invertible (matrix_t* m);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示可逆，否则表示不可逆。
m | matrix_t* | 矩阵对象。

matrix_multiply 函数

  • 函数功能：

矩阵相乘。

  • 函数原型：
matrix_t* matrix_multiply (matrix_t* m, matrix_t* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
b | matrix_t* | 矩阵对象。

matrix_rotate 函数

  • 函数功能：

旋转。

  • 函数原型：
matrix_t* matrix_rotate (matrix_t* m, float rad);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
rad | float | 角度。

matrix_scale 函数

  • 函数功能：

缩放。

  • 函数原型：
matrix_t* matrix_scale (matrix_t* m, float sx, float sy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
sx | float | sx
sy | float | sy

matrix_set 函数

  • 函数功能：

设置矩阵的参数。

  • 函数原型：
matrix_t* matrix_set (matrix_t* m, float a0, float a1, float a2, float a3, float a4, float a5);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
a0 | float | a0
a1 | float | a1
a2 | float | a2
a3 | float | a3
a4 | float | a4
a5 | float | a5

matrix_transform_point 函数

  • 函数功能：

对点进行变换。

  • 函数原型：
matrix_t* matrix_transform_point (matrix_t* m, xy_t x, xy_t y, xy_t* out_x, xy_t* out_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
x | xy_t | x
y | xy_t | y
out_x | xy_t* | out_x
out_y | xy_t* | out_y

matrix_transform_pointf 函数

  • 函数功能：

对点进行变换。

  • 函数原型：
matrix_t* matrix_transform_pointf (matrix_t* m, float x, float y, float* ox, float* oy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
x | float | x
y | float | y
ox | float* | out_x
oy | float* | out_y

matrix_translate 函数

  • 函数功能：

平移。

  • 函数原型：
matrix_t* matrix_translate (matrix_t* m, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | matrix_t* | 矩阵对象。
m | matrix_t* | 矩阵对象。
x | xy_t | x
y | xy_t | y


mem_allocator_composite_t

概述

支持多个不连续的内存块。


mem_allocator_debug_t

概述

对现有的allocator进行包装，记录分配的内存，用于帮助分析内存的使用和泄露。


mem_allocator_lock_t

概述

对现有的allocator进行包装，提供互斥功能。


mem_allocator_oom_t

概述

对现有的allocator进行包装，如果分配内存失败，调用预先设置的回调函数释放内存，然后再重试。


mem_allocator_pool_t

概述

对现有的allocator进行包装，预先分配一部分内存，用于分配小块内存，可以避免内存碎片。


mem_allocator_simple_t

概述

简单的内存分配器。


mem_allocator_std_t

概述

将标准的C的内存分配函数包装成内存分配器。


mem_allocator_t

概述

内存分配接口。

函数

函数名称 | 说明
mem_allocator_alloc | 分配指定大小的内存。
mem_allocator_destroy | 销毁内存分配器。
mem_allocator_dump | 显示内存信息，用于调试。
mem_allocator_free | 释放内存。
mem_allocator_realloc | 重新分配指定大小的内存。

mem_allocator_alloc 函数

  • 函数功能：

分配指定大小的内存。

  • 函数原型：
void* mem_allocator_alloc (mem_allocator_t* allocator, uint32_t size, const char* func, uint32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回内存块的地址，失败返回NULL。
allocator | mem_allocator_t* | allocator对象。
size | uint32_t | 内存的大小。
func | const char* | 分配内存的函数(用于调试)。
line | uint32_t | 分配内存的行数(用于调试)。

mem_allocator_destroy 函数

  • 函数功能：

销毁内存分配器。

  • 函数原型：
ret_t mem_allocator_destroy (mem_allocator_t* allocator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
allocator | mem_allocator_t* | allocator对象。

mem_allocator_dump 函数

  • 函数功能：

显示内存信息，用于调试。

  • 函数原型：
ret_t mem_allocator_dump (mem_allocator_t* allocator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
allocator | mem_allocator_t* | allocator对象。

mem_allocator_free 函数

  • 函数功能：

释放内存。

  • 函数原型：
void mem_allocator_free (mem_allocator_t* allocator, void* ptr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无。
allocator | mem_allocator_t* | allocator对象。
ptr | void* | 内存的地址。

mem_allocator_realloc 函数

  • 函数功能：

重新分配指定大小的内存。

  • 函数原型：
void* mem_allocator_realloc (mem_allocator_t* allocator, void* ptr, uint32_t size, const char* func, uint32_t line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回内存块的地址，失败返回NULL。
allocator | mem_allocator_t* | allocator对象。
ptr | void* | 原来内存的地址。
size | uint32_t | 内存的大小。
func | const char* | 分配内存的函数(用于调试)。
line | uint32_t | 分配内存的行数(用于调试)。


MIME_TYPE

概述

MIME_TYPE。

常量

名称 | 说明
MIME_TYPE_APPLICATION_ENVOY | “application/envoy”。
MIME_TYPE_APPLICATION_FRACTALS | “application/fractals”。
MIME_TYPE_APPLICATION_FUTURESPLASH | “application/futuresplash”。
MIME_TYPE_APPLICATION_HTA | “application/hta”。
MIME_TYPE_APPLICATION_JSON | “application/json”。
MIME_TYPE_APPLICATION_UBJSON | “application/ubjson”。
MIME_TYPE_APPLICATION_MAC_BINHEX40 | “application/mac-binhex40”。
MIME_TYPE_APPLICATION_MSWORD | “application/msword”。
MIME_TYPE_APPLICATION_OCTET_STREAM | “application/octet-stream”。
MIME_TYPE_APPLICATION_ODA | “application/oda”。
MIME_TYPE_APPLICATION_OLESCRIPT | “application/olescript”。
MIME_TYPE_APPLICATION_PDF | “application/pdf”。
MIME_TYPE_APPLICATION_PICS_RULES | “application/pics-rules”。
MIME_TYPE_APPLICATION_PKCS10 | “application/pkcs10”。
MIME_TYPE_APPLICATION_PKIX_CRL | “application/pkix-crl”。
MIME_TYPE_APPLICATION_POSTSCRIPT | “application/postscript”。
MIME_TYPE_APPLICATION_RTF | “application/rtf”。
MIME_TYPE_APPLICATION_VND_MS_EXCEL | “application/vnd.ms-excel”。
MIME_TYPE_APPLICATION_VND_MS_OUTLOOK | “application/vnd.ms-outlook”。
MIME_TYPE_APPLICATION_VND_MS_PKICERTSTORE | “application/vnd.ms-pkicertstore”。
MIME_TYPE_APPLICATION_VND_MS_PKISECCAT | “application/vnd.ms-pkiseccat”。
MIME_TYPE_APPLICATION_VND_MS_PKISTL | “application/vnd.ms-pkistl”。
MIME_TYPE_APPLICATION_VND_MS_POWERPOINT | “application/vnd.ms-powerpoint”。
MIME_TYPE_APPLICATION_VND_MS_PROJECT | “application/vnd.ms-project”。
MIME_TYPE_APPLICATION_VND_MS_WORKS | “application/vnd.ms-works”。
MIME_TYPE_APPLICATION_WINHLP | “application/winhlp”。
MIME_TYPE_APPLICATION_X_BCPIO | “application/x-bcpio”。
MIME_TYPE_APPLICATION_X_CDF | “application/x-cdf”。
MIME_TYPE_APPLICATION_X_COMPRESS | “application/x-compress”。
MIME_TYPE_APPLICATION_X_COMPRESSED | “application/x-compressed”。
MIME_TYPE_APPLICATION_X_CPIO | “application/x-cpio”。
MIME_TYPE_APPLICATION_X_CSH | “application/x-csh”。
MIME_TYPE_APPLICATION_X_DIRECTOR | “application/x-director”。
MIME_TYPE_APPLICATION_X_DVI | “application/x-dvi”。
MIME_TYPE_APPLICATION_X_GTAR | “application/x-gtar”。
MIME_TYPE_APPLICATION_X_GZIP | “application/x-gzip”。
MIME_TYPE_APPLICATION_X_HDF | “application/x-hdf”。
MIME_TYPE_APPLICATION_X_IPHONE | “application/x-iphone”。
MIME_TYPE_APPLICATION_X_JAVASCRIPT | “application/x-javascript”。
MIME_TYPE_APPLICATION_X_LATEX | “application/x-latex”。
MIME_TYPE_APPLICATION_X_MSACCESS | “application/x-msaccess”。
MIME_TYPE_APPLICATION_X_MSCARDFILE | “application/x-mscardfile”。
MIME_TYPE_APPLICATION_X_MSCLIP | “application/x-msclip”。
MIME_TYPE_APPLICATION_X_MSDOWNLOAD | “application/x-msdownload”。
MIME_TYPE_APPLICATION_X_MSMEDIAVIEW | “application/x-msmediaview”。
MIME_TYPE_APPLICATION_X_MSMETAFILE | “application/x-msmetafile”。
MIME_TYPE_APPLICATION_X_MSMONEY | “application/x-msmoney”。
MIME_TYPE_APPLICATION_X_MSPUBLISHER | “application/x-mspublisher”。
MIME_TYPE_APPLICATION_X_MSSCHEDULE | “application/x-msschedule”。
MIME_TYPE_APPLICATION_X_MSTERMINAL | “application/x-msterminal”。
MIME_TYPE_APPLICATION_X_MSWRITE | “application/x-mswrite”。
MIME_TYPE_APPLICATION_X_NETCDF | “application/x-netcdf”。
MIME_TYPE_APPLICATION_X_PERFMON | “application/x-perfmon”。
MIME_TYPE_APPLICATION_X_PKCS12 | “application/x-pkcs12”。
MIME_TYPE_APPLICATION_X_SH | “application/x-sh”。
MIME_TYPE_APPLICATION_X_SHAR | “application/x-shar”。
MIME_TYPE_APPLICATION_X_SHOCKWAVE_FLASH | “application/x-shockwave-flash”。
MIME_TYPE_APPLICATION_X_STUFFIT | “application/x-stuffit”。
MIME_TYPE_APPLICATION_X_SV4CPIO | “application/x-sv4cpio”。
MIME_TYPE_APPLICATION_X_SV4CRC | “application/x-sv4crc”。
MIME_TYPE_APPLICATION_X_TAR | “application/x-tar”。
MIME_TYPE_APPLICATION_X_TCL | “application/x-tcl”。
MIME_TYPE_APPLICATION_X_TEX | “application/x-tex”。
MIME_TYPE_APPLICATION_X_TEXINFO | “application/x-texinfo”。
MIME_TYPE_APPLICATION_X_TROFF | “application/x-troff”。
MIME_TYPE_APPLICATION_X_USTAR | “application/x-ustar”。
MIME_TYPE_APPLICATION_ZIP | “application/zip”。
MIME_TYPE_AUDIO_BASIC | “audio/basic”。
MIME_TYPE_AUDIO_MID | “audio/mid”。
MIME_TYPE_AUDIO_MPEG | “audio/mpeg”。
MIME_TYPE_AUDIO_X_AIFF | “audio/x-aiff”。
MIME_TYPE_AUDIO_X_MPEGURL | “audio/x-mpegurl”。
MIME_TYPE_AUDIO_X_WAV | “audio/x-wav”。
MIME_TYPE_IMAGE_BMP | “image/bmp”。
MIME_TYPE_IMAGE_CIS_COD | “image/cis-cod”。
MIME_TYPE_IMAGE_GIF | “image/gif”。
MIME_TYPE_IMAGE_IEF | “image/ief”。
MIME_TYPE_IMAGE_JPEG | “image/jpeg”。
MIME_TYPE_IMAGE_PIPEG | “image/pipeg”。
MIME_TYPE_IMAGE_SVG_XML | “image/svg+xml”。
MIME_TYPE_IMAGE_TIFF | “image/tiff”。
MIME_TYPE_IMAGE_X_CMX | “image/x-cmx”。
MIME_TYPE_IMAGE_X_ICON | “image/x-icon”。
MIME_TYPE_IMAGE_X_RGB | “image/x-rgb”。
MIME_TYPE_IMAGE_X_XBITMAP | “image/x-xbitmap”。
MIME_TYPE_IMAGE_X_XPIXMAP | “image/x-xpixmap”。
MIME_TYPE_IMAGE_X_XWINDOWDUMP | “image/x-xwindowdump”。
MIME_TYPE_MESSAGE_RFC822 | “message/rfc822”。
MIME_TYPE_TEXT_CSS | “text/css”。
MIME_TYPE_TEXT_H323 | “text/h323”。
MIME_TYPE_TEXT_HTML | “text/html”。
MIME_TYPE_TEXT_IULS | “text/iuls”。
MIME_TYPE_TEXT_PLAIN | “text/plain”。
MIME_TYPE_TEXT_RICHTEXT | “text/richtext”。
MIME_TYPE_TEXT_SCRIPTLET | “text/scriptlet”。
MIME_TYPE_TEXT_WEBVIEWHTML | “text/webviewhtml”。
MIME_TYPE_TEXT_X_COMPONENT | “text/x-component”。
MIME_TYPE_TEXT_X_SETEXT | “text/x-setext”。
MIME_TYPE_TEXT_X_VCARD | “text/x-vcard”。
MIME_TYPE_VIDEO_MPEG | “video/mpeg”。
MIME_TYPE_VIDEO_QUICKTIME | “video/quicktime”。
MIME_TYPE_VIDEO_X_MSVIDEO | “video/x-msvideo”。


mledit_t

概述

多行编辑器控件。

mledit_t是widget_t的子类控件，widget_t的函数均适用于mledit_t控件。

在xml中使用”mledit”标签创建多行编辑器控件。如：

<mledit x="c" y="m" w="300" h="300" />

更多用法请参考：mledit.xml

在c代码中使用函数mledit_create创建多行编辑器控件。如：

widget_t* tc = mledit_create(win, 10, 10, 240, 240);

完整示例请参考：mledit demo

time_clock一般不需要设置style。

函数

函数名称 | 说明
mledit_cast | 转换为mledit对象(供脚本语言使用)。
mledit_create | 创建mledit对象
mledit_get_cursor | 获取编辑器光标位置。
mledit_get_selected_text | 获取选中的文本。
mledit_get_widget_vtable | 获取 mledit 虚表。
mledit_insert_text | 插入一段文本。
mledit_scroll_to_offset | 设置编辑器滚动到指定偏移位置。
mledit_set_cancelable | 设置编辑器是否为可撤销修改。
mledit_set_close_im_when_blured | 设置编辑器是否在失去焦点时关闭输入法。
mledit_set_cursor | 设置编辑器光标位置。
mledit_set_focus | 设置为焦点。
mledit_set_keyboard | 设置自定义软键盘名称。
mledit_set_max_chars | 设置编辑器的最大字符数（0 为不限制字符数）。
mledit_set_max_lines | 设置编辑器的最大行数。
mledit_set_open_im_when_focused | 设置编辑器是否在获得焦点时打开输入法。
mledit_set_overwrite | 设置编辑器是否启用覆盖行（在行数达到最大行数时，可继续新增行，但最早的行将会消失）。
mledit_set_readonly | 设置编辑器是否为只读。
mledit_set_scroll_line | 设置编辑器滚动速度。
mledit_set_select | 选择编辑器中指定范围的文本。
mledit_set_tips | 设置编辑器的输入提示。
mledit_set_tr_tips | 获取翻译之后的文本，然后调用mledit_set_tips。
mledit_set_wrap_word | 设置编辑器是否自动折行。

属性

属性名称 | 类型 | 说明
cancelable | bool_t | 是否支持撤销编辑。如果为TRUE，在失去焦点之前可以撤销所有修改(恢复获得焦点之前的内容)。
close_im_when_blured | bool_t | 是否在失去焦点时关闭输入法(默认是)。
keyboard | char* | 自定义软键盘名称。
max_chars | uint32_t | 最大字符数。
max_lines | uint32_t | 最大行数。
open_im_when_focused | bool_t | 获得焦点时打开输入法。
overwrite | bool_t | 是否启用覆盖行。
readonly | bool_t | 编辑器是否为只读。
scroll_line | uint32_t | 鼠标一次滚动行数。
tips | char* | 输入提示。
tr_tips | char* | 保存用于翻译的提示信息。
wrap_word | bool_t | 是否自动折行。

事件

事件名称 | 类型 | 说明
EVT_VALUE_CHANGING | value_change_event_t | 文本正在改变事件(编辑中)。
EVT_VALUE_CHANGED | value_change_event_t | 文本改变事件(编辑完成或设置文本时触发)。

mledit_cast 函数

  • 函数功能：

转换为mledit对象(供脚本语言使用)。

  • 函数原型：
widget_t* mledit_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | mledit对象。
widget | widget_t* | mledit对象。

mledit_create 函数

  • 函数功能：

创建mledit对象

  • 函数原型：
widget_t* mledit_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

mledit_get_cursor 函数

  • 函数功能：

获取编辑器光标位置。

  • 函数原型：
uint32_t mledit_get_cursor (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回光标位置。
widget | widget_t* | widget对象。

mledit_get_selected_text 函数

  • 函数功能：

获取选中的文本。 使用完后需调用 TKMEM_FREE() 进行释放文本占有内存。

  • 函数原型：
char* mledit_get_selected_text (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回选中文本。
widget | widget_t* | widget对象。

mledit_get_widget_vtable 函数

  • 函数功能：

获取 mledit 虚表。

  • 函数原型：
const widget_vtable_t* mledit_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 mledit 虚表。

mledit_insert_text 函数

  • 函数功能：

插入一段文本。

  • 函数原型：
ret_t mledit_insert_text (widget_t* widget, uint32_t offset, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
offset | uint32_t | 插入的偏移位置。
text | const char* | 待插入的文本。

mledit_scroll_to_offset 函数

  • 函数功能：

设置编辑器滚动到指定偏移位置。

  • 函数原型：
ret_t mledit_scroll_to_offset (widget_t* widget, uint32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
offset | uint32_t | 偏移位置。

mledit_set_cancelable 函数

  • 函数功能：

设置编辑器是否为可撤销修改。

  • 函数原型：
ret_t mledit_set_cancelable (widget_t* widget, bool_t cancelable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
cancelable | bool_t | 是否为可撤销修。

mledit_set_close_im_when_blured 函数

  • 函数功能：

设置编辑器是否在失去焦点时关闭输入法。

  • 函数原型：
ret_t mledit_set_close_im_when_blured (widget_t* widget, bool_t close_im_when_blured);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
close_im_when_blured | bool_t | 是否是否在失去焦点时关闭输入法。在失去焦点时关闭输入法。

mledit_set_cursor 函数

  • 函数功能：

设置编辑器光标位置。

  • 函数原型：
ret_t mledit_set_cursor (widget_t* widget, uint32_t cursor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
cursor | uint32_t | 光标位置。

mledit_set_focus 函数

  • 函数功能：

设置为焦点。

  • 函数原型：
ret_t mledit_set_focus (widget_t* widget, bool_t focus);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
focus | bool_t | 是否为焦点。

mledit_set_keyboard 函数

  • 函数功能：

设置自定义软键盘名称。

  • 函数原型：
ret_t mledit_set_keyboard (widget_t* widget, const char* keyboard);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
keyboard | const char* | 键盘名称(相应UI资源必须存在)。

mledit_set_max_chars 函数

  • 函数功能：

设置编辑器的最大字符数（0 为不限制字符数）。

  • 函数原型：
ret_t mledit_set_max_chars (widget_t* widget, uint32_t max_chars);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
max_chars | uint32_t | 最大字符数。

mledit_set_max_lines 函数

  • 函数功能：

设置编辑器的最大行数。

  • 函数原型：
ret_t mledit_set_max_lines (widget_t* widget, uint32_t max_lines);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
max_lines | uint32_t | 最大行数。

mledit_set_open_im_when_focused 函数

  • 函数功能：

设置编辑器是否在获得焦点时打开输入法。

  • 设置默认焦点时，打开窗口时不弹出软键盘。
  • 用键盘切换焦点时，编辑器获得焦点时不弹出软键盘。
  • 函数原型：
ret_t mledit_set_open_im_when_focused (widget_t* widget, bool_t open_im_when_focused);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
open_im_when_focused | bool_t | 是否在获得焦点时打开输入法。

mledit_set_overwrite 函数

  • 函数功能：

设置编辑器是否启用覆盖行（在行数达到最大行数时，可继续新增行，但最早的行将会消失）。

  • 函数原型：
ret_t mledit_set_overwrite (widget_t* widget, bool_t overwrite);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
overwrite | bool_t | 是否启用覆盖行。

mledit_set_readonly 函数

  • 函数功能：

设置编辑器是否为只读。

  • 函数原型：
ret_t mledit_set_readonly (widget_t* widget, bool_t readonly);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
readonly | bool_t | 只读。

mledit_set_scroll_line 函数

  • 函数功能：

设置编辑器滚动速度。

  • 函数原型：
ret_t mledit_set_scroll_line (widget_t* widget, uint32_t scroll_line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
scroll_line | uint32_t | 滚动行数。

mledit_set_select 函数

  • 函数功能：

选择编辑器中指定范围的文本。

  • 函数原型：
ret_t mledit_set_select (widget_t* widget, uint32_t start, uint32_t end);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
start | uint32_t | 起始偏移。
end | uint32_t | 结束偏移。

mledit_set_tips 函数

  • 函数功能：

设置编辑器的输入提示。

  • 函数原型：
ret_t mledit_set_tips (widget_t* widget, const char* tips);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
tips | const char* | 输入提示。

mledit_set_tr_tips 函数

  • 函数功能：

获取翻译之后的文本，然后调用mledit_set_tips。

  • 函数原型：
ret_t mledit_set_tr_tips (widget_t* widget, const char* tr_tips);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
tr_tips | const char* | 提示信息。

mledit_set_wrap_word 函数

  • 函数功能：

设置编辑器是否自动折行。

  • 函数原型：
ret_t mledit_set_wrap_word (widget_t* widget, bool_t wrap_word);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
wrap_word | bool_t | 是否自动折行。

cancelable 属性

是否支持撤销编辑。如果为TRUE，在失去焦点之前可以撤销所有修改(恢复获得焦点之前的内容)。

  • 1.一般配合keyboard的”cancel”按钮使用。
  • 2.为TRUE时，如果内容有变化，会设置编辑器的状态为changed，所以此时编辑器需要支持changed状态的style。
  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

close_im_when_blured 属性

是否在失去焦点时关闭输入法(默认是)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

keyboard 属性

自定义软键盘名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max_chars 属性

最大字符数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max_lines 属性

最大行数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

open_im_when_focused 属性

获得焦点时打开输入法。

主要用于没有指针设备的情况，否则每次切换焦点时都打开输入法。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

overwrite 属性

是否启用覆盖行。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

readonly 属性

编辑器是否为只读。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

scroll_line 属性

鼠标一次滚动行数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

tips 属性

输入提示。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

tr_tips 属性

保存用于翻译的提示信息。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

wrap_word 属性

是否自动折行。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


mmap_t

概述

把文件内容映射到内存。

函数

函数名称 | 说明
mmap_create | 初始化mmap对象。
mmap_destroy | 销毁mmap。

属性

属性名称 | 类型 | 说明
data | void* | 内存地址。
size | uint32_t | 数据长度。

mmap_create 函数

  • 函数功能：

初始化mmap对象。

  • 函数原型：
mmap_t* mmap_create (const char* filename, bool_t writable, bool_t shared);
  • 参数说明：
参数 | 类型 | 说明
返回值 | mmap_t* | mmap对象本身。
filename | const char* | 文件名。
writable | bool_t | 是否可写。
shared | bool_t | 是否共享。

mmap_destroy 函数

  • 函数功能：

销毁mmap。

  • 函数原型：
ret_t mmap_destroy (mmap_t* mmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mmap | mmap_t* | mmap对象。

data 属性

内存地址。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

数据长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


model_event_t

概述

model变化事件。

函数

函数名称 | 说明
model_event_cast | 把event对象转model_event_t对象。
model_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
change_type | const char* | 变化类型(update/add/remove)。
model | tk_object_t* | 模型。
name | const char* | 模型名称。

model_event_cast 函数

  • 函数功能：

把event对象转model_event_t对象。

  • 函数原型：
model_event_t* model_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | model_event_t* | event对象。
event | event_t* | event对象。

model_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* model_event_init (model_event_t* event, const char* name, const char* change_type, tk_object_t* model);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | model_event_t* | event对象。
name | const char* | 名称。
change_type | const char* | 变化类型。
model | tk_object_t* | 模型。

change_type 属性

变化类型(update/add/remove)。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

model 属性

模型。

  • 类型：tk_object_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

name 属性

模型名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


multi_gesture_event_t

概述

多点触摸手势事件。

函数

函数名称 | 说明
multi_gesture_event_cast | 把event对象转multi_gesture_event_t对象。
multi_gesture_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
distance | float_t | 两点间的距离增量。(-1,0)表示缩小，(0-1)表示增加。
rotation | float_t | 旋转角度(幅度)增量。（单位弧度）
x | xy_t | 中心点x坐标。
y | xy_t | 中心点y坐标。

multi_gesture_event_cast 函数

  • 函数功能：

把event对象转multi_gesture_event_t对象。

  • 函数原型：
multi_gesture_event_t* multi_gesture_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | multi_gesture_event_t* | event对象。
event | event_t* | event对象。

multi_gesture_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* multi_gesture_event_init (multi_gesture_event_t* event, void* target, int32_t x, int32_t y, float rotation, float distance);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | multi_gesture_event_t* | event对象。
target | void* | 事件目标。
x | int32_t | x的值。
y | int32_t | y的值。
rotation | float | 旋转角度(幅度)增量。
distance | float | 两点间的距离增量。(-1,0)表示缩小，(0-1)表示增加。

distance 属性

两点间的距离增量。(-1,0)表示缩小，(0-1)表示增加。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

rotation 属性

旋转角度(幅度)增量。（单位弧度）

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

x 属性

中心点x坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

y 属性

中心点y坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


mutable_image_t

概述

mutable图片控件。

像摄像头和视频的图像是变化的，每一帧都不同，我们把这类图片称为mutable image。

本控件辅助实现摄像头和视频的显示功能。

mutable_image_t是image_base_t的子类控件，image_base_t的函数均适用于mutable_image_t控件。

在xml中使用”mutable_image”标签创建mutable图片控件。如：

<mutable_image w="100%" h="100%"/>

更多用法请参考： mutable image

在c代码中使用函数mutable_image_create创建mutable图片控件。如：

widget_t* image = mutable_image_create(win, 10, 10, 200, 200);
mutable_image_set_prepare_image(image, get_camera_image, camera);

创建之后:

需要用mutable_image_set_create_image设置创建图片的回调函数。 需要用mutable_image_set_prepare_image设置准备图片的回调函数。

完整示例请参考：mutable image demo

一般不需通过style来设置控件的显示风格，如果在特殊情况下需要，可以参考其它控件。

函数

函数名称 | 说明
mutable_image_cast | 转换为mutable_image对象(供脚本语言使用)。
mutable_image_create | 创建mutable_image对象
mutable_image_get_widget_vtable | 获取 mutable_image 虚表。
mutable_image_init | 初始化 mutable_image （提供给继承的子类使用的）
mutable_image_on_destroy | 释放 mutable_image （提供给继承的子类使用的）
mutable_image_on_paint_self | mutable_image 的绘制函数 （提供给继承的子类使用的）
mutable_image_set_create_image | 设置create_image回调函数。
mutable_image_set_framebuffer | 设置framebuffer(当硬件支持多层合成时才用)。
mutable_image_set_need_redraw | 设置need_redraw回调函数。
mutable_image_set_prepare_image | 设置prepare_image回调函数。

mutable_image_cast 函数

  • 函数功能：

转换为mutable_image对象(供脚本语言使用)。

  • 函数原型：
widget_t* mutable_image_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | mutable_image对象。
widget | widget_t* | mutable_image对象。

mutable_image_create 函数

  • 函数功能：

创建mutable_image对象

  • 函数原型：
widget_t* mutable_image_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

mutable_image_get_widget_vtable 函数

  • 函数功能：

获取 mutable_image 虚表。

  • 函数原型：
const widget_vtable_t* mutable_image_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 mutable_image 虚表。

mutable_image_init 函数

  • 函数功能：

初始化 mutable_image （提供给继承的子类使用的）

  • 函数原型：
widget_t* mutable_image_init (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | mutable_image对象。
widget | widget_t* | mutable_image对象。

mutable_image_on_destroy 函数

  • 函数功能：

释放 mutable_image （提供给继承的子类使用的）

  • 函数原型：
ret_t mutable_image_on_destroy (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | mutable_image对象。

mutable_image_on_paint_self 函数

  • 函数功能：

mutable_image 的绘制函数 （提供给继承的子类使用的）

  • 函数原型：
ret_t mutable_image_on_paint_self (widget_t* widget, canvas_t* canvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | mutable_image对象。
canvas | canvas_t* | 画布对象。

mutable_image_set_create_image 函数

  • 函数功能：

设置create_image回调函数。

  • 函数原型：
ret_t mutable_image_set_create_image (widget_t* widget, mutable_image_create_image_t create_image, void* create_image_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | mutable_image对象。
create_image | mutable_image_create_image_t | 创建图片的回调函数。
create_image_ctx | void* | create_image回调函数的上下文。

mutable_image_set_framebuffer 函数

  • 函数功能：

设置framebuffer(当硬件支持多层合成时才用)。

有的硬件支持多层framebuffer，一层用于视图/摄像头，一层用于GUI，由硬件合成最终图像。 此时可以设置用于摄像头的framebuffer，图像直接绘制到该framebuffer上。

  • 函数原型：
ret_t mutable_image_set_framebuffer (widget_t* widget, uint32_t w, uint32_t h, bitmap_format_t format, uint8_t* buff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | mutable_image对象。
w | uint32_t | framebuffer宽度。
h | uint32_t | framebuffer高度。
format | bitmap_format_t | framebuffer的格式。
buff | uint8_t* | framebuffer内存。

mutable_image_set_need_redraw 函数

  • 函数功能：

设置need_redraw回调函数。

缺省每16ms刷新一次。但有时只是在变化时刷新，所以提供一个回调函数由用户决定是否需要重绘。

  • 函数原型：
ret_t mutable_image_set_need_redraw (widget_t* widget, mutable_image_need_redraw_t need_redraw, void* need_redraw_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | mutable_image对象。
need_redraw | mutable_image_need_redraw_t | 检查是否需要重绘的回调函数。
need_redraw_ctx | void* | need_redraw回调函数的上下文。

mutable_image_set_prepare_image 函数

  • 函数功能：

设置prepare_image回调函数。

prepare_image回调函数在每次绘制之前被调用，用于准备下一帧要显示的图片。 比如获取摄像头的预览图片，将其设置到image参数中。

注意：在回调函数中，只能修改图片的内容，不用修改图片的大小和格式，如果不匹配请先转换。

  • 函数原型：
ret_t mutable_image_set_prepare_image (widget_t* widget, mutable_image_prepare_image_t prepare_image, void* prepare_image_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | mutable_image对象。
prepare_image | mutable_image_prepare_image_t | 准备图片的回调函数。
prepare_image_ctx | void* | prepare_image回调函数的上下文。


named_value_t

概述

命名的值。

函数

函数名称 | 说明
named_value_cast | 转换为named_value对象(供脚本语言使用)。
named_value_compare | 比较。
named_value_compare_by_name | 比较。
named_value_create | 创建named_value对象。
named_value_create_ex | 创建named_value对象。
named_value_deinit | 重置named_value对象。
named_value_destroy | 销毁named_value对象。
named_value_get_value | 获取值对象(主要给脚本语言使用)。
named_value_init | 初始化。
named_value_set_name | 设置名称。
named_value_set_value | 设置值。

属性

属性名称 | 类型 | 说明
name | char* | 名称。
value | value_t | 值。

named_value_cast 函数

  • 函数功能：

转换为named_value对象(供脚本语言使用)。

  • 函数原型：
named_value_t* named_value_cast (named_value_t* nv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | named_value_t* | 返回named_value对象。
nv | named_value_t* | named_value对象。

named_value_compare 函数

  • 函数功能：

比较。

  • 函数原型：
int32_t named_value_compare (named_value_t* nv, const named_value_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回RET_OK表示成功，否则表示失败。
nv | named_value_t* | named_value对象。
other | const named_value_t* | named_value对象。

named_value_compare_by_name 函数

  • 函数功能：

比较。

  • 函数原型：
int32_t named_value_compare_by_name (named_value_t* nv, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回RET_OK表示成功，否则表示失败。
nv | named_value_t* | named_value对象。
name | const char* | 名称。

named_value_create 函数

  • 函数功能：

创建named_value对象。

  • 函数原型：
named_value_t* named_value_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | named_value_t* | 返回named_value对象。

named_value_create_ex 函数

  • 函数功能：

创建named_value对象。

  • 函数原型：
named_value_t* named_value_create_ex (const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | named_value_t* | 返回named_value对象。
name | const char* | 名称。
value | const value_t* | 值。

named_value_deinit 函数

  • 函数功能：

重置named_value对象。

  • 函数原型：
ret_t named_value_deinit (named_value_t* nv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
nv | named_value_t* | named_value对象。

named_value_destroy 函数

  • 函数功能：

销毁named_value对象。

  • 函数原型：
ret_t named_value_destroy (named_value_t* nv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
nv | named_value_t* | named_value对象。

named_value_get_value 函数

  • 函数功能：

获取值对象(主要给脚本语言使用)。

  • 函数原型：
value_t* named_value_get_value (named_value_t* nv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | 返回值对象。
nv | named_value_t* | named_value对象。

named_value_init 函数

  • 函数功能：

初始化。

  • 函数原型：
named_value_t* named_value_init (named_value_t* nv, const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | named_value_t* | 返回named_value对象。
nv | named_value_t* | named_value对象。
name | const char* | 名称。
value | const value_t* | 值。

named_value_set_name 函数

  • 函数功能：

设置名称。

  • 函数原型：
ret_t named_value_set_name (named_value_t* nv, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
nv | named_value_t* | named_value对象。
name | const char* | 名称。

named_value_set_value 函数

  • 函数功能：

设置值。

  • 函数原型：
ret_t named_value_set_value (named_value_t* nv, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
nv | named_value_t* | named_value对象。
value | const value_t* | 值。

name 属性

名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

value 属性

值。

  • 类型：value_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


native_window_t

概述

原生窗口。

函数

函数名称 | 说明
native_window_center | 窗口居中。
native_window_create | 创建win对象。
native_window_get_canvas | 获取canvas。
native_window_invalidate | 请求重绘指定区域。
native_window_maximize | 最大化窗口。
native_window_minimize | 最小化窗口。
native_window_move | 移动窗口。
native_window_resize | 调整窗口大小。
native_window_restore | 恢复窗口大小。
native_window_set_cursor | 设置鼠标光标。
native_window_set_fullscreen | 是否全屏。
native_window_set_orientation | 调整窗口旋转。
native_window_set_title | 设置程序窗口的名称。
native_window_show_border | 是否显示边框。

native_window_center 函数

  • 函数功能：

窗口居中。

  • 函数原型：
ret_t native_window_center (native_window_t* win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。

native_window_create 函数

  • 函数功能：

创建win对象。

  • 函数原型：
native_window_t* native_window_create (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | native_window_t* | 返回win对象。
widget | widget_t* | widget对象。

native_window_get_canvas 函数

  • 函数功能：

获取canvas。

  • 函数原型：
canvas_t* native_window_get_canvas (native_window_t* win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 返回canvas对象。
win | native_window_t* | win对象。

native_window_invalidate 函数

  • 函数功能：

请求重绘指定区域。

  • 函数原型：
ret_t native_window_invalidate (native_window_t* win, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
r | const rect_t* | 重绘区域。

native_window_maximize 函数

  • 函数功能：

最大化窗口。

  • 函数原型：
ret_t native_window_maximize (native_window_t* win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。

native_window_minimize 函数

  • 函数功能：

最小化窗口。

  • 函数原型：
ret_t native_window_minimize (native_window_t* win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。

native_window_move 函数

  • 函数功能：

移动窗口。

  • 函数原型：
ret_t native_window_move (native_window_t* win, xy_t x, xy_t y, bool_t force);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
force | bool_t | 无论是否shared都move。

native_window_resize 函数

  • 函数功能：

调整窗口大小。

  • 函数原型：
ret_t native_window_resize (native_window_t* win, wh_t w, wh_t h, bool_t force);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
w | wh_t | 宽。
h | wh_t | 高。
force | bool_t | 无论是否shared都resize。

native_window_restore 函数

  • 函数功能：

恢复窗口大小。

  • 函数原型：
ret_t native_window_restore (native_window_t* win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。

native_window_set_cursor 函数

  • 函数功能：

设置鼠标光标。

  • 函数原型：
ret_t native_window_set_cursor (native_window_t* win, const char* name, bitmap_t* img);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
name | const char* | 鼠标光标的名称。
img | bitmap_t* | 鼠标光标的图片。

native_window_set_fullscreen 函数

  • 函数功能：

是否全屏。

  • 函数原型：
ret_t native_window_set_fullscreen (native_window_t* win, bool_t fullscreen);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
fullscreen | bool_t | 是否全屏。

native_window_set_orientation 函数

  • 函数功能：

调整窗口旋转。

  • 函数原型：
ret_t native_window_set_orientation (native_window_t* win, lcd_orientation_t old_orientation, lcd_orientation_t new_orientation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
old_orientation | lcd_orientation_t | 旧的旋转角度。
new_orientation | lcd_orientation_t | 新的旋转角度。

native_window_set_title 函数

  • 函数功能：

设置程序窗口的名称。

  • 函数原型：
ret_t native_window_set_title (native_window_t* win, const char* app_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
app_name | const char* | 程序窗口的名称。

native_window_show_border 函数

  • 函数功能：

是否显示边框。

  • 函数原型：
ret_t native_window_show_border (native_window_t* win, bool_t show);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
win | native_window_t* | win对象。
show | bool_t | 是否显示。


network_interface_t

概述

网卡接口。

函数

函数名称 | 说明
network_interface_create | 网卡接口创建函数。
network_interface_destroy | 网卡接口销毁函数。
network_interface_disable | 网卡接口禁能函数。
network_interface_enable | 网卡接口使能函数。
network_interface_get_ipaddr | 网卡接口获取IP地址。
network_interface_get_macaddr | 网卡接口获取MAC地址。
network_interface_get_quality | 网卡接口获取通信质量。
network_interface_get_status | 网卡接口获取状态。
network_interface_set_dhcp | 网卡接口设置DNS。
network_interface_set_dns | 网卡接口设置DNS。
network_interface_set_gateway | 网卡接口设置DNS。
network_interface_set_ipaddr | 网卡接口设置IP地址。
network_interface_set_wifi_ap | 网卡接口设置WIFI AP模式。
network_interface_set_wifi_sta | 网卡接口设置WIFI STA模式。

network_interface_create 函数

  • 函数功能：

网卡接口创建函数。

  • 函数原型：
network_interface_t* network_interface_create (const char* interface, network_interface_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | network_interface_t* | 网卡接口对象。
interface | const char* | 网卡名。
type | network_interface_type_t | 网卡接口类型。

network_interface_destroy 函数

  • 函数功能：

网卡接口销毁函数。

  • 函数原型：
void network_interface_destroy (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 。
interface | network_interface_t * | 网卡对象。

network_interface_disable 函数

  • 函数功能：

网卡接口禁能函数。

  • 函数原型：
ret_t network_interface_disable (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。

network_interface_enable 函数

  • 函数功能：

网卡接口使能函数。

  • 函数原型：
ret_t network_interface_enable (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。

network_interface_get_ipaddr 函数

  • 函数功能：

网卡接口获取IP地址。

  • 函数原型：
char * network_interface_get_ipaddr (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char * | 返回IP地址成功，NULL失败。
interface | network_interface_t * | 网卡对象。

network_interface_get_macaddr 函数

  • 函数功能：

网卡接口获取MAC地址。

  • 函数原型：
char * network_interface_get_macaddr (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char * | 返回MAC地址成功，NULL失败。
interface | network_interface_t * | 网卡对象。

network_interface_get_quality 函数

  • 函数功能：

网卡接口获取通信质量。

  • 函数原型：
int network_interface_get_quality (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 对于无线网络返回信号RSSI的绝对值， 对于有线网络，返回10、100、1000M带宽。
interface | network_interface_t * | 网卡对象。

network_interface_get_status 函数

  • 函数功能：

网卡接口获取状态。

  • 函数原型：
int network_interface_get_status (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 0表示未连接，1表示连接成功，-1表示操作失败。
interface | network_interface_t * | 网卡对象。

network_interface_set_dhcp 函数

  • 函数功能：

网卡接口设置DNS。

  • 函数原型：
ret_t network_interface_set_dhcp (network_interface_t * interface);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。

network_interface_set_dns 函数

  • 函数功能：

网卡接口设置DNS。

  • 函数原型：
ret_t network_interface_set_dns (network_interface_t * interface, const char* dns);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。
dns | const char* | 网卡dns。

network_interface_set_gateway 函数

  • 函数功能：

网卡接口设置DNS。

  • 函数原型：
ret_t network_interface_set_gateway (network_interface_t * interface, const char* gateway, const char* dev);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。
gateway | const char* | 网卡网关。
dev | const char* | 出口网卡设备名。

network_interface_set_ipaddr 函数

  • 函数功能：

网卡接口设置IP地址。

  • 函数原型：
ret_t network_interface_set_ipaddr (network_interface_t * interface, const char* ipaddr, const char* netmask);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。
ipaddr | const char* | 网卡IP。
netmask | const char* | 网卡MASK。

network_interface_set_wifi_ap 函数

  • 函数功能：

网卡接口设置WIFI AP模式。

  • 函数原型：
ret_t network_interface_set_wifi_ap (network_interface_t * interface, const char* essid, const char* passwd, network_interface_wifi_auth_t   auth, uint8_t  channel, network_interface_wifi_freq_t   freq, uint8_t  hidden);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。
essid | const char* | wifi帐号 。
passwd | const char* | wifi密码。
auth | network_interface_wifi_auth_t | wifi认证方式。
channel | uint8_t | wifi通道。
freq | network_interface_wifi_freq_t | wifi频段。
hidden | uint8_t | wifi是否隐藏。

network_interface_set_wifi_sta 函数

  • 函数功能：

网卡接口设置WIFI STA模式。

  • 函数原型：
ret_t network_interface_set_wifi_sta (network_interface_t * interface, const char* essid, const char* passwd, network_interface_wifi_auth_t   auth);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | RET_OK表示成功，否则失败。
interface | network_interface_t * | 网卡对象。
essid | const char* | wifi帐号 。
passwd | const char* | wifi密码。
auth | network_interface_wifi_auth_t | wifi认证方式。


network_interface_type_t

概述

属性描述网卡类型。

常量

名称 | 说明
NETWORK_INTERFACE_TYPE_ETH | 以太网。
NETWORK_INTERFACE_TYPE_WIFI | WIFI。
NETWORK_INTERFACE_TYPE_MOBILE | 3G/4G/5G。
NETWORK_INTERFACE_TYPE_UNKNOWN | 未知类型。


network_interface_wifi_auth_t

概述

属性描述WIFI的认证方式。

常量

名称 | 说明
NETWORK_INTERFACE_WIFI_AUTH_WEP | WEP认证。
NETWORK_INTERFACE_WIFI_AUTH_WPAWPA2 | WPA/WPA2 认证。
NETWORK_INTERFACE_WIFI_AUTH_NONE | 无认证。


network_interface_wifi_freq_t

概述

属性描述WIFI的频段。

常量

名称 | 说明
NETWORK_INTERFACE_WIFI_FREQ_2_4G | 2.4G频段。
NETWORK_INTERFACE_WIFI_FREQ_5G | 5G频段。


object_array_t

概述

简单的动态数组，内部存放value对象。

访问时属性名称为：

  • “size”/”length” 用于获取数组的长度。
  • index 用于访问属性，-1可以用来追加新元素。

函数

函数名称 | 说明
object_array_avg | 求平均值。
object_array_cast | 转换为object_array对象。
object_array_clear_props | 清除全部属性。
object_array_clone | 克隆对象。
object_array_create | 创建对象。
object_array_create_with_str | 通过字符串构建数组。
object_array_dup | 复制部分或全部元素。
object_array_get | 获取指定序数的元素。
object_array_get_and_remove | 在指定位置删除一个元素，并返回它。
object_array_index_of | 查找元素出现的第一个位置。
object_array_insert | 在指定位置插入一个元素。
object_array_join | 使用分隔符把各个元素拼接起来。
object_array_last_index_of | 查找元素出现的最后一个位置。
object_array_max | 查找最大值。
object_array_min | 查找最小值。
object_array_pop | 弹出最后一个元素。
object_array_push | 追加一个元素。
object_array_remove | 在指定位置删除一个元素。
object_array_remove_value | 删除指定的值。
object_array_reverse | 反向。
object_array_set | 设置指定序数的元素。
object_array_shift | 弹出第一个元素。
object_array_sort | 排序。
object_array_sort_as_double | 按浮点数排序。
object_array_sort_as_int | 按整数排序。
object_array_sort_as_str | 按字符串排序。
object_array_sum | 求和。
object_array_unref | for script gc

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 属性数组的容量。
props | value_t* | 属性数组。
size | uint32_t | 属性个数。

object_array_avg 函数

  • 函数功能：

求平均值。

  • 函数原型：
ret_t object_array_avg (tk_object_t* obj, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
result | value_t* | 结果。

object_array_cast 函数

  • 函数功能：

转换为object_array对象。

  • 函数原型：
object_array_t* object_array_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_array_t* | object_array对象。
obj | tk_object_t* | object_array对象。

object_array_clear_props 函数

  • 函数功能：

清除全部属性。

  • 函数原型：
ret_t object_array_clear_props (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。

object_array_clone 函数

  • 函数功能：

克隆对象。

  • 函数原型：
tk_object_t* object_array_clone (tk_object_t* o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
o | tk_object_t* | 被克隆的对象。

object_array_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_array_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。

object_array_create_with_str 函数

  • 函数功能：

通过字符串构建数组。

  • 函数原型：
tk_object_t* object_array_create_with_str (const char* str, const char* sep, value_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
str | const char* | 字符串
sep | const char* | 分隔符。
type | value_type_t | 类型。

object_array_dup 函数

  • 函数功能：

复制部分或全部元素。

  • 函数原型：
tk_object_t* object_array_dup (tk_object_t* obj, uint32_t start, uint32_t end);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
obj | tk_object_t* | 数组对象。
start | uint32_t | 开始的位置。
end | uint32_t | 结束的位置(不包含)。

object_array_get 函数

  • 函数功能：

获取指定序数的元素。

  • 函数原型：
ret_t object_array_get (tk_object_t* obj, uint32_t i, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
i | uint32_t | 序数。
v | value_t* | 返回的元素。

object_array_get_and_remove 函数

  • 函数功能：

在指定位置删除一个元素，并返回它。

  • 函数原型：
ret_t object_array_get_and_remove (tk_object_t* obj, uint32_t index, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
index | uint32_t | 位置。
v | value_t* | 用于返回值。

object_array_index_of 函数

  • 函数功能：

查找元素出现的第一个位置。

  • 函数原型：
int32_t object_array_index_of (tk_object_t* obj, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果找到返回其位置，否则返回-1。
obj | tk_object_t* | 对象。
v | const value_t* | 值。

object_array_insert 函数

  • 函数功能：

在指定位置插入一个元素。

  • 函数原型：
ret_t object_array_insert (tk_object_t* obj, uint32_t index, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
index | uint32_t | 位置。
v | const value_t* | 值。

object_array_join 函数

  • 函数功能：

使用分隔符把各个元素拼接起来。

  • 函数原型：
ret_t object_array_join (tk_object_t* obj, const char* sep, str_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
sep | const char* | 分隔符。
result | str_t* | 生成的字符串。

object_array_last_index_of 函数

  • 函数功能：

查找元素出现的最后一个位置。

  • 函数原型：
int32_t object_array_last_index_of (tk_object_t* obj, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果找到返回其位置，否则返回-1。
obj | tk_object_t* | 对象。
v | const value_t* | 值。

object_array_max 函数

  • 函数功能：

查找最大值。

  • 函数原型：
ret_t object_array_max (tk_object_t* obj, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
result | value_t* | 结果。

object_array_min 函数

  • 函数功能：

查找最小值。

  • 函数原型：
ret_t object_array_min (tk_object_t* obj, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
result | value_t* | 结果。

object_array_pop 函数

  • 函数功能：

弹出最后一个元素。

  • 函数原型：
ret_t object_array_pop (tk_object_t* obj, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
v | value_t* | 返回值。

object_array_push 函数

  • 函数功能：

追加一个元素。

  • 函数原型：
ret_t object_array_push (tk_object_t* obj, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
v | const value_t* | 值。

object_array_remove 函数

  • 函数功能：

在指定位置删除一个元素。

  • 函数原型：
ret_t object_array_remove (tk_object_t* obj, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
index | uint32_t | 位置。

object_array_remove_value 函数

  • 函数功能：

删除指定的值。

  • 函数原型：
ret_t object_array_remove_value (tk_object_t* obj, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
v | value_t* | 值。

object_array_reverse 函数

  • 函数功能：

反向。

  • 函数原型：
ret_t object_array_reverse (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。

object_array_set 函数

  • 函数功能：

设置指定序数的元素。

  • 函数原型：
ret_t object_array_set (tk_object_t* obj, uint32_t i, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
i | uint32_t | 序数。
v | const value_t* | 元素。

object_array_shift 函数

  • 函数功能：

弹出第一个元素。

  • 函数原型：
ret_t object_array_shift (tk_object_t* obj, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。
v | value_t* | 返回值。

object_array_sort 函数

  • 函数功能：

排序。

  • 函数原型：
ret_t object_array_sort (tk_object_t* obj, tk_compare_t cmp);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
cmp | tk_compare_t | 比较函数。

object_array_sort_as_double 函数

  • 函数功能：

按浮点数排序。

  • 函数原型：
ret_t object_array_sort_as_double (tk_object_t* obj, bool_t ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
ascending | bool_t | 升序或降序。

object_array_sort_as_int 函数

  • 函数功能：

按整数排序。

  • 函数原型：
ret_t object_array_sort_as_int (tk_object_t* obj, bool_t ascending);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
ascending | bool_t | 升序或降序。

object_array_sort_as_str 函数

  • 函数功能：

按字符串排序。

  • 函数原型：
ret_t object_array_sort_as_str (tk_object_t* obj, bool_t ascending, bool_t ignore_case);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
ascending | bool_t | 升序或降序。
ignore_case | bool_t | 是否忽略大小写。

object_array_sum 函数

  • 函数功能：

求和。

  • 函数原型：
ret_t object_array_sum (tk_object_t* obj, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 数组对象。
result | value_t* | 结果。

object_array_unref 函数

  • 函数功能：

for script gc

  • 函数原型：
ret_t object_array_unref (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。

capacity 属性

属性数组的容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

props 属性

属性数组。

  • 类型：value_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

属性个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


object_cmd_t

概述

对象常见命令定义

常量

名称 | 说明
TK_OBJECT_CMD_SAVE | 保存命令
TK_OBJECT_CMD_RELOAD | 重新加载命令
TK_OBJECT_CMD_MOVE_UP | 和前一个属性交换位置>参数为属性的名称或路径。
TK_OBJECT_CMD_MOVE_DOWN | 和后一个属性交换位置>参数为属性的名称或路径。
TK_OBJECT_CMD_REMOVE | 删除属性。>参数为属性的名称或路径。
TK_OBJECT_CMD_REMOVE_CHECKED | 删除勾选的属性。>参数为属性的名称或路径。
TK_OBJECT_CMD_CLEAR | 清除全部属性。>参数为属性的名称或路径。
TK_OBJECT_CMD_ADD | 增加子项。>参数为属性的名称或路径。
TK_OBJECT_CMD_DETAIL | 显示对象详细信息。>参数为属性的名称或路径。
TK_OBJECT_CMD_EDIT | 编辑子项。>参数为属性的名称或路径。


object_compositor_t

概述

将两个对象包装为一个对象，优先访问第一个对象，如果访问失败则访问第二个对象。

函数

函数名称 | 说明
object_compositor_cast | 转换为object_compositor对象。
object_compositor_create | 创建对象。

object_compositor_cast 函数

  • 函数功能：

转换为object_compositor对象。

  • 函数原型：
object_compositor_t* object_compositor_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_compositor_t* | object_compositor对象。
obj | tk_object_t* | object_compositor对象。

object_compositor_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_compositor_create (tk_object_t* obj1, tk_object_t* obj2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
obj1 | tk_object_t* | 对象1。
obj2 | tk_object_t* | 对象2。


object_date_time_t

概述

将date_time包装成object。

函数

函数名称 | 说明
object_date_time_cast | 转换为object_date_time对象。
object_date_time_create | 创建对象。

属性

属性名称 | 类型 | 说明
dt | date_time_t* | date time对象。

object_date_time_cast 函数

  • 函数功能：

转换为object_date_time对象。

  • 函数原型：
object_date_time_t* object_date_time_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_date_time_t* | object_date_time对象。
obj | tk_object_t* | object_date_time对象。

object_date_time_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_date_time_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。

dt 属性

date time对象。

  • 类型：date_time_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


object_default_t

概述

对象接口的缺省实现。

通用当作 map 数据结构使用，内部用有序数组保存所有属性，因此可以快速查找指定名称的属性。

示例

// 创建默认对象
tk_object_t *obj = object_default_create();

// 设置属性
tk_object_set_prop_str(obj, "name", "awplc");
tk_object_set_prop_int(obj, "age", 18);
tk_object_set_prop_double(obj, "weight", 60.5);

// 获取属性
ENSURE(tk_str_eq(tk_object_get_prop_str(obj, "name"), "awplc"));
ENSURE(tk_object_get_prop_int(obj, "age", 0) == 18);
ENSURE(tk_object_get_prop_double(obj, "weight", 0) == 60.5);

// 遍历属性
tk_object_foreach_prop(obj, visit_obj, NULL);

// 释放对象
TK_OBJECT_UNREF(obj);

函数

函数名称 | 说明
object_default_cast | 转换为object_default对象。
object_default_clear_props | 清除全部属性。
object_default_clone | 克隆对象。
object_default_create | 创建对象。
object_default_create_ex | 创建对象。
object_default_find_prop | 查找满足条件的属性，并返回它的值。
object_default_unref | for script gc

object_default_cast 函数

  • 函数功能：

转换为object_default对象。

  • 函数原型：
object_default_t* object_default_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_default_t* | object_default对象。
obj | tk_object_t* | object_default对象。

object_default_clear_props 函数

  • 函数功能：

清除全部属性。

  • 函数原型：
ret_t object_default_clear_props (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。

object_default_clone 函数

  • 函数功能：

克隆对象。

  • 函数原型：
tk_object_t* object_default_clone (object_default_t* o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
o | object_default_t* | 被克隆的对象。

object_default_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_default_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。

object_default_create_ex 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_default_create_ex (bool_t enable_path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
enable_path | bool_t | 是否支持按路径访问属性。

object_default_find_prop 函数

  • 函数功能：

查找满足条件的属性，并返回它的值。

  • 函数原型：
value_t* object_default_find_prop (tk_object_t* obj, tk_compare_t cmp, const void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | 返回属性的值。
obj | tk_object_t* | 对象。
cmp | tk_compare_t | 比较函数。
data | const void* | 要比较的数据。

object_default_unref 函数

  • 函数功能：

for script gc

  • 函数原型：
ret_t object_default_unref (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 对象。


object_locker_t

概述

对现有的object对象进行装饰，添加访问互斥功能。

函数

函数名称 | 说明
object_locker_cast | 转换为object_locker对象。
object_locker_create | 创建对象。

object_locker_cast 函数

  • 函数功能：

转换为object_locker对象。

  • 函数原型：
object_locker_t* object_locker_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_locker_t* | object_locker对象。
obj | tk_object_t* | object_locker对象。

object_locker_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_locker_create (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
obj | tk_object_t* | 待装饰的对象。


object_prop_t

概述

对象常见属性定义

常量

名称 | 说明
TK_OBJECT_PROP_SIZE | 属性的个数。
TK_OBJECT_PROP_CHECKED | 属性是否勾选。


object_rbuffer_t

概述

将rbuffer包装成object。

函数

函数名称 | 说明
object_rbuffer_cast | 转换为object_rbuffer对象。
object_rbuffer_create | 创建rbuffer对象。

属性

属性名称 | 类型 | 说明
rbuffer | rbuffer_t* | rbuffer对象。

object_rbuffer_cast 函数

  • 函数功能：

转换为object_rbuffer对象。

  • 函数原型：
object_rbuffer_t* object_rbuffer_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_rbuffer_t* | object_rbuffer对象。
obj | tk_object_t* | object_rbuffer对象。

object_rbuffer_create 函数

  • 函数功能：

创建rbuffer对象。

  • 函数原型：
tk_object_t* object_rbuffer_create (const uint8_t* data, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
data | const uint8_t* | 缓冲区。
capacity | uint32_t | 缓冲区的容量。

rbuffer 属性

rbuffer对象。

  • 类型：rbuffer_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


object_t

概述

对象接口。

函数

函数名称 | 说明
object_can_exec | 检查是否可以执行指定的命令。
object_can_exec_by_path | 检查是否可以执行指定的命令。
object_clone | clone对象。
object_compare | 比较两个对象。
object_copy_prop | 拷贝指定的属性。
object_create | 创建对象。
object_create_ex | 创建对象。
object_eval | 计算一个表达式，表达式中引用的变量从prop中获取。
object_exec | 执行指定的命令。
object_exec_by_path | 执行指定的命令。
object_foreach_prop | 遍历所有属性。
object_get_child_object | 获取下一级子对象。
object_get_desc | 获取对象的描述信息。
object_get_prop | 获取指定属性的值。
object_get_prop_bool | 获取指定属性的bool类型的值。
object_get_prop_bool_by_path | 获取指定属性的bool类型的值。
object_get_prop_by_path | 获取指定path属性的值。
object_get_prop_double | 获取指定属性的浮点数类型的值。
object_get_prop_float | 获取指定属性的浮点数类型的值。
object_get_prop_float_by_path | 获取指定属性的浮点数类型的值。
object_get_prop_int | 获取指定属性的整数类型的值。
object_get_prop_int_by_path | 获取指定属性的整数类型的值。
object_get_prop_int16 | 获取指定属性的int16类型的值。
object_get_prop_int32 | 获取指定属性的int32类型的值。
object_get_prop_int64 | 获取指定属性的int64类型的值。
object_get_prop_int8 | 获取指定属性的int8类型的值。
object_get_prop_object | 获取指定属性的object类型的值。
object_get_prop_object_by_path | 获取指定属性的object类型的值。
object_get_prop_pointer | 获取指定属性的指针类型的值。
object_get_prop_pointer_by_path | 获取指定属性的指针类型的值。
object_get_prop_str | 获取指定属性的字符串类型的值。
object_get_prop_str_by_path | 获取指定属性的字符串类型的值。
object_get_prop_uint16 | 获取指定属性的uint16类型的值。
object_get_prop_uint32 | 获取指定属性的uint32类型的值。
object_get_prop_uint64 | 获取指定属性的uint64类型的值。
object_get_prop_uint8 | 获取指定属性的uint8类型的值。
object_get_size | 获取对象占用内存的大小。
object_get_type | 获取对象的类型名称。
object_has_prop | 检查是否存在指定的属性。
object_has_prop_by_path | 检查是否存在指定的属性。
object_is_collection | 判断对象是否是集合。
object_notify_changed | 触发EVT_PROPS_CHANGED事件。
object_ref | 引用计数加1。
object_remove_prop | 删除指定属性。
object_set_name | 设置对象的名称。
object_set_prop | 设置指定属性的值。
object_set_prop_bool | 设置指定属性的bool类型的值。
object_set_prop_bool_by_path | 设置指定属性的bool类型的值。
object_set_prop_by_path | 设置指定属性的值。
object_set_prop_double | 设置指定属性的浮点数类型的值。
object_set_prop_float | 设置指定属性的浮点数类型的值。
object_set_prop_float_by_path | 设置指定属性的浮点数类型的值。
object_set_prop_int | 设置指定属性的整数类型的值。
object_set_prop_int_by_path | 设置指定属性的整数类型的值。
object_set_prop_int16 | 设置指定属性的int16类型的值。
object_set_prop_int32 | 设置指定属性的int32类型的值。
object_set_prop_int64 | 设置指定属性的int64类型的值。
object_set_prop_int8 | 设置指定属性的int8类型的值。
object_set_prop_object | 设置指定属性的object类型的值。
object_set_prop_object_by_path | 设置指定属性的object类型的值。
object_set_prop_pointer | 设置指定属性的指针类型的值。
object_set_prop_pointer_by_path | 设置指定属性的指针类型的值。
object_set_prop_str | 设置指定属性的字符串类型的值。
object_set_prop_str_by_path | 设置指定属性的字符串类型的值。
object_set_prop_uint16 | 设置指定属性的uint16类型的值。
object_set_prop_uint32 | 设置指定属性的uint32类型的值。
object_set_prop_uint64 | 设置指定属性的uint64类型的值。
object_set_prop_uint8 | 设置指定属性的uint8类型的值。
object_unref | 引用计数减1。引用计数为0时，销毁对象。

属性

属性名称 | 类型 | 说明
name | char* | 对象的名称。
ref_count | int32_t | 引用计数。

object_can_exec 函数

  • 函数功能：

检查是否可以执行指定的命令。

  • 函数原型：
bool_t object_can_exec (object_t* obj, const char* name, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示可以执行，否则表示不可以执行。
obj | object_t* | object对象。
name | const char* | 命令的名称。
args | const char* | 命令的参数。

object_can_exec_by_path 函数

  • 函数功能：

检查是否可以执行指定的命令。

  • 函数原型：
bool_t object_can_exec_by_path (object_t* obj, const char* path, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示可以执行，否则表示不可以执行。
obj | object_t* | object对象。
path | const char* | 命令的path。
args | const char* | 命令的参数。

object_clone 函数

  • 函数功能：

clone对象。

  • 函数原型：
object_t* object_clone (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回object对象。
obj | object_t* | object对象。

object_compare 函数

  • 函数功能：

比较两个对象。

  • 函数原型：
int object_compare (object_t* obj, object_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回比较结果。
obj | object_t* | object对象。
other | object_t* | 比较的object对象。

object_copy_prop 函数

  • 函数功能：

拷贝指定的属性。

  • 函数原型：
ret_t object_copy_prop (object_t* obj, object_t* src, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | 目标对象。
src | object_t* | 源对象。
name | const char* | 属性的名称。

object_create 函数

  • 函数功能：

创建对象。

仅供子类调用。

  • 函数原型：
object_t* object_create (const object_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回object对象。
vt | const object_vtable_t* | 虚函数表。

object_create_ex 函数

  • 函数功能：

创建对象。

仅供子类调用。

  • 函数原型：
object_t* object_create_ex (const object_vtable_t* vt, uint32_t extra_data_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回object对象。
vt | const object_vtable_t* | 虚函数表。
extra_data_size | uint32_t | 额外的内存大小。

object_eval 函数

  • 函数功能：

计算一个表达式，表达式中引用的变量从prop中获取。

  • 函数原型：
ret_t object_eval (object_t* obj, const char* expr, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
expr | const char* | 表达式。
v | value_t* | 返回计算结果。

object_exec 函数

  • 函数功能：

执行指定的命令。

  • 函数原型：
ret_t object_exec (object_t* obj, const char* name, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 命令的名称。
args | const char* | 命令的参数。

object_exec_by_path 函数

  • 函数功能：

执行指定的命令。

  • 函数原型：
ret_t object_exec_by_path (object_t* obj, const char* path, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 命令的path。
args | const char* | 命令的参数。

object_foreach_prop 函数

  • 函数功能：

遍历所有属性。

  • 函数原型：
ret_t object_foreach_prop (object_t* obj, tk_visit_t on_prop, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
on_prop | tk_visit_t | 回调函数(data参数为named_value_t类型)。
ctx | void* | 回调函数上下文。

object_get_child_object 函数

  • 函数功能：

获取下一级子对象。 属性路径之间使用符号”.”分割，例如：name.sub_name。

  • 函数原型：
object_t* object_get_child_object (object_t* obj, const char* path, const char** next_path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回下一级子对象，如果找不到则返回 NULL。
obj | object_t* | object对象。
path | const char* | 属性路径。
next_path | const char** | 返回下一级属性路径。

object_get_desc 函数

  • 函数功能：

获取对象的描述信息。

  • 函数原型：
const char* object_get_desc (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对象的描述信息。
obj | object_t* | object对象。

object_get_prop 函数

  • 函数功能：

获取指定属性的值。

  • 函数原型：
ret_t object_get_prop (object_t* obj, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
v | value_t* | 返回属性的值。

object_get_prop_bool 函数

  • 函数功能：

获取指定属性的bool类型的值。

  • 函数原型：
bool_t object_get_prop_bool (object_t* obj, const char* name, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回指定属性的bool类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | bool_t | 缺省值。

object_get_prop_bool_by_path 函数

  • 函数功能：

获取指定属性的bool类型的值。

  • 函数原型：
bool_t object_get_prop_bool_by_path (object_t* obj, const char* path, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回指定属性的bool类型的值。
obj | object_t* | object对象。
path | const char* | 属性的path。
defval | bool_t | 缺省值。

object_get_prop_by_path 函数

  • 函数功能：

获取指定path属性的值。

  • 函数原型：
ret_t object_get_prop_by_path (object_t* obj, const char* path, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path，各级之间用.分隔。
v | value_t* | 返回属性的值。

object_get_prop_double 函数

  • 函数功能：

获取指定属性的浮点数类型的值。

  • 函数原型：
double object_get_prop_double (object_t* obj, const char* name, double defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回指定属性的浮点数类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | double | 缺省值。

object_get_prop_float 函数

  • 函数功能：

获取指定属性的浮点数类型的值。

  • 函数原型：
float_t object_get_prop_float (object_t* obj, const char* name, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回指定属性的浮点数类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | float_t | 缺省值。

object_get_prop_float_by_path 函数

  • 函数功能：

获取指定属性的浮点数类型的值。

e

  • 函数原型：
float_t object_get_prop_float_by_path (object_t* obj, const char* path, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回指定属性的浮点数类型的值。
obj | object_t* | object对象。
path | const char* | 属性的path。
defval | float_t | 缺省值。

object_get_prop_int 函数

  • 函数功能：

获取指定属性的整数类型的值。

  • 函数原型：
int32_t object_get_prop_int (object_t* obj, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定属性的整数类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | int32_t | 缺省值。

object_get_prop_int_by_path 函数

  • 函数功能：

获取指定属性的整数类型的值。

  • 函数原型：
int32_t object_get_prop_int_by_path (object_t* obj, const char* path, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定属性的整数类型的值。
obj | object_t* | object对象。
path | const char* | 属性的path。
defval | int32_t | 缺省值。

object_get_prop_int16 函数

  • 函数功能：

获取指定属性的int16类型的值。

  • 函数原型：
int16_t object_get_prop_int16 (object_t* obj, const char* name, int16_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int16_t | 返回指定属性的int16类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | int16_t | 缺省值。

object_get_prop_int32 函数

  • 函数功能：

获取指定属性的int32类型的值。

  • 函数原型：
int32_t object_get_prop_int32 (object_t* obj, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定属性的int32类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | int32_t | 缺省值。

object_get_prop_int64 函数

  • 函数功能：

获取指定属性的int64类型的值。

  • 函数原型：
int64_t object_get_prop_int64 (object_t* obj, const char* name, int64_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回指定属性的int64类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | int64_t | 缺省值。

object_get_prop_int8 函数

  • 函数功能：

获取指定属性的int8类型的值。

  • 函数原型：
int8_t object_get_prop_int8 (object_t* obj, const char* name, int8_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int8_t | 返回指定属性的int8类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | int8_t | 缺省值。

object_get_prop_object 函数

  • 函数功能：

获取指定属性的object类型的值。

  • 函数原型：
object_t* object_get_prop_object (object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回指定属性的object类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。

object_get_prop_object_by_path 函数

  • 函数功能：

获取指定属性的object类型的值。

  • 函数原型：
object_t* object_get_prop_object_by_path (object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回指定属性的object类型的值。
obj | object_t* | object对象。
path | const char* | 属性的path。

object_get_prop_pointer 函数

  • 函数功能：

获取指定属性的指针类型的值。

  • 函数原型：
void* object_get_prop_pointer (object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回指定属性的指针类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。

object_get_prop_pointer_by_path 函数

  • 函数功能：

获取指定属性的指针类型的值。

  • 函数原型：
void* object_get_prop_pointer_by_path (object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回指定属性的指针类型的值。
obj | object_t* | object对象。
path | const char* | 属性的path。

object_get_prop_str 函数

  • 函数功能：

获取指定属性的字符串类型的值。

  • 函数原型：
const char* object_get_prop_str (object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定属性的字符串类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。

object_get_prop_str_by_path 函数

  • 函数功能：

获取指定属性的字符串类型的值。

  • 函数原型：
const char* object_get_prop_str_by_path (object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定属性的字符串类型的值。
obj | object_t* | object对象。
path | const char* | 属性的path。

object_get_prop_uint16 函数

  • 函数功能：

获取指定属性的uint16类型的值。

  • 函数原型：
uint16_t object_get_prop_uint16 (object_t* obj, const char* name, uint16_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回指定属性的uint16类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | uint16_t | 缺省值。

object_get_prop_uint32 函数

  • 函数功能：

获取指定属性的uint32类型的值。

  • 函数原型：
uint32_t object_get_prop_uint32 (object_t* obj, const char* name, uint32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回指定属性的uint32类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | uint32_t | 缺省值。

object_get_prop_uint64 函数

  • 函数功能：

获取指定属性的uint64类型的值。

  • 函数原型：
uint64_t object_get_prop_uint64 (object_t* obj, const char* name, uint64_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回指定属性的uint64类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | uint64_t | 缺省值。

object_get_prop_uint8 函数

  • 函数功能：

获取指定属性的uint8类型的值。

  • 函数原型：
uint8_t object_get_prop_uint8 (object_t* obj, const char* name, uint8_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回指定属性的uint8类型的值。
obj | object_t* | object对象。
name | const char* | 属性的名称。
defval | uint8_t | 缺省值。

object_get_size 函数

  • 函数功能：

获取对象占用内存的大小。

  • 函数原型：
uint32_t object_get_size (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回对象占用内存的大小。
obj | object_t* | object对象。

object_get_type 函数

  • 函数功能：

获取对象的类型名称。

  • 函数原型：
const char* object_get_type (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对象的类型名称。
obj | object_t* | object对象。

object_has_prop 函数

  • 函数功能：

检查是否存在指定的属性。

  • 函数原型：
bool_t object_has_prop (object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
obj | object_t* | object对象。
name | const char* | 属性的名称。

object_has_prop_by_path 函数

  • 函数功能：

检查是否存在指定的属性。

  • 函数原型：
bool_t object_has_prop_by_path (object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
obj | object_t* | object对象。
path | const char* | 属性的path，各级之间用.分隔。

object_is_collection 函数

  • 函数功能：

判断对象是否是集合。

  • 函数原型：
bool_t object_is_collection (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是集合，否则不是。
obj | object_t* | object对象。

object_notify_changed 函数

  • 函数功能：

触发EVT_PROPS_CHANGED事件。

  • 函数原型：
ret_t object_notify_changed (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。

object_ref 函数

  • 函数功能：

引用计数加1。

  • 函数原型：
object_t* object_ref (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_t* | 返回object对象。
obj | object_t* | object对象。

object_remove_prop 函数

  • 函数功能：

删除指定属性。

  • 函数原型：
ret_t object_remove_prop (object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。

object_set_name 函数

  • 函数功能：

设置对象的名称。

  • 函数原型：
ret_t object_set_name (object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 对象的名称。

object_set_prop 函数

  • 函数功能：

设置指定属性的值。

  • 函数原型：
ret_t object_set_prop (object_t* obj, const char* name, value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | value_t* | 属性的值。

object_set_prop_bool 函数

  • 函数功能：

设置指定属性的bool类型的值。

  • 函数原型：
ret_t object_set_prop_bool (object_t* obj, const char* name, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | bool_t | 属性的值。

object_set_prop_bool_by_path 函数

  • 函数功能：

设置指定属性的bool类型的值。

  • 函数原型：
ret_t object_set_prop_bool_by_path (object_t* obj, const char* path, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | bool_t | 属性的值。

object_set_prop_by_path 函数

  • 函数功能：

设置指定属性的值。

  • 函数原型：
ret_t object_set_prop_by_path (object_t* obj, const char* path, value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | value_t* | 属性的值。

object_set_prop_double 函数

  • 函数功能：

设置指定属性的浮点数类型的值。

  • 函数原型：
ret_t object_set_prop_double (object_t* obj, const char* name, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | double | 属性的值。

object_set_prop_float 函数

  • 函数功能：

设置指定属性的浮点数类型的值。

  • 函数原型：
ret_t object_set_prop_float (object_t* obj, const char* name, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | float_t | 属性的值。

object_set_prop_float_by_path 函数

  • 函数功能：

设置指定属性的浮点数类型的值。

  • 函数原型：
ret_t object_set_prop_float_by_path (object_t* obj, const char* path, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | float_t | 属性的值。

object_set_prop_int 函数

  • 函数功能：

设置指定属性的整数类型的值。

  • 函数原型：
ret_t object_set_prop_int (object_t* obj, const char* name, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | int32_t | 属性的值。

object_set_prop_int_by_path 函数

  • 函数功能：

设置指定属性的整数类型的值。

  • 函数原型：
ret_t object_set_prop_int_by_path (object_t* obj, const char* path, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | int32_t | 属性的值。

object_set_prop_int16 函数

  • 函数功能：

设置指定属性的int16类型的值。

  • 函数原型：
ret_t object_set_prop_int16 (object_t* obj, const char* name, int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | int16_t | 属性的值。

object_set_prop_int32 函数

  • 函数功能：

设置指定属性的int32类型的值。

  • 函数原型：
ret_t object_set_prop_int32 (object_t* obj, const char* name, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | int32_t | 属性的值。

object_set_prop_int64 函数

  • 函数功能：

设置指定属性的int64类型的值。

  • 函数原型：
ret_t object_set_prop_int64 (object_t* obj, const char* name, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | int64_t | 属性的值。

object_set_prop_int8 函数

  • 函数功能：

设置指定属性的int8类型的值。

  • 函数原型：
ret_t object_set_prop_int8 (object_t* obj, const char* name, int8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | int8_t | 属性的值。

object_set_prop_object 函数

  • 函数功能：

设置指定属性的object类型的值。

  • 函数原型：
ret_t object_set_prop_object (object_t* obj, const char* name, object_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | object_t* | 属性的值。

object_set_prop_object_by_path 函数

  • 函数功能：

设置指定属性的object类型的值。

  • 函数原型：
ret_t object_set_prop_object_by_path (object_t* obj, const char* path, object_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | object_t* | 属性的值。

object_set_prop_pointer 函数

  • 函数功能：

设置指定属性的指针类型的值。

  • 函数原型：
ret_t object_set_prop_pointer (object_t* obj, const char* name, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | void* | 属性的值。

object_set_prop_pointer_by_path 函数

  • 函数功能：

设置指定属性的指针类型的值。

  • 函数原型：
ret_t object_set_prop_pointer_by_path (object_t* obj, const char* path, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | void* | 属性的值。

object_set_prop_str 函数

  • 函数功能：

设置指定属性的字符串类型的值。

  • 函数原型：
ret_t object_set_prop_str (object_t* obj, const char* name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | const char* | 属性的值。

object_set_prop_str_by_path 函数

  • 函数功能：

设置指定属性的字符串类型的值。

  • 函数原型：
ret_t object_set_prop_str_by_path (object_t* obj, const char* path, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
path | const char* | 属性的path。
value | const char* | 属性的值。

object_set_prop_uint16 函数

  • 函数功能：

设置指定属性的uint16类型的值。

  • 函数原型：
ret_t object_set_prop_uint16 (object_t* obj, const char* name, uint16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | uint16_t | 属性的值。

object_set_prop_uint32 函数

  • 函数功能：

设置指定属性的uint32类型的值。

  • 函数原型：
ret_t object_set_prop_uint32 (object_t* obj, const char* name, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | uint32_t | 属性的值。

object_set_prop_uint64 函数

  • 函数功能：

设置指定属性的uint64类型的值。

  • 函数原型：
ret_t object_set_prop_uint64 (object_t* obj, const char* name, uint64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | uint64_t | 属性的值。

object_set_prop_uint8 函数

  • 函数功能：

设置指定属性的uint8类型的值。

  • 函数原型：
ret_t object_set_prop_uint8 (object_t* obj, const char* name, uint8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。
name | const char* | 属性的名称。
value | uint8_t | 属性的值。

object_unref 函数

  • 函数功能：

引用计数减1。引用计数为0时，销毁对象。

  • 函数原型：
ret_t object_unref (object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | object_t* | object对象。

name 属性

对象的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ref_count 属性

引用计数。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


object_typed_array_t

概述

将typed_array包装成object。

函数

函数名称 | 说明
object_typed_array_cast | 转换为object_typed_array对象。
object_typed_array_create | 创建对象。

属性

属性名称 | 类型 | 说明
arr | typed_array_t* | typed array对象。

object_typed_array_cast 函数

  • 函数功能：

转换为object_typed_array对象。

  • 函数原型：
object_typed_array_t* object_typed_array_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_typed_array_t* | object_typed_array对象。
obj | tk_object_t* | object_typed_array对象。

object_typed_array_create 函数

  • 函数功能：

创建对象。

  • 函数原型：
tk_object_t* object_typed_array_create (value_type_t type, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
type | value_type_t | 元素的类型。
capacity | uint32_t | 数组的初始容量(元素个数)。

arr 属性

typed array对象。

  • 类型：typed_array_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


object_wbuffer_t

概述

将wbuffer包装成object。

函数

函数名称 | 说明
object_wbuffer_cast | 转换为object_wbuffer对象。
object_wbuffer_create | 创建wbuffer对象。
object_wbuffer_create_extendable | 创建可扩展的wbuffer对象。

属性

属性名称 | 类型 | 说明
wbuffer | wbuffer_t* | wbuffer对象。

object_wbuffer_cast 函数

  • 函数功能：

转换为object_wbuffer对象。

  • 函数原型：
object_wbuffer_t* object_wbuffer_cast (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | object_wbuffer_t* | object_wbuffer对象。
obj | tk_object_t* | object_wbuffer对象。

object_wbuffer_create 函数

  • 函数功能：

创建wbuffer对象。

  • 函数原型：
tk_object_t* object_wbuffer_create (uint8_t* data, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
data | uint8_t* | 缓冲区。
capacity | uint32_t | 缓冲区的容量。

object_wbuffer_create_extendable 函数

  • 函数功能：

创建可扩展的wbuffer对象。

  • 函数原型：
tk_object_t* object_wbuffer_create_extendable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。

wbuffer 属性

wbuffer对象。

  • 类型：wbuffer_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


object_widget_t

概述

将widget包装成object。

备注：主要用于 fscript 实现 widget.prop 方式访问控件属性。

函数

函数名称 | 说明
object_widget_create | 创建widget对象。

属性

属性名称 | 类型 | 说明
widget | widget_t* | widget对象。

object_widget_create 函数

  • 函数功能：

创建widget对象。

  • 函数原型：
tk_object_t* object_widget_create (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
widget | widget_t* | 控件。

widget 属性

widget对象。

  • 类型：widget_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


offset_change_event_t

概述

值变化事件。

函数

函数名称 | 说明
offset_change_event_cast | 把event对象转offset_change_event_t对象。
offset_change_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
new_offset | float_t | 新值。
old_offset | float_t | 旧值。

offset_change_event_cast 函数

  • 函数功能：

把event对象转offset_change_event_t对象。

  • 函数原型：
offset_change_event_t* offset_change_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | offset_change_event_t* | event对象。
event | event_t* | event对象。

offset_change_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* offset_change_event_init (offset_change_event_t* event, uint32_t type, void* target, float_t old_offset, float_t new_offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | offset_change_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
old_offset | float_t | 旧的偏移数据。
new_offset | float_t | 新的偏移数据。

new_offset 属性

新值。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

old_offset 属性

旧值。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


orientation_event_t

概述

滚轮事件。

函数

函数名称 | 说明
orientation_event_cast | 把event对象转orientation_event_t对象。
orientation_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
old_orientation | lcd_orientation_t | 旧的屏幕方向。
orientation | lcd_orientation_t | 屏幕方向。

orientation_event_cast 函数

  • 函数功能：

把event对象转orientation_event_t对象。

  • 函数原型：
orientation_event_t* orientation_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | orientation_event_t* | event对象。
event | event_t* | event对象。

orientation_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* orientation_event_init (orientation_event_t* event, uint32_t type, void* target, lcd_orientation_t old_orientation, lcd_orientation_t new_orientation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | orientation_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
old_orientation | lcd_orientation_t | 旧的屏幕方向。
new_orientation | lcd_orientation_t | 新的屏幕方向。

old_orientation 属性

旧的屏幕方向。

  • 类型：lcd_orientation_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

orientation 属性

屏幕方向。

  • 类型：lcd_orientation_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


overlay_t

概述

overlay窗口。

overlay窗口有点类似于非模态的dialog，但是它位置和大小是完全自由的，窗口管理器不会对它做任何限制。

如果overlay窗口有透明或半透效果，则不支持窗口动画，但可以通过移动窗口位置来实现类似动画的效果。

overlay_t是window_base_t的子类控件，window_base_t的函数均适用于overlay_t控件。

在xml中使用”overlay”标签创建窗口。需要指定坐标和大小，可以指定窗体样式和动画名称。如：

<overlay theme="basic" x="100" y="100" w="200" h="300">
...
</overlay>

更多用法请参考：overlay.xml

在c代码中使用函数overlay_create创建窗口。如：

widget_t* overlay = overlay_create(NULL, 100, 100, 200, 300);

完整示例请参考：overlay demo

可用通过style来设置窗口的风格，如背景颜色或图片等。如：

<style name="bricks">
<normal bg_image="bricks"  bg_image_draw_type="repeat"/>
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
overlay_cast | 转换为overlay对象(供脚本语言使用)。
overlay_create | 创建overlay对象
overlay_get_widget_vtable | 获取 overlay 虚表。
overlay_set_always_on_top | 设置是否总是在最上面。
overlay_set_click_through | 设置是否启用点击穿透。
overlay_set_modeless | 设置是否非模态窗口模式。

属性

属性名称 | 类型 | 说明
always_on_top | bool_t | 是否总在最上面。
click_through | bool_t | 点击穿透。点击没有子控件的位置，是否穿透到底层窗口。
modeless | bool_t | 非模态窗口。

overlay_cast 函数

  • 函数功能：

转换为overlay对象(供脚本语言使用)。

  • 函数原型：
widget_t* overlay_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | overlay对象。
widget | widget_t* | overlay对象。

overlay_create 函数

  • 函数功能：

创建overlay对象

  • 函数原型：
widget_t* overlay_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

overlay_get_widget_vtable 函数

  • 函数功能：

获取 overlay 虚表。

  • 函数原型：
const widget_vtable_t* overlay_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 overlay 虚表。

overlay_set_always_on_top 函数

  • 函数功能：

设置是否总是在最上面。

  • 函数原型：
ret_t overlay_set_always_on_top (widget_t* widget, bool_t always_on_top);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
always_on_top | bool_t | 是否总是在最上面。

overlay_set_click_through 函数

  • 函数功能：

设置是否启用点击穿透。

  • 函数原型：
ret_t overlay_set_click_through (widget_t* widget, bool_t click_through);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
click_through | bool_t | 是否启用点击穿透。

overlay_set_modeless 函数

  • 函数功能：

设置是否非模态窗口模式。

  • 函数原型：
ret_t overlay_set_modeless (widget_t* widget, bool_t modeless);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
modeless | bool_t | 是否非模态窗口模式。

always_on_top 属性

是否总在最上面。

缺省不启用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

click_through 属性

点击穿透。点击没有子控件的位置，是否穿透到底层窗口。

缺省不启用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

modeless 属性

非模态窗口。

缺省不启用。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


pages_t

概述

页面管理控件。

只有一个Page处于active状态，处于active状态的Page才能显示并接收事件。 常用于实现标签控件中的页面管理。

pages_t是widget_t的子类控件， widget_t的函数均适用于pages_t控件。

在xml中使用”pages”标签创建页面管理控件。如：

<tab_control x="0" y="0" w="100%" h="100%" >
<pages x="c" y="20" w="90%" h="-60" value="1">
...
</pages>
<tab_button_group>
...
</tab_button_group>
</tab_control>

更多用法请参考： tab control

函数

函数名称 | 说明
pages_cast | 转换为pages对象(供脚本语言使用)。
pages_create | 创建pages对象
pages_get_widget_vtable | 获取 pages 虚表。
pages_set_active | 设置当前的Page。
pages_set_active_by_name | 通过页面的名字设置当前的Page。
pages_set_auto_focused | 设置切换界面时是否自动聚焦。

属性

属性名称 | 类型 | 说明
active | uint32_t | 当前活跃的page。(需要用到 MVVM 数据绑定请设置 value 属性)
auto_focused | bool_t | 选择切换界面时是否自动聚焦上一次保存的焦点。（默认为TRUE）
value | uint32_t | 当前活跃的page。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(当前页)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(当前页)改变事件。

pages_cast 函数

  • 函数功能：

转换为pages对象(供脚本语言使用)。

  • 函数原型：
widget_t* pages_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | pages对象。
widget | widget_t* | pages对象。

pages_create 函数

  • 函数功能：

创建pages对象

  • 函数原型：
widget_t* pages_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

pages_get_widget_vtable 函数

  • 函数功能：

获取 pages 虚表。

  • 函数原型：
const widget_vtable_t* pages_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 pages 虚表。

pages_set_active 函数

  • 函数功能：

设置当前的Page。

  • 函数原型：
ret_t pages_set_active (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
index | uint32_t | 当前Page的序号。

pages_set_active_by_name 函数

  • 函数功能：

通过页面的名字设置当前的Page。

  • 函数原型：
ret_t pages_set_active_by_name (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 当前Page的名字。

pages_set_auto_focused 函数

  • 函数功能：

设置切换界面时是否自动聚焦。

  • 函数原型：
ret_t pages_set_auto_focused (widget_t* widget, bool_t auto_focused);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
auto_focused | bool_t | 切换界面时是否自动聚焦。

active 属性

当前活跃的page。(需要用到 MVVM 数据绑定请设置 value 属性)

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_focused 属性

选择切换界面时是否自动聚焦上一次保存的焦点。（默认为TRUE）

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

当前活跃的page。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


paint_event_t

概述

绘制事件。

函数

函数名称 | 说明
paint_event_cast | 把event对象转paint_event_t对象。
paint_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
c | canvas_t* | canvas。

paint_event_cast 函数

  • 函数功能：

把event对象转paint_event_t对象。

  • 函数原型：
paint_event_t* paint_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | paint_event_t* | event 对象。
event | event_t* | event对象。

paint_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* paint_event_init (paint_event_t* event, uint32_t type, void* target, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | paint_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
c | canvas_t* | canvas对象。

c 属性

canvas。

  • 类型：canvas_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


parity_t

概述

串口奇偶校验。

常量

名称 | 说明
parity_none | 无。
parity_odd | 奇校验。
parity_even | 偶校验。
parity_mark | 校验位的电平保持为逻辑 “1”。
parity_space | 校验位的电平保持为逻辑 “0”。


path

概述

路径接口。

函数

函数名称 | 说明
path_abs | 返回绝对路径。
path_app_root | 获取app所在目录。
path_basename | 返回文件名。
path_build | 构造路径。
path_cwd | 获取当前所在目录。
path_dirname | 返回目录。
path_exe | 获取可执行文件所在目录。
path_exist | 判断目录是否存在。
path_extname | 返回文件扩展名。
path_normalize | 规范路径字符形式。
path_replace_basename | 替换文件名。

path_abs 函数

  • 函数功能：

返回绝对路径。

  • 函数原型：
ret_t path_abs (const char* path* path, char* result, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char path | 路径。
result | char* | 用于返回绝对路径。
size | uint32_t | 缓冲区大小。

path_app_root 函数

  • 函数功能：

获取app所在目录。

  • 函数原型：
ret_t path_app_root (char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存app所在目录。

path_basename 函数

  • 函数功能：

返回文件名。

  • 函数原型：
ret_t path_basename (const char* path* path, char* result, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char path | 路径。
result | char* | 用于返回文件名。
size | uint32_t | 缓冲区大小。

path_build 函数

  • 函数功能：

构造路径。

  • 函数原型：
ret_t path_build (char* result, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
result | char* | 用于返回路径。
size | uint32_t | 缓冲区大小。

path_cwd 函数

  • 函数功能：

获取当前所在目录。

  • 函数原型：
ret_t path_cwd (char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存当前所在目录的路径。

path_dirname 函数

  • 函数功能：

返回目录。

  • 函数原型：
ret_t path_dirname (const char* path* path, char* result, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char path | 路径。
result | char* | 用于返回目录。
size | uint32_t | 缓冲区大小。

path_exe 函数

  • 函数功能：

获取可执行文件所在目录。

  • 函数原型：
ret_t path_exe (char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存可执行文件所在目录。

path_exist 函数

  • 函数功能：

判断目录是否存在。

  • 函数原型：
ret_t path_exist (const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回TRUE表示成功，否则表示失败。
path | const char* | 目录。

path_extname 函数

  • 函数功能：

返回文件扩展名。

  • 函数原型：
ret_t path_extname (const char* path* path, char* result, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char path | 路径。
result | char* | 用于返回文件扩展名。
size | uint32_t | 缓冲区大小。

path_normalize 函数

  • 函数功能：

规范路径字符形式。

  • 函数原型：
ret_t path_normalize (const char* path* path, char* result, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char path | 路径。
result | char* | 用于返回规范后的路径。
size | uint32_t | 缓冲区大小。

path_replace_basename 函数

  • 函数功能：

替换文件名。

  • 函数原型：
ret_t path_replace_basename (char* result, uint32_t size, char* filename, char* basename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
result | char* | 用于返回结果。
size | uint32_t | 缓冲区大小。
filename | char* | 原始文件路径。
basename | char* | 替换后的文件名。


path_t

概述

路径相关的工具函数。

函数

函数名称 | 说明
path_abs | 返回绝对路径。
path_abs_normalize | 将相对路径转换为绝对路径并规范路径字符形式。
path_abs_normalize_with_root | 将相对路径转换为绝对路径并规范路径字符形式。
path_app_root | 获取app所在目录。
path_app_root_ex | 获取app所在目录，并追加subpath到后面。
path_basename | 返回文件名。
path_basename_ex | 返回文件名。
path_build | 构造路径。
path_cwd | 获取当前所在目录。
path_dirname | 返回目录。
path_exe | 获取可执行文件所在目录。
path_exist | 判断目录是否存在。
path_extname | 返回文件扩展名。
path_extname_is | ```c
path_is_abs | 判断路径是否为绝对路径。
path_normalize | 规范路径字符形式。
path_prepend_app_root | 将前面路径加上app root。
path_prepend_temp_path | 将前面路径加上临时文件目录。
path_prepend_user_storage_path | 将前面路径加上用户目录。
path_remove_last_slash | 去掉后面的/和\字符。
path_replace_basename | 替换文件名。
path_replace_extname | 替换文件扩展名。

path_abs 函数

  • 函数功能：

返回绝对路径。

  • 函数原型：
ret_t path_abs (const char* path, char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char* | 路径。
result | char* | 用于返回绝对路径。
size | int32_t | 缓冲区大小。

path_abs_normalize 函数

  • 函数功能：

将相对路径转换为绝对路径并规范路径字符形式。

  • 函数原型：
ret_t path_abs_normalize (const char* filename, char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 相对路径。
result | char* | 用于返回绝对路径。
size | int32_t | 缓冲区大小。

path_abs_normalize_with_root 函数

  • 函数功能：

将相对路径转换为绝对路径并规范路径字符形式。

  • 函数原型：
const char* path_abs_normalize_with_root (const char* root, const char* rel_filename, char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回绝对路径。
root | const char* | 根目录。
rel_filename | const char* | 相对路径。
filename | char* | 用于返回绝对路径。

path_app_root 函数

  • 函数功能：

获取app所在目录。

  • 函数原型：
ret_t path_app_root (char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存app所在目录。

path_app_root_ex 函数

  • 函数功能：

获取app所在目录，并追加subpath到后面。

  • 函数原型：
ret_t path_app_root_ex (char* path, const char* subpath);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存app所在目录。
subpath | const char* | 子目录。

path_basename 函数

  • 函数功能：

返回文件名。

  • 函数原型：
ret_t path_basename (const char* path, char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char* | 路径。
result | char* | 用于返回文件名。
size | int32_t | 缓冲区大小。

path_basename_ex 函数

  • 函数功能：

返回文件名。

  • 函数原型：
ret_t path_basename_ex (const char* path, bool_t remove_ext_name, char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char* | 路径。
remove_ext_name | bool_t | 是否去掉扩展名。
result | char* | 用于返回文件名。
size | int32_t | 缓冲区大小。

path_build 函数

  • 函数功能：

构造路径。

可变参数为字符串，以NULL参数结束。

  • 函数原型：
ret_t path_build (char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
result | char* | 用于返回路径。
size | int32_t | 缓冲区大小。

path_cwd 函数

  • 函数功能：

获取当前所在目录。

  • 函数原型：
ret_t path_cwd (char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存当前所在目录的路径。

path_dirname 函数

  • 函数功能：

返回目录。

  • 函数原型：
ret_t path_dirname (const char* path, char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char* | 路径。
result | char* | 用于返回目录。
size | int32_t | 缓冲区大小。

path_exe 函数

  • 函数功能：

获取可执行文件所在目录。

  • 函数原型：
ret_t path_exe (char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | char* | 保存可执行文件所在目录。

path_exist 函数

  • 函数功能：

判断目录是否存在。

  • 函数原型：
bool_t path_exist (const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示成功，否则表示失败。
path | const char* | 目录。

path_extname 函数

  • 函数功能：

返回文件扩展名。

  • 函数原型：
ret_t path_extname (const char* path, char* result, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
path | const char* | 路径。
result | char* | 用于返回文件扩展名。
size | int32_t | 缓冲区大小。

path_extname_is 函数

  • 函数功能：

```c assert(path_extname_is(“test.jpg”, “.jpg”)); assert(path_extname_is(“test.JPG”, “.jpg”));

检查是否是指定的扩展名。

* 函数原型：

bool_t path_extname_is (const char path, const char extname);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | bool\_t | 返回TRUE表示是，否则表示不是。 |
| path | const char* | 路径。 |
| extname | const char* | 扩展名。 |

#### path\_is\_abs 函数
-----------------------

* 函数功能：

> <p id="path_t_path_is_abs">判断路径是否为绝对路径。

* 函数原型：

bool_t path_is_abs (const char* path);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | bool\_t | 返回FALSE表示不是绝对路径，否则表示是绝对路径。 |
| path | const char* | 路径。 |

#### path\_normalize 函数
-----------------------

* 函数功能：

> <p id="path_t_path_normalize">规范路径字符形式。

* 函数原型：

ret_t path_normalize (const char path, char result, int32_t size);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功，否则表示失败。 |
| path | const char* | 路径。 |
| result | char* | 用于返回规范后的路径。 |
| size | int32\_t | 缓冲区大小。 |

#### path\_prepend\_app\_root 函数
-----------------------

* 函数功能：

> <p id="path_t_path_prepend_app_root">将前面路径加上app root。

* 函数原型：

const char path_prepend_app_root (char full_path, const char* path);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | const char* | 返回完整路径。 |
| full\_path | char* | 用于返回完整路径。 |
| path | const char* | 路径。 |

#### path\_prepend\_temp\_path 函数
-----------------------

* 函数功能：

> <p id="path_t_path_prepend_temp_path">将前面路径加上临时文件目录。

* 函数原型：

const char path_prepend_temp_path (char full_path, const char* path);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | const char* | 返回完整路径。 |
| full\_path | char* | 用于返回完整路径。 |
| path | const char* | 路径。 |

#### path\_prepend\_user\_storage\_path 函数
-----------------------

* 函数功能：

> <p id="path_t_path_prepend_user_storage_path">将前面路径加上用户目录。

* 函数原型：

const char path_prepend_user_storage_path (char full_path, const char* path);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | const char* | 返回完整路径。 |
| full\_path | char* | 用于返回完整路径。 |
| path | const char* | 路径。 |

#### path\_remove\_last\_slash 函数
-----------------------

* 函数功能：

> <p id="path_t_path_remove_last_slash">去掉后面的/和\\字符。

* 函数原型：

ret_t path_remove_last_slash (char* path);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功，否则表示失败。 |
| path | char* | 目录。 |

#### path\_replace\_basename 函数
-----------------------

* 函数功能：

> <p id="path_t_path_replace_basename">替换文件名。

* 函数原型：

ret_t path_replace_basename (char result, int32_t size, const char filename, const char* basename);

* 参数说明：

| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功，否则表示失败。 |
| result | char* | 用于返回结果。 |
| size | int32\_t | 缓冲区大小。 |
| filename | const char* | 原始文件路径。 |
| basename | const char* | 替换后的文件名。 |

#### path\_replace\_extname 函数
-----------------------

* 函数功能：

> <p id="path_t_path_replace_extname">替换文件扩展名。

* 函数原型：


platform

概述

平台接口，包括：获取时间、休眠等函数。

函数

函数名称 | 说明
get_time_ms64 | 获取当前时间。
platform_prepare |
sleep_ms |

get_time_ms64 函数

  • 函数功能：

获取当前时间。

  • 函数原型：
uint64_t get_time_ms64 ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 成功返回当前时间。

platform_prepare 函数

  • 函数功能：

平台准备函数。

  • 函数原型：
ret_t platform_prepare ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

sleep_ms 函数

  • 函数功能：

睡眠毫秒。

  • 函数原型：
void sleep_ms (uint32_t ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无。
ms | uint32_t | 毫秒。


platform_t

概述

平台接口，包括：获取时间、休眠等函数。

函数

函数名称 | 说明
get_time_ms64 | 获取当前时间(毫秒)。
get_time_us64 | 获取当前时间(微秒)。
platform_prepare | 平台准备函数。
sleep_ms | 睡眠指定时间。

get_time_ms64 函数

  • 函数功能：

获取当前时间(毫秒)。

  • 函数原型：
uint64_t get_time_ms64 ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 成功返回当前时间。

get_time_us64 函数

  • 函数功能：

获取当前时间(微秒)。

  • 函数原型：
uint64_t get_time_us64 ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 成功返回当前时间。

platform_prepare 函数

  • 函数功能：

平台准备函数。

  • 函数原型：
ret_t platform_prepare ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

sleep_ms 函数

  • 函数功能：

睡眠指定时间。

  • 函数原型：
void sleep_ms (uint32_t ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无。
ms | uint32_t | 睡眠时间(毫秒)。


plugin_manager_t

概述

插件管理器。

函数

函数名称 | 说明
plugin_manager_create | 创建插件管理器。
plugin_manager_destroy | 卸载全部插件，并销毁插件管理器对象。
plugin_manager_dump | 显示所有的插件。
plugin_manager_exist | 检查指定的插件是否存在。
plugin_manager_refresh | 重新扫描目录中的插件，加载没有加载的插件。
plugin_manager_reload | 卸载所有插件并重新加载。

plugin_manager_create 函数

  • 函数功能：

创建插件管理器。

  • 函数原型：
plugin_manager_t* plugin_manager_create (const char* path, plugin_get_init_func_name_t get_init, plugin_get_deinit_func_name_t get_deinit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | plugin_manager_t* | 动态链接库对象。
path | const char* | 插件所在的目录。
get_init | plugin_get_init_func_name_t | 获取初始化函数的函数名。为NULL时使用”init”。
get_deinit | plugin_get_deinit_func_name_t | 获取~初始化函数的函数名。为NULL时使用”deinit”。

plugin_manager_destroy 函数

  • 函数功能：

卸载全部插件，并销毁插件管理器对象。

  • 函数原型：
ret_t plugin_manager_destroy (plugin_manager_t* plugin_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
plugin_manager | plugin_manager_t* | plugin_manager对象。

plugin_manager_dump 函数

  • 函数功能：

显示所有的插件。

  • 函数原型：
ret_t plugin_manager_dump (plugin_manager_t* plugin_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
plugin_manager | plugin_manager_t* | plugin_manager对象。

plugin_manager_exist 函数

  • 函数功能：

检查指定的插件是否存在。

  • 函数原型：
bool_t plugin_manager_exist (plugin_manager_t* plugin_manager, const char* lib_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
plugin_manager | plugin_manager_t* | plugin_manager对象。
lib_name | const char* | 动态库的名称。

plugin_manager_refresh 函数

  • 函数功能：

重新扫描目录中的插件，加载没有加载的插件。

  • 函数原型：
ret_t plugin_manager_refresh (plugin_manager_t* plugin_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
plugin_manager | plugin_manager_t* | plugin_manager对象。

plugin_manager_reload 函数

  • 函数功能：

卸载所有插件并重新加载。

  • 函数原型：
ret_t plugin_manager_reload (plugin_manager_t* plugin_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
plugin_manager | plugin_manager_t* | plugin_manager对象。


pointer_event_t

概述

指针事件。

函数

函数名称 | 说明
pointer_event_cast | 把event对象转pointer_event_t对象。
pointer_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
alt | bool_t | alt键是否按下。
button | xy_t | button。
cmd | bool_t | cmd键是否按下。
ctrl | bool_t | ctrl键是否按下。
menu | bool_t | menu键是否按下。
pressed | bool_t | 指针是否按下。
shift | bool_t | shift键是否按下。
x | xy_t | x坐标。
y | xy_t | y坐标。

pointer_event_cast 函数

  • 函数功能：

把event对象转pointer_event_t对象。

  • 函数原型：
pointer_event_t* pointer_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | pointer_event_t* | event对象。
event | event_t* | event对象。

pointer_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* pointer_event_init (pointer_event_t* event, uint32_t type, void* target, int32_t x, int32_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | pointer_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
x | int32_t | x的值。
y | int32_t | y的值。

alt 属性

alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

button 属性

button。 在不同的平台，该属性会发生变化， PC ：左键为 1，中键为 2，右键为 3 嵌入式：默认为 1

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

cmd 属性

cmd键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ctrl 属性

ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

menu 属性

menu键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

pressed 属性

指针是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

shift 属性

shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

x 属性

x坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

y 属性

y坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


pointf_t

概述

点(浮点数)。包括一个x坐标和一个y坐标。

函数

函数名称 | 说明
pointf_init | 初始化point对象。

属性

属性名称 | 类型 | 说明
x | float_t | x坐标。
y | float_t | y坐标。

pointf_init 函数

  • 函数功能：

初始化point对象。

  • 函数原型：
pointf_t pointf_init (float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | pointf_t | 返回point对象。
x | float_t | x坐标。
y | float_t | y坐标。

x 属性

x坐标。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

y 属性

y坐标。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


point_t

概述

点。包括一个x坐标和一个y坐标。

函数

函数名称 | 说明
point_init | 初始化point对象。

属性

属性名称 | 类型 | 说明
x | xy_t | x坐标。
y | xy_t | y坐标。

point_init 函数

  • 函数功能：

初始化point对象。

  • 函数原型：
point_t point_init (xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | point_t | 返回point对象。
x | xy_t | x坐标。
y | xy_t | y坐标。

x 属性

x坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

y 属性

y坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


popup_t

概述

弹出窗口。

弹出窗口是一种特殊的窗口，大小和位置可以自由设置，主要用来实现右键菜单和combo_box的下列列表等功能。

popup_t是window_base_t的子类控件，window_base_t的函数均适用于popup_t控件。

在xml中使用”popup”标签创建弹出窗口。如：

<popup close_when_click_outside="true" x="c" y="m" w="80%" h="80" >
<list_view x="0"  y="0" w="100%" h="100%" item_height="30">
<scroll_view name="view" x="0"  y="0" w="-12" h="100%">
<combo_box_item tr_text="english"/>
<combo_box_item tr_text="chinese" />
</scroll_view>
<scroll_bar_d name="bar" x="right" y="0" w="12" h="100%" value="0"/>
</list_view>
</popup>

更多用法请参考：popup

在c代码中使用函数popup_create创建弹出窗口。如：

widget_t* win = popup_create(NULL, 0, 0, w, h);
popup_set_close_when_click_outside(win, TRUE);

创建之后，和使用普通窗口是一样的。

完整示例请参考：combo_box.c

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<popup>
<style name="default" border_color="#a0a0a0">
<normal bg_color="#f0f0f0"/>
</style>
</popup>

更多用法请参考：theme default

函数

函数名称 | 说明
popup_cast | 转换为popup对象(供脚本语言使用)。
popup_create | 创建popup对象。
popup_get_widget_vtable | 获取 popup 虚表。
popup_set_close_when_click | 设置点击时是否关闭窗口。
popup_set_close_when_click_outside | 设置点击窗口外部时是否关闭窗口。
popup_set_close_when_timeout | 设置超时关闭时间(ms)。

属性

属性名称 | 类型 | 说明
close_when_click | bool_t | 点击时是否关闭窗口。
close_when_click_outside | bool_t | 点击到窗口外时是否关闭窗口。
close_when_timeout | uint32_t | 超时后自动关闭窗口(ms)。

popup_cast 函数

  • 函数功能：

转换为popup对象(供脚本语言使用)。

  • 函数原型：
widget_t* popup_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | popup对象。
widget | widget_t* | popup对象。

popup_create 函数

  • 函数功能：

创建popup对象。

  • 函数原型：
widget_t* popup_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | popup对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

popup_get_widget_vtable 函数

  • 函数功能：

获取 popup 虚表。

  • 函数原型：
const widget_vtable_t* popup_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 popup 虚表。

popup_set_close_when_click 函数

  • 函数功能：

设置点击时是否关闭窗口。

  • 函数原型：
ret_t popup_set_close_when_click (widget_t* widget, bool_t close_when_click);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
close_when_click | bool_t | 点击时是否关闭窗口。

popup_set_close_when_click_outside 函数

  • 函数功能：

设置点击窗口外部时是否关闭窗口。

  • 函数原型：
ret_t popup_set_close_when_click_outside (widget_t* widget, bool_t close_when_click_outside);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
close_when_click_outside | bool_t | 点击窗口外部时是否关闭窗口。

popup_set_close_when_timeout 函数

  • 函数功能：

设置超时关闭时间(ms)。

  • 函数原型：
ret_t popup_set_close_when_timeout (widget_t* widget, uint32_t close_when_timeout);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
close_when_timeout | uint32_t | 大于0时，为定时器时间(ms)，超时关闭窗口。

close_when_click 属性

点击时是否关闭窗口。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

close_when_click_outside 属性

点击到窗口外时是否关闭窗口。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

close_when_timeout 属性

超时后自动关闭窗口(ms)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


preload_res_t

概述

预加载资源的描述信息。


progress_bar_t

概述

进度条控件。

进度条控件可以水平显示也可以垂直显示，由vertical属性决定。

progress_bar_t是widget_t的子类控件，widget_t的函数均适用于progress_bar_t控件。

在xml中使用”progress_bar”标签创建进度条控件。如：

<progress_bar name="bar1" x="10" y="128" w="240" h="30" value="40"/>
<progress_bar name="bar2" x="280" y="128" w="30" h="118" value="20" vertical="true"/>

更多用法请参考： basic demo

在c代码中使用函数progress_bar_create创建进度条控件。如：

widget_t* progress_bar = progress_bar_create(win, 10, 10, 128, 30);

完整示例请参考： progress_bar demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style>
<normal bg_color="#f0f0f0" text_color="gold" fg_color="#c0c0c0" border_color="#a0a0a0" />
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
progress_bar_cast | 转换为progress_bar对象(供脚本语言使用)。
progress_bar_create | 创建progress_bar对象
progress_bar_get_percent | 获取进度百分比。
progress_bar_get_widget_vtable | 获取 progress_bar 虚表。
progress_bar_set_format | 设置格式。
progress_bar_set_max | 设置最大值。
progress_bar_set_reverse | 设置进度条是否反向。
progress_bar_set_show_text | 设置进度条的是否显示文本。
progress_bar_set_value | 设置进度条的进度。
progress_bar_set_vertical | 设置进度条的方向。

属性

属性名称 | 类型 | 说明
format | char* | 数值到字符串转换时的格式，缺省为”%d”。
max | double | 最大值(缺省为100)。
reverse | bool_t | 是否反向显示。如果为TRUE，水平方向从右向左表示增加，垂直方向从上到下表示增加。
show_text | bool_t | 是否显示文本。
value | double | 进度条的值[0-max]。
vertical | bool_t | 进度条的是否为垂直方向。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值改变事件。

progress_bar_cast 函数

  • 函数功能：

转换为progress_bar对象(供脚本语言使用)。

  • 函数原型：
widget_t* progress_bar_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | progress_bar对象。
widget | widget_t* | progress_bar对象。

progress_bar_create 函数

  • 函数功能：

创建progress_bar对象

  • 函数原型：
widget_t* progress_bar_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

progress_bar_get_percent 函数

  • 函数功能：

获取进度百分比。

当max为100时，percent和value取整后一致。

  • 函数原型：
uint32_t progress_bar_get_percent (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回百分比。
widget | widget_t* | 控件对象。

progress_bar_get_widget_vtable 函数

  • 函数功能：

获取 progress_bar 虚表。

  • 函数原型：
const widget_vtable_t* progress_bar_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 progress_bar 虚表。

progress_bar_set_format 函数

  • 函数功能：

设置格式。

  • 函数原型：
ret_t progress_bar_set_format (widget_t* widget, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | progress_bar对象。
format | const char* | 格式。

progress_bar_set_max 函数

  • 函数功能：

设置最大值。

  • 函数原型：
ret_t progress_bar_set_max (widget_t* widget, double max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
max | double | 最大值。

progress_bar_set_reverse 函数

  • 函数功能：

设置进度条是否反向。

  • 函数原型：
ret_t progress_bar_set_reverse (widget_t* widget, bool_t reverse);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
reverse | bool_t | 是否反向。

progress_bar_set_show_text 函数

  • 函数功能：

设置进度条的是否显示文本。

  • 函数原型：
ret_t progress_bar_set_show_text (widget_t* widget, bool_t show_text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
show_text | bool_t | 是否显示文本。

progress_bar_set_value 函数

  • 函数功能：

设置进度条的进度。

  • 函数原型：
ret_t progress_bar_set_value (widget_t* widget, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | double | 进度

progress_bar_set_vertical 函数

  • 函数功能：

设置进度条的方向。

  • 函数原型：
ret_t progress_bar_set_vertical (widget_t* widget, bool_t vertical);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
vertical | bool_t | 是否为垂直方向。

format 属性

数值到字符串转换时的格式，缺省为”%d”。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max 属性

最大值(缺省为100)。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

reverse 属性

是否反向显示。如果为TRUE，水平方向从右向左表示增加，垂直方向从上到下表示增加。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

show_text 属性

是否显示文本。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

进度条的值[0-max]。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

vertical 属性

进度条的是否为垂直方向。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


progress_circle_t

概述

进度圆环控件。

progress_circle_t是widget_t的子类控件，widget_t的函数均适用于progress_circle_t控件。

在xml中使用”progress_circle”标签创建进度圆环控件。如：

<progress_circle max="360" show_text="true" start_angle="90" />

更多用法请参考： progress_circle.xml

在c代码中使用函数progress_circle_create创建进度圆环控件。如：

progress_circle = progress_circle_create(win, 10, 10, 200, 200);
progress_circle_set_max(progress_circle, 360);
widget_set_value(progress_circle, 128);

完整示例请参考： progress_circle demo

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<style name="default">
<normal text_color="green" fg_color="black" />
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
progress_circle_calc_line_dirty_rect | 获取progress_circle的新值和旧值之间的绘制脏矩形。
progress_circle_cast | 转换为progress_circle对象(供脚本语言使用)。
progress_circle_create | 创建progress_circle对象
progress_circle_get_widget_vtable | 获取 progress_circle 虚表。
progress_circle_set_counter_clock_wise | 设置是否为逆时针方向。
progress_circle_set_format | 设置格式。
progress_circle_set_line_cap | 设置线帽类型。
progress_circle_set_line_width | 设置环线的厚度。
progress_circle_set_max | 设置最大值。
progress_circle_set_show_text | 设置是否显示文本。
progress_circle_set_start_angle | 设置起始角度。
progress_circle_set_value | 设置值。

属性

属性名称 | 类型 | 说明
counter_clock_wise | bool_t | 是否为逆时针方向(缺省为FALSE)。
format | char* | 数值到字符串转换时的格式，缺省为”%d”。
line_cap | char* | 线帽类型(round:圆头，square:方头，butt:平头)。
line_width | uint32_t | 环线的厚度(缺省为8)。
max | float_t | 最大值(缺省为100)。
show_text | bool_t | 是否显示文本(缺省为TRUE)。
start_angle | int32_t | 起始角度(单位为度，缺省-90)。
value | float_t | 值(缺省为0)。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值改变事件。

progress_circle_calc_line_dirty_rect 函数

  • 函数功能：

获取progress_circle的新值和旧值之间的绘制脏矩形。

  • 函数原型：
rect_t progress_circle_calc_line_dirty_rect (widget_t* widget, float_t old_value, float_t new_value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t | 返回脏矩形。
widget | widget_t* | progress_circle控件对象。
old_value | float_t | 旧值。
new_value | float_t | 新值。

progress_circle_cast 函数

  • 函数功能：

转换为progress_circle对象(供脚本语言使用)。

  • 函数原型：
widget_t* progress_circle_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | progress_circle对象。
widget | widget_t* | progress_circle对象。

progress_circle_create 函数

  • 函数功能：

创建progress_circle对象

  • 函数原型：
widget_t* progress_circle_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

progress_circle_get_widget_vtable 函数

  • 函数功能：

获取 progress_circle 虚表。

  • 函数原型：
const widget_vtable_t* progress_circle_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 progress_circle 虚表。

progress_circle_set_counter_clock_wise 函数

  • 函数功能：

设置是否为逆时针方向。

  • 函数原型：
ret_t progress_circle_set_counter_clock_wise (widget_t* widget, bool_t counter_clock_wise);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
counter_clock_wise | bool_t | 是否为逆时针方向。

progress_circle_set_format 函数

  • 函数功能：

设置格式。

  • 函数原型：
ret_t progress_circle_set_format (widget_t* widget, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | progress_circle对象。
format | const char* | 格式。

progress_circle_set_line_cap 函数

  • 函数功能：

设置线帽类型。

  • 函数原型：
ret_t progress_circle_set_line_cap (widget_t* widget, const char* line_cap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line_cap | const char* | 线帽类型(round:圆头，square:方头)。。

progress_circle_set_line_width 函数

  • 函数功能：

设置环线的厚度。

  • 函数原型：
ret_t progress_circle_set_line_width (widget_t* widget, uint32_t line_width);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line_width | uint32_t | 环线的厚度。

progress_circle_set_max 函数

  • 函数功能：

设置最大值。

  • 函数原型：
ret_t progress_circle_set_max (widget_t* widget, uint32_t max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
max | uint32_t | 最大值。

progress_circle_set_show_text 函数

  • 函数功能：

设置是否显示文本。

  • 函数原型：
ret_t progress_circle_set_show_text (widget_t* widget, bool_t show_text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
show_text | bool_t | 是否显示文本。

progress_circle_set_start_angle 函数

  • 函数功能：

设置起始角度。

  • 函数原型：
ret_t progress_circle_set_start_angle (widget_t* widget, int32_t start_angle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
start_angle | int32_t | 起始角度。

progress_circle_set_value 函数

  • 函数功能：

设置值。

  • 函数原型：
ret_t progress_circle_set_value (widget_t* widget, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | float_t | 值。

counter_clock_wise 属性

是否为逆时针方向(缺省为FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

format 属性

数值到字符串转换时的格式，缺省为”%d”。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

line_cap 属性

线帽类型(round:圆头，square:方头，butt:平头)。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

line_width 属性

环线的厚度(缺省为8)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max 属性

最大值(缺省为100)。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

show_text 属性

是否显示文本(缺省为TRUE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

start_angle 属性

起始角度(单位为度，缺省-90)。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值(缺省为0)。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


progress_event_t

概述

进度变化事件。

函数

函数名称 | 说明
progress_event_cast | 把event对象转progress_event_t对象。
progress_event_init | 初始progress event。

属性

属性名称 | 类型 | 说明
percent | uint32_t | 进度百分比。

progress_event_cast 函数

  • 函数功能：

把event对象转progress_event_t对象。

  • 函数原型：
progress_event_t* progress_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | progress_event_t* | 返回event对象。
event | event_t* | event对象。

progress_event_init 函数

  • 函数功能：

初始progress event。

  • 函数原型：
event_t* progress_event_init (progress_event_t* event, uint32_t percent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | progress_event_t* | event对象。
percent | uint32_t | 进度。

percent 属性

进度百分比。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


prop_change_event_t

概述

对象属性变化事件。

函数

函数名称 | 说明
prop_change_event_cast | 把event对象转prop_change_event_t对象。
prop_change_event_init | 初始prop change event。

属性

属性名称 | 类型 | 说明
name | const char* | 属性的名称。
value | const value_t* | 属性的值。

prop_change_event_cast 函数

  • 函数功能：

把event对象转prop_change_event_t对象。

  • 函数原型：
prop_change_event_t* prop_change_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | prop_change_event_t* | 返回event对象。
event | event_t* | event对象。

prop_change_event_init 函数

  • 函数功能：

初始prop change event。

  • 函数原型：
event_t* prop_change_event_init (prop_change_event_t* event, uint32_t type, const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | prop_change_event_t* | event对象。
type | uint32_t | 事件类型。
name | const char* | 属性名。
value | const value_t* | 属性的值。

name 属性

属性的名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

value 属性

属性的值。

  • 类型：const value_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


prop_desc_domain_name_t

概述

域名类型属性描述。


prop_desc_double_t

概述

单精度浮点数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | double | 缺省值。
max | double | 最大值。
min | double | 最小值。

defvalue 属性

缺省值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_email_t

概述

邮箱地址类型属性描述。


prop_desc_flags_t

概述

属性描述范围常量定义。

常量

名称 | 说明
PROP_DESC_FLAG_OBJECT | 单个对象的属性。
PROP_DESC_FLAG_CLASS | 同一个类所有实例共享属性。
PROP_DESC_FLAG_GLOBAL | 全局属性。
PROP_DESC_FLAG_READABLE | 可读取。
PROP_DESC_FLAG_WRITBALE | 可修改。
PROP_DESC_FLAG_CONFIGURABLE | 可配置。
PROP_DESC_FLAG_PERSISTENT | 需要持久化。


prop_desc_float_t

概述

单精度浮点数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | float | 缺省值。
max | float | 最大值。
min | float | 最小值。

defvalue 属性

缺省值。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_int32_t

概述

有符号32位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int32_t | 缺省值。
max | int32_t | 最大值。
min | int32_t | 最小值。

defvalue 属性

缺省值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_int64_t

概述

有符号64位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int64_t | 缺省值。
max | int64_t | 最大值。
min | int64_t | 最小值。

defvalue 属性

缺省值。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_int_enums_t

概述

整数枚举类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int32_t | 缺省值。
enums | const char** | 枚举值（每一项用英文冒号分隔值和名称）。

defvalue 属性

缺省值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

enums 属性

枚举值（每一项用英文冒号分隔值和名称）。

  • 类型：const char**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_ip4_address_t

概述

ip4地址类型属性描述。


prop_desc_phone_t

概述

电话号码类型属性描述。


prop_desc_scope_t

概述

属性描述范围常量定义。

常量

名称 | 说明
PROP_DESC_SCOPE_OBJECT | 单个对象的属性。
PROP_DESC_SCOPE_CLASS | 同一个类所有实例共享属性。
PROP_DESC_SCOPE_GLOBAL | 全局属性。


prop_desc_string_enums_t

概述

字符串枚举类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | const char* | 缺省值。
enums | const char** | 枚举值。

defvalue 属性

缺省值。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

enums 属性

枚举值。

  • 类型：const char**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_string_t

概述

字符串类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | const char* | 缺省值。
max | uint32_t | 最大长度。
min | uint32_t | 最小长度。

defvalue 属性

缺省值。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_t

概述

属性描述。

属性

属性名称 | 类型 | 说明
desc | const char* | 描述。
name | const char* | 名称。
reserved | uint16_t | 保留。
scope | uint8_t | 范围。
type | uint8_t | 类型。

desc 属性

描述。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

reserved 属性

保留。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

scope 属性

范围。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

type 属性

类型。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_type_t

概述

属性描述类型常量定义。

常量

名称 | 说明
PROP_DESC_TYPE_INT32 | 有符号32位整数类型。
PROP_DESC_TYPE_UINT32 | 无符号32位整数类型。
PROP_DESC_TYPE_INT64 | 有符号64位整数类型。
PROP_DESC_TYPE_UINT64 | 无符号64位整数类型。
PROP_DESC_TYPE_FLOAT | 单精度浮点数类型。
PROP_DESC_TYPE_DOUBLE | 双精度浮点数类型。
PROP_DESC_TYPE_STRING | 字符串类型。
PROP_DESC_TYPE_PHONE | 手机号码类型。
PROP_DESC_TYPE_PHONE | 邮件类型。
PROP_DESC_TYPE_IP4_ADDRESS | ip4地址类型。
PROP_DESC_TYPE_DOMAIN_NAME | 域名类型。
PROP_DESC_TYPE_URL | URL类型。
PROP_DESC_TYPE_INT_ENUMS | 整数枚举类型。
PROP_DESC_TYPE_STRING_ENUMS | 字符串枚举类型。


prop_desc_uint32_t

概述

无符号32位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | uint32_t | 缺省值。
max | uint32_t | 最大值。
min | uint32_t | 最小值。

defvalue 属性

缺省值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_uint64_t

概述

无符号64位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | uint64_t | 缺省值。
max | uint64_t | 最大值。
min | uint64_t | 最小值。

defvalue 属性

缺省值。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


prop_desc_url_t

概述

URL类型属性描述。


qaction_t

概述

代表一个action，放在action queue中。

函数

函数名称 | 说明
qaction_create | 创建action对象。
qaction_destroy | 销毁。
qaction_exec | 执行。
qaction_notify | 事件通知。
qaction_set_on_event | 设置事件处理函数(回调函数在后台线程执行)。

属性

属性名称 | 类型 | 说明
args | uint32_t* | exec的参数(视具体的action而不同)。
exec | qaction_exec_t | 执行函数。
on_event | qaction_on_event_t | 事件处理函数。如进度、错误和完成等。

qaction_create 函数

  • 函数功能：

创建action对象。

  • 函数原型：
qaction_t* qaction_create (qaction_exec_t exec, void* args, uint32_t args_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | qaction_t* | 返回action对象。
exec | qaction_exec_t | 执行函数。
args | void* | 参数。
args_size | uint32_t | 参数长度。

qaction_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t qaction_destroy (qaction_t* q);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | qaction_t* | qaction对象。

qaction_exec 函数

  • 函数功能：

执行。

  • 函数原型：
ret_t qaction_exec (qaction_t* action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
action | qaction_t* | action对象。

qaction_notify 函数

  • 函数功能：

事件通知。

  • 函数原型：
ret_t qaction_notify (qaction_t* action, event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
action | qaction_t* | action对象。
event | event_t* | event对象。

qaction_set_on_event 函数

  • 函数功能：

设置事件处理函数(回调函数在后台线程执行)。

exec执行完成后，会触发EVT_DONE事件，一般在EVT_DONE事件中调用qaction_destroy函数销毁action。

  • 函数原型：
ret_t qaction_set_on_event (qaction_t* action, qaction_on_event_t on_event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
action | qaction_t* | action对象。
on_event | qaction_on_event_t | 事件处理函数。

args 属性

exec的参数(视具体的action而不同)。

  • 类型：uint32_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

exec 属性

执行函数。

  • 类型：qaction_exec_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

on_event 属性

事件处理函数。如进度、错误和完成等。

  • 类型：qaction_on_event_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


rbuffer_t

概述

Read Buffer。用于数据解包。

示例：

uint8_t buff[128];
wbuffer_t wbuffer;
rbuffer_t rbuffer;
const char* str = NULL;
wbuffer_init(&wbuffer, buff, sizeof(buff));

wbuffer_write_string(&wbuffer, "hello awtk");

rbuffer_init(&rbuffer, wbuffer.data, wbuffer.cursor);
rbuffer_read_string(&rbuffer, &str);

函数

函数名称 | 说明
rbuffer_has_more | 判断是否还有数据可读。
rbuffer_init | 初始rbuffer对象。
rbuffer_peek_uint16 | 读取uint16数据，但不改变cursor的位置。
rbuffer_peek_uint32 | 读取uint32数据，但不改变cursor的位置。
rbuffer_peek_uint8 | 读取uint8数据，但不改变cursor的位置。
rbuffer_read_binary | 读取指定长度的二进制数据。
rbuffer_read_double | 读取double数据。
rbuffer_read_float | 读取float数据。
rbuffer_read_int32 | 读取int32数据。
rbuffer_read_string | 读取字符串。
rbuffer_read_uint16 | 读取uint16数据。
rbuffer_read_uint32 | 读取uint32数据。
rbuffer_read_uint64 | 读取uint64数据。
rbuffer_read_uint8 | 读取uint8数据。
rbuffer_rewind | 重置当前读取位置。
rbuffer_skip | 跳过指定的长度。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 缓存区的容量。
cursor | uint32_t | 当前读取位置。
data | const uint8_t* | 数据缓冲区。

rbuffer_has_more 函数

  • 函数功能：

判断是否还有数据可读。

  • 函数原型：
bool_t rbuffer_has_more (rbuffer_t* rbuffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示还有数据可读，否则表示无数据可读。
rbuffer | rbuffer_t* | rbuffer对象。

rbuffer_init 函数

  • 函数功能：

初始rbuffer对象。

  • 函数原型：
rbuffer_t* rbuffer_init (rbuffer_t* rbuffer, const uint8_t* data, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rbuffer_t* | rbuffer对象本身。
rbuffer | rbuffer_t* | rbuffer对象。
data | const uint8_t* | 缓冲区。
capacity | uint32_t | 缓冲区的容量。

rbuffer_peek_uint16 函数

  • 函数功能：

读取uint16数据，但不改变cursor的位置。

  • 函数原型：
ret_t rbuffer_peek_uint16 (rbuffer_t* rbuffer, uint16_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint16_t* | 返回读取的数据。

rbuffer_peek_uint32 函数

  • 函数功能：

读取uint32数据，但不改变cursor的位置。

  • 函数原型：
ret_t rbuffer_peek_uint32 (rbuffer_t* rbuffer, uint32_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint32_t* | 读取的数据。

rbuffer_peek_uint8 函数

  • 函数功能：

读取uint8数据，但不改变cursor的位置。

  • 函数原型：
ret_t rbuffer_peek_uint8 (rbuffer_t* rbuffer, uint8_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint8_t* | 返回读取的数据。

rbuffer_read_binary 函数

  • 函数功能：

读取指定长度的二进制数据。

  • 函数原型：
ret_t rbuffer_read_binary (rbuffer_t* rbuffer, void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
data | void* | 返回读取的数据。
size | uint32_t | 读取的数据长度。

rbuffer_read_double 函数

  • 函数功能：

读取double数据。

  • 函数原型：
ret_t rbuffer_read_double (rbuffer_t* rbuffer, double* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | double* | 返回读取的数据。

rbuffer_read_float 函数

  • 函数功能：

读取float数据。

  • 函数原型：
ret_t rbuffer_read_float (rbuffer_t* rbuffer, float* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | float* | 返回读取的数据。

rbuffer_read_int32 函数

  • 函数功能：

读取int32数据。

  • 函数原型：
ret_t rbuffer_read_int32 (rbuffer_t* rbuffer, int32_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | int32_t* | 返回读取的数据。

rbuffer_read_string 函数

  • 函数功能：

读取字符串。

  • 函数原型：
ret_t rbuffer_read_string (rbuffer_t* rbuffer, const char** str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
str | const char** | 返回字符串。

rbuffer_read_uint16 函数

  • 函数功能：

读取uint16数据。

  • 函数原型：
ret_t rbuffer_read_uint16 (rbuffer_t* rbuffer, uint16_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint16_t* | 读取的数据。

rbuffer_read_uint32 函数

  • 函数功能：

读取uint32数据。

  • 函数原型：
ret_t rbuffer_read_uint32 (rbuffer_t* rbuffer, uint32_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint32_t* | 返回读取的数据。

rbuffer_read_uint64 函数

  • 函数功能：

读取uint64数据。

  • 函数原型：
ret_t rbuffer_read_uint64 (rbuffer_t* rbuffer, uint64_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint64_t* | 返回读取的数据。

rbuffer_read_uint8 函数

  • 函数功能：

读取uint8数据。

  • 函数原型：
ret_t rbuffer_read_uint8 (rbuffer_t* rbuffer, uint8_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
value | uint8_t* | 返回读取的数据。

rbuffer_rewind 函数

  • 函数功能：

重置当前读取位置。

  • 函数原型：
ret_t rbuffer_rewind (rbuffer_t* rbuffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。

rbuffer_skip 函数

  • 函数功能：

跳过指定的长度。

  • 函数原型：
ret_t rbuffer_skip (rbuffer_t* rbuffer, int32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rbuffer | rbuffer_t* | rbuffer对象。
offset | int32_t | 跳过的偏移量，正数往前负数往回跳。

capacity 属性

缓存区的容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

cursor 属性

当前读取位置。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

data 属性

数据缓冲区。

  • 类型：const uint8_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


rectf_t

概述

矩形。包括一个x坐标、y坐标、宽度和高度。

函数

函数名称 | 说明
rectf_init | 初始化rectf对象。

属性

属性名称 | 类型 | 说明
h | float | 高度。
w | float | 宽度。
x | float | x坐标。
y | float | y坐标。

rectf_init 函数

  • 函数功能：

初始化rectf对象。

  • 函数原型：
rectf_t rectf_init (float x, float y, float w, float h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rectf_t | 返回rect对象。
x | float | x坐标。
y | float | y坐标。
w | float | 宽度。
h | float | 高度。

h 属性

高度。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

w 属性

宽度。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

x 属性

x坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

y 属性

y坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


rect_t

概述

矩形。包括一个x坐标、y坐标、宽度和高度。

函数

函数名称 | 说明
rect_cast | 转换为rect对象。
rect_contains | 判断指定的点在rect范围内。
rect_create | 创建rect对象。
rect_destroy | 销毁rect对象。
rect_diff | 求第一个矩形和第二个矩形的差集。
rect_fix | 确保rect在指定的大小范围内。
rect_from_rectf | rectf 类型转换到 rect 类型。
rect_has_intersect | 判断两个rect的是否存在交集。
rect_init | 初始化rect对象。
rect_intersect | 求两个rect的交集。
rect_merge | 合并两个rect对象。
rect_scale | 缩放rect对象。
rect_set | 设置rect对象的xywh。
rect_to_rectf | rect 类型转换到 rectf 类型。
rectf_fix | 确保rectf在指定的大小范围内。
rectf_scale | 缩放rectf对象。

属性

属性名称 | 类型 | 说明
h | wh_t | 高度。
w | wh_t | 宽度。
x | xy_t | x坐标。
y | xy_t | y坐标。

rect_cast 函数

  • 函数功能：

转换为rect对象。

供脚本语言使用。

  • 函数原型：
rect_t* rect_cast (rect_t* rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t* | rect对象。
rect | rect_t* | rect对象。

rect_contains 函数

  • 函数功能：

判断指定的点在rect范围内。

  • 函数原型：
bool_t rect_contains (const rect_t* r, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回在rect范围内。
r | const rect_t* | rect对象。
x | xy_t | x坐标。
y | xy_t | y坐标。

rect_create 函数

  • 函数功能：

创建rect对象。

主要供脚本语言使用。

  • 函数原型：
rect_t* rect_create (xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t* | rect对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

rect_destroy 函数

  • 函数功能：

销毁rect对象。

主要供脚本语言使用。

  • 函数原型：
ret_t rect_destroy (rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
r | rect_t* | rect对象。

rect_diff 函数

  • 函数功能：

求第一个矩形和第二个矩形的差集。

备注：第一个矩形包含第二个矩形的话，就会返回第一个矩形的四个矩形区域。

  • 函数原型：
bool_t rect_diff (const rect_t* r1, const rect_t* r2, rect_t* out_r1, rect_t* out_r2, rect_t* out_r3, rect_t* out_r4);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在差集，否则表示不存在差集。
r1 | const rect_t* | 第一个矩形。
r2 | const rect_t* | 第二个矩形。
out_r1 | rect_t* | 返回差集的第一个矩形数据。
out_r2 | rect_t* | 返回差集的第二个矩形数据。
out_r3 | rect_t* | 返回差集的第三个矩形数据。
out_r4 | rect_t* | 返回差集的第四个矩形数据。

rect_fix 函数

  • 函数功能：

确保rect在指定的大小范围内。

  • 函数原型：
rect_t rect_fix (rect_t* r, wh_t max_w, wh_t max_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t | 返回修复之后的rect对象。
r | rect_t* | rect对象。
max_w | wh_t | 最大宽度。
max_h | wh_t | 最大高度。

rect_from_rectf 函数

  • 函数功能：

rectf 类型转换到 rect 类型。

  • 函数原型：
rect_t rect_from_rectf (const rectf_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t | 返回 rect 对象。
r | const rectf_t* | rectf 对象。

rect_has_intersect 函数

  • 函数功能：

判断两个rect的是否存在交集。

  • 函数原型：
bool_t rect_has_intersect (const rect_t* r1, const rect_t* r2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
r1 | const rect_t* | rect对象。
r2 | const rect_t* | rect对象。

rect_init 函数

  • 函数功能：

初始化rect对象。

  • 函数原型：
rect_t rect_init (xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t | 返回rect对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

rect_intersect 函数

  • 函数功能：

求两个rect的交集。

  • 函数原型：
rect_t rect_intersect (const rect_t* r1, const rect_t* r2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t | 返回交集。
r1 | const rect_t* | rect对象。
r2 | const rect_t* | rect对象。

rect_merge 函数

  • 函数功能：

合并两个rect对象。

  • 函数原型：
ret_t rect_merge (rect_t* dst_r, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dst_r | rect_t* | rect对象。
r | const rect_t* | rect对象。

rect_scale 函数

  • 函数功能：

缩放rect对象。

  • 函数原型：
rect_t* rect_scale (rect_t* r, float_t scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t* | 返回rect对象。
r | rect_t* | rect对象。
scale | float_t | 缩放比例。

rect_set 函数

  • 函数功能：

设置rect对象的xywh。

主要供脚本语言使用。

  • 函数原型：
rect_t* rect_set (rect_t* rect, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t* | rect对象。
rect | rect_t* | rect对象。
x | xy_t | x坐标。
y | xy_t | y坐标。
w | wh_t | 宽度。
h | wh_t | 高度。

rect_to_rectf 函数

  • 函数功能：

rect 类型转换到 rectf 类型。

  • 函数原型：
rectf_t rect_to_rectf (const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rectf_t | 返回 rectf_t 对象。
r | const rect_t* | rect对象。

rectf_fix 函数

  • 函数功能：

确保rectf在指定的大小范围内。

  • 函数原型：
rectf_t rectf_fix (rectf_t* r, wh_t max_w, wh_t max_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rectf_t | 返回修复之后的rect对象。
r | rectf_t* | rectf对象。
max_w | wh_t | 最大宽度。
max_h | wh_t | 最大高度。

rectf_scale 函数

  • 函数功能：

缩放rectf对象。

  • 函数原型：
rectf_t* rectf_scale (rectf_t* r, float_t scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rectf_t* | 返回rect对象。
r | rectf_t* | rect对象。
scale | float_t | 缩放比例。

h 属性

高度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

w 属性

宽度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

x 属性

x坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

y 属性

y坐标。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


ret_t

概述

函数返回值常量定义。

常量

名称 | 说明
RET_OK | 成功。
RET_OOM | Out of memory。
RET_FAIL | 失败。
RET_NOT_IMPL | 没有实现/不支持。
RET_QUIT | 退出。通常用于主循环。
RET_FOUND | 找到。
RET_BUSY | 对象忙。
RET_REMOVE | 移出。通常用于定时器。
RET_REPEAT | 重复。通常用于定时器。
RET_NOT_FOUND | 没找到。
RET_DONE | 操作完成。
RET_STOP | 停止后续操作。
RET_SKIP | 跳过当前项。
RET_CONTINUE | 继续后续操作。
RET_OBJECT_CHANGED | 对象属性变化。
RET_ITEMS_CHANGED | 集合数目变化。
RET_BAD_PARAMS | 无效参数。
RET_TIMEOUT | 超时。
RET_CRC | CRC错误。
RET_IO | IO错误。
RET_EOS | End of Stream
RET_NOT_MODIFIED | 没有改变。
RET_NO_PERMISSION | 没有权限。
RET_INVALID_ADDR | 无效地址。
RET_EXCEED_RANGE | 超出范围。
RET_MAX_NR | 最大值。


rgba_t

概述

颜色的四个通道。

属性

属性名称 | 类型 | 说明
a | uint8_t | alpha。
b | uint8_t | 蓝色。
g | uint8_t | 绿色。
r | uint8_t | 红色。

a 属性

alpha。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

b 属性

蓝色。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

g 属性

绿色。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是

r 属性

红色。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 是


rich_text_t

概述

图文混排控件，实现简单的图文混排。

rich_text_t是widget_t的子类控件，widget_t的函数均适用于rich_text_t控件。

在xml中使用”rich_text”标签创建图文混排控件。如：

<rich_text x="0" y="0" w="100%" h="60"
text="<image name=&quota;bricks&quota;/><font align_v=&quota;middle&quota;>hello awtk!</font>" />

更多用法请参考： rich_text.xml

在c代码中使用函数rich_text_create创建图文混排控件。如：

widget_t* rich_text = rich_text_create(win, 0, 0, 0, 0);
widget_set_text_utf8(rich_text,
"<image name=\"bricks\"/><font color=\"gold\" align_v=\"bottom\" "
"size=\"24\">hello awtk!</font><font color=\"green\" size=\"20\">ProTip! The "
"feed shows you events from people you follow and repositories you watch. "
"nhello world. </font><font color=\"red\" "
"size=\"20\">确定取消中文字符测试。确定。取消。中文字符测试。</font>");

widget_set_self_layout_params(rich_text, "center", "middle", "100%", "100%");

完整示例请参考： rich_text demo

可用通过style来设置控件的显示风格，如背景颜色等等。而字体的大小和颜色则由文本内部的属性决定。

目前支持image和font两个tag：

  • image 支持的属性有：
  • name 图片的名称。
  • w 图片的宽度。

  • h 图片的高度。

  • font 支持的属性有：

  • color 颜色。
  • size 大小。
  • align_v 垂直方向对齐的方式(top|middle|bottom)。
  • bold 粗体(暂不支持)
  • italic 斜体(暂不支持)
  • underline 下划线(暂不支持)

函数

函数名称 | 说明
rich_text_cast | 转换为rich_text对象(供脚本语言使用)。
rich_text_create | 创建rich_text对象
rich_text_get_widget_vtable | 获取 rich_text 虚表。
rich_text_set_text | 设置文本。
rich_text_set_yslidable | 设置是否允许y方向滑动。

属性

属性名称 | 类型 | 说明
line_gap | uint32_t | 行间距。
need_reset | bool_t | 标识控件是否需要重新绘图。
yoffset | int32_t | y偏移。
yslidable | bool_t | 标识控件是否允许上下拖动。

rich_text_cast 函数

  • 函数功能：

转换为rich_text对象(供脚本语言使用)。

  • 函数原型：
widget_t* rich_text_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | rich_text对象。
widget | widget_t* | rich_text对象。

rich_text_create 函数

  • 函数功能：

创建rich_text对象

  • 函数原型：
widget_t* rich_text_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

rich_text_get_widget_vtable 函数

  • 函数功能：

获取 rich_text 虚表。

  • 函数原型：
const widget_vtable_t* rich_text_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 rich_text 虚表。

rich_text_set_text 函数

  • 函数功能：

设置文本。

  • 函数原型：
ret_t rich_text_set_text (widget_t* widget, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | const char* | 文本。

rich_text_set_yslidable 函数

  • 函数功能：

设置是否允许y方向滑动。

  • 函数原型：
ret_t rich_text_set_yslidable (widget_t* widget, bool_t yslidable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
yslidable | bool_t | 是否允许滑动。

line_gap 属性

行间距。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

need_reset 属性

标识控件是否需要重新绘图。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

yoffset 属性

y偏移。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

yslidable 属性

标识控件是否允许上下拖动。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


rich_text_view_t

概述

rich_text_view是一个专用容器，用来放rich text和 scroll bar，并在两者之间建立联系。

rich_text_view_t是widget_t的子类控件，widget_t的函数均适用于rich_text_view_t控件。

在xml中使用”rich_text_view”标签创建rich_text_view。如：

<rich_text_view x="0" y="10" w="100%" h="300">
<rich_text line_gap="5" x="0" y="10" w="-12" h="100%" margin="10">
...
</rich_text>
<scroll_bar_d name="bar" x="right" y="0" w="12" h="100%" value="0"/>
</rich_text_view>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
rich_text_view_cast | 转换为rich_text_view对象(供脚本语言使用)。
rich_text_view_create | 创建rich_text_view对象

rich_text_view_cast 函数

  • 函数功能：

转换为rich_text_view对象(供脚本语言使用)。

  • 函数原型：
widget_t* rich_text_view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | rich_text_view对象。
widget | widget_t* | rich_text_view对象。

rich_text_view_create 函数

  • 函数功能：

创建rich_text_view对象

  • 函数原型：
widget_t* rich_text_view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度


ring_buffer_t

概述

循环缓存区。

函数

函数名称 | 说明
ring_buffer_capacity | 获取容量。
ring_buffer_create | 创建ring_buffer对象。
ring_buffer_destroy | 销毁ring_buffer。
ring_buffer_ensure_write_space | 扩展buffer。
ring_buffer_free_size | 获取空闲空间的长度。
ring_buffer_is_empty | 检查ring_buffer是否空。
ring_buffer_is_full | 检查ring_buffer是否满。
ring_buffer_peek | 读取数据(不修改读取位置)。
ring_buffer_read | 读取数据。
ring_buffer_read_len | 读取指定长度数据，要么成功要么失败。
ring_buffer_reset | 重置ring_buffer为空。
ring_buffer_set_read_cursor | 设置读取光标的位置。
ring_buffer_set_read_cursor_delta | 设置读取光标的位置(delta)。
ring_buffer_set_write_cursor | 设置写入光标的位置。
ring_buffer_set_write_cursor_delta | 设置写入光标的位置(delta)。
ring_buffer_size | 获取数据长度。
ring_buffer_skip | 跳过指定长度数据，要么成功要么失败。
ring_buffer_write | 写入数据。
ring_buffer_write_len | 写入指定长度数据，要么成功要么失败。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 当前容量。
data | uint8_t* | 数据。
full | bool_t | 是否满。
max_capacity | uint32_t | 最大容量。
r | uint32_t | 读取位置。
w | uint32_t | 写入位置。

ring_buffer_capacity 函数

  • 函数功能：

获取容量。

  • 函数原型：
uint32_t ring_buffer_capacity (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 容量。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_create 函数

  • 函数功能：

创建ring_buffer对象。

  • 函数原型：
ring_buffer_t* ring_buffer_create (uint32_t init_capacity, uint32_t max_capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ring_buffer_t* | ring_buffer对象。
init_capacity | uint32_t | 初始容量。
max_capacity | uint32_t | 最大容量。

ring_buffer_destroy 函数

  • 函数功能：

销毁ring_buffer。

  • 函数原型：
ret_t ring_buffer_destroy (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_ensure_write_space 函数

  • 函数功能：

扩展buffer。

  • 函数原型：
ret_t ring_buffer_ensure_write_space (ring_buffer_t* ring_buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
size | uint32_t | 需要的大小。

ring_buffer_free_size 函数

  • 函数功能：

获取空闲空间的长度。

  • 函数原型：
uint32_t ring_buffer_free_size (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 空闲空间的长度。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_is_empty 函数

  • 函数功能：

检查ring_buffer是否空。

  • 函数原型：
bool_t ring_buffer_is_empty (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 是否空。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_is_full 函数

  • 函数功能：

检查ring_buffer是否满。

  • 函数原型：
bool_t ring_buffer_is_full (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 是否满。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_peek 函数

  • 函数功能：

读取数据(不修改读取位置)。

  • 函数原型：
uint32_t ring_buffer_peek (ring_buffer_t* ring_buffer, void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回实际读取数据的长度。
ring_buffer | ring_buffer_t* | ring_buffer对象。
buff | void* | 缓冲区。
size | uint32_t | 最大长度。

ring_buffer_read 函数

  • 函数功能：

读取数据。

  • 函数原型：
uint32_t ring_buffer_read (ring_buffer_t* ring_buffer, void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回实际读取数据的长度。
ring_buffer | ring_buffer_t* | ring_buffer对象。
buff | void* | 缓冲区。
size | uint32_t | 最大长度。

ring_buffer_read_len 函数

  • 函数功能：

读取指定长度数据，要么成功要么失败。

  • 函数原型：
ret_t ring_buffer_read_len (ring_buffer_t* ring_buffer, void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
buff | void* | 缓冲区。
size | uint32_t | 最大长度。

ring_buffer_reset 函数

  • 函数功能：

重置ring_buffer为空。

  • 函数原型：
ret_t ring_buffer_reset (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_set_read_cursor 函数

  • 函数功能：

设置读取光标的位置。

  • 函数原型：
ret_t ring_buffer_set_read_cursor (ring_buffer_t* ring_buffer, uint32_t r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
r | uint32_t | 读取光标的位置。

ring_buffer_set_read_cursor_delta 函数

  • 函数功能：

设置读取光标的位置(delta)。

  • 函数原型：
ret_t ring_buffer_set_read_cursor_delta (ring_buffer_t* ring_buffer, uint32_t r_delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
r_delta | uint32_t | 读取光标的位置(delta)。

ring_buffer_set_write_cursor 函数

  • 函数功能：

设置写入光标的位置。

  • 函数原型：
ret_t ring_buffer_set_write_cursor (ring_buffer_t* ring_buffer, uint32_t w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
w | uint32_t | 写入光标的位置。

ring_buffer_set_write_cursor_delta 函数

  • 函数功能：

设置写入光标的位置(delta)。

  • 函数原型：
ret_t ring_buffer_set_write_cursor_delta (ring_buffer_t* ring_buffer, uint32_t w_delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
w_delta | uint32_t | 写入光标的位置(delta)。

ring_buffer_size 函数

  • 函数功能：

获取数据长度。

  • 函数原型：
uint32_t ring_buffer_size (ring_buffer_t* ring_buffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 数据长度。
ring_buffer | ring_buffer_t* | ring_buffer对象。

ring_buffer_skip 函数

  • 函数功能：

跳过指定长度数据，要么成功要么失败。

  • 函数原型：
ret_t ring_buffer_skip (ring_buffer_t* ring_buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
size | uint32_t | 长度。

ring_buffer_write 函数

  • 函数功能：

写入数据。

  • 函数原型：
uint32_t ring_buffer_write (ring_buffer_t* ring_buffer, const void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回实际写入数据的长度。
ring_buffer | ring_buffer_t* | ring_buffer对象。
buff | const void* | 缓冲区。
size | uint32_t | 最大长度。

ring_buffer_write_len 函数

  • 函数功能：

写入指定长度数据，要么成功要么失败。

  • 函数原型：
ret_t ring_buffer_write_len (ring_buffer_t* ring_buffer, const void* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ring_buffer | ring_buffer_t* | ring_buffer对象。
buff | const void* | 缓冲区。
size | uint32_t | 最大长度。

capacity 属性

当前容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

data 属性

数据。

  • 类型：uint8_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

full 属性

是否满。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max_capacity 属性

最大容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

r 属性

读取位置。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

w 属性

写入位置。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


rlog_t

概述

循环记录日志(支持多线程访问)。 如果我们把日志写入文件中，随着时间的推移，日志文件会越来越大，最终占满这个磁盘，出现不可预料的错误。 rlog提供一个循环记录日志的功能，让日志文件始终不会超出指定的大小，达到指定大小后再从头开始写。

为了实现简单，我们把日志文件分成0和1两个文件，先写文件0，到达指定最大值的一半时，再写文件1。 文件1到达指定最大值的一半时，删除文件0，并将文件1改名为文件0，重新创建文件1，继续写文件1，重复此过程。

函数

函数名称 | 说明
rlog_clear | 清空日志。
rlog_create | 创建rlog对象。
rlog_destroy | 销毁日志对象。
rlog_print | 写入一条日志记录。
rlog_read | 读取日志。
rlog_size | 获取日志大小。
rlog_write | 写入一条日志记录。

rlog_clear 函数

  • 函数功能：

清空日志。

  • 函数原型：
ret_t rlog_clear (rlog_t* log);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | rlog_t* | 日志对象。

rlog_create 函数

  • 函数功能：

创建rlog对象。

rlog_t* log = rlog_create("./logs/%d.log", 1020*1024, 256);
rlog_write(log, "hello\n");
rlog_destroy(log);
  • 函数原型：
rlog_t* rlog_create (const char* filename_pattern, uint32_t max_size, uint32_t buff_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rlog_t* | 返回rlog对象。
filename_pattern | const char* | 用来确定文件名的路径和文件名。
max_size | uint32_t | log文件占用最大磁盘空间(字节)。
buff_size | uint32_t | 用于指定print时的buff大小。

rlog_destroy 函数

  • 函数功能：

销毁日志对象。

  • 函数原型：
ret_t rlog_destroy (rlog_t* log);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | rlog_t* | 日志对象。

rlog_print 函数

  • 函数功能：

写入一条日志记录。

  • 函数原型：
ret_t rlog_print (rlog_t* log, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | rlog_t* | 日志对象。
format | const char* | 格式字符串。

rlog_read 函数

  • 函数功能：

读取日志。

  • 函数原型：
ret_t rlog_read (rlog_t* log, uint32_t offs, char* buff, uint32_t buffsz, uint32_t* readsz);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | rlog_t* | 日志对象。
offs | uint32_t | 日志偏移量。
buff | char* | 存放日志的缓存。
buffsz | uint32_t | 缓存大小。
readsz | uint32_t* | 读取出的日志大小。

rlog_size 函数

  • 函数功能：

获取日志大小。

  • 函数原型：
ret_t rlog_size (rlog_t* log, uint32_t* size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | rlog_t* | 日志对象。
size | uint32_t* | 获取的日志大小。

rlog_write 函数

  • 函数功能：

写入一条日志记录。

  • 函数原型：
ret_t rlog_write (rlog_t* log, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
log | rlog_t* | 日志对象。
str | const char* | 日志字符串。


romfs_t

概述

一个简单的ROMFS(目前用于WEB加载配置文件)

函数

函数名称 | 说明
romfs_deinit | ~初始化。
romfs_get | 获取fs对象。
romfs_init | 初始化。

romfs_deinit 函数

  • 函数功能：

~初始化。

  • 函数原型：
ret_t romfs_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

romfs_get 函数

  • 函数功能：

获取fs对象。

  • 函数原型：
fs_t* romfs_get ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | fs_t* | 返回fs对象。

romfs_init 函数

  • 函数功能：

初始化。

  • 函数原型：
ret_t romfs_init (const uint8_t* header_data, uint32_t header_size, const uint8_t* body_data, uint32_t body_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
header_data | const uint8_t* | 文件信息数据。
header_size | uint32_t | 文件信息数据长度。
body_data | const uint8_t* | 文件数据。
body_size | uint32_t | 文件数据长度。


rom_file_t

概述

rom_file接口。

主要用于给google pinyin输入提供兼容的文件系统API。

示例：

char rbuff[100];
size_t len = 0;
const char* buff = "hello world";
rom_file_t* f = rom_fopen_buff((const uint8_t*)buff, sizeof(buff));
len = rom_fread(rbuff, 2, 1, f);
rom_fclose(f);

函数

函数名称 | 说明
rom_fclose | 关闭文件。
rom_feof | 判断是否到文件末尾。
rom_fopen | 打开文件。
rom_fopen_buff | 打开文件。
rom_fread | 读取文件。
rom_fseek | 设置文件当前位置。
rom_ftell | 返回文件当前位置。
rom_fwrite | 写文件。

rom_fclose 函数

  • 函数功能：

关闭文件。

  • 函数原型：
ret_t rom_fclose (rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
f | rom_file_t* | rom_file_t对象。

rom_feof 函数

  • 函数功能：

判断是否到文件末尾。

  • 函数原型：
int rom_feof (rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回当前位置。
f | rom_file_t* | rom_file_t对象。

rom_fopen 函数

  • 函数功能：

打开文件。

  • 函数原型：
rom_file_t* rom_fopen (const char* name, const char* mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rom_file_t* | 返回不是NULL表示成功，否则表示失败。
name | const char* | 文件名。
mode | const char* | 打开方式。

rom_fopen_buff 函数

  • 函数功能：

打开文件。

  • 函数原型：
rom_file_t* rom_fopen_buff (const uint8_t* data, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rom_file_t* | 打开成功则返回rom_file_t对象，否则返回NULL。
data | const uint8_t* | 数据。
capacity | uint32_t | 容量。

rom_fread 函数

  • 函数功能：

读取文件。

  • 函数原型：
size_t rom_fread (void* ptr, size_t size, size_t nitems, rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | size_t | 返回实际读取的字节数。
ptr | void* | 数据的缓冲区。
size | size_t | 缓冲区大小。
nitems | size_t | 元素的个数。
f | rom_file_t* | rom_file_t对象。

rom_fseek 函数

  • 函数功能：

设置文件当前位置。

  • 函数原型：
int rom_fseek (rom_file_t* f, long offset, int whence);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回0表示成功。
f | rom_file_t* | rom_file_t对象。
offset | long | 偏移量。
whence | int | 要从哪个位置开始偏移， SEEK_SET表示从头开始，SEEK_CUR表示从当前位置开始，SEEK_END表示从文件末尾开始。

rom_ftell 函数

  • 函数功能：

返回文件当前位置。

  • 函数原型：
long rom_ftell (rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | long | 返回当前位置。
f | rom_file_t* | rom_file_t对象。

rom_fwrite 函数

  • 函数功能：

写文件。 本函数什么也不做。

  • 函数原型：
size_t rom_fwrite (const void* ptr, size_t size, size_t nitems, rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | size_t | 返回实际写的字节数。
ptr | const void* | 数据的缓冲区。
size | size_t | 缓冲区大小。
nitems | size_t | 元素的个数。
f | rom_file_t* | rom_file_t对象。


rom_t

概述

rom_file接口。

主要用于给google pinyin输入提供兼容的文件系统API。

示例：

char rbuff[100];
size_t len = 0;
const char* buff = "hello world";
rom_file_t* f = rom_fopen_buff((const uint8_t*)buff, sizeof(buff));
len = rom_fread(rbuff, 2, 1, f);
rom_fclose(f);

函数

函数名称 | 说明
rom_fclose | 关闭文件。
rom_feof | 判断是否到文件末尾。
rom_fopen | 打开文件。
rom_fopen_buff | 打开文件。
rom_fread | 读取文件。
rom_fseek | 设置文件当前位置。
rom_ftell | 返回文件当前位置。
rom_fwrite | 写文件。

rom_fclose 函数

  • 函数功能：

关闭文件。

  • 函数原型：
ret_t rom_fclose (rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
f | rom_file_t* | rom_file_t对象。

rom_feof 函数

  • 函数功能：

判断是否到文件末尾。

  • 函数原型：
int rom_feof (rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回当前位置。
f | rom_file_t* | rom_file_t对象。

rom_fopen 函数

  • 函数功能：

打开文件。

  • 函数原型：
ret_t rom_fopen (const char* name, const char* mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回不是NULL表示成功，否则表示失败。
name | const char* | 文件名。
mode | const char* | 打开方式。

rom_fopen_buff 函数

  • 函数功能：

打开文件。

  • 函数原型：
ret_t rom_fopen_buff (const uint8_t* data, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | const uint8_t* | 数据。
capacity | uint32_t | 容量。

rom_fread 函数

  • 函数功能：

读取文件。

  • 函数原型：
size_t rom_fread (void* ptr, size_t size, size_t nitems, rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | size_t | 返回实际读取的字节数。
ptr | void* | 数据的缓冲区。
size | size_t | 缓冲区大小。
nitems | size_t | 元素的个数。
f | rom_file_t* | rom_file_t对象。

rom_fseek 函数

  • 函数功能：

设置文件当前位置。

  • 函数原型：
int rom_fseek (rom_file_t* f, long offset, int whence);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回0表示成功。
f | rom_file_t* | rom_file_t对象。
offset | long | 偏移量。
whence | int | 要从哪个位置开始偏移， SEEK_SET表示从头开始，SEEK_CUR表示从当前位置开始，SEEK_END表示从文件末尾开始。

rom_ftell 函数

  • 函数功能：

返回文件当前位置。

  • 函数原型：
long rom_ftell (rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | long | 返回当前位置。
f | rom_file_t* | rom_file_t对象。

rom_fwrite 函数

  • 函数功能：

写文件。 本函数什么也不做。

  • 函数原型：
size_t rom_fwrite (void* ptr, size_t size, size_t nitems, rom_file_t* f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | size_t | 返回实际写的字节数。
ptr | void* | 数据的缓冲区。
size | size_t | 缓冲区大小。
nitems | size_t | 元素的个数。
f | rom_file_t* | rom_file_t对象。


row_t

概述

row。一个简单的容器控件，用于水平排列其子控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

row_t是widget_t的子类控件，widget_t的函数均适用于row_t控件。

在xml中使用”row”标签创建row。如：

<row x="0" y="0" w="100%" h="100%" children_layout="default(c=0,r=1)">
<button name="open:basic" text="Basic"/>
<button name="open:button" text="Buttons"/>
<button name="open:edit" text="Edits"/>
<button name="open:keyboard" text="KeyBoard"/>
</row>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
row_cast | 转换为row对象(供脚本语言使用)。
row_create | 创建row对象
row_get_widget_vtable | 获取 row 虚表。

row_cast 函数

  • 函数功能：

转换为row对象(供脚本语言使用)。

  • 函数原型：
widget_t* row_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | row对象。
widget | widget_t* | row对象。

row_create 函数

  • 函数功能：

创建row对象

  • 函数原型：
widget_t* row_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

row_get_widget_vtable 函数

  • 函数功能：

获取 row 虚表。

  • 函数原型：
const widget_vtable_t* row_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 row 虚表。


scroll_bar_t

概述

滚动条控件。

目前只支持垂直滚动。

scroll_bar_t是widget_t的子类控件，widget_t的函数均适用于scroll_bar_t控件。

在xml中使用”scroll_bar”或”scroll_bar_d”或”scroll_bar_m”标签创建滚动条控件。如：

<list_view x="0"  y="30" w="100%" h="-80" item_height="60">
<scroll_view name="view" x="0"  y="0" w="100%" h="100%">
...
</scroll_view>
<scroll_bar_m name="bar" x="right" y="0" w="6" h="100%" value="0"/>
</list_view>

更多用法请参考：list_view_m.xml

在c代码中使用函数scroll_bar_create创建列表项控件。如：

widget_t* scroll_bar = scroll_bar_create(list_view, 0, 0, 0, 0);

<style name="default">
<normal bg_color="#c0c0c0" fg_color="#808080"/>
<over bg_color="#c0c0c0" fg_color="#808080"/>
<pressed bg_color="#c0c0c0" fg_color="#808080"/>
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
scroll_bar_add_delta | 在当前的值上增加一个值，并触发EVT_VALUE_CHANGED事件。
scroll_bar_cast | 转换为scroll_bar对象(供脚本语言使用)。
scroll_bar_create | 创建scroll_bar对象
scroll_bar_create_desktop | 创建desktop风格的scroll_bar对象
scroll_bar_create_mobile | 创建mobile风格的scroll_bar对象
scroll_bar_hide_by_opacity_animation | 通过动画隐藏滚动条。
scroll_bar_is_mobile | 判断是否是mobile风格的滚动条。
scroll_bar_scroll_delta | 在当前的值上增加一个值，并滚动到新的值，并触发EVT_VALUE_CHANGED事件。
scroll_bar_scroll_to | 滚动到指定的值。
scroll_bar_set_animator_time | 设置翻页滚动动画时间。
scroll_bar_set_auto_hide | 设置auto_hide属性。
scroll_bar_set_params | 设置参数。
scroll_bar_set_value | 设置值，并触发EVT_VALUE_CHANGED事件。
scroll_bar_set_value_only | 设置值，但不触发EVT_VALUE_CHANGED事件。
scroll_bar_show_by_opacity_animation | 通过动画显示滚动条。

属性

属性名称 | 类型 | 说明
animatable | bool_t | 滚动时是否启用动画。
animator_time | uint32_t | 翻页滚动动画时间。
auto_hide | bool_t | 是否自动隐藏(仅对mobile风格的滚动条有效)。
row | int32_t | 行的高度。
value | int32_t | 当前的值。
virtual_size | int32_t | 虚拟宽度或高度。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(滚动值)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(滚动值)改变事件。

scroll_bar_add_delta 函数

  • 函数功能：

在当前的值上增加一个值，并触发EVT_VALUE_CHANGED事件。

  • 函数原型：
ret_t scroll_bar_add_delta (widget_t* widget, int32_t delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
delta | int32_t | 值。

scroll_bar_cast 函数

  • 函数功能：

转换为scroll_bar对象(供脚本语言使用)。

  • 函数原型：
widget_t* scroll_bar_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | scroll_bar对象。
widget | widget_t* | scroll_bar对象。

scroll_bar_create 函数

  • 函数功能：

创建scroll_bar对象

根据宏WITH_DESKTOP_STYLE决定创建desktop风格还是mobile风格的滚动条

  • 函数原型：
widget_t* scroll_bar_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

scroll_bar_create_desktop 函数

  • 函数功能：

创建desktop风格的scroll_bar对象

  • 函数原型：
widget_t* scroll_bar_create_desktop (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

scroll_bar_create_mobile 函数

  • 函数功能：

创建mobile风格的scroll_bar对象

  • 函数原型：
widget_t* scroll_bar_create_mobile (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

scroll_bar_hide_by_opacity_animation 函数

  • 函数功能：

通过动画隐藏滚动条。

  • 函数原型：
ret_t scroll_bar_hide_by_opacity_animation (widget_t* widget, int32_t duration, int32_t delay);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
duration | int32_t | 动画持续时间。
delay | int32_t | 动画执行时间。

scroll_bar_is_mobile 函数

  • 函数功能：

判断是否是mobile风格的滚动条。

  • 函数原型：
bool_t scroll_bar_is_mobile (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是mobile风格的，否则表示不是mobile风格的。
widget | widget_t* | scroll_bar控件。

scroll_bar_scroll_delta 函数

  • 函数功能：

在当前的值上增加一个值，并滚动到新的值，并触发EVT_VALUE_CHANGED事件。

  • 函数原型：
ret_t scroll_bar_scroll_delta (widget_t* widget, int32_t delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
delta | int32_t | 值。

scroll_bar_scroll_to 函数

  • 函数功能：

滚动到指定的值。

  • 函数原型：
ret_t scroll_bar_scroll_to (widget_t* widget, int32_t value, int32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
value | int32_t | 值。
duration | int32_t | 动画持续时间。

scroll_bar_set_animator_time 函数

  • 函数功能：

设置翻页滚动动画时间。

  • 函数原型：
ret_t scroll_bar_set_animator_time (widget_t* widget, uint32_t animator_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
animator_time | uint32_t | 时间。

scroll_bar_set_auto_hide 函数

  • 函数功能：

设置auto_hide属性。

仅对mobile风格的滚动条有效

  • 函数原型：
ret_t scroll_bar_set_auto_hide (widget_t* widget, bool_t auto_hide);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
auto_hide | bool_t | 值。

scroll_bar_set_params 函数

  • 函数功能：

设置参数。

  • 函数原型：
ret_t scroll_bar_set_params (widget_t* widget, int32_t virtual_size, int32_t row);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
virtual_size | int32_t | 虚拟高度。
row | int32_t | 每一行的高度。

scroll_bar_set_value 函数

  • 函数功能：

设置值，并触发EVT_VALUE_CHANGED事件。

  • 函数原型：
ret_t scroll_bar_set_value (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
value | int32_t | 值。

scroll_bar_set_value_only 函数

  • 函数功能：

设置值，但不触发EVT_VALUE_CHANGED事件。

  • 函数原型：
ret_t scroll_bar_set_value_only (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
value | int32_t | 值。

scroll_bar_show_by_opacity_animation 函数

  • 函数功能：

通过动画显示滚动条。

  • 函数原型：
ret_t scroll_bar_show_by_opacity_animation (widget_t* widget, int32_t duration, int32_t delay);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | scroll_bar控件。
duration | int32_t | 动画持续时间。
delay | int32_t | 动画执行时间。

animatable 属性

滚动时是否启用动画。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

animator_time 属性

翻页滚动动画时间。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_hide 属性

是否自动隐藏(仅对mobile风格的滚动条有效)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

row 属性

行的高度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

当前的值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

virtual_size 属性

虚拟宽度或高度。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


scroll_view_t

概述

滚动视图。

scroll_view_t是widget_t的子类控件，widget_t的函数均适用于scroll_view_t控件。

在xml中使用”scroll_view”标签创建滚动视图控件。如：

<list_view x="0"  y="30" w="100%" h="-80" item_height="60">
<scroll_view name="view" x="0"  y="0" w="100%" h="100%">
<list_item style="odd" children_layout="default(rows=1,cols=0)">
<image draw_type="icon" w="30" image="earth"/>
<label w="-30" text="1.Hello AWTK !">
<switch x="r:10" y="m" w="60" h="20"/>
</label>
</list_item>
...
</scroll_view>
</list_view>

滚动视图一般作为列表视图的子控件使用。

更多用法请参考：list_view_m.xml

在c代码中使用函数scroll_view_create创建列表视图控件。如：

widget_t* scroll_view = scroll_view_create(win, 0, 0, 0, 0);

可用通过style来设置控件的显示风格，如背景颜色和边框颜色等(一般情况不需要)。

函数

函数名称 | 说明
scroll_view_cast | 转换为scroll_view对象(供脚本语言使用)。
scroll_view_create | 创建scroll_view对象
scroll_view_get_widget_vtable | 获取 scroll_view 虚表。
scroll_view_scroll_delta_to | 滚动到指定的偏移量。
scroll_view_scroll_to | 滚动到指定的偏移量。
scroll_view_set_move_to_page | 设置滚动时是否每次翻一页
scroll_view_set_offset | 设置偏移量。
scroll_view_set_recursive | 设置是否递归查找全部子控件。
scroll_view_set_recursive_only | 设置是否递归查找全部子控件。(不触发repaint和relayout)。
scroll_view_set_slide_limit_ratio | 设置滑动到极限时可继续滑动区域的占比。
scroll_view_set_snap_to_page | 设置滚动时offset是否按页面对齐。
scroll_view_set_speed_scale | 设置偏移速度比例。
scroll_view_set_virtual_h | 设置虚拟高度。
scroll_view_set_virtual_w | 设置虚拟宽度。
scroll_view_set_xslidable | 设置是否允许x方向滑动。
scroll_view_set_yslidable | 设置是否允许y方向滑动。

属性

属性名称 | 类型 | 说明
move_to_page | bool_t | 是否每次翻一页（当 move_to_page 为ture 的时候才有效果，主要用于区分一次翻一页还是一次翻多页）。
recursive | bool_t | 是否递归查找全部子控件。
slide_limit_ratio | float_t | 滑动到极限时可继续滑动区域的占比。
snap_to_page | bool_t | 滚动时offset是否按页面对齐。
virtual_h | wh_t | 虚拟高度。
virtual_w | wh_t | 虚拟宽度。
xoffset | int32_t | x偏移量。
xslidable | bool_t | 是否允许x方向滑动。
xspeed_scale | float_t | x偏移速度比例。
yoffset | int32_t | y偏移量。
yslidable | bool_t | 是否允许y方向滑动。
yspeed_scale | float_t | y偏移速度比例。

事件

事件名称 | 类型 | 说明
EVT_SCROLL_START | event_t | 开始滚动事件。
EVT_SCROLL_END | event_t | 结束滚动事件。
EVT_SCROLL | event_t | 滚动事件。
EVT_PAGE_CHANGED | event_t | 页面改变事件。
EVT_PAGE_CHANGING | event_t | 页面正在改变。

scroll_view_cast 函数

  • 函数功能：

转换为scroll_view对象(供脚本语言使用)。

  • 函数原型：
widget_t* scroll_view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | scroll_view对象。
widget | widget_t* | scroll_view对象。

scroll_view_create 函数

  • 函数功能：

创建scroll_view对象

  • 函数原型：
widget_t* scroll_view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

scroll_view_get_widget_vtable 函数

  • 函数功能：

获取 scroll_view 虚表。

  • 函数原型：
const widget_vtable_t* scroll_view_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 scroll_view 虚表。

scroll_view_scroll_delta_to 函数

  • 函数功能：

滚动到指定的偏移量。

  • 函数原型：
ret_t scroll_view_scroll_delta_to (widget_t* widget, int32_t xoffset_delta, int32_t yoffset_delta, int32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
xoffset_delta | int32_t | x偏移量。
yoffset_delta | int32_t | y偏移量。
duration | int32_t | 时间。

scroll_view_scroll_to 函数

  • 函数功能：

滚动到指定的偏移量。

  • 函数原型：
ret_t scroll_view_scroll_to (widget_t* widget, int32_t xoffset_end, int32_t yoffset_end, int32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
xoffset_end | int32_t | x偏移量。
yoffset_end | int32_t | y偏移量。
duration | int32_t | 时间。

scroll_view_set_move_to_page 函数

  • 函数功能：

设置滚动时是否每次翻一页 备注：当 snap_to_page 为ture 的时候才有效果，主要用于区分一次翻一页还是一次翻多页。

  • 函数原型：
ret_t scroll_view_set_move_to_page (widget_t* widget, bool_t move_to_page);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
move_to_page | bool_t | 是否每次翻一页。

scroll_view_set_offset 函数

  • 函数功能：

设置偏移量。

  • 函数原型：
ret_t scroll_view_set_offset (widget_t* widget, int32_t xoffset, int32_t yoffset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
xoffset | int32_t | x偏移量。
yoffset | int32_t | y偏移量。

scroll_view_set_recursive 函数

  • 函数功能：

设置是否递归查找全部子控件。

  • 函数原型：
ret_t scroll_view_set_recursive (widget_t* widget, bool_t recursive);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
recursive | bool_t | 是否递归查找全部子控件。

scroll_view_set_recursive_only 函数

  • 函数功能：

设置是否递归查找全部子控件。(不触发repaint和relayout)。

  • 函数原型：
ret_t scroll_view_set_recursive_only (widget_t* widget, bool_t recursive);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
recursive | bool_t | 是否递归查找全部子控件。

scroll_view_set_slide_limit_ratio 函数

  • 函数功能：

设置滑动到极限时可继续滑动区域的占比。

  • 函数原型：
ret_t scroll_view_set_slide_limit_ratio (widget_t* widget, float_t slide_limit_ratio);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
slide_limit_ratio | float_t | 滑动到极限时可继续滑动区域的占比。

scroll_view_set_snap_to_page 函数

  • 函数功能：

设置滚动时offset是否按页面对齐。

  • 函数原型：
ret_t scroll_view_set_snap_to_page (widget_t* widget, bool_t snap_to_page);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
snap_to_page | bool_t | 是否按页面对齐。

scroll_view_set_speed_scale 函数

  • 函数功能：

设置偏移速度比例。

  • 函数原型：
ret_t scroll_view_set_speed_scale (widget_t* widget, float_t xspeed_scale, float_t yspeed_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
xspeed_scale | float_t | x偏移速度比例。
yspeed_scale | float_t | y偏移速度比例。

scroll_view_set_virtual_h 函数

  • 函数功能：

设置虚拟高度。

  • 函数原型：
ret_t scroll_view_set_virtual_h (widget_t* widget, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
h | wh_t | 虚拟高度。

scroll_view_set_virtual_w 函数

  • 函数功能：

设置虚拟宽度。

  • 函数原型：
ret_t scroll_view_set_virtual_w (widget_t* widget, wh_t w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
w | wh_t | 虚拟宽度。

scroll_view_set_xslidable 函数

  • 函数功能：

设置是否允许x方向滑动。

  • 函数原型：
ret_t scroll_view_set_xslidable (widget_t* widget, bool_t xslidable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
xslidable | bool_t | 是否允许滑动。

scroll_view_set_yslidable 函数

  • 函数功能：

设置是否允许y方向滑动。

  • 函数原型：
ret_t scroll_view_set_yslidable (widget_t* widget, bool_t yslidable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
yslidable | bool_t | 是否允许滑动。

move_to_page 属性

是否每次翻一页（当 move_to_page 为ture 的时候才有效果，主要用于区分一次翻一页还是一次翻多页）。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

recursive 属性

是否递归查找全部子控件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

slide_limit_ratio 属性

滑动到极限时可继续滑动区域的占比。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

snap_to_page 属性

滚动时offset是否按页面对齐。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

virtual_h 属性

虚拟高度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

virtual_w 属性

虚拟宽度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

xoffset 属性

x偏移量。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

xslidable 属性

是否允许x方向滑动。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

xspeed_scale 属性

x偏移速度比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

yoffset 属性

y偏移量。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

yslidable 属性

是否允许y方向滑动。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

yspeed_scale 属性

y偏移速度比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


self_layouter_default_t

概述

缺省的控件自身布局算法实现。

用法请参考：缺省控件自身布局算法

函数

函数名称 | 说明
self_layouter_default_create | 创建控件自身布局对象。

self_layouter_default_create 函数

  • 函数功能：

创建控件自身布局对象。

  • 函数原型：
self_layouter_t* self_layouter_default_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_t* | 返回创建控件自身布局对象。


self_layouter_factory_t

概述

控件自身布局算法工厂。

函数

函数名称 | 说明
self_layouter_factory | 获取缺省的控件自身布局算法工厂对象。
self_layouter_factory_create | 创建控件自身布局算法工厂对象。
self_layouter_factory_create_layouter | 创建指定类型的控件自身布局算法对象。
self_layouter_factory_destroy | 析构并释放控件自身布局算法工厂对象。
self_layouter_factory_register | 注册控件自身布局算法创建函数。
self_layouter_factory_set | 设置缺省的控件自身布局算法工厂对象。

self_layouter_factory 函数

  • 函数功能：

获取缺省的控件自身布局算法工厂对象。

  • 函数原型：
self_layouter_factory_t* self_layouter_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_factory_t* | 返回控件自身布局算法工厂对象。

self_layouter_factory_create 函数

  • 函数功能：

创建控件自身布局算法工厂对象。

  • 函数原型：
self_layouter_factory_t* self_layouter_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_factory_t* | 返回控件自身布局算法工厂对象。

self_layouter_factory_create_layouter 函数

  • 函数功能：

创建指定类型的控件自身布局算法对象。

  • 函数原型：
self_layouter_t* self_layouter_factory_create_layouter (self_layouter_factory_t* factory, const char* type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_t* | 返回控件自身布局算法对象。
factory | self_layouter_factory_t* | 控件自身布局算法工厂对象。
type | const char* | 类型。

self_layouter_factory_destroy 函数

  • 函数功能：

析构并释放控件自身布局算法工厂对象。

  • 函数原型：
ret_t self_layouter_factory_destroy (self_layouter_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | self_layouter_factory_t* | 控件自身布局算法工厂对象。

self_layouter_factory_register 函数

  • 函数功能：

注册控件自身布局算法创建函数。

  • 函数原型：
ret_t self_layouter_factory_register (self_layouter_factory_t* factory, const char* type, self_layouter_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | self_layouter_factory_t* | layouter工厂对象。
type | const char* | 控件自身布局算法类型。
create | self_layouter_create_t | 控件自身布局算法创建函数。

self_layouter_factory_set 函数

  • 函数功能：

设置缺省的控件自身布局算法工厂对象。

  • 函数原型：
ret_t self_layouter_factory_set (self_layouter_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | self_layouter_factory_t* | 控件自身布局算法工厂对象。


self_layouter_menu_t

概述

menu的控件自身布局算法实现(一般用于popup或dialog窗口)。

用法请参考：缺省控件自身布局算法

函数

函数名称 | 说明
self_layouter_menu_create | 创建控件自身布局对象。

self_layouter_menu_create 函数

  • 函数功能：

创建控件自身布局对象。

  • 函数原型：
self_layouter_t* self_layouter_menu_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_t* | 返回创建控件自身布局对象。


self_layouter_t

概述

控件自身排版布局器的接口。

按特定算法对控件进行排版布局，子类需要实现vtable中的函数。

函数

函数名称 | 说明
self_layouter_clone | 克隆layouter对象。
self_layouter_create | 创建layouter对象。
self_layouter_destroy | 销毁layouter对象。
self_layouter_get_param | 获取指定的参数。
self_layouter_get_param_float | 获取指定的浮点格式的参数。
self_layouter_get_param_int | 获取指定的整数格式的参数。
self_layouter_layout | 对控件自身进行布局。
self_layouter_reinit | 重新计算layouter对象中的数据。
self_layouter_set_param | 获取指定的参数。
self_layouter_set_param_str | 设置字符串格式的参数。
self_layouter_to_string | 获取全部参数。

self_layouter_clone 函数

  • 函数功能：

克隆layouter对象。

  • 函数原型：
self_layouter_t* self_layouter_clone (self_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_t* | 返回layouter对象。
layouter | self_layouter_t* | 被克隆的对象。

self_layouter_create 函数

  • 函数功能：

创建layouter对象。

  • 函数原型：
self_layouter_t* self_layouter_create (const char* params);
  • 参数说明：
参数 | 类型 | 说明
返回值 | self_layouter_t* | 返回layouter对象。
params | const char* | 参数。

self_layouter_destroy 函数

  • 函数功能：

销毁layouter对象。

  • 函数原型：
ret_t self_layouter_destroy (self_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | self_layouter_t* | layouter对象。

self_layouter_get_param 函数

  • 函数功能：

获取指定的参数。

  • 函数原型：
ret_t self_layouter_get_param (self_layouter_t* layouter, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | self_layouter_t* | layouter对象。
name | const char* | 参数名。
v | value_t* | 返回参数的值。

self_layouter_get_param_float 函数

  • 函数功能：

获取指定的浮点格式的参数。

  • 函数原型：
float_t self_layouter_get_param_float (self_layouter_t* layouter, const char* name, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 成功返回参数的值，失败返回缺省值。
layouter | self_layouter_t* | layouter对象。
name | const char* | 参数名。
defval | float_t | 缺省值。

self_layouter_get_param_int 函数

  • 函数功能：

获取指定的整数格式的参数。

  • 函数原型：
int32_t self_layouter_get_param_int (self_layouter_t* layouter, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 成功返回参数的值，失败返回缺省值。
layouter | self_layouter_t* | layouter对象。
name | const char* | 参数名。
defval | int32_t | 缺省值。

self_layouter_layout 函数

  • 函数功能：

对控件自身进行布局。

  • 函数原型：
ret_t self_layouter_layout (self_layouter_t* layouter, widget_t* widget, rect_t* area);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | self_layouter_t* | layouter对象。
widget | widget_t* | 控件。
area | rect_t* | 可以使用的区域。

self_layouter_reinit 函数

  • 函数功能：

重新计算layouter对象中的数据。

  • 函数原型：
ret_t self_layouter_reinit (self_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | self_layouter_t* | layouter对象。

self_layouter_set_param 函数

  • 函数功能：

获取指定的参数。

  • 函数原型：
ret_t self_layouter_set_param (self_layouter_t* layouter, const char* name, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | self_layouter_t* | layouter对象。
name | const char* | 参数名。
v | const value_t* | 参数的值。

self_layouter_set_param_str 函数

  • 函数功能：

设置字符串格式的参数。

  • 函数原型：
ret_t self_layouter_set_param_str (self_layouter_t* layouter, const char* name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
layouter | self_layouter_t* | layouter对象。
name | const char* | 参数名。
value | const char* | 参数值。

self_layouter_to_string 函数

  • 函数功能：

获取全部参数。

  • 函数原型：
const char* self_layouter_to_string (self_layouter_t* layouter);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串格式的参数。
layouter | self_layouter_t* | layouter对象。


serial_t

概述

函数

函数名称 | 说明
serial_bytesize_from_str | 字符串转bytesize
serial_close | 关闭串口
serial_config | 配置串口
serial_flowcontrol_from_str | 字符串转flowcontrol
serial_handle_get_dev | 获取设备句柄。
serial_handle_get_fd | 获取文件描述符。
serial_iflush | 刷新input缓冲区。
serial_oflush | 刷新output缓冲区。
serial_open | 打开串口
serial_parity_from_str | 字符串转parity
serial_read | 串口读数据
serial_stopbits_from_str | 字符串转stopbits
serial_wait_for_data | 等待数据。
serial_write | 串口写数据

serial_bytesize_from_str 函数

  • 函数功能：

字符串转bytesize

  • 函数原型：
bytesize_t serial_bytesize_from_str (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bytesize_t | 返回bytesize。
str | const char* | 字符串。

serial_close 函数

  • 函数功能：

关闭串口

  • 函数原型：
ret_t serial_close (serial_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | serial_handle_t | 串口句柄。

serial_config 函数

  • 函数功能：

配置串口

  • 函数原型：
ret_t serial_config (serial_handle_t handle, uint32_t baudrate, bytesize_t bytesize, stopbits_t stopbits, flowcontrol_t flowcontrol, parity_t parity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | serial_handle_t | 串口句柄。
baudrate | uint32_t | 波特率。
bytesize | bytesize_t | 数据位。
stopbits | stopbits_t | 停止位
flowcontrol | flowcontrol_t | 流控。
parity | parity_t | 校验位。

serial_flowcontrol_from_str 函数

  • 函数功能：

字符串转flowcontrol

  • 函数原型：
flowcontrol_t serial_flowcontrol_from_str (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | flowcontrol_t | 返回flowcontrol。
str | const char* | 字符串。

serial_handle_get_dev 函数

  • 函数功能：

获取设备句柄。

  • 函数原型：
serial_dev_t serial_handle_get_dev (serial_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | serial_dev_t | 返回设备句柄。
handle | serial_handle_t | 串口句柄。

serial_handle_get_fd 函数

  • 函数功能：

获取文件描述符。

  • 函数原型：
int serial_handle_get_fd (serial_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回文件描述符。
handle | serial_handle_t | 串口句柄。

serial_iflush 函数

  • 函数功能：

刷新input缓冲区。

  • 函数原型：
ret_t serial_iflush (serial_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | serial_handle_t | 串口句柄。

serial_oflush 函数

  • 函数功能：

刷新output缓冲区。

  • 函数原型：
ret_t serial_oflush (serial_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | serial_handle_t | 串口句柄。

serial_open 函数

  • 函数功能：

打开串口 Windows下，需要在应用程序初始化时，调用 tk_socket_init。

  • 函数原型：
serial_handle_t serial_open (const char* port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | serial_handle_t | 失败返回NULL。
port | const char* | 串口号。

serial_parity_from_str 函数

  • 函数功能：

字符串转parity

  • 函数原型：
parity_t serial_parity_from_str (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | parity_t | 返回parity。
str | const char* | 字符串。

serial_read 函数

  • 函数功能：

串口读数据

  • 函数原型：
int32_t serial_read (serial_handle_t handle, uint8_t* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取的字节数。
handle | serial_handle_t | 串口句柄。
buff | uint8_t* | 数据缓冲区。
max_size | uint32_t | 数据长度。

serial_stopbits_from_str 函数

  • 函数功能：

字符串转stopbits

  • 函数原型：
stopbits_t serial_stopbits_from_str (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | stopbits_t | 返回stopbits。
str | const char* | 字符串。

serial_wait_for_data 函数

  • 函数功能：

等待数据。

  • 函数原型：
ret_t serial_wait_for_data (serial_handle_t handle, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | serial_handle_t | 串口句柄。
timeout_ms | uint32_t | 等待时间(ms)。

serial_write 函数

  • 函数功能：

串口写数据

  • 函数原型：
int32_t serial_write (serial_handle_t handle, const uint8_t* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际写入的字节数。
handle | serial_handle_t | 串口句柄。
buff | const uint8_t* | 数据缓冲区。
max_size | uint32_t | 数据长度。


serial_widget_t

概述

用于串口通信的控件 在xml中使用”serial”标签创建控件。如：

<!-- ui -->
<serial device="COM1" baudrate="115200"/>

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

本控件默认不可见，无需指定style。

<!-- style -->
<serial>
<style name="default" font_size="32">
<normal text_color="black" />
</style>
</serial>

函数

函数名称 | 说明
serial_widget_cast | 转换为serial_widget对象(供脚本语言使用)。
serial_widget_create | 创建serial_widget对象
serial_widget_get_widget_vtable | 获取 serial_widget 虚表。
serial_widget_set_baudrate | 设置 波特率。
serial_widget_set_bytesize | 设置 字节位数。
serial_widget_set_check_interval | 设置 轮询时间。
serial_widget_set_device | 设置 设备。
serial_widget_set_flowcontrol | 设置 流控。
serial_widget_set_parity | 设置 奇偶校验。
serial_widget_set_stopbits | 设置 停止位。

属性

属性名称 | 类型 | 说明
baudrate | uint32_t | 波特率。
bytesize | uint32_t | 字节位数。
check_interval | uint32_t | 轮询时间（单位：ms）。
device | char* | 设备(文件)名。
flowcontrol | uint32_t | 流控。
iostream | tk_iostream_t* | 输入/出流。
istream | tk_istream_t* | 输入流。
ostream | tk_ostream_t* | 输出流。
parity | uint32_t | 奇偶校验。
stopbits | uint32_t | 停止位。

事件

事件名称 | 类型 | 说明
EVT_DATA | event_t | 数据到来事件。

serial_widget_cast 函数

  • 函数功能：

转换为serial_widget对象(供脚本语言使用)。

  • 函数原型：
widget_t* serial_widget_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | serial_widget对象。
widget | widget_t* | serial_widget对象。

serial_widget_create 函数

  • 函数功能：

创建serial_widget对象

  • 函数原型：
widget_t* serial_widget_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | serial_widget对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

serial_widget_get_widget_vtable 函数

  • 函数功能：

获取 serial_widget 虚表。

  • 函数原型：
const widget_vtable_t* serial_widget_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 serial_widget 虚表。

serial_widget_set_baudrate 函数

  • 函数功能：

设置 波特率。

  • 函数原型：
ret_t serial_widget_set_baudrate (widget_t* widget, uint32_t baudrate);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
baudrate | uint32_t | 波特率。

serial_widget_set_bytesize 函数

  • 函数功能：

设置 字节位数。

  • 函数原型：
ret_t serial_widget_set_bytesize (widget_t* widget, uint32_t bytesize);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
bytesize | uint32_t | 字节位数。

serial_widget_set_check_interval 函数

  • 函数功能：

设置 轮询时间。

  • 函数原型：
ret_t serial_widget_set_check_interval (widget_t* widget, uint32_t check_interval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
check_interval | uint32_t | 轮询时间（单位：ms）。

serial_widget_set_device 函数

  • 函数功能：

设置 设备。

  • 函数原型：
ret_t serial_widget_set_device (widget_t* widget, const char* device);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
device | const char* | 设备。

serial_widget_set_flowcontrol 函数

  • 函数功能：

设置 流控。

  • 函数原型：
ret_t serial_widget_set_flowcontrol (widget_t* widget, uint32_t flowcontrol);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
flowcontrol | uint32_t | 流控。

serial_widget_set_parity 函数

  • 函数功能：

设置 奇偶校验。

  • 函数原型：
ret_t serial_widget_set_parity (widget_t* widget, uint32_t parity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
parity | uint32_t | 奇偶校验。

serial_widget_set_stopbits 函数

  • 函数功能：

设置 停止位。

  • 函数原型：
ret_t serial_widget_set_stopbits (widget_t* widget, uint32_t stopbits);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
stopbits | uint32_t | 停止位。

baudrate 属性

波特率。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

bytesize 属性

字节位数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

check_interval 属性

轮询时间（单位：ms）。 仅在不支持用select等待串口数据的嵌入式设备上有效。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

device 属性

设备(文件)名。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

flowcontrol 属性

流控。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

iostream 属性

输入/出流。

  • 类型：tk_iostream_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

istream 属性

输入流。

  • 类型：tk_istream_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

ostream 属性

输出流。

  • 类型：tk_ostream_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

parity 属性

奇偶校验。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

stopbits 属性

停止位。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


shortcut_t

概述

快捷键。

函数

函数名称 | 说明
shortcut_equal | 比较两个快捷键对象。
shortcut_init | 初始化快捷键对象。
shortcut_init_with_str | 初始化快捷键对象。
shortcut_match | 检查事件与快捷键是否匹配。

属性

属性名称 | 类型 | 说明
alt | bool_t | alt键是否按下。
cmd | bool_t | cmd/win键是否按下。
ctrl | bool_t | ctrl键是否按下。
is_valid | bool_t | 是否有效。
key | uint32_t | 键值。
lalt | bool_t | left alt键是否按下。
lctrl | bool_t | left ctrl键是否按下。
lshift | bool_t | left shift键是否按下。
menu | bool_t | menu键是否按下。
ralt | bool_t | right alt键是否按下。
rctrl | bool_t | right ctrl键是否按下。
rshift | bool_t | right shift键是否按下。
shift | bool_t | shift键是否按下。

shortcut_equal 函数

  • 函数功能：

比较两个快捷键对象。

  • 函数原型：
bool_t shortcut_equal (shortcut_t* shortcut1, shortcut_t* shortcut2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示相同，否则表示不同。
shortcut1 | shortcut_t* | 快捷键对象1。
shortcut2 | shortcut_t* | 快捷键对象2。

shortcut_init 函数

  • 函数功能：

初始化快捷键对象。

  • 函数原型：
shortcut_t* shortcut_init (shortcut_t* shortcut, uint32_t key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | shortcut_t* | 返回快捷键对象。
shortcut | shortcut_t* | 快捷键对象。
key | uint32_t | 键值。

shortcut_init_with_str 函数

  • 函数功能：

初始化快捷键对象。

  • 函数原型：
shortcut_t* shortcut_init_with_str (shortcut_t* shortcut, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | shortcut_t* | 返回快捷键对象。
shortcut | shortcut_t* | 快捷键对象。
str | const char* | 快捷键。

shortcut_match 函数

  • 函数功能：

检查事件与快捷键是否匹配。

  • 函数原型：
bool_t shortcut_match (shortcut_t* filter, shortcut_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示匹配，否则表示不匹配。
filter | shortcut_t* | 过滤器快捷键对象。
event | shortcut_t* | 事件快捷键对象。

alt 属性

alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

cmd 属性

cmd/win键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ctrl 属性

ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

is_valid 属性

是否有效。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

key 属性

键值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lalt 属性

left alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lctrl 属性

left ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lshift 属性

left shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

menu 属性

menu键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ralt 属性

right alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

rctrl 属性

right ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

rshift 属性

right shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

shift 属性

shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


slider_t

概述

滑块控件。

slider_t是widget_t的子类控件，widget_t的函数均适用于slider_t控件。

在xml中使用”slider”标签创建滑块控件。如：

<slider x="center" y="10" w="80%" h="20" value="10"/>
<slider style="img" x="center" y="50" w="80%" h="30" value="20" />
<slider style="img" x="center" y="90" w="80%" h="30" value="30" min="5" max="50" step="5"/>

更多用法请参考： basic

在c代码中使用函数slider_create创建滑块控件。如：

widget_t* slider = slider_create(win, 10, 10, 200, 30);
widget_on(slider, EVT_VALUE_CHANGED, on_changed, NULL);
widget_on(slider, EVT_VALUE_CHANGING, on_changing, NULL);

完整示例请参考： slider demo

可用通过style来设置控件的显示风格，如图片和颜色等等。如：

<style name="img" bg_image="slider_bg" fg_image="slider_fg">
<normal icon="slider_drag"/>
<pressed icon="slider_drag_p"/>
<over icon="slider_drag_o"/>
</style>

更多用法请参考： theme default

函数

函数名称 | 说明
slider_cast | 转换为slider对象(供脚本语言使用)。
slider_create | 创建slider对象
slider_get_widget_vtable | 获取 slider 虚表。
slider_set_bar_size | 设置bar的宽度或高度。
slider_set_line_cap | 设置前景色的线帽形状。（默认为跟随风格的圆角设置，但是在没有设置圆角的时候无法使用 “round” 来设置圆角）
slider_set_max | 设置滑块的最大值。
slider_set_min | 设置滑块的最小值。
slider_set_step | 设置滑块的拖动的最小单位。
slider_set_value | 设置滑块的值。
slider_set_value_internal | 设置滑块的值(public for test)。
slider_set_vertical | 设置滑块的方向。

属性

属性名称 | 类型 | 说明
bar_size | uint32_t | 轴的宽度或高度（单位：像素），为0表示为控件的宽度或高度的一半，缺省为0。
dragger_adapt_to_icon | bool_t | 滑块的宽度或高度是否与icon适应，缺省为true。
dragger_size | uint32_t | 滑块的宽度或高度（单位：像素），缺省为 bar_size * 1.5。
line_cap | char* | 前景色的线帽形状。（取值：butt
max | double | 最大值。
min | double | 最小值。
slide_with_bar | bool_t | 是否允许在轴上滑动来改变滑块位置，缺省为FALSE。
step | double | 拖动的最小单位。
value | double | 值。
vertical | bool_t | 滑块的是否为垂直方向。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值即将改变事件。
EVT_VALUE_CHANGING | value_change_event_t | 值正在改变事件(拖动中)。
EVT_VALUE_CHANGED | value_change_event_t | 值改变事件。

slider_cast 函数

  • 函数功能：

转换为slider对象(供脚本语言使用)。

  • 函数原型：
widget_t* slider_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | slider对象。
widget | widget_t* | slider对象。

slider_create 函数

  • 函数功能：

创建slider对象

  • 函数原型：
widget_t* slider_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

slider_get_widget_vtable 函数

  • 函数功能：

获取 slider 虚表。

  • 函数原型：
const widget_vtable_t* slider_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 slider 虚表。

slider_set_bar_size 函数

  • 函数功能：

设置bar的宽度或高度。

  • 函数原型：
ret_t slider_set_bar_size (widget_t* widget, uint32_t bar_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
bar_size | uint32_t | bar的宽度或高度。

slider_set_line_cap 函数

  • 函数功能：

设置前景色的线帽形状。（默认为跟随风格的圆角设置，但是在没有设置圆角的时候无法使用 “round” 来设置圆角）

  • 函数原型：
ret_t slider_set_line_cap (widget_t* widget, const char* line_cap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
line_cap | const char* | 前景色的线帽形状，取值为：butt

slider_set_max 函数

  • 函数功能：

设置滑块的最大值。

  • 函数原型：
ret_t slider_set_max (widget_t* widget, double max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
max | double | 最大值

slider_set_min 函数

  • 函数功能：

设置滑块的最小值。

  • 函数原型：
ret_t slider_set_min (widget_t* widget, double min);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
min | double | 最小值

slider_set_step 函数

  • 函数功能：

设置滑块的拖动的最小单位。

  • 函数原型：
ret_t slider_set_step (widget_t* widget, double step);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
step | double | 拖动的最小单位。

slider_set_value 函数

  • 函数功能：

设置滑块的值。

  • 函数原型：
ret_t slider_set_value (widget_t* widget, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | double | 值

slider_set_value_internal 函数

  • 函数功能：

设置滑块的值(public for test)。

  • 函数原型：
ret_t slider_set_value_internal (widget_t* widget, double value, event_type_t etype, bool_t force);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | double | 值。
etype | event_type_t | 触发事件。
force | bool_t | 不管有没有变化都设置。

slider_set_vertical 函数

  • 函数功能：

设置滑块的方向。

  • 函数原型：
ret_t slider_set_vertical (widget_t* widget, bool_t vertical);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
vertical | bool_t | 是否为垂直方向。

bar_size 属性

轴的宽度或高度（单位：像素），为0表示为控件的宽度或高度的一半，缺省为0。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

dragger_adapt_to_icon 属性

滑块的宽度或高度是否与icon适应，缺省为true。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

dragger_size 属性

滑块的宽度或高度（单位：像素），缺省为 bar_size * 1.5。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

line_cap 属性

前景色的线帽形状。（取值：butt|round，默认为跟随风格的圆角设置, 但是在没有设置圆角的时候无法使用 “round” 来设置圆角）

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max 属性

最大值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

min 属性

最小值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

slide_with_bar 属性

是否允许在轴上滑动来改变滑块位置，缺省为FALSE。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

step 属性

拖动的最小单位。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

vertical 属性

滑块的是否为垂直方向。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


slide_indicator_t

概述

slide_view的指示器控件。

支持直线、弧线排布，默认有4种绘制样式，若设置了icon/active_icon，则优先使用icon/active_icon

slide_indicator_t是widget_t的子类控件，widget_t的函数均适用于slide_indicator_t控件。

在xml中使用”slide_indicator”或”slide_indicator_arc”标签创建指示器控件。如：

<slide_view name="view" x="0"  y="0" w="100%" h="100%">
...
</slide_view>
<slide_indicator name="indicator" x="right" y="0" w="6" h="100%"/>

更多用法请参考：slide_view.xml

在c代码中使用函数slide_indicator_create创建指示器控件。如：

widget_t* slide_indicator = slide_indicator_create(parent, 0, 0, 0, 0);

<style name="default">
<normal fg_color="#FFFFFF80" selected_fg_color="#FFFFFF"/>
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
slide_indicator_cast | 转换为slide_indicator对象(供脚本语言使用)。
slide_indicator_create | 创建slide_indicator对象
slide_indicator_create_arc | 创建slide_indicator对象（圆弧显示）
slide_indicator_create_linear | 创建slide_indicator对象（线性显示）
slide_indicator_set_anchor | 设置旋转锚点。
slide_indicator_set_auto_hide | 设置指示器是否自动隐藏。
slide_indicator_set_default_paint | 设置指示器的默认绘制类型。
slide_indicator_set_indicated_target | 设置指示器指示的目标。
slide_indicator_set_margin | 设置指示器的边距(默认为10像素)。
slide_indicator_set_max | 设置指示器的数量。
slide_indicator_set_size | 设置指示器的大小(默认为8)。
slide_indicator_set_spacing | 设置指示器的间距(指示器有弧度时为角度值，否则为直线间距)。
slide_indicator_set_transition | 设置是否启用过渡效果。
slide_indicator_set_value | 设置当前页的序号。

属性

属性名称 | 类型 | 说明
anchor_x | char* | 锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
anchor_y | char* | 锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
auto_hide | uint16_t | 自动隐藏。0表示禁止，非0表示无操作后延迟多久隐藏。
default_paint | indicator_default_paint_t | 指示器的类型。
indicated_target | char* | 指示器指示的目标控件的名称。
margin | int32_t | 指示器与边缘的边距。
max | uint32_t | 最大值(缺省为100)。
size | uint32_t | 指示器的大小。
spacing | float_t | 指示器的中心之间的间距（圆弧显示时，间距的单位为弧度，否则为像素）。
transition | bool_t | 是否启用过渡效果。
value | uint32_t | 值(缺省为0)。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(当前页的序号)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(当前页的序号)改变事件。
EVT_PAGE_CHANGED | event_t | 页面改变事件。
EVT_PAGE_CHANGING | event_t | 页面正在改变。

slide_indicator_cast 函数

  • 函数功能：

转换为slide_indicator对象(供脚本语言使用)。

  • 函数原型：
widget_t* slide_indicator_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | slide_indicator对象。
widget | widget_t* | slide_indicator对象。

slide_indicator_create 函数

  • 函数功能：

创建slide_indicator对象

  • 函数原型：
widget_t* slide_indicator_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

slide_indicator_create_arc 函数

  • 函数功能：

创建slide_indicator对象（圆弧显示）

  • 函数原型：
widget_t* slide_indicator_create_arc (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

slide_indicator_create_linear 函数

  • 函数功能：

创建slide_indicator对象（线性显示）

  • 函数原型：
widget_t* slide_indicator_create_linear (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

slide_indicator_set_anchor 函数

  • 函数功能：

设置旋转锚点。

  • 函数原型：
ret_t slide_indicator_set_anchor (widget_t* widget, const char* anchor_x, const char* anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
anchor_x | const char* | 锚点坐标x。(后面加上px为像素点，不加px为相对百分比坐标)
anchor_y | const char* | 锚点坐标y。(后面加上px为像素点，不加px为相对百分比坐标)

slide_indicator_set_auto_hide 函数

  • 函数功能：

设置指示器是否自动隐藏。

  • 函数原型：
ret_t slide_indicator_set_auto_hide (widget_t* widget, uint16_t auto_hide);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
auto_hide | uint16_t | 0表示禁止，非0表示无操作后延迟多久隐藏。

slide_indicator_set_default_paint 函数

  • 函数功能：

设置指示器的默认绘制类型。

  • 函数原型：
ret_t slide_indicator_set_default_paint (widget_t* widget, indicator_default_paint_t default_paint);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
default_paint | indicator_default_paint_t | 默认绘制类型。

slide_indicator_set_indicated_target 函数

  • 函数功能：

设置指示器指示的目标。

  • 函数原型：
ret_t slide_indicator_set_indicated_target (widget_t* widget, const char* target_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
target_name | const char* | 指示器指示的目标控件的名称

slide_indicator_set_margin 函数

  • 函数功能：

设置指示器的边距(默认为10像素)。

  • 函数原型：
ret_t slide_indicator_set_margin (widget_t* widget, int32_t margin);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
margin | int32_t | 指示器的边距。

slide_indicator_set_max 函数

  • 函数功能：

设置指示器的数量。

  • 函数原型：
ret_t slide_indicator_set_max (widget_t* widget, uint32_t max);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
max | uint32_t | 数量。

slide_indicator_set_size 函数

  • 函数功能：

设置指示器的大小(默认为8)。

  • 函数原型：
ret_t slide_indicator_set_size (widget_t* widget, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
size | uint32_t | 指示器的大小。

slide_indicator_set_spacing 函数

  • 函数功能：

设置指示器的间距(指示器有弧度时为角度值，否则为直线间距)。

  • 函数原型：
ret_t slide_indicator_set_spacing (widget_t* widget, float_t spacing);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
spacing | float_t | 指示器的间距。

slide_indicator_set_transition 函数

  • 函数功能：

设置是否启用过渡效果。

  • 函数原型：
ret_t slide_indicator_set_transition (widget_t* widget, bool_t transition);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
transition | bool_t | 是否启用过渡效果

slide_indicator_set_value 函数

  • 函数功能：

设置当前页的序号。

  • 函数原型：
ret_t slide_indicator_set_value (widget_t* widget, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_indicator对象。
value | uint32_t | 当前项的序号。

anchor_x 属性

锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

anchor_y 属性

锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_hide 属性

自动隐藏。0表示禁止，非0表示无操作后延迟多久隐藏。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

default_paint 属性

指示器的类型。

  • 类型：indicator_default_paint_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

indicated_target 属性

指示器指示的目标控件的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

margin 属性

指示器与边缘的边距。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

max 属性

最大值(缺省为100)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

size 属性

指示器的大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

spacing 属性

指示器的中心之间的间距（圆弧显示时，间距的单位为弧度，否则为像素）。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

transition 属性

是否启用过渡效果。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值(缺省为0)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


slide_menu_t

概述

左右滑动菜单控件。

一般用一组按钮作为子控件，通过左右滑动改变当前的项。除了当菜单使用外，也可以用来切换页面。

slide_menu_t是widget_t的子类控件，widget_t的函数均适用于slide_menu_t控件。

在xml中使用”slide_menu”标签创建左右滑动菜单控件。如：

<slide_menu style="mask" align_v="top">
<button style="slide_button" text="0"/>
<button style="slide_button" text="1"/>
<button style="slide_button" text="2"/>
<button style="slide_button" text="3"/>
<button style="slide_button" text="4"/>
</slide_menu>

更多用法请参考：slide_menu.xml

在c代码中使用函数slide_menu_create创建左右滑动菜单控件。如：

slide_menu = slide_menu_create(win, 10, 10, 300, 60);
b = button_create(slide_menu, 0, 0, 0, 0);
widget_set_text_utf8(b, "1");
b = button_create(slide_menu, 0, 0, 0, 0);
widget_set_text_utf8(b, "2");
b = button_create(slide_menu, 0, 0, 0, 0);
widget_set_text_utf8(b, "3");
b = button_create(slide_menu, 0, 0, 0, 0);
widget_set_text_utf8(b, "4");

可按下面的方法关注当前项改变的事件：

widget_on(slide_menu, EVT_VALUE_CHANGED, on_current_changed, slide_menu);

可按下面的方法关注当前按钮被点击的事件：

widget_on(b, EVT_CLICK, on_button_click, b);

完整示例请参考：slide_menu demo

可用通过style来设置控件的显示风格，如背景颜色和蒙版颜色等等。如：

<style name="mask">
<normal     bg_color="#f0f0f0" mask_color="#f0f0f0"/>
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
slide_menu_cast | 转换slide_menu对象(供脚本语言使用)。
slide_menu_create | 创建slide_menu对象
slide_menu_get_widget_vtable | 获取 slide_menu 虚表。
slide_menu_scroll_to_next | 切换至下一项。
slide_menu_scroll_to_prev | 切换至上一项。
slide_menu_set_align_v | 设置垂直对齐方式。
slide_menu_set_clip | 设置是否动态裁剪菜单项。
slide_menu_set_menu_w | 设置菜单项的宽度。
slide_menu_set_min_scale | 设置最小缩放比例。
slide_menu_set_spacer | 设置菜单项之间的间距。
slide_menu_set_value | 设置当前项。

属性

属性名称 | 类型 | 说明
align_v | align_v_t | 垂直对齐方式。
clip | bool_t | 是否动态裁剪菜单项(默认裁剪，不裁剪时，如果显示偶数项，左边会多一项)。
menu_w | char* | 菜单项的宽度(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)(空字符串则使用控件高度)。
min_scale | float_t | 最小缩放比例。
spacer | int32_t | 菜单项之间的间距。
value | int32_t | 值。代表当前选中项的索引。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(当前项)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(当前项)改变事件。

slide_menu_cast 函数

  • 函数功能：

转换slide_menu对象(供脚本语言使用)。

  • 函数原型：
widget_t* slide_menu_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | slide_menu对象。
widget | widget_t* | slide_menu对象。

slide_menu_create 函数

  • 函数功能：

创建slide_menu对象

  • 函数原型：
widget_t* slide_menu_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

slide_menu_get_widget_vtable 函数

  • 函数功能：

获取 slide_menu 虚表。

  • 函数原型：
const widget_vtable_t* slide_menu_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 slide_menu 虚表。

slide_menu_scroll_to_next 函数

  • 函数功能：

切换至下一项。

  • 函数原型：
ret_t slide_menu_scroll_to_next (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。

slide_menu_scroll_to_prev 函数

  • 函数功能：

切换至上一项。

  • 函数原型：
ret_t slide_menu_scroll_to_prev (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。

slide_menu_set_align_v 函数

  • 函数功能：

设置垂直对齐方式。

  • 函数原型：
ret_t slide_menu_set_align_v (widget_t* widget, align_v_t align_v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。
align_v | align_v_t | 对齐方式。

slide_menu_set_clip 函数

  • 函数功能：

设置是否动态裁剪菜单项。

  • 函数原型：
ret_t slide_menu_set_clip (widget_t* widget, bool_t clip);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。
clip | bool_t | 是否动态裁剪菜单项。(关闭后，如果显示偶数项，左边会多一项)

slide_menu_set_menu_w 函数

  • 函数功能：

设置菜单项的宽度。

  • 函数原型：
ret_t slide_menu_set_menu_w (widget_t* widget, const char* menu_w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。
menu_w | const char* | 菜单项的宽度。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)(空字符串则使用控件高度)

slide_menu_set_min_scale 函数

  • 函数功能：

设置最小缩放比例。

  • 函数原型：
ret_t slide_menu_set_min_scale (widget_t* widget, float_t min_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。
min_scale | float_t | 最小缩放比例，范围[0.5-1]。

slide_menu_set_spacer 函数

  • 函数功能：

设置菜单项之间的间距。

  • 函数原型：
ret_t slide_menu_set_spacer (widget_t* widget, int32_t spacer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。
spacer | int32_t | 菜单项之间的间距。

slide_menu_set_value 函数

  • 函数功能：

设置当前项。

  • 函数原型：
ret_t slide_menu_set_value (widget_t* widget, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_menu对象。
value | uint32_t | 当前项的索引。

align_v 属性

垂直对齐方式。

  • 类型：align_v_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

clip 属性

是否动态裁剪菜单项(默认裁剪，不裁剪时，如果显示偶数项，左边会多一项)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

menu_w 属性

菜单项的宽度(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)(空字符串则使用控件高度)。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

min_scale 属性

最小缩放比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

spacer 属性

菜单项之间的间距。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。代表当前选中项的索引。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


slide_view_t

概述

滑动视图。

滑动视图可以管理多个页面，并通过滑动来切换当前页面。也可以管理多张图片，让它们自动切换。

slide_view_t是widget_t的子类控件，widget_t的函数均适用于slide_view_t控件。

在xml中使用”slide_view”标签创建滑动视图控件。如：

<slide_view x="0" y="0" w="100%" h="100%" style="dot">
<view x="0" y="0" w="100%" h="100%" children_layout="default(w=60,h=60,m=5,s=10)">
...
</view>
<view x="0" y="0" w="100%" h="100%" children_layout="default(w=60,h=60,m=5,s=10)">
...
</view>
</slide_view>

更多用法请参考：slide_view.xml

在c代码中使用函数slide_view_create创建滑动视图控件。如：

slide_view = slide_view_create(win, 0, 0, win->w, win->h);

完整示例请参考： slide_view demo

可用通过style来设置控件的显示风格，如背景颜色和指示器的图标等等。如：

<style name="dot">
<normal  icon="dot" active_icon="active_dot"/>
</style>

如果希望背景图片跟随滚动，请将背景图片设置到页面上，否则设置到slide_view上。

更多用法请参考：theme default

函数

函数名称 | 说明
slide_view_cast | 转换为slide_view对象(供脚本语言使用)。
slide_view_create | 创建slide_view对象
slide_view_get_widget_vtable | 获取 slide_view 虚表。
slide_view_remove_index | 删除指定序号页面。
slide_view_set_active | 设置当前页的序号(默认启用动画)。
slide_view_set_active_ex | 设置当前页的序号。
slide_view_set_anim_hint | 设置页面切换动画。
slide_view_set_animating_time | 设置动画时间。
slide_view_set_auto_play | 设置为自动播放模式。
slide_view_set_drag_threshold | 设置拖拽临界值。
slide_view_set_loop | 设置循环切换模式。
slide_view_set_vertical | 设置为上下滑动(缺省为左右滑动)。

属性

属性名称 | 类型 | 说明
anim_hint | char* | 页面切换效果。
animating_time | uint32_t | 动画时间（单位：毫秒）。
auto_play | uint16_t | 自动播放。0表示禁止自动播放，非0表示自动播放时每一页播放的时间。
drag_threshold | uint32_t | 拖动临界值。
loop | bool_t | 循环切换模式。
vertical | bool_t | 是否为上下滑动模式。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(当前页)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(当前页)改变事件。
EVT_PAGE_CHANGED | event_t | 页面改变事件。
EVT_PAGE_CHANGING | event_t | 页面正在改变。

slide_view_cast 函数

  • 函数功能：

转换为slide_view对象(供脚本语言使用)。

  • 函数原型：
widget_t* slide_view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | slide_view对象。
widget | widget_t* | slide_view对象。

slide_view_create 函数

  • 函数功能：

创建slide_view对象

  • 函数原型：
widget_t* slide_view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

slide_view_get_widget_vtable 函数

  • 函数功能：

获取 slide_view 虚表。

  • 函数原型：
const widget_vtable_t* slide_view_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 slide_view 虚表。

slide_view_remove_index 函数

  • 函数功能：

删除指定序号页面。

  • 函数原型：
ret_t slide_view_remove_index (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
index | uint32_t | 删除页面的序号。

slide_view_set_active 函数

  • 函数功能：

设置当前页的序号(默认启用动画)。

  • 函数原型：
ret_t slide_view_set_active (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
index | uint32_t | 当前页的序号。

slide_view_set_active_ex 函数

  • 函数功能：

设置当前页的序号。

  • 函数原型：
ret_t slide_view_set_active_ex (widget_t* widget, uint32_t index, bool_t animate);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
index | uint32_t | 当前页的序号。
animate | bool_t | 是否启用动画。

slide_view_set_anim_hint 函数

  • 函数功能：

设置页面切换动画。

anim_hint取值如下：

  • “translate”：平移。
  • “overlap”：覆盖。
  • “overlap_with_alpha”：覆盖并改变透明度。

使用”overlap”或”overlap_with_alpha”动画时，背景图片最好指定到page上。

使用”overlap_with_alpha”动画时，slideview的背景设置为黑色， 或slideview的背景设置为透明，窗口的背景设置为黑色，以获得更好的视觉效果和性能。

  • 函数原型：
ret_t slide_view_set_anim_hint (widget_t* widget, const char* anim_hint);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
anim_hint | const char* | 页面切换动画。

slide_view_set_animating_time 函数

  • 函数功能：

设置动画时间。

  • 函数原型：
ret_t slide_view_set_animating_time (widget_t* widget, uint32_t animating_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
animating_time | uint32_t | 动画时间。

slide_view_set_auto_play 函数

  • 函数功能：

设置为自动播放模式。

  • 函数原型：
ret_t slide_view_set_auto_play (widget_t* widget, uint16_t auto_play);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
auto_play | uint16_t | 0表示禁止自动播放，非0表示自动播放时每一页播放的时间。

slide_view_set_drag_threshold 函数

  • 函数功能：

设置拖拽临界值。

  • 函数原型：
ret_t slide_view_set_drag_threshold (widget_t* widget, uint32_t drag_threshold);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
drag_threshold | uint32_t | 拖动临界值。

slide_view_set_loop 函数

  • 函数功能：

设置循环切换模式。

  • 函数原型：
ret_t slide_view_set_loop (widget_t* widget, bool_t loop);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
loop | bool_t | 是否启用循环切换模式。

slide_view_set_vertical 函数

  • 函数功能：

设置为上下滑动(缺省为左右滑动)。

  • 函数原型：
ret_t slide_view_set_vertical (widget_t* widget, bool_t vertical);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | slide_view对象。
vertical | bool_t | TRUE表示上下滑动，FALSE表示左右滑动。

anim_hint 属性

页面切换效果。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

animating_time 属性

动画时间（单位：毫秒）。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_play 属性

自动播放。0表示禁止自动播放，非0表示自动播放时每一页播放的时间。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

drag_threshold 属性

拖动临界值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

loop 属性

循环切换模式。

向后切换：切换到最后一页时，再往后切换就到第一页。 向前切换：切换到第一页时，再往前切换就到最后一页。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

vertical 属性

是否为上下滑动模式。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


slist_t

概述

单向链表

用slist_init初始化时，用slist_deinit释放。如：

slist_t slist;
slist_init(&slist, destroy, compare);
...
slist_deinit(&slist);

用slist_create创建时，用slist_destroy销毁。如：

slist_t* slist = slist_create(destroy, compare);
...
slist_destroy(slist);

函数

函数名称 | 说明
slist_append | 在尾巴追加一个元素。
slist_count | 返回满足条件元素的个数。
slist_create | 创建slist对象
slist_deinit | 清除单向链表中的元素。
slist_destroy | 清除单向链表中的元素，并释放单向链表对象。
slist_find | 查找第一个满足条件的元素。
slist_foreach | 遍历元素。
slist_head | 返回第一个元素。
slist_head_pop | 弹出第一个元素。
slist_init | 初始化slist对象
slist_insert | 插入一个元素。
slist_is_empty | 列表是否为空。
slist_prepend | 在头部追加一个元素。
slist_remove | 删除第一个满足条件的元素。
slist_remove_all | 删除全部元素。
slist_remove_with_compare | 删除满足条件的元素。
slist_size | 返回元素个数。
slist_tail | 返回最后一个元素。
slist_tail_pop | 弹出最后一个元素。

属性

属性名称 | 类型 | 说明
compare | tk_compare_t | 元素比较函数。
destroy | tk_destroy_t | 元素销毁函数。
first | slist_node_t* | 首节点。

slist_append 函数

  • 函数功能：

在尾巴追加一个元素。

  • 函数原型：
ret_t slist_append (slist_t* slist, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。
data | void* | 待追加的元素。

slist_count 函数

  • 函数功能：

返回满足条件元素的个数。

  • 函数原型：
int32_t slist_count (slist_t* slist, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回元素个数。
slist | slist_t* | 单向链表对象。
ctx | void* | 比较函数的上下文。

slist_create 函数

  • 函数功能：

创建slist对象

  • 函数原型：
slist_t* slist_create (tk_destroy_t destroy, tk_compare_t compare);
  • 参数说明：
参数 | 类型 | 说明
返回值 | slist_t* | 单向链表对象。
destroy | tk_destroy_t | 元素销毁函数。
compare | tk_compare_t | 元素比较函数。

slist_deinit 函数

  • 函数功能：

清除单向链表中的元素。

  • 函数原型：
ret_t slist_deinit (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。

slist_destroy 函数

  • 函数功能：

清除单向链表中的元素，并释放单向链表对象。

  • 函数原型：
ret_t slist_destroy (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。

slist_find 函数

  • 函数功能：

查找第一个满足条件的元素。

  • 函数原型：
void* slist_find (slist_t* slist, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 如果找到，返回满足条件的对象，否则返回NULL。
slist | slist_t* | 单向链表对象。
ctx | void* | 比较函数的上下文。

slist_foreach 函数

  • 函数功能：

遍历元素。

  • 函数原型：
ret_t slist_foreach (slist_t* slist, tk_visit_t visit, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。
visit | tk_visit_t | 遍历函数。
ctx | void* | 遍历函数的上下文。

slist_head 函数

  • 函数功能：

返回第一个元素。

  • 函数原型：
void* slist_head (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
slist | slist_t* | 单向链表对象。

slist_head_pop 函数

  • 函数功能：

弹出第一个元素。

  • 函数原型：
void* slist_head_pop (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
slist | slist_t* | 单向链表对象。

slist_init 函数

  • 函数功能：

初始化slist对象

  • 函数原型：
slist_t* slist_init (slist_t* slist, tk_destroy_t destroy, tk_compare_t compare);
  • 参数说明：
参数 | 类型 | 说明
返回值 | slist_t* | 单向链表对象。
slist | slist_t* | 单向链表对象。
destroy | tk_destroy_t | 元素销毁函数。
compare | tk_compare_t | 元素比较函数。

slist_insert 函数

  • 函数功能：

插入一个元素。

  • 函数原型：
ret_t slist_insert (slist_t* slist, uint32_t index, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。
index | uint32_t | 位置序数。
data | void* | 待追加的元素。

slist_is_empty 函数

  • 函数功能：

列表是否为空。

  • 函数原型：
bool_t slist_is_empty (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回 TRUE 表示空列表，返回 FALSE 表示列表有数据。
slist | slist_t* | 单向链表对象。

slist_prepend 函数

  • 函数功能：

在头部追加一个元素。

  • 函数原型：
ret_t slist_prepend (slist_t* slist, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。
data | void* | 待追加的元素。

slist_remove 函数

  • 函数功能：

删除第一个满足条件的元素。

  • 函数原型：
ret_t slist_remove (slist_t* slist, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。
ctx | void* | 比较函数的上下文。

slist_remove_all 函数

  • 函数功能：

删除全部元素。

  • 函数原型：
ret_t slist_remove_all (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。

slist_remove_with_compare 函数

  • 函数功能：

删除满足条件的元素。 备注： 如果队列中符合条件的元素不足 remove_size，移除最后一个符合条件的元素后返回 RET_OK。 如果队列中符合条件的元素大于 remove_size，在队列中移除 remove_size 个元素后返回 RET_OK。 remove_size 为负数则会移除所有符合条件的元素。

  • 函数原型：
ret_t slist_remove_with_compare (slist_t* slist, void* ctx, tk_compare_t compare, int32_t remove_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
slist | slist_t* | 单向链表对象。
ctx | void* | 比较函数的上下文。
compare | tk_compare_t | 元素比较函数。
remove_size | int32_t | 删除个数。

slist_size 函数

  • 函数功能：

返回元素个数。

  • 函数原型：
int32_t slist_size (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回元素个数。
slist | slist_t* | 单向链表对象。

slist_tail 函数

  • 函数功能：

返回最后一个元素。

  • 函数原型：
void* slist_tail (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
slist | slist_t* | 单向链表对象。

slist_tail_pop 函数

  • 函数功能：

弹出最后一个元素。

  • 函数原型：
void* slist_tail_pop (slist_t* slist);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回最后一个元素，失败返回NULL。
slist | slist_t* | 单向链表对象。

compare 属性

元素比较函数。

  • 类型：tk_compare_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

destroy 属性

元素销毁函数。

  • 类型：tk_destroy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

first 属性

首节点。

  • 类型：slist_node_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


socket

概述

函数

函数名称 | 说明
socket_last_io_has_error | 判断最后一次IO操作是否正常。
socket_resolve | 解析主机名，并初始化addr对象。
tk_socket_bind | 绑定到指定端口。
tk_socket_bind_ex | 绑定到指定IP和端口。
tk_socket_close | 关闭socket句柄。
tk_socket_deinit | tcp/udp 平台~初始化。
tk_socket_init | tcp/udp 平台初始化。
tk_socket_set_blocking | 设置为阻塞或非阻塞模式。
tk_socket_wait_for_data | 等待数据。

socket_last_io_has_error 函数

  • 函数功能：

判断最后一次IO操作是否正常。

  • 函数原型：
bool_t socket_last_io_has_error ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示有错误，否则表示正常。

socket_resolve 函数

  • 函数功能：

解析主机名，并初始化addr对象。

  • 函数原型：
struct sockaddr* socket_resolve (const char* host, int port, struct sockaddr_in* addr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | struct sockaddr* | 返回地址对象。
host | const char* | 主机名。
port | int | 端口号。
addr | struct sockaddr_in* | 地址对象。

tk_socket_bind 函数

  • 函数功能：

绑定到指定端口。

  • 函数原型：
ret_t tk_socket_bind (int sock, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
port | int | 端口号。

tk_socket_bind_ex 函数

  • 函数功能：

绑定到指定IP和端口。

  • 函数原型：
ret_t tk_socket_bind_ex (int sock, const char* ip, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
ip | const char* | IP地址(可以为NULL)。
port | int | 端口号。

tk_socket_close 函数

  • 函数功能：

关闭socket句柄。

  • 函数原型：
ret_t tk_socket_close (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。

tk_socket_deinit 函数

  • 函数功能：

tcp/udp 平台~初始化。

  • 函数原型：
ret_t tk_socket_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_socket_init 函数

  • 函数功能：

tcp/udp 平台初始化。

  • 函数原型：
ret_t tk_socket_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_socket_set_blocking 函数

  • 函数功能：

设置为阻塞或非阻塞模式。

  • 函数原型：
ret_t tk_socket_set_blocking (int sock, bool_t blocking);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
blocking | bool_t | 是否阻塞。

tk_socket_wait_for_data 函数

  • 函数功能：

等待数据。

  • 函数原型：
ret_t tk_socket_wait_for_data (int sock, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
timeout_ms | uint32_t | 等待时间(ms)。


socketpair_t

概述

socketpair

函数

函数名称 | 说明
tk_socketpair | 生成两个socket句柄。两者可以模拟客户端和服务器通信。

tk_socketpair 函数

  • 函数功能：

生成两个socket句柄。两者可以模拟客户端和服务器通信。

  • 函数原型：
int tk_socketpair (int* socks);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 小于0表示失败。
socks | int* | 由于返回生成的socket句柄。


spin_box_t

概述

spinbox控件。

一个特殊的数值编辑器，将edit_t和button_t进行组合，方便编辑数值。

点击向上的按钮将数值增加一个step，点击向下的按钮将数值减小一个step。 step的值可以通过step属性进行设置。

spin_box_t是edit_t的子类控件，edit_t的函数均适用于spin_box_t控件。

在xml中使用”spin_box”标签创建spinbox控件。如：

<spin_box w="70%" input_type="int" min="-100" max="100" step="5">

更多用法请参考：spin_box.xml

在c代码中使用函数spin_box_create创建spinbox控件。如：

widget_t* spin_box = spin_box_create(win, 10, 10, 128, 30);
edit_set_input_type(spin_box, type);

创建之后:

可以用edit相关函数去设置它的各种属性。

完整示例请参考：spin_box demo

可用通过style来设置控件的显示风格，如背景和边框等。如：

<spin_box>
<style name="default" border_color="#a0a0a0"  text_color="black" text_align_h="left">
<normal     bg_color="#f0f0f0" />
<focused    bg_color="#f0f0f0" border_color="black"/>
<disable    bg_color="gray" text_color="#d0d0d0" />
<error      bg_color="#f0f0f0" text_color="red" />
<empty      bg_color="#f0f0f0" text_color="#a0a0a0" />
</style>
</spin_box>

更多用法请参考：theme default

函数

函数名称 | 说明
spin_box_cast | 转换为spin_box对象(供脚本语言使用)。
spin_box_create | 创建spin_box对象
spin_box_get_widget_vtable | 获取 spin_box 虚表。
spin_box_set_button_position | 设置按钮位置样式。
spin_box_set_easy_touch_mode | 设置是否启用易点击模式。
spin_set_repeat | 设置连击的时间间隔。

属性

属性名称 | 类型 | 说明
button_position | char* | 按钮位置样式选择，优先级高于easy_touch_mode，各模式对应样式如下,默认为none。
easy_touch_mode | bool_t | 是否启用易点击模式(在电容屏设备上建议启用)。
repeat | int32_t | 重复触发EVT_CLICK事件的时间间隔。

spin_box_cast 函数

  • 函数功能：

转换为spin_box对象(供脚本语言使用)。

  • 函数原型：
widget_t* spin_box_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | spin_box对象。
widget | widget_t* | spin_box对象。

spin_box_create 函数

  • 函数功能：

创建spin_box对象

  • 函数原型：
widget_t* spin_box_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

spin_box_get_widget_vtable 函数

  • 函数功能：

获取 spin_box 虚表。

  • 函数原型：
const widget_vtable_t* spin_box_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 spin_box 虚表。

spin_box_set_button_position 函数

  • 函数功能：

设置按钮位置样式。

  • 函数原型：
ret_t spin_box_set_button_position (widget_t* widget, const char* button_position);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
button_position | const char* | 按钮位置样式。

spin_box_set_easy_touch_mode 函数

  • 函数功能：

设置是否启用易点击模式。

  • 函数原型：
ret_t spin_box_set_easy_touch_mode (widget_t* widget, bool_t easy_touch_mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
easy_touch_mode | bool_t | 易点击模式。

spin_set_repeat 函数

  • 函数功能：

设置连击的时间间隔。 备注：时间间隔越低，速度越快。

  • 函数原型：
ret_t spin_set_repeat (widget_t* widget, int32_t repeat);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
repeat | int32_t | 连击的时间间隔。

button_position 属性

按钮位置样式选择，优先级高于easy_touch_mode，各模式对应样式如下,默认为none。 none：按照easy_touch_mode选择样式 default：inc按钮在右上角，dec按钮在右下角。 left_right：dec按钮在左边，inc按钮在右边。 top_bottom：inc按钮在顶部，dec按钮在底部。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

easy_touch_mode 属性

是否启用易点击模式(在电容屏设备上建议启用)。 在该模式下： * 1.当高度大于font size的3倍时，inc按钮在顶部(style名为spinbox_top)，dec按钮在底部(style名为spinbox_bottom)。 * 2.当高度正常时，dec按钮在左边(style名为spinbox_left)，inc按钮在右边(style名为spinbox_right)。 不在该模式下： inc按钮在右上角(style名为spinbox_up)，dec按钮在右下角(style名为spinbox_down)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

repeat 属性

重复触发EVT_CLICK事件的时间间隔。

为0则不重复触发EVT_CLICK事件。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


stopbits_t

概述

串口停止位。

常量

名称 | 说明
stopbits_one | 1位。
stopbits_two | 2位。
stopbits_one_point_five | 1.5位。


str_str_t

概述

字符串-字符串类型。

负责把一个字符串映射成另外一个字符串。

示例：

static const str_str_t color_values[] = {{"1", "red"}, {"2", "black"}, {"3", "blue"}, {"4", "white"}};
const char* value = str_str_value(color_values, "3");
const char* name = str_str_name(color_values, "blue", "0");
printf("value = %s \n", value);
printf("name = %s \n", name);

函数

函数名称 | 说明
str_str_name | 根据value获取对应的name。
str_str_value | 根据name获取对应的value。

str_str_name 函数

  • 函数功能：

根据value获取对应的name。

  • 函数原型：
const char* str_str_name (const str_str_t* items, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回name。
items | const str_str_t* | str_str_t数组。
value | const char* | value

str_str_value 函数

  • 函数功能：

根据name获取对应的value。

  • 函数原型：
const char* str_str_value (const str_str_t* items, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回value。
items | const str_str_t* | str_str_t数组。
name | const char* | name。


str_t

概述

可变长度的UTF8字符串。

示例：

str_t s;
str_init(&s, 0);

str_append(&s, "abc");
str_append(&s, "123");
log_debug("%s\n", s.str);

str_reset(&s);

> 先调str_init进行初始化，最后调用str_reset释放内存。

函数

函数名称 | 说明
str_append | 追加字符串。
str_append_c_str | 追加一个字符串，字符串前后加英文双引号，并按C语言规则转义特殊字符。
str_append_char | 追加一个字符。
str_append_double | 追加一个浮点数。
str_append_escape | 对字符串s进行转义，并追加到str对象。
str_append_format | 通过格式追加字符串。
str_append_int | 追加一个整数。
str_append_int64 | 追加一个int64整数。
str_append_json_bool_pair | 追加bool格式的json键值对。
str_append_json_double_pair | 追加doube格式的json键值对。
str_append_json_int_pair | 追加int格式的json键值对。
str_append_json_str | 追加一个字符串，字符串前后加英文双引号，并按JSON规则转义特殊字符。
str_append_json_str_pair | 追加字符串格式的json键值对。
str_append_more | 追加多个字符串。以NULL结束。
str_append_n_chars | 同一个字符追加n次。
str_append_uint32 | 追加一个uint32整数。
str_append_uint64 | 追加一个uint64整数。
str_append_unescape | 对字符串s进行反转义，并追加到str对象。
str_append_with_len | 追加字符串。
str_attach | 通过附加到一个buff来初始化str。
str_attach_with_size | 通过附加到一个buff来初始化str。
str_clear | 清除字符串内容。
str_common_prefix | 计算str和other的共同前缀，并设置到str中。
str_count | 统计字串出现的次数。
str_create | 创建str对象。
str_decode_hex | 把16进制格式的字符串解码成字符串。
str_decode_xml_entity | 对XML基本的entity进行解码，目前仅支持<>"a;&。
str_decode_xml_entity_with_len | 对XML基本的entity进行解码，目前仅支持<>"a;&。
str_destroy | 销毁str对象
str_encode_hex | 把二进制的数据编码成16进制格式的字符串。
str_encode_xml_entity | 对XML基本的entity进行编码，目前仅支持<>"a;&。
str_encode_xml_entity_with_len | 对XML基本的entity进行编码，目前仅支持<>"a;&。
str_end_with | 判断字符串是否以指定的子串结尾。
str_eq | 判断两个字符串是否相等。
str_equal | 判断两个字符是否相同。
str_expand_vars | 将字符串中的变量展开为obj中对应的属性值。
str_extend | 扩展字符串到指定的容量。
str_format | 通过格式设置字符串。
str_from_float | 用浮点数初始化字符串。
str_from_int | 用整数初始化字符串。
str_from_int64 | 用整数初始化字符串。
str_from_uint32 | 用整数初始化字符串。
str_from_uint64 | 用整数初始化字符串。
str_from_value | 用value初始化字符串。
str_from_wstr | 用value初始化字符串。
str_from_wstr_with_len | 用value初始化字符串。
str_init | 初始化字符串对象。
str_insert | 插入子字符串。
str_insert_with_len | 插入子字符串。
str_pop | 删除最后一个字符。
str_remove | 删除子字符串。
str_replace | 字符串替换。
str_reset | 重置字符串为空。
str_reverse | 前后颠倒字符串。
str_set | 设置字符串。
str_set_with_len | 设置字符串。
str_start_with | 判断字符串是否以指定的子串开头。
str_to_float | 将字符串转成浮点数。
str_to_int | 将字符串转成整数。
str_to_lower | 将字符串转成小写。
str_to_upper | 将字符串转成大写。
str_trim | 去除首尾指定的字符。
str_trim_left | 去除首部指定的字符。
str_trim_right | 去除尾部指定的字符。
str_unescape | 对字符串进行反转义。如：把”\n”转换成’\n’。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 容量。
size | uint32_t | 长度。
str | char* | 字符串。

str_append 函数

  • 函数功能：

追加字符串。

  • 函数原型：
ret_t str_append (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要追加的字符串。

str_append_c_str 函数

  • 函数功能：

追加一个字符串，字符串前后加英文双引号，并按C语言规则转义特殊字符。

  • 函数原型：
ret_t str_append_c_str (str_t* str, const char* c_str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
c_str | const char* | 待追加的字符串。

str_append_char 函数

  • 函数功能：

追加一个字符。

  • 函数原型：
ret_t str_append_char (str_t* str, char c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
c | char | 要追加的字符。

str_append_double 函数

  • 函数功能：

追加一个浮点数。

  • 函数原型：
ret_t str_append_double (str_t* str, const char* format, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
format | const char* | 格式。
value | double | 要追加的浮点数。

str_append_escape 函数

  • 函数功能：

对字符串s进行转义，并追加到str对象。

  • 函数原型：
ret_t str_append_escape (str_t* str, const char* s, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
s | const char* | 字符串。
size | uint32_t | 字符串s的长度。

str_append_format 函数

  • 函数功能：

通过格式追加字符串。

  • 函数原型：
ret_t str_append_format (str_t* str, uint32_t size, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
size | uint32_t | format生成的字符串的最大长度(用于预先分配内存)。
format | const char* | 格式。

str_append_int 函数

  • 函数功能：

追加一个整数。

  • 函数原型：
ret_t str_append_int (str_t* str, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | int32_t | 要追加的整数。

str_append_int64 函数

  • 函数功能：

追加一个int64整数。

  • 函数原型：
ret_t str_append_int64 (str_t* str, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | int64_t | 要追加的整数。

str_append_json_bool_pair 函数

  • 函数功能：

追加bool格式的json键值对。

  • 函数原型：
ret_t str_append_json_bool_pair (str_t* str, const char* key, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
key | const char* | 键。
value | bool_t | 值。

str_append_json_double_pair 函数

  • 函数功能：

追加doube格式的json键值对。

  • 函数原型：
ret_t str_append_json_double_pair (str_t* str, const char* key, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
key | const char* | 键。
value | double | 值。

str_append_json_int_pair 函数

  • 函数功能：

追加int格式的json键值对。

  • 函数原型：
ret_t str_append_json_int_pair (str_t* str, const char* key, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
key | const char* | 键。
value | int32_t | 值。

str_append_json_str 函数

  • 函数功能：

追加一个字符串，字符串前后加英文双引号，并按JSON规则转义特殊字符。

  • 函数原型：
ret_t str_append_json_str (str_t* str, const char* json_str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
json_str | const char* | 待追加的字符串。

str_append_json_str_pair 函数

  • 函数功能：

追加字符串格式的json键值对。

  • 函数原型：
ret_t str_append_json_str_pair (str_t* str, const char* key, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
key | const char* | 键。
value | const char* | 值。

str_append_more 函数

  • 函数功能：

追加多个字符串。以NULL结束。

示例：

str_t s;
str_init(&s, 0);

str_append_more(&s, "abc", "123", NULL);
log_debug("%s\n", s.str);

str_reset(&s);
  • 函数原型：
ret_t str_append_more (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要追加的字符串。

str_append_n_chars 函数

  • 函数功能：

同一个字符追加n次。

  • 函数原型：
ret_t str_append_n_chars (str_t* str, char c, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
c | char | 要追加的字符。
n | uint32_t | 字符的个数。

str_append_uint32 函数

  • 函数功能：

追加一个uint32整数。

  • 函数原型：
ret_t str_append_uint32 (str_t* str, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | uint32_t | 要追加的整数。

str_append_uint64 函数

  • 函数功能：

追加一个uint64整数。

  • 函数原型：
ret_t str_append_uint64 (str_t* str, uint64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | uint64_t | 要追加的整数。

str_append_unescape 函数

  • 函数功能：

对字符串s进行反转义，并追加到str对象。

  • 函数原型：
ret_t str_append_unescape (str_t* str, const char* s, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
s | const char* | 字符串。
size | uint32_t | 字符串s的长度。

str_append_with_len 函数

  • 函数功能：

追加字符串。

  • 函数原型：
ret_t str_append_with_len (str_t* str, const char* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要追加的字符串。
len | uint32_t | 字符串长度。

str_attach 函数

  • 函数功能：

通过附加到一个buff来初始化str。 可以避免str动态分配内存，同时也不会自动扩展内存，使用完成后无需调用str_reset。

str_t s;
char buff[32];
str_attach(&s, buff, ARRAY_SIZE(buff));
str_set(&s, "abc");
str_append(&s, "123");
  • 函数原型：
str_t* str_attach (str_t* str, char* buff, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | str_t* | str对象本身。
str | str_t* | str对象。
buff | char* | 缓冲区。
capacity | uint32_t | 初始容量。

str_attach_with_size 函数

  • 函数功能：

通过附加到一个buff来初始化str。 可以避免str动态分配内存，同时也不会自动扩展内存，使用完成后无需调用str_reset。

str_t s;
char buff[32];
strcpy(buff, "a");
str_attach_with_size(&s, buff, 1, ARRAY_SIZE(buff));
str_set(&s, "abc");
str_append(&s, "123");
  • 函数原型：
str_t* str_attach_with_size (str_t* str, char* buff, uint32_t size, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | str_t* | str对象本身。
str | str_t* | str对象。
buff | char* | 缓冲区。
size | uint32_t | 初始长度。
capacity | uint32_t | 初始容量。

str_clear 函数

  • 函数功能：

清除字符串内容。

  • 函数原型：
ret_t str_clear (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_common_prefix 函数

  • 函数功能：

计算str和other的共同前缀，并设置到str中。

  • 函数原型：
ret_t str_common_prefix (str_t* str, const char* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
other | const char* | 另外一个字符串。

str_count 函数

  • 函数功能：

统计字串出现的次数。

  • 函数原型：
uint32_t str_count (str_t* str, const char* substr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回字符串出现的次数。
str | str_t* | str对象。
substr | const char* | 字串。

str_create 函数

  • 函数功能：

创建str对象。

  • 函数原型：
str_t* str_create (uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | str_t* | str对象。
capacity | uint32_t | 初始容量。

str_decode_hex 函数

  • 函数功能：

把16进制格式的字符串解码成字符串。

  • 函数原型：
ret_t str_decode_hex (str_t* str, uint8_t* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
data | uint8_t* | 数据缓存区(返回)。
size | uint32_t | 数据最大长度。

str_decode_xml_entity 函数

  • 函数功能：

对XML基本的entity进行解码，目前仅支持<>"a;&。

  • 函数原型：
ret_t str_decode_xml_entity (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要解码的XML文本。

str_decode_xml_entity_with_len 函数

  • 函数功能：

对XML基本的entity进行解码，目前仅支持<>"a;&。

  • 函数原型：
ret_t str_decode_xml_entity_with_len (str_t* str, const char* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要解码的XML文本。
len | uint32_t | 字符串长度。

str_destroy 函数

  • 函数功能：

销毁str对象 备注：最后调用str_destroy释放内存。

  • 函数原型：
ret_t str_destroy (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_encode_hex 函数

  • 函数功能：

把二进制的数据编码成16进制格式的字符串。

  • 函数原型：
ret_t str_encode_hex (str_t* str, const void* data, uint32_t size, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
data | const void* | 数据。
size | uint32_t | 数据长度。
format | const char* | 格式(如:”%02x” 表示生成小写)

str_encode_xml_entity 函数

  • 函数功能：

对XML基本的entity进行编码，目前仅支持<>"a;&。

  • 函数原型：
ret_t str_encode_xml_entity (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要编码的XML文本。

str_encode_xml_entity_with_len 函数

  • 函数功能：

对XML基本的entity进行编码，目前仅支持<>"a;&。

  • 函数原型：
ret_t str_encode_xml_entity_with_len (str_t* str, const char* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要编码的XML文本。
len | uint32_t | 字符串长度。

str_end_with 函数

  • 函数功能：

判断字符串是否以指定的子串结尾。

  • 函数原型：
bool_t str_end_with (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回是否以指定的子串结尾。
str | str_t* | str对象。
text | const char* | 子字符串。

str_eq 函数

  • 函数功能：

判断两个字符串是否相等。

  • 函数原型：
bool_t str_eq (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回是否相等。
str | str_t* | str对象。
text | const char* | 待比较的字符串。

str_equal 函数

  • 函数功能：

判断两个字符是否相同。

  • 函数原型：
bool_t str_equal (str_t* str, str_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示相同，否则表示不同。
str | str_t* | str对象。
other | str_t* | str对象。

str_expand_vars 函数

  • 函数功能：

将字符串中的变量展开为obj中对应的属性值。

变量的格式为${xxx}：

  • xxx为变量名时，${xxx}被展开为obj的属性xxx的值。
  • xxx为表达式时，${xxx}被展开为表达式的值，表达式中可以用变量，$为变量的前缀，如${$x+$y}。

  • xxx为变量名时，而不存在obj的属性时，${xxx}被移出。

  • 函数原型：

ret_t str_expand_vars (str_t* str, const char* src, const tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
src | const char* | 字符串。
obj | const tk_object_t* | obj对象。

str_extend 函数

  • 函数功能：

扩展字符串到指定的容量。

  • 函数原型：
ret_t str_extend (str_t* str, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
capacity | uint32_t | 初始容量。

str_format 函数

  • 函数功能：

通过格式设置字符串。

  • 函数原型：
ret_t str_format (str_t* str, uint32_t size, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
size | uint32_t | format生成的字符串的最大长度(用于预先分配内存)。
format | const char* | 格式。

str_from_float 函数

  • 函数功能：

用浮点数初始化字符串。

  • 函数原型：
ret_t str_from_float (str_t* str, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | double | 浮点数。

str_from_int 函数

  • 函数功能：

用整数初始化字符串。

  • 函数原型：
ret_t str_from_int (str_t* str, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | int32_t | 整数。

str_from_int64 函数

  • 函数功能：

用整数初始化字符串。

  • 函数原型：
ret_t str_from_int64 (str_t* str, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | int64_t | 整数。

str_from_uint32 函数

  • 函数功能：

用整数初始化字符串。

  • 函数原型：
ret_t str_from_uint32 (str_t* str, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | uint32_t | 整数。

str_from_uint64 函数

  • 函数功能：

用整数初始化字符串。

  • 函数原型：
ret_t str_from_uint64 (str_t* str, uint64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | uint64_t | 整数。

str_from_value 函数

  • 函数功能：

用value初始化字符串。

  • 函数原型：
ret_t str_from_value (str_t* str, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | const value_t* | value。

str_from_wstr 函数

  • 函数功能：

用value初始化字符串。

  • 函数原型：
ret_t str_from_wstr (str_t* str, const wchar_t* wstr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
wstr | const wchar_t* | Unicode字符串。

str_from_wstr_with_len 函数

  • 函数功能：

用value初始化字符串。

  • 函数原型：
ret_t str_from_wstr_with_len (str_t* str, const wchar_t* wstr, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
wstr | const wchar_t* | Unicode字符串
len | uint32_t | Unicode字符串的长度。

str_init 函数

  • 函数功能：

初始化字符串对象。 备注：最后调用str_reset释放内存。

  • 函数原型：
str_t* str_init (str_t* str, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | str_t* | str对象本身。
str | str_t* | str对象。
capacity | uint32_t | 初始容量。

str_insert 函数

  • 函数功能：

插入子字符串。

  • 函数原型：
ret_t str_insert (str_t* str, uint32_t offset, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
offset | uint32_t | 偏移量。
text | const char* | 要插入的字符串。

str_insert_with_len 函数

  • 函数功能：

插入子字符串。

  • 函数原型：
ret_t str_insert_with_len (str_t* str, uint32_t offset, const char* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
offset | uint32_t | 偏移量。
text | const char* | 要插入的字符串。
len | uint32_t | 字符串长度。

str_pop 函数

  • 函数功能：

删除最后一个字符。

  • 函数原型：
ret_t str_pop (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_remove 函数

  • 函数功能：

删除子字符串。

  • 函数原型：
ret_t str_remove (str_t* str, uint32_t offset, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
offset | uint32_t | 偏移量。
len | uint32_t | 长度。

str_replace 函数

  • 函数功能：

字符串替换。

  • 函数原型：
ret_t str_replace (str_t* str, const char* text, const char* new_text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 待替换的子串。
new_text | const char* | 将替换成的子串。

str_reset 函数

  • 函数功能：

重置字符串为空。

  • 函数原型：
ret_t str_reset (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_reverse 函数

  • 函数功能：

前后颠倒字符串。

  • 函数原型：
ret_t str_reverse (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_set 函数

  • 函数功能：

设置字符串。

  • 函数原型：
ret_t str_set (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要设置的字符串。

str_set_with_len 函数

  • 函数功能：

设置字符串。

  • 函数原型：
ret_t str_set_with_len (str_t* str, const char* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要设置的字符串。
len | uint32_t | 字符串长度。

str_start_with 函数

  • 函数功能：

判断字符串是否以指定的子串开头。

  • 函数原型：
bool_t str_start_with (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回是否以指定的子串开头。
str | str_t* | str对象。
text | const char* | 子字符串。

str_to_float 函数

  • 函数功能：

将字符串转成浮点数。

  • 函数原型：
ret_t str_to_float (str_t* str, double* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | double* | 用于返回浮点数。

str_to_int 函数

  • 函数功能：

将字符串转成整数。

  • 函数原型：
ret_t str_to_int (str_t* str, int32_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
value | int32_t* | 用于返回整数。

str_to_lower 函数

  • 函数功能：

将字符串转成小写。

  • 函数原型：
ret_t str_to_lower (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_to_upper 函数

  • 函数功能：

将字符串转成大写。

  • 函数原型：
ret_t str_to_upper (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

str_trim 函数

  • 函数功能：

去除首尾指定的字符。

  • 函数原型：
ret_t str_trim (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要去除的字符集合。

str_trim_left 函数

  • 函数功能：

去除首部指定的字符。

  • 函数原型：
ret_t str_trim_left (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要去除的字符集合。

str_trim_right 函数

  • 函数功能：

去除尾部指定的字符。

  • 函数原型：
ret_t str_trim_right (str_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。
text | const char* | 要去除的字符集合。

str_unescape 函数

  • 函数功能：

对字符串进行反转义。如：把”\n”转换成’\n’。

  • 函数原型：
ret_t str_unescape (str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | str_t* | str对象。

capacity 属性

容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

str 属性

字符串。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


style_const_t

概述

只读的style，从theme_t中获取数据。

tools/theme_gen用于把XML的窗体样式数据转换成常量数据。

函数

函数名称 | 说明
style_const_create | 创建只读的style对象。

style_const_create 函数

  • 函数功能：

创建只读的style对象。

  • 函数原型：
style_t* style_const_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | style_t* | 返回style对象。


style_factory_t

概述

style工厂接口，主要用于创建style。

> 在特殊情况下，可以实现自己的style工厂，比如支持CSS和可实时修改的style。

函数

函数名称 | 说明
style_factory | 获取缺省的style factory。
style_factory_create_style | 创建style。
style_factory_set | 设置缺省的style factory(需要自定义的style factory才设置)。

style_factory 函数

  • 函数功能：

获取缺省的style factory。

  • 函数原型：
style_factory_t* style_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | style_factory_t* | 返回style factory对象。

style_factory_create_style 函数

  • 函数功能：

创建style。

  • 函数原型：
style_t* style_factory_create_style (style_factory_t* factory, const char* style_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | style_t* | 返回style对象。
factory | style_factory_t* | factory对象。
style_type | const char* | style类型。

style_factory_set 函数

  • 函数功能：

设置缺省的style factory(需要自定义的style factory才设置)。

  • 函数原型：
ret_t style_factory_set (style_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | style_factory_t* | factory对象。


style_id_t

概述

style常量定义。

常量

名称 | 说明
STYLE_ID_BG_COLOR | 背景颜色。
STYLE_ID_FG_COLOR | 前景颜色。
STYLE_ID_MASK_COLOR | 蒙版颜色。
STYLE_ID_FONT_NAME | 字体名称。
STYLE_ID_FONT_SIZE | 字体大小。
STYLE_ID_FONT_STYLE | 字体风格(粗体、斜体等)。
STYLE_ID_TEXT_COLOR | 文本颜色。
STYLE_ID_HIGHLIGHT_FONT_NAME | 高亮文本的字体名称。
STYLE_ID_HIGHLIGHT_FONT_SIZE | 高亮文本的字体大小。
STYLE_ID_HIGHLIGHT_TEXT_COLOR | 高亮文本的文本颜色。
STYLE_ID_TIPS_TEXT_COLOR | 提示文本颜色。
STYLE_ID_TEXT_ALIGN_H | 文本水平对齐的方式。
STYLE_ID_TEXT_ALIGN_V | 文本垂直对齐的方式。
STYLE_ID_BORDER_COLOR | 边框颜色。
STYLE_ID_BORDER_WIDTH | 边框线宽。
STYLE_ID_BORDER | 边框类型。
STYLE_ID_BG_IMAGE | 图片的名称。
STYLE_ID_BG_IMAGE_DRAW_TYPE | 图片的显示方式。
STYLE_ID_ICON | 图标的名称。
STYLE_ID_FG_IMAGE | 图片的名称。
STYLE_ID_FG_IMAGE_DRAW_TYPE | 图片的显示方式。
STYLE_ID_SPACER | 间距。
STYLE_ID_MARGIN | 边距。
STYLE_ID_MARGIN_LEFT | 左边距。
STYLE_ID_MARGIN_RIGHT | 右边距。
STYLE_ID_MARGIN_TOP | 顶边距。
STYLE_ID_MARGIN_BOTTOM | 底边距。
STYLE_ID_ICON_AT | 图标的位置。
STYLE_ID_ACTIVE_ICON | Active图标的名称。
STYLE_ID_X_OFFSET | X方向的偏移，方便实现按下的效果。
STYLE_ID_Y_OFFSET | Y方向的偏移，方便实现按下的效果。
STYLE_ID_SELECTED_BG_COLOR | 编辑器中选中区域的背景颜色。
STYLE_ID_SELECTED_FG_COLOR | 编辑器中选中区域的前景颜色。
STYLE_ID_SELECTED_TEXT_COLOR | 编辑器中选中区域的文本颜色。
STYLE_ID_ROUND_RADIUS | 圆角半径(仅在WITH_VGCANVAS定义时生效)。
STYLE_ID_ROUND_RADIUS_TOP_LEFT | 左上角圆角半径(仅在WITH_VGCANVAS定义时生效)。
STYLE_ID_ROUND_RADIUS_TOP_RIGHT | 右上角圆角半径(仅在WITH_VGCANVAS定义时生效)。
STYLE_ID_ROUND_RADIUS_BOTTOM_LEFT | 左下角圆角半径(仅在WITH_VGCANVAS定义时生效)。
STYLE_ID_ROUND_RADIUS_BOTTOM_RIGHT | 右下角圆角半径(仅在WITH_VGCANVAS定义时生效)。
STYLE_ID_CHILDREN_LAYOUT | 子控件布局参数。
STYLE_ID_SELF_LAYOUT | 控件布局参数。
STYLE_ID_FOCUSABLE | 是否支持焦点停留。
STYLE_ID_FEEDBACK | 是否启用按键音、触屏音和震动等反馈。
STYLE_ID_CLEAR_BG | 是否用clear_rect代替fill_rect绘制背景。
STYLE_ID_GRID_COLOR | 网格线颜色(grid控件)
STYLE_ID_EVEN_BG_COLOR | 偶数行背景颜色(grid控件)
STYLE_ID_ODD_BG_COLOR | 奇数行背景颜色(grid控件)


style_mutable_t

概述

可变的style(可实时修改并生效，主要用于在designer中被编辑的控件，或者一些特殊控件)。

style_mutable也对style_const进行了包装，当用户没修改某个值时，便从style_const中获取。

函数

函数名称 | 说明
style_mutable_cast | 转换为style_mutable对象。
style_mutable_copy | 将other对象的数据拷贝到s对象。
style_mutable_create | 创建style_mutable对象。
style_mutable_foreach | 遍历。对每项调用回调函数on_style_item。
style_mutable_get_value | 获取指定名称的值。
style_mutable_remove_value | 移除指定名称的值。
style_mutable_reset | 清空s对象。
style_mutable_set_color | 设置指定名称的颜色值。
style_mutable_set_default_style | 设置 style_mutable 对象的 default_style 成员，并且释放原来的 default_style 成员对象
style_mutable_set_int | 设置指定名称整数格式的值。
style_mutable_set_name | 设置style的名称。
style_mutable_set_str | 设置指定名称字符串的值。
style_mutable_set_value | 设置指定名称的值。

属性

属性名称 | 类型 | 说明
name | char* | 名称。

style_mutable_cast 函数

  • 函数功能：

转换为style_mutable对象。

  • 函数原型：
style_t* style_mutable_cast (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | style_t* | style对象。
s | style_t* | style对象。

style_mutable_copy 函数

  • 函数功能：

将other对象的数据拷贝到s对象。

  • 函数原型：
ret_t style_mutable_copy (style_t* s, style_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
other | style_t* | style对象。

style_mutable_create 函数

  • 函数功能：

创建style_mutable对象。

除了测试程序外不需要直接调用，widget会通过style_factory_create创建。

  • 函数原型：
style_t* style_mutable_create (style_t* default_style);
  • 参数说明：
参数 | 类型 | 说明
返回值 | style_t* | style对象。
default_style | style_t* | 缺省的style。

style_mutable_foreach 函数

  • 函数功能：

遍历。对每项调用回调函数on_style_item。

  • 函数原型：
ret_t style_mutable_foreach (style_t* s, tk_on_style_item_t on_style_item, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
on_style_item | tk_on_style_item_t | 回调函数。
ctx | void* | 回调函数的上下文。

style_mutable_get_value 函数

  • 函数功能：

获取指定名称的值。

  • 函数原型：
ret_t style_mutable_get_value (style_t* s, const char* state, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 控件状态。
name | const char* | 属性名。
v | value_t* | 值。

style_mutable_remove_value 函数

  • 函数功能：

移除指定名称的值。 备注： 如果 state 控件状态为 NULL，name 属性名为 NULL，就清除所有的 mutable 风格。 如果 state 控件状态为 NULL，name 属性名不为 NULL，清除 state 状态为 normal 的 name 属性。 如果 state 控件状态不为 NULL，name 属性名为 NULL，就清除所有的 state 状态的风格。

  • 函数原型：
ret_t style_mutable_remove_value (style_t* s, const char* state, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 控件状态。
name | const char* | 属性名。

style_mutable_reset 函数

  • 函数功能：

清空s对象。

  • 函数原型：
ret_t style_mutable_reset (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。

style_mutable_set_color 函数

  • 函数功能：

设置指定名称的颜色值。

  • 函数原型：
ret_t style_mutable_set_color (style_t* s, const char* state, const char* name, color_t val);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 控件状态。
name | const char* | 属性名。
val | color_t | 值。

style_mutable_set_default_style 函数

  • 函数功能：

设置 style_mutable 对象的 default_style 成员，并且释放原来的 default_style 成员对象

  • 函数原型：
ret_t style_mutable_set_default_style (style_t* s, style_t* default_style);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
default_style | style_t* | 缺省的style。

style_mutable_set_int 函数

  • 函数功能：

设置指定名称整数格式的值。

  • 函数原型：
ret_t style_mutable_set_int (style_t* s, const char* state, const char* name, uint32_t val);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 控件状态。
name | const char* | 属性名。
val | uint32_t | 值。

style_mutable_set_name 函数

  • 函数功能：

设置style的名称。

  • 函数原型：
ret_t style_mutable_set_name (style_t* s, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
name | const char* | 名称。

style_mutable_set_str 函数

  • 函数功能：

设置指定名称字符串的值。

  • 函数原型：
ret_t style_mutable_set_str (style_t* s, const char* state, const char* name, const char* val);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 控件状态。
name | const char* | 属性名。
val | const char* | 值。

style_mutable_set_value 函数

  • 函数功能：

设置指定名称的值。

  • 函数原型：
ret_t style_mutable_set_value (style_t* s, const char* state, const char* name, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 控件状态。
name | const char* | 属性名。
v | const value_t* | 值。

name 属性

名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


style_t

概述

控件风格。

widget从style对象中，获取诸如字体、颜色和图片相关的参数，根据这些参数来绘制界面。

style_t* style = widget->astyle;
int32_t margin = style_get_int(style, STYLE_ID_MARGIN, 2);
int32_t icon_at = style_get_int(style, STYLE_ID_ICON_AT, ICON_AT_AUTO);
uint16_t font_size = style_get_int(style, STYLE_ID_FONT_SIZE, TK_DEFAULT_FONT_SIZE);

属性名称的请参考style_id

函数

函数名称 | 说明
style_destroy | 销毁style对象
style_get | 获取指定状态的指定属性的值。
style_get_color | 获取指定name的颜色值。
style_get_gradient | 获取指定name的渐变颜色值。
style_get_int | 获取指定name的整数格式的值。
style_get_str | 获取指定name的字符串格式的值。
style_get_style_state | 获取风格对象的风格状态
style_get_style_type | 获取 style 的风格类型。
style_get_uint | 获取指定name的无符号整数格式的值。
style_is_mutable | 检查style是否是mutable的。
style_is_valid | 检查style对象是否有效
style_normalize_value | 对值进行正规化。
style_notify_widget_state_changed | widget状态改变时，通知style更新数据。
style_set | 设置指定状态的指定属性的值(仅仅对mutable的style有效)。
style_set_style_data | 把风格对象数据设置到风格对象中
style_update_state | 更新风格对象的状态以及对应的数据

style_destroy 函数

  • 函数功能：

销毁style对象

  • 函数原型：
ret_t style_destroy (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。

style_get 函数

  • 函数功能：

获取指定状态的指定属性的值。

  • 函数原型：
ret_t style_get (style_t* s, const char* state, const char* name, value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 状态。
name | const char* | 属性名。
value | value_t* | 值。

style_get_color 函数

  • 函数功能：

获取指定name的颜色值。

  • 函数原型：
color_t style_get_color (style_t* s, const char* name, color_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | color_t | 返回颜色值。
s | style_t* | style对象。
name | const char* | 属性名。
defval | color_t | 缺省值。

style_get_gradient 函数

  • 函数功能：

获取指定name的渐变颜色值。

  • 函数原型：
gradient_t* style_get_gradient (style_t* s, const char* name, gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | gradient_t* | 返回渐变颜色值。
s | style_t* | style对象。
name | const char* | 属性名。
gradient | gradient_t* | 返回值。

style_get_int 函数

  • 函数功能：

获取指定name的整数格式的值。

  • 函数原型：
int32_t style_get_int (style_t* s, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回整数格式的值。
s | style_t* | style对象。
name | const char* | 属性名。
defval | int32_t | 缺省值。

style_get_str 函数

  • 函数功能：

获取指定name的字符串格式的值。

  • 函数原型：
const char* style_get_str (style_t* s, const char* name, const char* defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串格式的值。
s | style_t* | style对象。
name | const char* | 属性名。
defval | const char* | 缺省值。

style_get_style_state 函数

  • 函数功能：

获取风格对象的风格状态

  • 函数原型：
const char* style_get_style_state (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回风格状态。
s | style_t* | style对象。

style_get_style_type 函数

  • 函数功能：

获取 style 的风格类型。

  • 函数原型：
const char* style_get_style_type (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回风格类型。
s | style_t* | style对象。

style_get_uint 函数

  • 函数功能：

获取指定name的无符号整数格式的值。

  • 函数原型：
uint32_t style_get_uint (style_t* s, const char* name, uint32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回无符号整数格式的值。
s | style_t* | style对象。
name | const char* | 属性名。
defval | uint32_t | 缺省值。

style_is_mutable 函数

  • 函数功能：

检查style是否是mutable的。

  • 函数原型：
bool_t style_is_mutable (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。
s | style_t* | style对象。

style_is_valid 函数

  • 函数功能：

检查style对象是否有效

  • 函数原型：
bool_t style_is_valid (style_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回是否有效。
s | style_t* | style对象。

style_normalize_value 函数

  • 函数功能：

对值进行正规化。

  • 函数原型：
ret_t style_normalize_value (const char* name, const char* value, value_t* out);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 名称。
value | const char* | 值。
out | value_t* | 返回的值。

style_notify_widget_state_changed 函数

  • 函数功能：

widget状态改变时，通知style更新数据。

  • 函数原型：
ret_t style_notify_widget_state_changed (style_t* s, widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
widget | widget_t* | 控件对象。

style_set 函数

  • 函数功能：

设置指定状态的指定属性的值(仅仅对mutable的style有效)。

  • 函数原型：
ret_t style_set (style_t* s, const char* state, const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
state | const char* | 状态。
name | const char* | 属性名。
value | const value_t* | 值。

style_set_style_data 函数

  • 函数功能：

把风格对象数据设置到风格对象中

  • 函数原型：
ret_t style_set_style_data (style_t* s, const uint8_t* data, const char* state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
data | const uint8_t* | 风格对象数据
state | const char* | 风格状态

style_update_state 函数

  • 函数功能：

更新风格对象的状态以及对应的数据 备注：根据 widget_type 和 style_name 以及 widget_state 在 theme 对象中查找对应的数据并且更新到 style 对象中

  • 函数原型：
ret_t style_update_state (style_t* s, theme_t* theme, const char* widget_type, const char* style_name, const char* widget_state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
s | style_t* | style对象。
theme | theme_t* | theme对象。
widget_type | const char* | 控件的类型名。
style_name | const char* | style的名称。
widget_state | const char* | 控件的状态。


style_type_t

概述

类型常量定义。

常量

名称 | 说明
STYLE_ID_BG_COLOR | 背景颜色。
STYLE_ID_FG_COLOR | 前景颜色。
STYLE_ID_FONT_NAME | 字体名称。
STYLE_ID_FONT_SIZE | 字体大小。
STYLE_ID_FONT_STYLE | 字体风格(粗体、斜体等)。
STYLE_ID_TEXT_COLOR | 文本颜色。
STYLE_ID_TIPS_TEXT_COLOR | 提示文本颜色。
STYLE_ID_TEXT_ALIGN_H | 文本水平对齐的方式。
STYLE_ID_TEXT_ALIGN_V | 文本垂直对齐的方式。
STYLE_ID_BORDER_COLOR | 边框颜色。
STYLE_ID_BORDER | 边框类型。
STYLE_ID_BG_IMAGE | 图片的名称。
STYLE_ID_BG_IMAGE_DRAW_TYPE | 图片的显示方式。
STYLE_ID_ICON | 图标的名称。
STYLE_ID_FG_IMAGE | 图片的名称。
STYLE_ID_FG_IMAGE_DRAW_TYPE | 图片的显示方式。
STYLE_ID_MARGIN | 边距。
STYLE_ID_ICON_AT | 图标的位置。
STYLE_ID_ACTIVE_ICON | Active图标的名称。
STYLE_ID_X_OFFSET | X方向的偏移，方便实现按下的效果。
STYLE_ID_Y_OFFSET | Y方向的偏移，方便实现按下的效果。
STYLE_ID_SELECTED_BG_COLOR | 编辑器中选中区域的背景颜色。
STYLE_ID_SELECTED_FG_COLOR | 编辑器中选中区域的前景颜色。
STYLE_ID_SELECTED_TEXT_COLOR | 编辑器中选中区域的文本颜色。
STYLE_ID_ROUND_RADIUS | 圆角半径(仅在WITH_VGCANVAS定义时生效)。


suggest_words_t

概述

输入法联想字词。

函数

函数名称 | 说明
suggest_words_create | 创建联想字对象。
suggest_words_destroy | @deconstructor
suggest_words_find | 查找prefix对应的联想字列表，成功后会更新words/words_nr。

属性

属性名称 | 类型 | 说明

suggest_words_create 函数

  • 函数功能：

创建联想字对象。

  • 函数原型：
suggest_words_t* suggest_words_create (const asset_info_t* res);
  • 参数说明：
参数 | 类型 | 说明
返回值 | suggest_words_t* | 返回联想字对象。
res | const asset_info_t* | 数据资源。

suggest_words_destroy 函数

  • 函数功能：

@deconstructor 销毁联想字对象。

  • 函数原型：
ret_t suggest_words_destroy (suggest_words_t* suggest_words);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
suggest_words | suggest_words_t* | 联想字对象。

suggest_words_find 函数

  • 函数功能：

查找prefix对应的联想字列表，成功后会更新words/words_nr。

  • 函数原型：
ret_t suggest_words_find (suggest_words_t* suggest_words, wchar_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
suggest_words | suggest_words_t* | 联想字对象。
c | wchar_t | 字符。


svg_helper_t

概述

函数

函数名称 | 说明
bsvg_to_svg | bsvg to svg
svg_file_to_bsvg | svg to bsvg
svg_to_bsvg | svg to bsvg

bsvg_to_svg 函数

  • 函数功能：

bsvg to svg

  • 函数原型：
ret_t bsvg_to_svg (const uint32_t* data, uint32_t size, str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | const uint32_t* | bsvg数据。
size | uint32_t | bsvg数据长度。
str | str_t* | 用于返回svg数据。

svg_file_to_bsvg 函数

  • 函数功能：

svg to bsvg

  • 函数原型：
ret_t svg_file_to_bsvg (const char* ifilename, const char* ofilename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ifilename | const char* | svg文件名。
ofilename | const char* | bsvg文件名。

svg_to_bsvg 函数

  • 函数功能：

svg to bsvg

  • 函数原型：
ret_t svg_to_bsvg (const char* xml, uint32_t size, uint32_t** out, uint32_t* out_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
xml | const char* | svg数据。
size | uint32_t | svg数据长度。
out | uint32_t** | 用于返回bsvg数据。
out_size | uint32_t* | bsvg数据长度。


svg_image_t

概述

SVG图片控件。

svg_image_t是image_base_t的子类控件，image_base_t的函数均适用于svg_image_t控件。

在xml中使用”svg”标签创建SVG图片控件。如：

<svg image="girl"/>

更多用法请参考：svg image

在c代码中使用函数svg_image_create创建SVG图片控件。如：

widget_t* image = svg_image_create(win, 10, 10, 200, 200);
image_set_image(image, "girl");

创建之后: 需要用widget_set_image设置图片名称。

完整示例请参考：svg image demo

可用通过style来设置控件的显示风格，如背景和边框等。如：

<svg>
<style name="default">
<normal border_color="green" fg_color="red" />
</style>
</svg>

更多用法请参考：theme default

函数

函数名称 | 说明
svg_image_cast | 转换为svg_image对象(供脚本语言使用)。
svg_image_create | 创建svg_image对象
svg_image_get_widget_vtable | 获取 svg_image 虚表。
svg_image_set_cache_mode | 控件设置是否开启离线缓存渲染模式。
svg_image_set_draw_type | 控件设置svg图片绘制模式。
svg_image_set_image | 设置控件的图片名称。

属性

属性名称 | 类型 | 说明
draw_type | image_draw_type_t | svg图片的绘制方式(支持旋转缩放, 目前仅支持scale、scale_auto模式)。
is_cache_mode | bool_t | 离线缓存渲染模式。

svg_image_cast 函数

  • 函数功能：

转换为svg_image对象(供脚本语言使用)。

  • 函数原型：
widget_t* svg_image_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | svg_image对象。
widget | widget_t* | svg_image对象。

svg_image_create 函数

  • 函数功能：

创建svg_image对象

  • 函数原型：
widget_t* svg_image_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

svg_image_get_widget_vtable 函数

  • 函数功能：

获取 svg_image 虚表。

  • 函数原型：
const widget_vtable_t* svg_image_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 svg_image 虚表。

svg_image_set_cache_mode 函数

  • 函数功能：

控件设置是否开启离线缓存渲染模式。

在确保svg图片不经常变化大小及状态的情况下，开启离线缓存渲染能够减少解析bsvg的开销，提高效率。

  • 函数原型：
ret_t svg_image_set_cache_mode (widget_t* widget, bool_t is_cache_mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
is_cache_mode | bool_t | 是否开启缓存模式。

svg_image_set_draw_type 函数

  • 函数功能：

控件设置svg图片绘制模式。

  • 函数原型：
ret_t svg_image_set_draw_type (widget_t* widget, image_draw_type_t draw_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
draw_type | image_draw_type_t | 绘制模式。

svg_image_set_image 函数

  • 函数功能：

设置控件的图片名称。

如果需要显示文件系统中的图片，只需将图片名称换成实际的文件名，并加上”file://”前缀即可。

  • 函数原型：
ret_t svg_image_set_image (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | image对象。
name | const char* | 图片名称，该图片必须存在于资源管理器。

draw_type 属性

svg图片的绘制方式(支持旋转缩放, 目前仅支持scale、scale_auto模式)。

  • 类型：image_draw_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

is_cache_mode 属性

离线缓存渲染模式。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


switch_t

概述

开关控件。

switch_t是widget_t的子类控件，widget_t的函数均适用于switch_t控件。

在xml中使用”switch”标签创建开关控件。如：

<switch x="10" y="60" w="60" h="22" />

更多用法请参考：switch.xml

在c代码中使用函数switch_create创建开关控件。如：

widget_t* sw = switch_create(win, 10, 10, 80, 30);
widget_on(sw, EVT_VALUE_CHANGED, on_changed, NULL);

完整示例请参考：switch demo

可用通过style来设置控件的显示风格，如背景图片等。如：

<style name="default">
<normal  bg_image="switch" />
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
switch_cast | 转换switch对象(供脚本语言使用)。
switch_create | 创建switch对象
switch_get_widget_vtable | 获取 switch 虚表。
switch_set_value | 设置控件的值。

属性

属性名称 | 类型 | 说明
max_xoffset_ratio | float_t | 当开关处于关闭时，图片偏移相对于图片宽度的比例(缺省为1/3)。
value | bool_t | 值。

事件

事件名称 | 类型 | 说明
EVT_CLICK | pointer_event_t | 点击事件。
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(开关状态)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(开关状态)改变事件。

switch_cast 函数

  • 函数功能：

转换switch对象(供脚本语言使用)。

  • 函数原型：
widget_t* switch_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | switch对象。
widget | widget_t* | switch对象。

switch_create 函数

  • 函数功能：

创建switch对象

  • 函数原型：
widget_t* switch_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

switch_get_widget_vtable 函数

  • 函数功能：

获取 switch 虚表。

  • 函数原型：
const widget_vtable_t* switch_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 switch 虚表。

switch_set_value 函数

  • 函数功能：

设置控件的值。

  • 函数原型：
ret_t switch_set_value (widget_t* widget, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | switch对象。
value | bool_t | 值

max_xoffset_ratio 属性

当开关处于关闭时，图片偏移相对于图片宽度的比例(缺省为1/3)。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


system_bar_t

概述

system_bar窗口。

system_bar窗口是一种特殊的窗口，独占LCD顶部区域，用来显示当前窗口的标题和关闭按钮等内容。

system_bar窗口需要在打开第一个应用程序窗口之前打开。

system_bar对两个子控件会做特殊处理：

  • 1.名为”title”的label控件，自动显示当前主窗口的name或text。
  • 2.名为”close”的button控件，点击之后向当前主窗口发送EVT_REQUEST_CLOSE_WINDOW消息。

system_bar_t是window_base_t的子类控件， window_base_t的函数均适用于system_bar_t控件。

在xml中使用”system_bar”标签创建system_bar窗口。如：

<system_bar h="30">
<column x="0" y="0" w="-40" h="100%">
<label style="title" x="10" y="m" w="55%" h="100%" name="title"/>
<digit_clock style="time" x="r" y="m" w="40%" h="100%" format="hh:mm"/>
</column>
<button style="close" x="r:5" y="m" w="26" h="26" name="close" text="x"/>
</system_bar>

更多用法请参考： system_bar

在c代码中使用函数system_bar_create创建system_bar窗口。如：

widget_t* win = system_bar_create(NULL, 0, 0, 320, 30);

创建之后，和使用普通窗口是一样的。

可用通过style来设置控件的显示风格，如背景颜色等等。如：

<system_bar>
<style name="default">
<normal bg_color="#a0a0a0"/>
</style>
</system_bar>

更多用法请参考： system_bar.xml

函数

函数名称 | 说明
system_bar_cast | 转换为system_bar对象(供脚本语言使用)。
system_bar_create | 创建system_bar对象。
system_bar_get_widget_vtable | 获取 system_bar 虚表。

system_bar_cast 函数

  • 函数功能：

转换为system_bar对象(供脚本语言使用)。

  • 函数原型：
widget_t* system_bar_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | system_bar对象。
widget | widget_t* | system_bar对象。

system_bar_create 函数

  • 函数功能：

创建system_bar对象。

  • 函数原型：
widget_t* system_bar_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | system_bar对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

system_bar_get_widget_vtable 函数

  • 函数功能：

获取 system_bar 虚表。

  • 函数原型：
const widget_vtable_t* system_bar_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 system_bar 虚表。


system_event_t

概述

系统事件。

函数

函数名称 | 说明
system_event_cast | 把event对象转system_event_t对象。
system_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
sdl_event | void* | SDL_Event。

system_event_cast 函数

  • 函数功能：

把event对象转system_event_t对象。

  • 函数原型：
system_event_t* system_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | system_event_t* | event 对象。
event | event_t* | event对象。

system_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* system_event_init (system_event_t* event, void* target, void* sdl_event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | system_event_t* | event对象。
target | void* | 事件目标。
sdl_event | void* | SDL_Event对象。

sdl_event 属性

SDL_Event。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


system_info_flag_t

概述

SystemInfo常量定义。

常量

名称 | 说明
SYSTEM_INFO_FLAG_NONE | 无特殊标志。
SYSTEM_INFO_FLAG_FAST_LCD_PORTRAIT | 使用快速旋转功能。


system_info_t

概述

当前系统的信息。

函数

函数名称 | 说明
system_info | 获取system_info对象。
system_info_create | 创建system_info对象。
system_info_deinit | 释放system_info对象。
system_info_fix_font_name | 修正字体名称，如果为NULL，返回缺省字体。
system_info_init | 初始化system_info对象。
system_info_set_app_root | 设置app root。
system_info_set_default_font | 设置缺省字体。
system_info_set_device_pixel_ratio | 设置LCD密度。
system_info_set_font_scale | 设置字体缩放比例。
system_info_set_keyboard_type | 设置键盘类型。
system_info_set_lcd_h | 设置LCD高度。
system_info_set_lcd_orientation | 设置LCD的旋转角度。
system_info_set_lcd_type | 设置LCD类型。
system_info_set_lcd_w | 设置LCD宽度。

属性

属性名称 | 类型 | 说明
app_name | const char* | 应用程序的名称。
app_root | char* | 应用程序的根目录，用于定位资源文件。
app_type | app_type_t | 应用程序的类型。
country | const char* | locale中的国家。
default_font | const char* | 缺省字体。
device_orientation | const char* | 显示屏的方向名称，可选值：”portrait”表示竖屏，”landscape”表示横屏。
device_pixel_ratio | float_t | 显示屏的密度。
flags | uint32_t | 标志。请参考
font_scale | float_t | 字体缩放比例，用于实现字体整体放大。
keyboard_type | keyboard_type_t | 键盘类型。
language | const char* | locale中的语言。
lcd_h | uint32_t | 显示屏的高度。
lcd_orientation | lcd_orientation_t | 显示屏的旋转角度。
lcd_type | lcd_type_t | 显示屏的类型。
lcd_w | uint32_t | 显示屏的宽度。

system_info 函数

  • 函数功能：

获取system_info对象。

  • 函数原型：
system_info_t* system_info ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | system_info_t* | 返回system_info对象。

system_info_create 函数

  • 函数功能：

创建system_info对象。

  • 函数原型：
system_info_t* system_info_create (app_type_t app_type, const char* app_name, const char* app_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | system_info_t* | 返回创建的对象指针。
app_type | app_type_t | 应用程序的类型。
app_name | const char* | 应用程序的名称。
app_root | const char* | 应用程序的根目录，用于定位资源文件。

system_info_deinit 函数

  • 函数功能：

释放system_info对象。

  • 函数原型：
ret_t system_info_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

system_info_fix_font_name 函数

  • 函数功能：

修正字体名称，如果为NULL，返回缺省字体。

  • 函数原型：
const char* system_info_fix_font_name (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回有效的字体名称。
name | const char* | 字体名称。

system_info_init 函数

  • 函数功能：

初始化system_info对象。

  • 函数原型：
ret_t system_info_init (app_type_t app_type, const char* app_name, const char* app_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
app_type | app_type_t | 应用程序的类型。
app_name | const char* | 应用程序的名称。
app_root | const char* | 应用程序的根目录，用于定位资源文件。

system_info_set_app_root 函数

  • 函数功能：

设置app root。

  • 函数原型：
ret_t system_info_set_app_root (system_info_t* info, const char* app_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
app_root | const char* | app root。

system_info_set_default_font 函数

  • 函数功能：

设置缺省字体。

  • 函数原型：
ret_t system_info_set_default_font (system_info_t* info, const char* default_font);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
default_font | const char* | 缺省字体。

system_info_set_device_pixel_ratio 函数

  • 函数功能：

设置LCD密度。

  • 函数原型：
ret_t system_info_set_device_pixel_ratio (system_info_t* info, float_t device_pixel_ratio);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
device_pixel_ratio | float_t | 设置LCD密度。

system_info_set_font_scale 函数

  • 函数功能：

设置字体缩放比例。

  • 函数原型：
ret_t system_info_set_font_scale (system_info_t* info, float_t font_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
font_scale | float_t | 字体缩放比例。

system_info_set_keyboard_type 函数

  • 函数功能：

设置键盘类型。

  • 函数原型：
ret_t system_info_set_keyboard_type (system_info_t* info, keyboard_type_t keyboard_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
keyboard_type | keyboard_type_t | 键盘类型。

system_info_set_lcd_h 函数

  • 函数功能：

设置LCD高度。

  • 函数原型：
ret_t system_info_set_lcd_h (system_info_t* info, uint32_t lcd_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
lcd_h | uint32_t | 设置LCD高度。

system_info_set_lcd_orientation 函数

  • 函数功能：

设置LCD的旋转角度。

  • 函数原型：
ret_t system_info_set_lcd_orientation (system_info_t* info, lcd_orientation_t lcd_orientation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
lcd_orientation | lcd_orientation_t | 设置LCD的旋转角度。

system_info_set_lcd_type 函数

  • 函数功能：

设置LCD类型。

  • 函数原型：
ret_t system_info_set_lcd_type (system_info_t* info, lcd_type_t lcd_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
lcd_type | lcd_type_t | 设置LCD类型。

system_info_set_lcd_w 函数

  • 函数功能：

设置LCD宽度。

  • 函数原型：
ret_t system_info_set_lcd_w (system_info_t* info, uint32_t lcd_w);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
info | system_info_t* | system_info对象。
lcd_w | uint32_t | 设置LCD宽度。

app_name 属性

应用程序的名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

app_root 属性

应用程序的根目录，用于定位资源文件。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

app_type 属性

应用程序的类型。

  • 类型：app_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

country 属性

locale中的国家。

只能通过object_get_prop函数访问。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

default_font 属性

缺省字体。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

device_orientation 属性

显示屏的方向名称，可选值：”portrait”表示竖屏，”landscape”表示横屏。

只能通过object_get_prop函数访问。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

device_pixel_ratio 属性

显示屏的密度。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

flags 属性

标志。请参考{system_info_flag_t}。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font_scale 属性

字体缩放比例，用于实现字体整体放大。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

keyboard_type 属性

键盘类型。

  • 类型：keyboard_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

language 属性

locale中的语言。

只能通过object_get_prop函数访问。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lcd_h 属性

显示屏的高度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lcd_orientation 属性

显示屏的旋转角度。

  • 类型：lcd_orientation_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lcd_type 属性

显示屏的类型。

  • 类型：lcd_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

lcd_w 属性

显示屏的宽度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


tab_button_group_t

概述

标签按钮分组控件。

一个简单的容器，主要用于对标签按钮进行布局和管理。

tab_button_group_t是widget_t的子类控件， widget_t的函数均适用于tab_button_group_t控件。

在xml中使用”tab_button_group”标签创建标签按钮分组控件。如：

<tab_button_group x="c" y="bottom:10" w="90%" h="30" compact="true" >
<tab_button text="General"/>
<tab_button text="Network" value="true" />
<tab_button text="Security"/>
</tab_button_group>

更多用法请参考： tab control

可用通过style来设置控件的显示风格，如颜色等等。如：

<tab_button_group>
<style name="default">
<normal/>
</style>
</tab_button_group>

函数

函数名称 | 说明
tab_button_group_cast | 转换tab_button_group对象(供脚本语言使用)。
tab_button_group_create | 创建tab_button_group对象
tab_button_group_get_widget_vtable | 获取 tab_button_group 虚表。
tab_button_group_set_compact | 设置compact。
tab_button_group_set_scrollable | 设置scrollable。

属性

属性名称 | 类型 | 说明
compact | bool_t | 紧凑型排版子控件(缺省FALSE)。
enable_hscroll_animator | bool_t | 是否开启 tab_button 的左右滚动动画(缺省TRUE)。
scrollable | bool_t | 是否支持滚动(缺省FALSE)。

tab_button_group_cast 函数

  • 函数功能：

转换tab_button_group对象(供脚本语言使用)。

  • 函数原型：
widget_t* tab_button_group_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | tab_button_group对象。
widget | widget_t* | tab_button_group对象。

tab_button_group_create 函数

  • 函数功能：

创建tab_button_group对象

  • 函数原型：
widget_t* tab_button_group_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

tab_button_group_get_widget_vtable 函数

  • 函数功能：

获取 tab_button_group 虚表。

  • 函数原型：
const widget_vtable_t* tab_button_group_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 tab_button_group 虚表。

tab_button_group_set_compact 函数

  • 函数功能：

设置compact。

  • 函数原型：
ret_t tab_button_group_set_compact (widget_t* widget, bool_t compact);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
compact | bool_t | 是否使用紧凑布局(缺省FALSE)。

tab_button_group_set_scrollable 函数

  • 函数功能：

设置scrollable。

  • 函数原型：
ret_t tab_button_group_set_scrollable (widget_t* widget, bool_t scrollable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
scrollable | bool_t | 是否允许滚动(缺省FALSE)。

compact 属性

紧凑型排版子控件(缺省FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

enable_hscroll_animator 属性

是否开启 tab_button 的左右滚动动画(缺省TRUE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

scrollable 属性

是否支持滚动(缺省FALSE)。

紧凑型排版子控件时才支持滚动。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


tab_button_t

概述

标签按钮控件。

标签按钮有点类似单选按钮，但点击标签按钮之后会自动切换当前的标签页。

tab_button_t是widget_t的子类控件，widget_t的函数均适用于tab_button_t控件。

在xml中使用”tab_button”标签创建标签按钮控件。如：

<!-- tab_button_view_page1.xml -->
<view w="100%" h="100%">
<label x="c" y="m" w="100%" h="60" text="page1" />
<button name="close" x="c" y="bottom:100" w="80" h="40" text="Close" />
</view>

<!-- tab_button dynamic load UI -->
<pages name="pages" x="right" y="0" w="70%" h="100%">
</pages>
<list_view x="0" y="0" w="30%" h="100%" item_height="40" auto_hide_scroll_bar="true">
<scroll_view name="view" x="0"  y="0" w="-12" h="100%">
<tab_button text="page1" load_ui="tab_button_view_page1" value="true"/>
<tab_button text="page2" load_ui="tab_button_view_page2" />
<tab_button text="page3" load_ui="tab_button_view_page3" />
<scroll_view />
<scroll_bar_d name="bar" x="right" y="0" w="12" h="100%" value="0"/>
</list_view>

<!-- tab_button static load UI -->
<tab_button_group x="c" y="bottom:10" w="90%" h="30" compact="true" >
<tab_button text="General"/>
<tab_button text="Network" value="true" />
<tab_button text="Security"/>
</tab_button_group>

标签按钮一般放在标签按钮分组中，布局由标签按钮分组控件决定，不需要指定自己的布局参数和坐标。

更多用法请参考： tab control

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

<tab_button>
<style name="default" border_color="#a0a0a0"  text_color="black">
<normal     bg_color="#d0d0d0" />
<pressed    bg_color="#f0f0f0" />
<over       bg_color="#e0e0e0" />
<normal_of_active     bg_color="#f0f0f0" />
<pressed_of_active    bg_color="#f0f0f0" />
<over_of_active       bg_color="#f0f0f0" />
</style>
</tab_button>

函数

函数名称 | 说明
tab_button_cast | 转换tab_button对象(供脚本语言使用)。
tab_button_create | 创建tab_button对象
tab_button_get_widget_vtable | 获取 tab_button 虚表。
tab_button_set_active_icon | 设置控件的active图标。
tab_button_set_icon | 设置控件的图标。
tab_button_set_load_ui | 设置控件动态加载显示UI。
tab_button_set_value | 设置为当前标签。

属性

属性名称 | 类型 | 说明
active_icon | char* | 当前项的图标的名称。
icon | char* | 非当前项的图标的名称。
load_ui | char* | 激活后加载的UI名字。
value | bool_t | 值。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(激活状态)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(激活状态)改变事件。
EVT_CLICK | pointer_event_t | 点击事件。

tab_button_cast 函数

  • 函数功能：

转换tab_button对象(供脚本语言使用)。

  • 函数原型：
widget_t* tab_button_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | tab_button对象。
widget | widget_t* | tab_button对象。

tab_button_create 函数

  • 函数功能：

创建tab_button对象

  • 函数原型：
widget_t* tab_button_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

tab_button_get_widget_vtable 函数

  • 函数功能：

获取 tab_button 虚表。

  • 函数原型：
const widget_vtable_t* tab_button_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 tab_button 虚表。

tab_button_set_active_icon 函数

  • 函数功能：

设置控件的active图标。

  • 函数原型：
ret_t tab_button_set_active_icon (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | tab_button对象。
name | const char* | 当前项的图标。

tab_button_set_icon 函数

  • 函数功能：

设置控件的图标。

  • 函数原型：
ret_t tab_button_set_icon (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | tab_button对象。
name | const char* | 当前项的图标。

tab_button_set_load_ui 函数

  • 函数功能：

设置控件动态加载显示UI。

  • 函数原型：
ret_t tab_button_set_load_ui (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | tab_button对象。
name | const char* | 动态加载UI的资源名称。

tab_button_set_value 函数

  • 函数功能：

设置为当前标签。

  • 函数原型：
ret_t tab_button_set_value (widget_t* widget, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | tab_button对象。
value | bool_t | 是否为当前标签。

active_icon 属性

当前项的图标的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

icon 属性

非当前项的图标的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

load_ui 属性

激活后加载的UI名字。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

value 属性

值。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


tab_control_t

概述

标签控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。

标签控件通常会包含一个pages控件和一个tab_button_group控件。

tab_control_t是widget_t的子类控件， widget_t的函数均适用于tab_control_t控件。

在xml中使用”tab_control”标签创建标签控件。如：

<tab_control x="0" y="0" w="100%" h="100%" >
<pages x="c" y="20" w="90%" h="-60" value="1">
...
</pages>
<tab_button_group>
...
</tab_button_group>
</tab_control>

更多用法请参考： tab control

函数

函数名称 | 说明
tab_control_cast | 转换tab_control对象(供脚本语言使用)。
tab_control_create | 创建tab_control对象
tab_control_get_widget_vtable | 获取 tab_control 虚表。

tab_control_cast 函数

  • 函数功能：

转换tab_control对象(供脚本语言使用)。

  • 函数原型：
widget_t* tab_control_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | tab_control对象。
widget | widget_t* | tab_control对象。

tab_control_create 函数

  • 函数功能：

创建tab_control对象

  • 函数原型：
widget_t* tab_control_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

tab_control_get_widget_vtable 函数

  • 函数功能：

获取 tab_control 虚表。

  • 函数原型：
const widget_vtable_t* tab_control_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 tab_control 虚表。


tcp_t

概述

函数

函数名称 | 说明
tk_tcp_accept | 监听指定端口，成功返回sock句柄。
tk_tcp_connect | 连接到指定服务器。
tk_tcp_listen | 监听指定端口，成功返回sock句柄。

tk_tcp_accept 函数

  • 函数功能：

监听指定端口，成功返回sock句柄。

  • 函数原型：
int tk_tcp_accept (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回sock句柄。
sock | int | socket句柄。

tk_tcp_connect 函数

  • 函数功能：

连接到指定服务器。

  • 函数原型：
int tk_tcp_connect (const char* host, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回sock句柄。
host | const char* | 主机名或IP地址。
port | int | 端口号。

tk_tcp_listen 函数

  • 函数功能：

监听指定端口，成功返回sock句柄。

  • 函数原型：
int tk_tcp_listen (int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回sock句柄。
port | int | 端口号。


text_edit_state_t

概述


text_edit_t

概述

函数

函数名称 | 说明
text_edit_click | 处理点击事件。
text_edit_copy | 拷贝文本。
text_edit_create | 创建text_edit对象
text_edit_cut | 剪切文本。
text_edit_destroy | 销毁text_edit对象。
text_edit_drag | 处理拖动事件。
text_edit_get_cursor | 获取光标位置。
text_edit_get_height | 获取偏移字符位置高度。
text_edit_get_lines_of_each_row | 获取每一个逻辑行(row)占几个物理行(line)。
text_edit_get_selected_text | 获取选中文本。
text_edit_get_state | 获取编辑器的状态。
text_edit_insert_text | 插入一段文本。
text_edit_invert_caret_visible | 如果caret可见，将其设置为不可见。 如果caret不可见，将其设置为可见。
text_edit_key_down | 处理按键事件。
text_edit_key_up | 处理按键事件。
text_edit_layout | 重新排版。
text_edit_paint | 绘制文本。
text_edit_paste | 粘贴文本。
text_edit_preedit | 进入预编辑状态。
text_edit_preedit_abort | 取消预编辑的文本，并退出预编辑状态。
text_edit_preedit_clear | 清除预编辑文本。
text_edit_preedit_confirm | 提交预编辑的文本，并退出预编辑状态。
text_edit_select_all | 全选。
text_edit_set_canvas | 设置canvas对象。
text_edit_set_caret_visible | 设置光标的看见性。
text_edit_set_cursor | 设置光标位置。
text_edit_set_mask | 设置是否马赛克字符(用于密码)。
text_edit_set_mask_char | 设置马赛克字符。
text_edit_set_max_chars | 设置最大字符数（0 为不限制字符）。
text_edit_set_max_rows | 设置最大行数。
text_edit_set_offset | 设置滚动偏移。
text_edit_set_on_char_will_input | 设置字符输入回调函数。
text_edit_set_on_state_changed | 设置状态改变回调函数。
text_edit_set_on_text_will_delete | 设置文本删除回调函数。
text_edit_set_select | 选择指定范围的文本。
text_edit_set_tips | 设置提示信息。
text_edit_set_wrap_word | 设置是否自动折行。
text_edit_show_context_menu | 显示上下文菜单。
text_edit_unselect | 取消选择。

text_edit_click 函数

  • 函数功能：

处理点击事件。

  • 函数原型：
ret_t text_edit_click (text_edit_t* text_edit, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
x | xy_t | x坐标。
y | xy_t | y坐标。

text_edit_copy 函数

  • 函数功能：

拷贝文本。

  • 函数原型：
ret_t text_edit_copy (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_create 函数

  • 函数功能：

创建text_edit对象

  • 函数原型：
text_edit_t* text_edit_create (widget_t* widget, bool_t single_line);
  • 参数说明：
参数 | 类型 | 说明
返回值 | text_edit_t* | 对象。
widget | widget_t* | 控件
single_line | bool_t | 是否是单行编辑器。

text_edit_cut 函数

  • 函数功能：

剪切文本。

  • 函数原型：
ret_t text_edit_cut (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_destroy 函数

  • 函数功能：

销毁text_edit对象。

  • 函数原型：
ret_t text_edit_destroy (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_drag 函数

  • 函数功能：

处理拖动事件。

  • 函数原型：
ret_t text_edit_drag (text_edit_t* text_edit, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
x | xy_t | x坐标。
y | xy_t | y坐标。

text_edit_get_cursor 函数

  • 函数功能：

获取光标位置。

  • 函数原型：
uint32_t text_edit_get_cursor (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回光标的位置。
text_edit | text_edit_t* | text_edit对象。

text_edit_get_height 函数

  • 函数功能：

获取偏移字符位置高度。

  • 函数原型：
uint32_t text_edit_get_height (text_edit_t* text_edit, uint32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回偏移位置字符位置高度。
text_edit | text_edit_t* | text_edit对象。
offset | uint32_t | 偏移位置。

text_edit_get_lines_of_each_row 函数

  • 函数功能：

获取每一个逻辑行(row)占几个物理行(line)。

  • 函数原型：
const uint32_t* text_edit_get_lines_of_each_row (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const uint32_t* | 返回每一个 row 占用多少个 line 数组。
text_edit | text_edit_t* | text_edit对象。

text_edit_get_selected_text 函数

  • 函数功能：

获取选中文本。 使用完后需调用 TKMEM_FREE() 进行释放文本占有内存。

  • 函数原型：
char* text_edit_get_selected_text (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回选中文本。
text_edit | text_edit_t* | text_edit对象。

text_edit_get_state 函数

  • 函数功能：

获取编辑器的状态。

  • 函数原型：
ret_t text_edit_get_state (text_edit_t* text_edit, text_edit_state_t* state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
state | text_edit_state_t* | 状态。

text_edit_insert_text 函数

  • 函数功能：

插入一段文本。

  • 函数原型：
ret_t text_edit_insert_text (text_edit_t* text_edit, uint32_t offset, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
offset | uint32_t | 插入的偏移位置。
text | const char* | 待插入的文本。

text_edit_invert_caret_visible 函数

  • 函数功能：

如果caret可见，将其设置为不可见。 如果caret不可见，将其设置为可见。

  • 函数原型：
ret_t text_edit_invert_caret_visible (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_key_down 函数

  • 函数功能：

处理按键事件。

  • 函数原型：
ret_t text_edit_key_down (text_edit_t* text_edit, key_event_t* evt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
evt | key_event_t* | event

text_edit_key_up 函数

  • 函数功能：

处理按键事件。

  • 函数原型：
ret_t text_edit_key_up (text_edit_t* text_edit, key_event_t* evt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
evt | key_event_t* | event

text_edit_layout 函数

  • 函数功能：

重新排版。

  • 函数原型：
ret_t text_edit_layout (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_paint 函数

  • 函数功能：

绘制文本。

  • 函数原型：
ret_t text_edit_paint (text_edit_t* text_edit, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
c | canvas_t* | canvas对象。

text_edit_paste 函数

  • 函数功能：

粘贴文本。

  • 函数原型：
ret_t text_edit_paste (text_edit_t* text_edit, const wchar_t* str, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
str | const wchar_t* | 文本。
size | uint32_t | 文本长度。

text_edit_preedit 函数

  • 函数功能：

进入预编辑状态。

  • 函数原型：
ret_t text_edit_preedit (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_preedit_abort 函数

  • 函数功能：

取消预编辑的文本，并退出预编辑状态。

  • 函数原型：
ret_t text_edit_preedit_abort (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_preedit_clear 函数

  • 函数功能：

清除预编辑文本。

  • 函数原型：
ret_t text_edit_preedit_clear (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_preedit_confirm 函数

  • 函数功能：

提交预编辑的文本，并退出预编辑状态。

  • 函数原型：
ret_t text_edit_preedit_confirm (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_select_all 函数

  • 函数功能：

全选。

  • 函数原型：
ret_t text_edit_select_all (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。

text_edit_set_canvas 函数

  • 函数功能：

设置canvas对象。

  • 函数原型：
ret_t text_edit_set_canvas (text_edit_t* text_edit, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
c | canvas_t* | canvas对象。

text_edit_set_caret_visible 函数

  • 函数功能：

设置光标的看见性。

  • 函数原型：
ret_t text_edit_set_caret_visible (text_edit_t* text_edit, bool_t caret_visible);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
caret_visible | bool_t | 是否可见。

text_edit_set_cursor 函数

  • 函数功能：

设置光标位置。

  • 函数原型：
ret_t text_edit_set_cursor (text_edit_t* text_edit, uint32_t cursor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
cursor | uint32_t | 光标偏移。

text_edit_set_mask 函数

  • 函数功能：

设置是否马赛克字符(用于密码)。

  • 函数原型：
ret_t text_edit_set_mask (text_edit_t* text_edit, bool_t mask);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
mask | bool_t | 是否马赛克字符。

text_edit_set_mask_char 函数

  • 函数功能：

设置马赛克字符。

  • 函数原型：
ret_t text_edit_set_mask_char (text_edit_t* text_edit, wchar_t mask_char);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
mask_char | wchar_t | 马赛克字符。

text_edit_set_max_chars 函数

  • 函数功能：

设置最大字符数（0 为不限制字符）。

  • 函数原型：
ret_t text_edit_set_max_chars (text_edit_t* text_edit, uint32_t max_chars);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
max_chars | uint32_t | 最大行数。

text_edit_set_max_rows 函数

  • 函数功能：

设置最大行数。

  • 函数原型：
ret_t text_edit_set_max_rows (text_edit_t* text_edit, uint32_t max_rows);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
max_rows | uint32_t | 最大行数。

text_edit_set_offset 函数

  • 函数功能：

设置滚动偏移。

  • 函数原型：
ret_t text_edit_set_offset (text_edit_t* text_edit, int32_t ox, int32_t oy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
ox | int32_t | x偏移量。
oy | int32_t | y偏移量。

text_edit_set_on_char_will_input 函数

  • 函数功能：

设置字符输入回调函数。

  • 函数原型：
ret_t text_edit_set_on_char_will_input (text_edit_t* text_edit, text_edit_on_char_will_input_t on_char_will_input, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
on_char_will_input | text_edit_on_char_will_input_t | 回调函数。
ctx | void* | 回调函数上下文。

text_edit_set_on_state_changed 函数

  • 函数功能：

设置状态改变回调函数。

  • 函数原型：
ret_t text_edit_set_on_state_changed (text_edit_t* text_edit, text_edit_on_state_changed_t on_state_changed, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
on_state_changed | text_edit_on_state_changed_t | 回调函数。
ctx | void* | 回调函数上下文。

text_edit_set_on_text_will_delete 函数

  • 函数功能：

设置文本删除回调函数。

  • 函数原型：
ret_t text_edit_set_on_text_will_delete (text_edit_t* text_edit, text_edit_on_text_will_delete_t on_text_will_delete, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
on_text_will_delete | text_edit_on_text_will_delete_t | 回调函数。
ctx | void* | 回调函数上下文。

text_edit_set_select 函数

  • 函数功能：

选择指定范围的文本。

  • 函数原型：
ret_t text_edit_set_select (text_edit_t* text_edit, uint32_t start, uint32_t end);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
start | uint32_t | 起始偏移。
end | uint32_t | 结束偏移。

text_edit_set_tips 函数

  • 函数功能：

设置提示信息。

  • 函数原型：
ret_t text_edit_set_tips (text_edit_t* text_edit, const char* tips, bool_t mlines);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
tips | const char* | 提示信息。
mlines | bool_t | 提示信息是否多行显示。

text_edit_set_wrap_word 函数

  • 函数功能：

设置是否自动折行。

  • 函数原型：
ret_t text_edit_set_wrap_word (text_edit_t* text_edit, bool_t wrap_word);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
wrap_word | bool_t | 是否自动折行。

text_edit_show_context_menu 函数

  • 函数功能：

显示上下文菜单。

  • 函数原型：
ret_t text_edit_show_context_menu (text_edit_t* text_edit, int32_t x, int32_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。
x | int32_t | x位置。
y | int32_t | y位置。

text_edit_unselect 函数

  • 函数功能：

取消选择。

  • 函数原型：
ret_t text_edit_unselect (text_edit_t* text_edit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
text_edit | text_edit_t* | text_edit对象。


text_selector_t

概述

文本选择器控件，通常用于选择日期和时间等。

XXX: 目前需要先设置options和visible_nr，再设置其它参数(在XML中也需要按此顺序)。

text_selector_t是widget_t的子类控件，widget_t的函数均适用于text_selector_t控件。

在xml中使用”text_selector”标签创建文本选择器控件。如：

<text_selector options="red;green;blue;gold;orange" visible_nr="3" text="red"/>

更多用法请参考：text_selector.xml

在c代码中使用函数text_selector_create创建文本选择器控件。如：

widget_t* ts = text_selector_create(win, 10, 10, 80, 150);
text_selector_set_options(ts, "1:red;2:green;3:blue;4:orange;5:gold");
text_selector_set_value(ts, 1);
widget_use_style(ts, "dark");

完整示例请参考：text_selector demo

可用通过style来设置控件的显示风格，如字体和背景颜色等。如：

<style name="dark" fg_color="#a0a0a0"  text_color="black" text_align_h="center">
<normal     bg_color="#ffffff" mask_color="#404040" border_color="#404040"/>
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
text_selector_append_option | 追加一个选项。
text_selector_cast | 转换text_selector对象(供脚本语言使用)。
text_selector_count_options | 获取选项个数。
text_selector_create | 创建text_selector对象
text_selector_get_option | 获取第index个选项。
text_selector_get_text | 获取text_selector的文本。
text_selector_get_value | 获取text_selector的值。
text_selector_get_widget_vtable | 获取 text_selector 虚表。
text_selector_reset_options | 重置所有选项。
text_selector_set_animating_time | 设置滚动动画播放时间。
text_selector_set_ellipses | 是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…
text_selector_set_enable_value_animator | 设置是否修改值时启用动画。
text_selector_set_localize_options | 设置是否本地化(翻译)选项。
text_selector_set_loop_options | 设置是否循环选项。
text_selector_set_mask_area_scale | 设置绘制蒙版的区域占比（范围0~1）。
text_selector_set_mask_easing | 设置绘制蒙版的变化趋势。
text_selector_set_options | 设置选项。
text_selector_set_range_options | 设置一系列的整数选项。
text_selector_set_range_options_ex | 设置一系列的整数选项。
text_selector_set_selected_index | 设置第index个选项为当前选中的选项。
text_selector_set_text | 设置text_selector的文本。
text_selector_set_value | 设置text_selector的值。
text_selector_set_visible_nr | 设置可见的选项数。
text_selector_set_yspeed_scale | 设置Y轴偏移速度比例。

属性

属性名称 | 类型 | 说明
animating_time | uint32_t | 滚动动画播放时间。(单位毫秒)
ellipses | bool_t | 是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…
enable_value_animator | bool_t | 是否修改值时启用动画。
localize_options | bool_t | 是否本地化(翻译)选项(缺省为FALSE)。
loop_options | bool_t | 是否循环选项(缺省为FALSE)。
mask_area_scale | float_t | 绘制蒙版的区域占比（范围0~1）。
mask_easing | easing_type_t | 绘制蒙版的变化趋势。
options | char* | 设置可选项(英文冒号(:)分隔值和文本，英文分号(;)分隔选项，如:1:red;2:green;3:blue)。
selected_index | int32_t | 当前选中的选项。
visible_nr | uint32_t | 可见的选项数量(只能是1或者3或者5，缺省为5)。
yspeed_scale | float_t | y偏移速度比例。

事件

事件名称 | 类型 | 说明
EVT_VALUE_WILL_CHANGE | value_change_event_t | 值(当前项)即将改变事件。
EVT_VALUE_CHANGED | value_change_event_t | 值(当前项)改变事件。

text_selector_append_option 函数

  • 函数功能：

追加一个选项。

  • 函数原型：
ret_t text_selector_append_option (widget_t* widget, int32_t value, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
value | int32_t | 值。
text | const char* | 文本。

text_selector_cast 函数

  • 函数功能：

转换text_selector对象(供脚本语言使用)。

  • 函数原型：
widget_t* text_selector_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | text_selector对象。
widget | widget_t* | text_selector对象。

text_selector_count_options 函数

  • 函数功能：

获取选项个数。

  • 函数原型：
int32_t text_selector_count_options (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回选项个数。
widget | widget_t* | text_selector对象。

text_selector_create 函数

  • 函数功能：

创建text_selector对象

  • 函数原型：
widget_t* text_selector_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

text_selector_get_option 函数

  • 函数功能：

获取第index个选项。

  • 函数原型：
text_selector_option_t* text_selector_get_option (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | text_selector_option_t* | 成功返回选项，失败返回NULL。
widget | widget_t* | text_selector对象。
index | uint32_t | 选项的索引。

text_selector_get_text 函数

  • 函数功能：

获取text_selector的文本。

  • 函数原型：
const char* text_selector_get_text (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回文本。
widget | widget_t* | text_selector对象。

text_selector_get_value 函数

  • 函数功能：

获取text_selector的值。

  • 函数原型：
int32_t text_selector_get_value (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回值。
widget | widget_t* | text_selector对象。

text_selector_get_widget_vtable 函数

  • 函数功能：

获取 text_selector 虚表。

  • 函数原型：
const widget_vtable_t* text_selector_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 text_selector 虚表。

text_selector_reset_options 函数

  • 函数功能：

重置所有选项。

  • 函数原型：
ret_t text_selector_reset_options (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。

text_selector_set_animating_time 函数

  • 函数功能：

设置滚动动画播放时间。

  • 函数原型：
ret_t text_selector_set_animating_time (widget_t* widget, uint32_t animating_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
animating_time | uint32_t | 滚动动画播放时间。(单位毫秒)

text_selector_set_ellipses 函数

  • 函数功能：

是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…

  • 函数原型：
ret_t text_selector_set_ellipses (widget_t* widget, bool_t ellipses);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
ellipses | bool_t | 是否开启缩写。

text_selector_set_enable_value_animator 函数

  • 函数功能：

设置是否修改值时启用动画。

  • 函数原型：
ret_t text_selector_set_enable_value_animator (widget_t* widget, bool_t enable_value_animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
enable_value_animator | bool_t | 是否修改值时启用动画

text_selector_set_localize_options 函数

  • 函数功能：

设置是否本地化(翻译)选项。

  • 函数原型：
ret_t text_selector_set_localize_options (widget_t* widget, bool_t localize_options);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
localize_options | bool_t | 是否本地化(翻译)选项。

text_selector_set_loop_options 函数

  • 函数功能：

设置是否循环选项。

  • 函数原型：
ret_t text_selector_set_loop_options (widget_t* widget, bool_t loop_options);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
loop_options | bool_t | 是否循环选项。

text_selector_set_mask_area_scale 函数

  • 函数功能：

设置绘制蒙版的区域占比（范围0~1）。

  • 函数原型：
ret_t text_selector_set_mask_area_scale (widget_t* widget, float_t mask_area_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
mask_area_scale | float_t | 绘制蒙版的区域占比（范围0~1）。

text_selector_set_mask_easing 函数

  • 函数功能：

设置绘制蒙版的变化趋势。

  • 函数原型：
ret_t text_selector_set_mask_easing (widget_t* widget, easing_type_t mask_easing);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
mask_easing | easing_type_t | 绘制蒙版的变化趋势。

text_selector_set_options 函数

  • 函数功能：

设置选项。

  • 函数原型：
ret_t text_selector_set_options (widget_t* widget, const char* options);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
options | const char* | 选项。

text_selector_set_range_options 函数

  • 函数功能：

设置一系列的整数选项。

  • 函数原型：
ret_t text_selector_set_range_options (widget_t* widget, int32_t start, uint32_t nr, int32_t step);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
start | int32_t | 起始值。
nr | uint32_t | 个数。
step | int32_t | 步长。

text_selector_set_range_options_ex 函数

  • 函数功能：

设置一系列的整数选项。

  • 函数原型：
ret_t text_selector_set_range_options_ex (widget_t* widget, int32_t start, uint32_t nr, int32_t step, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
start | int32_t | 起始值。
nr | uint32_t | 个数。
step | int32_t | 步长。
format | const char* | 选项的格式化。

text_selector_set_selected_index 函数

  • 函数功能：

设置第index个选项为当前选中的选项。

  • 函数原型：
ret_t text_selector_set_selected_index (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
index | uint32_t | 选项的索引。

text_selector_set_text 函数

  • 函数功能：

设置text_selector的文本。

  • 函数原型：
ret_t text_selector_set_text (widget_t* widget, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
text | const char* | 文本。

text_selector_set_value 函数

  • 函数功能：

设置text_selector的值。

  • 函数原型：
ret_t text_selector_set_value (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
value | int32_t | 值。

text_selector_set_visible_nr 函数

  • 函数功能：

设置可见的选项数。

  • 函数原型：
ret_t text_selector_set_visible_nr (widget_t* widget, uint32_t visible_nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | text_selector对象。
visible_nr | uint32_t | 选项数。

text_selector_set_yspeed_scale 函数

  • 函数功能：

设置Y轴偏移速度比例。

  • 函数原型：
ret_t text_selector_set_yspeed_scale (widget_t* widget, float_t yspeed_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
yspeed_scale | float_t | y偏移速度比例。

animating_time 属性

滚动动画播放时间。(单位毫秒)

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

ellipses 属性

是否开启缩写，开启后，当文字长度操作控件长度后，自动变为…

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

enable_value_animator 属性

是否修改值时启用动画。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

localize_options 属性

是否本地化(翻译)选项(缺省为FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

loop_options 属性

是否循环选项(缺省为FALSE)。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

mask_area_scale 属性

绘制蒙版的区域占比（范围0~1）。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

mask_easing 属性

绘制蒙版的变化趋势。

  • 类型：easing_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

options 属性

设置可选项(英文冒号(:)分隔值和文本，英文分号(;)分隔选项，如:1:red;2:green;3:blue)。 对于数值选项，也可以指定一个范围，用英文负号(-)分隔起始值、结束值和格式。 如：”1-7-%02d”表示1到7，格式为『02d』，格式为可选，缺省为『%d』。 如果数据本身中有英文冒号(:)、英文分号(;)和英文负号(-)。请用16进制转义。 * 英文冒号(:)写为\x3a * 英文冒号(;)写为\x3b * 英文冒号(-)写为\x2d

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

selected_index 属性

当前选中的选项。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

visible_nr 属性

可见的选项数量(只能是1或者3或者5，缺省为5)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

yspeed_scale 属性

y偏移速度比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


theme_change_event_t

概述

主题变化事件。

函数

函数名称 | 说明
theme_change_event_cast | 把event对象转theme_change_event_t对象。
theme_change_event_init | 初始theme change event。

属性

属性名称 | 类型 | 说明
name | const char* | 主题名称。

theme_change_event_cast 函数

  • 函数功能：

把event对象转theme_change_event_t对象。

  • 函数原型：
theme_change_event_t* theme_change_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | theme_change_event_t* | 返回event对象。
event | event_t* | event对象。

theme_change_event_init 函数

  • 函数功能：

初始theme change event。

  • 函数原型：
event_t* theme_change_event_init (theme_change_event_t* event, uint32_t type, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | 返回event对象。
event | theme_change_event_t* | event对象。
type | uint32_t | 事件类型。
name | const char* | 主题名。

name 属性

主题名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


theme_default_t

概述

窗体样式默认实现。 负责管理缺省的窗体样式数据，方便实现style_const。

函数

函数名称 | 说明
theme_default_create | 创建窗体样式对象。
theme_default_create_ex | 创建窗体样式对象。

theme_default_create 函数

  • 函数功能：

创建窗体样式对象。

  • 函数原型：
theme_t* theme_default_create (const uint8_t* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | theme_t* | 返回窗体样式对象。
data | const uint8_t* | 窗体样式数据。

theme_default_create_ex 函数

  • 函数功能：

创建窗体样式对象。

  • 函数原型：
theme_t* theme_default_create_ex (const uint8_t* data, bool_t need_free_data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | theme_t* | 返回窗体样式对象。
data | const uint8_t* | 窗体样式数据。
need_free_data | bool_t | 销毁时是否释放数据。


theme_t

概述

窗体样式。

函数

函数名称 | 说明
theme | 获取缺省的窗体样式对象。
theme_destroy | 析构并释放窗体样式对象。
theme_find_style | 查找满足条件的style。
theme_foreach | 遍历全部数据。
theme_get_style_type | 获取窗体样式的风格类型。
theme_load_from_data | 加载窗体样式对象。
theme_set | 设置缺省的窗体样式对象。
theme_set_theme_data | 设置窗体样式的数据。

theme 函数

  • 函数功能：

获取缺省的窗体样式对象。

  • 函数原型：
theme_t* theme ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | theme_t* | 返回窗体样式对象。

theme_destroy 函数

  • 函数功能：

析构并释放窗体样式对象。

  • 函数原型：
ret_t theme_destroy (theme_t* theme);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
theme | theme_t* | 窗体样式对象。

theme_find_style 函数

  • 函数功能：

查找满足条件的style。

  • 函数原型：
const uint8_t* theme_find_style (theme_t* theme, const char* widget_type, const char* name, const char* widget_state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const uint8_t* | 返回风格对象数据。
theme | theme_t* | 窗体样式对象。
widget_type | const char* | 控件的类型名。
name | const char* | style的名称。
widget_state | const char* | 控件的状态。

theme_foreach 函数

  • 函数功能：

遍历全部数据。

  • 函数原型：
ret_t theme_foreach (theme_t* theme, theme_on_data_t on_data, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
theme | theme_t* | 窗体样式对象。
on_data | theme_on_data_t | 回调函数。
ctx | void* | 回调函数的上下文。

theme_get_style_type 函数

  • 函数功能：

获取窗体样式的风格类型。

  • 函数原型：
const char* theme_get_style_type (theme_t* theme);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回风格类型。
theme | theme_t* | 窗体样式对象。

theme_load_from_data 函数

  • 函数功能：

加载窗体样式对象。

  • 函数原型：
theme_t* theme_load_from_data (const char* name, const uint8_t* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | theme_t* | 返回窗体样式对象。
name | const char* | 资源名。
data | const uint8_t* | 窗体样式数据。
size | uint32_t | 资源长度。

theme_set 函数

  • 函数功能：

设置缺省的窗体样式对象。

  • 函数原型：
ret_t theme_set (theme_t* theme);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
theme | theme_t* | 窗体样式对象。

theme_set_theme_data 函数

  • 函数功能：

设置窗体样式的数据。

  • 函数原型：
ret_t theme_set_theme_data (theme_t* theme, const uint8_t* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
theme | theme_t* | 窗体样式对象。
data | const uint8_t* | 窗体样式数据。


theme_xml_t

概述

XML格式的窗体样式。

函数

函数名称 | 说明
theme_xml_create | 创建窗体样式对象。
theme_xml_gen | 生成二进制的数据。

theme_xml_create 函数

  • 函数功能：

创建窗体样式对象。

  • 函数原型：
theme_t* theme_xml_create (const char* xml);
  • 参数说明：
参数 | 类型 | 说明
返回值 | theme_t* | 返回窗体样式对象。
xml | const char* | XML格式窗体样式数据。

theme_xml_gen 函数

  • 函数功能：

生成二进制的数据。

  • 函数原型：
uint8_t* theme_xml_gen (const char* xml, uint32_t* size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t* | 返回二进制的数据。
xml | const char* | XML格式窗体样式数据。
size | uint32_t* | 用于返回数据长度。


timer_info_t

概述

单个定时器的信息。

函数

函数名称 | 说明
timer_info_cast | 转换为timer_info对象(供脚本语言使用)。

属性

属性名称 | 类型 | 说明
ctx | void* | 定时器回调函数的上下文
duration | uint32_t | 时间间隔(单位为毫秒)。
extra_ctx | void* | 定时器回调函数的上下文
id | uint32_t | 定时器的ID
now | uint64_t | 当前时间(相对时间，单位为毫秒)。
on_destroy | tk_destroy_t | 定时器销毁时的回调函数。
on_destroy_ctx | void* | 定时器销毁时的回调函数上下文。
on_timer | timer_func_t | 定时器回调函数。
start | uint64_t | 起始时间(相对时间，单位为毫秒)。
suspend | bool_t | 定时器是否为挂起状态。

timer_info_cast 函数

  • 函数功能：

转换为timer_info对象(供脚本语言使用)。

  • 函数原型：
timer_info_t* timer_info_cast (timer_info_t* timer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | timer_info_t* | timer_info对象。
timer | timer_info_t* | timer_info对象。

ctx 属性

定时器回调函数的上下文

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

duration 属性

时间间隔(单位为毫秒)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

extra_ctx 属性

定时器回调函数的上下文

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

id 属性

定时器的ID

为TK_INVALID_ID时表示无效定时器。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

now 属性

当前时间(相对时间，单位为毫秒)。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

on_destroy 属性

定时器销毁时的回调函数。

  • 类型：tk_destroy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

on_destroy_ctx 属性

定时器销毁时的回调函数上下文。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

on_timer 属性

定时器回调函数。

  • 类型：timer_func_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

start 属性

起始时间(相对时间，单位为毫秒)。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

suspend 属性

定时器是否为挂起状态。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


timer_manager_t

概述

定时器管理器。

函数

函数名称 | 说明
timer_manager | 获取缺省的定时器管理器。
timer_manager_add | 添加定时器。
timer_manager_add_with_id | 添加定时器。（可以指定 timer_id ，如果发现 timer_id 冲突则添加失败）。
timer_manager_add_with_type | 添加对应类型的定时器。
timer_manager_add_with_type_and_id | 添加对应类型和id的定时器。
timer_manager_all_remove_by_ctx | 根据上下文删除所有对应的定时器。
timer_manager_all_remove_by_ctx_and_type | 移除对应类型和上下文的所有定时器。
timer_manager_append | 追加定时器。
timer_manager_count | 返回定时器的个数。
timer_manager_create | 创建定时器管理器。
timer_manager_deinit | 析构定时器管理器。
timer_manager_destroy | 析构并释放定时器管理器。
timer_manager_dispatch | 检查全部定时器的函数，如果时间到期，调用相应的timer函数。
timer_manager_find | 查找指定ID的定时器。
timer_manager_get_next_timer_id | 获取下一个可用的 timer_id。
timer_manager_init | 初始化定时器管理器。
timer_manager_next_time | 返回最近的定时器到期时间。
timer_manager_remove | 根据id删除定时器。
timer_manager_reset | 重置定时器。
timer_manager_set | 设置缺省的定时器管理器。

timer_manager 函数

  • 函数功能：

获取缺省的定时器管理器。

  • 函数原型：
timer_manager_t* timer_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | timer_manager_t* | 返回定时器管理器对象。

timer_manager_add 函数

  • 函数功能：

添加定时器。

  • 函数原型：
uint32_t timer_manager_add (timer_manager_t* timer_manager, timer_func_t on_timer, void* ctx, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的ID，TK_INVALID_ID表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。
on_timer | timer_func_t | timer回调函数。
ctx | void* | timer回调函数的上下文。
duration | uint32_t | 时间。

timer_manager_add_with_id 函数

  • 函数功能：

添加定时器。（可以指定 timer_id ，如果发现 timer_id 冲突则添加失败）。

  • 函数原型：
uint32_t timer_manager_add_with_id (timer_manager_t* timer_manager, uint32_t id, timer_func_t on_timer, void* ctx, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的ID，TK_INVALID_ID表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。
id | uint32_t | timer_id。
on_timer | timer_func_t | timer回调函数。
ctx | void* | timer回调函数的上下文。
duration | uint32_t | 时间。

timer_manager_add_with_type 函数

  • 函数功能：

添加对应类型的定时器。

  • 函数原型：
uint32_t timer_manager_add_with_type (timer_manager_t* timer_manager, timer_func_t on_timer, void* ctx, uint32_t duration, uint16_t timer_info_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回定时器id。
timer_manager | timer_manager_t* | 定时器管理器对象。
on_timer | timer_func_t | 定时器回调函数。
ctx | void* | 上下文。
duration | uint32_t | 时间。
timer_info_type | uint16_t | timer_info_type。

timer_manager_add_with_type_and_id 函数

  • 函数功能：

添加对应类型和id的定时器。

  • 函数原型：
uint32_t timer_manager_add_with_type_and_id (timer_manager_t* timer_manager, uint32_t id, timer_func_t on_timer, void* ctx, uint32_t duration, uint16_t timer_info_type, bool_t is_check_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回定时器id。
timer_manager | timer_manager_t* | 定时器管理器对象。
id | uint32_t | id。
on_timer | timer_func_t | 定时器回调函数。
ctx | void* | 上下文。
duration | uint32_t | 时间。
timer_info_type | uint16_t | timer_info_type。
is_check_id | bool_t | 是否校验id。

timer_manager_all_remove_by_ctx 函数

  • 函数功能：

根据上下文删除所有对应的定时器。

  • 函数原型：
ret_t timer_manager_all_remove_by_ctx (timer_manager_t* timer_manager, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。
ctx | void* | timer回调函数的上下文。

timer_manager_all_remove_by_ctx_and_type 函数

  • 函数功能：

移除对应类型和上下文的所有定时器。

  • 函数原型：
ret_t timer_manager_all_remove_by_ctx_and_type (timer_manager_t* timer_manager, uint16_t type, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。
type | uint16_t | 类型。
ctx | void* | 上下文。

timer_manager_append 函数

  • 函数功能：

追加定时器。

  • 函数原型：
ret_t timer_manager_append (timer_manager_t* timer_manager, timer_info_t* timer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。。
timer | timer_info_t* | timer对象。

timer_manager_count 函数

  • 函数功能：

返回定时器的个数。

  • 函数原型：
uint32_t timer_manager_count (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的个数。
timer_manager | timer_manager_t* | 定时器管理器对象。

timer_manager_create 函数

  • 函数功能：

创建定时器管理器。

  • 函数原型：
timer_manager_t* timer_manager_create (timer_get_time_t get_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | timer_manager_t* | 返回定时器管理器对象。
get_time | timer_get_time_t | 获取当前时间的函数。

timer_manager_deinit 函数

  • 函数功能：

析构定时器管理器。

  • 函数原型：
ret_t timer_manager_deinit (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。

timer_manager_destroy 函数

  • 函数功能：

析构并释放定时器管理器。

  • 函数原型：
ret_t timer_manager_destroy (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。

timer_manager_dispatch 函数

  • 函数功能：

检查全部定时器的函数，如果时间到期，调用相应的timer函数。

  • 函数原型：
ret_t timer_manager_dispatch (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。

timer_manager_find 函数

  • 函数功能：

查找指定ID的定时器。

  • 函数原型：
const timer_info_t* timer_manager_find (timer_manager_t* timer_manager, uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const timer_info_t* | 返回timer的信息。
timer_manager | timer_manager_t* | 定时器管理器对象。
timer_id | uint32_t | timer_id

timer_manager_get_next_timer_id 函数

  • 函数功能：

获取下一个可用的 timer_id。

  • 函数原型：
uint32_t timer_manager_get_next_timer_id (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的ID，TK_INVALID_ID表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。

timer_manager_init 函数

  • 函数功能：

初始化定时器管理器。

  • 函数原型：
timer_manager_t* timer_manager_init (timer_manager_t* timer_manager, timer_get_time_t get_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | timer_manager_t* | 返回定时器管理器对象。
timer_manager | timer_manager_t* | 定时器管理器对象。
get_time | timer_get_time_t | 获取当前时间的函数。

timer_manager_next_time 函数

  • 函数功能：

返回最近的定时器到期时间。

  • 函数原型：
uint64_t timer_manager_next_time (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回最近的timer到期时间。
timer_manager | timer_manager_t* | 定时器管理器对象。

timer_manager_remove 函数

  • 函数功能：

根据id删除定时器。

  • 函数原型：
ret_t timer_manager_remove (timer_manager_t* timer_manager, uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。
timer_id | uint32_t | timer_id。

timer_manager_reset 函数

  • 函数功能：

重置定时器。

  • 函数原型：
ret_t timer_manager_reset (timer_manager_t* timer_manager, uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。
timer_id | uint32_t | timer_id。

timer_manager_set 函数

  • 函数功能：

设置缺省的定时器管理器。

  • 函数原型：
ret_t timer_manager_set (timer_manager_t* timer_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_manager | timer_manager_t* | 定时器管理器对象。


timer_t

概述

定时器系统。

本定时器精度较低，最高精度为1000/FPS，如果需要高精度的定时器，请用OS提供的定时器。

示例：

static ret_t my_on_timer(const timer_info_t* info) {
widget_t* widget = WIDGET(info->ctx);
...
return RET_REPEAT;
}

...

timer_add(my_on_timer, widget, 1000);

> 在非GUI线程请用timer_queue。

函数

函数名称 | 说明
timer_add | 增加一个timer。
timer_count | 返回timer的个数。
timer_find | 查找指定ID的timer。
timer_modify | 修改指定的timer的duration，修改之后定时器重新开始计时。
timer_next_time | 返回最近的timer到期时间。
timer_queue | 用于非GUI线程增加一个timer，本函数向主循环的事件队列中发送一个增加timer的请求。
timer_queue_ex | 用于非GUI线程增加一个timer，本函数向主循环的事件队列中发送一个增加timer的请求。
timer_remove | 删除指定的timer。
timer_remove_all_by_ctx | 根据上下文删除所有对应的timer。
timer_reset | 重置指定的timer，重置之后定时器重新开始计时。
timer_resume | 唤醒挂起指定的timer，并且重置定时器重新开始计时
timer_set_on_destroy | 设置一个回调函数，在timer被销毁时调用(方便脚本语言去释放回调函数)。
timer_suspend | 挂起指定的timer，一般用于不断循环触发的计时器。

timer_add 函数

  • 函数功能：

增加一个timer。

  • 函数原型：
uint32_t timer_add (timer_func_t on_timer, void* ctx, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的ID，TK_INVALID_ID表示失败。
on_timer | timer_func_t | timer回调函数。
ctx | void* | timer回调函数的上下文。
duration | uint32_t | 时间。

timer_count 函数

  • 函数功能：

返回timer的个数。

  • 函数原型：
uint32_t timer_count ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的个数。

timer_find 函数

  • 函数功能：

查找指定ID的timer。

  • 函数原型：
const timer_info_t* timer_find (uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const timer_info_t* | 返回timer的信息。
timer_id | uint32_t | timerID。

timer_modify 函数

  • 函数功能：

修改指定的timer的duration，修改之后定时器重新开始计时。

  • 函数原型：
ret_t timer_modify (uint32_t timer_id, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_id | uint32_t | timerID。
duration | uint32_t | 新的时间。

timer_next_time 函数

  • 函数功能：

返回最近的timer到期时间。

  • 函数原型：
uint32_t timer_next_time ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回最近的timer到期时间。

timer_queue 函数

  • 函数功能：

用于非GUI线程增加一个timer，本函数向主循环的事件队列中发送一个增加timer的请求。

  • 函数原型：
ret_t timer_queue (timer_func_t on_timer, void* ctx, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
on_timer | timer_func_t | timer回调函数，回调函数返回RET_REPEAT，则下次继续执行，否则自动移出。
ctx | void* | timer回调函数的上下文。
duration | uint32_t | 时间。

timer_queue_ex 函数

  • 函数功能：

用于非GUI线程增加一个timer，本函数向主循环的事件队列中发送一个增加timer的请求。

  • 函数原型：
ret_t timer_queue_ex (timer_func_t on_timer, void* ctx, uint32_t duration, tk_destroy_t on_destroy, void* on_destroy_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
on_timer | timer_func_t | timer回调函数，回调函数返回RET_REPEAT，则下次继续执行，否则自动移出。
ctx | void* | timer回调函数的上下文。
duration | uint32_t | 时间。
on_destroy | tk_destroy_t | 回调函数。
on_destroy_ctx | void* | 回调函数上下文。

timer_remove 函数

  • 函数功能：

删除指定的timer。

  • 函数原型：
ret_t timer_remove (uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_id | uint32_t | timerID。

timer_remove_all_by_ctx 函数

  • 函数功能：

根据上下文删除所有对应的timer。

  • 函数原型：
ret_t timer_remove_all_by_ctx (void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ctx | void* | timer回调函数的上下文。

timer_reset 函数

  • 函数功能：

重置指定的timer，重置之后定时器重新开始计时。

  • 函数原型：
ret_t timer_reset (uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_id | uint32_t | timerID。

timer_resume 函数

  • 函数功能：

唤醒挂起指定的timer，并且重置定时器重新开始计时

  • 函数原型：
ret_t timer_resume (uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_id | uint32_t | timerID。

timer_set_on_destroy 函数

  • 函数功能：

设置一个回调函数，在timer被销毁时调用(方便脚本语言去释放回调函数)。

  • 函数原型：
ret_t timer_set_on_destroy (uint32_t timer_id, tk_destroy_t on_destroy, void* on_destroy_ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_id | uint32_t | timerID。
on_destroy | tk_destroy_t | 回调函数。
on_destroy_ctx | void* | 回调函数上下文。

timer_suspend 函数

  • 函数功能：

挂起指定的timer，一般用于不断循环触发的计时器。

  • 函数原型：
ret_t timer_suspend (uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
timer_id | uint32_t | timerID。


timer_widget_t

概述

定时器。

主要目的是方便以拖拽的方式创建定时器，并用AWBlock编写简单的事件处理程序。 在xml中使用”timer”标签创建控件。如：

<!-- ui -->
<timer x="c" y="50" w="100" h="100" duration="1000"/>

可用通过style来设置控件的显示风格，如字体的大小和颜色等等。如：

本控件默认不可见，无需指定style。

<!-- style -->
<timer>
<style name="default" font_size="32">
<normal text_color="black" />
</style>
</timer>

函数

函数名称 | 说明
timer_widget_cast | 转换为timer_widget对象(供脚本语言使用)。
timer_widget_create | 创建timer_widget对象
timer_widget_get_widget_vtable | 获取 timer_widget 虚表。
timer_widget_set_duration | 设置 时长(ms)。

属性

属性名称 | 类型 | 说明
duration | uint32_t | 时长(ms)。

事件

事件名称 | 类型 | 说明
EVT_TIMER | event_t | 定时器事件。

timer_widget_cast 函数

  • 函数功能：

转换为timer_widget对象(供脚本语言使用)。

  • 函数原型：
widget_t* timer_widget_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | timer_widget对象。
widget | widget_t* | timer_widget对象。

timer_widget_create 函数

  • 函数功能：

创建timer_widget对象

  • 函数原型：
widget_t* timer_widget_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | timer_widget对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

timer_widget_get_widget_vtable 函数

  • 函数功能：

获取 timer_widget 虚表。

  • 函数原型：
const widget_vtable_t* timer_widget_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 timer_widget 虚表。

timer_widget_set_duration 函数

  • 函数功能：

设置 时长(ms)。

  • 函数原型：
ret_t timer_widget_set_duration (widget_t* widget, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
duration | uint32_t | 时长(ms)。

duration 属性

时长(ms)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


time_clock_t

概述

模拟时钟控件。

time_clock_t是widget_t的子类控件，widget_t的函数均适用于time_clock_t控件。

在xml中使用”time_clock”标签创建模拟时钟控件。如：

<time_clock x="c" y="m" w="300" h="300" bg_image="clock_bg" image="clock"
hour_image="clock_hour" minute_image="clock_minute" second_image="clock_second"/>

更多用法请参考：time_clock.xml

在c代码中使用函数time_clock_create创建模拟时钟控件。如：

widget_t* tc = time_clock_create(win, 10, 10, 240, 240);
time_clock_set_image(tc, "clock");
time_clock_set_bg_image(tc, "clock_bg");
time_clock_set_hour_image(tc, "clock_hour");
time_clock_set_minute_image(tc, "clock_minute");
time_clock_set_second_image(tc, "clock_second");

完整示例请参考：time_clock demo

time_clock一般不需要设置style。

函数

函数名称 | 说明
time_clock_cast | 转换为time_clock对象(供脚本语言使用)。
time_clock_create | 创建time_clock对象
time_clock_get_widget_vtable | 获取 time_clock 虚表。
time_clock_set_bg_image | 设置背景图片。
time_clock_set_hour | 设置小时的值。
time_clock_set_hour_anchor | 设置小时指针的旋转锚点。
time_clock_set_hour_image | 设置小时的图片。
time_clock_set_image | 设置中心图片。
time_clock_set_minute | 设置分钟的值。
time_clock_set_minute_anchor | 设置分钟指针的旋转锚点。
time_clock_set_minute_image | 设置分钟的图片。
time_clock_set_second | 设置秒的值。
time_clock_set_second_anchor | 设置秒钟指针的旋转锚点。
time_clock_set_second_image | 设置秒的图片。

属性

属性名称 | 类型 | 说明
bg_image | char* | 背景图片。
hour | int32_t | 小时。
hour_anchor_x | char* | 时针图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
hour_anchor_y | char* | 时针图片旋转锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
hour_image | char* | 时针图片。
image | char* | 中心图片。
minute | int32_t | 分钟。
minute_anchor_x | char* | 分针图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
minute_anchor_y | char* | 分针图片旋转锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
minute_image | char* | 分针图片。
second | int32_t | 秒。
second_anchor_x | char* | 秒针图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
second_anchor_y | char* | 秒针图片旋转锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)
second_image | char* | 秒针图片。

time_clock_cast 函数

  • 函数功能：

转换为time_clock对象(供脚本语言使用)。

  • 函数原型：
widget_t* time_clock_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | time_clock对象。
widget | widget_t* | time_clock对象。

time_clock_create 函数

  • 函数功能：

创建time_clock对象

  • 函数原型：
widget_t* time_clock_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

time_clock_get_widget_vtable 函数

  • 函数功能：

获取 time_clock 虚表。

  • 函数原型：
const widget_vtable_t* time_clock_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 time_clock 虚表。

time_clock_set_bg_image 函数

  • 函数功能：

设置背景图片。

  • 函数原型：
ret_t time_clock_set_bg_image (widget_t* widget, const char* bg_image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
bg_image | const char* | 背景图片。

time_clock_set_hour 函数

  • 函数功能：

设置小时的值。

  • 函数原型：
ret_t time_clock_set_hour (widget_t* widget, int32_t hour);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
hour | int32_t | 小时的值。

time_clock_set_hour_anchor 函数

  • 函数功能：

设置小时指针的旋转锚点。 后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f

  • 函数原型：
ret_t time_clock_set_hour_anchor (widget_t* widget, const char* anchor_x, const char* anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
anchor_x | const char* | 指针的锚点坐标x。
anchor_y | const char* | 指针的锚点坐标y。

time_clock_set_hour_image 函数

  • 函数功能：

设置小时的图片。

  • 函数原型：
ret_t time_clock_set_hour_image (widget_t* widget, const char* hour);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
hour | const char* | 小时的图片。

time_clock_set_image 函数

  • 函数功能：

设置中心图片。

  • 函数原型：
ret_t time_clock_set_image (widget_t* widget, const char* image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
image | const char* | 图片。

time_clock_set_minute 函数

  • 函数功能：

设置分钟的值。

  • 函数原型：
ret_t time_clock_set_minute (widget_t* widget, int32_t minute);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
minute | int32_t | 分钟的值。

time_clock_set_minute_anchor 函数

  • 函数功能：

设置分钟指针的旋转锚点。 后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f

  • 函数原型：
ret_t time_clock_set_minute_anchor (widget_t* widget, const char* anchor_x, const char* anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
anchor_x | const char* | 指针的锚点坐标x。
anchor_y | const char* | 指针的锚点坐标y。

time_clock_set_minute_image 函数

  • 函数功能：

设置分钟的图片。

  • 函数原型：
ret_t time_clock_set_minute_image (widget_t* widget, const char* minute_image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
minute_image | const char* | 分钟的图片。

time_clock_set_second 函数

  • 函数功能：

设置秒的值。

  • 函数原型：
ret_t time_clock_set_second (widget_t* widget, int32_t second);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
second | int32_t | 秒的值。

time_clock_set_second_anchor 函数

  • 函数功能：

设置秒钟指针的旋转锚点。 后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f

  • 函数原型：
ret_t time_clock_set_second_anchor (widget_t* widget, const char* anchor_x, const char* anchor_y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
anchor_x | const char* | 指针的锚点坐标x。
anchor_y | const char* | 指针的锚点坐标y。

time_clock_set_second_image 函数

  • 函数功能：

设置秒的图片。

  • 函数原型：
ret_t time_clock_set_second_image (widget_t* widget, const char* second_image);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
second_image | const char* | 秒的图片。

bg_image 属性

背景图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

hour 属性

小时。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

hour_anchor_x 属性

时针图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

hour_anchor_y 属性

时针图片旋转锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

hour_image 属性

时针图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

image 属性

中心图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

minute 属性

分钟。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

minute_anchor_x 属性

分针图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

minute_anchor_y 属性

分针图片旋转锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

minute_image 属性

分针图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

second 属性

秒。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

second_anchor_x 属性

秒针图片旋转锚点x坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

second_anchor_y 属性

秒针图片旋转锚点y坐标。(后面加上px为像素点，不加px为相对百分比坐标0.0f到1.0f)

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

second_image 属性

秒针图片。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


time_now_t

概述

获取当前时间的函数。 这里的当前时间是相对的，在嵌入式系统一般相对于开机时间。 它本身并没有任何意义，一般用来计算时间间隔，如实现定时器和动画等等。

函数

函数名称 | 说明
time_now_ms | 获取当前时间(毫秒)。
time_now_s | 获取当前时间(秒)。
time_now_us | 获取当前时间(微秒)。

time_now_ms 函数

  • 函数功能：

获取当前时间(毫秒)。

备注: 时间本身并不代表任何时间系，一般用来计算时间间隔。

  • 函数原型：
uint64_t time_now_ms ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回当前时间(毫秒)。

time_now_s 函数

  • 函数功能：

获取当前时间(秒)。

备注: 时间本身并不代表任何时间系，一般用来计算时间间隔。

  • 函数原型：
uint64_t time_now_s ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回当前时间(秒)。

time_now_us 函数

  • 函数功能：

获取当前时间(微秒)。

备注: 时间本身并不代表任何时间系，一般用来计算时间间隔。

  • 函数原型：
uint64_t time_now_us ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回当前时间(微秒)。


tk_cond_t

概述

条件变量。

函数

函数名称 | 说明
tk_cond_create | 创建cond。
tk_cond_destroy | 销毁cond对象。
tk_cond_signal | 唤醒。
tk_cond_wait | 等待。
tk_cond_wait_timeout | 等待指定时间。

tk_cond_create 函数

  • 函数功能：

创建cond。

  • 函数原型：
tk_cond_t* tk_cond_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_cond_t* | cond对象。

tk_cond_destroy 函数

  • 函数功能：

销毁cond对象。

  • 函数原型：
ret_t tk_cond_destroy (tk_cond_t* cond);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond | tk_cond_t* | cond对象。

tk_cond_signal 函数

  • 函数功能：

唤醒。

  • 函数原型：
ret_t tk_cond_signal (tk_cond_t* cond);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond | tk_cond_t* | cond对象。

tk_cond_wait 函数

  • 函数功能：

等待。

  • 函数原型：
ret_t tk_cond_wait (tk_cond_t* cond, tk_mutex_t* mutex);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond | tk_cond_t* | cond对象。
mutex | tk_mutex_t* | mutex对象。

tk_cond_wait_timeout 函数

  • 函数功能：

等待指定时间。

  • 函数原型：
ret_t tk_cond_wait_timeout (tk_cond_t* cond, tk_mutex_t* mutex, uint32_t ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond | tk_cond_t* | cond对象。
mutex | tk_mutex_t* | mutex对象。
ms | uint32_t | 最长等待时间。


tk_cond_var_t

概述

简化版的条件变量。

函数

函数名称 | 说明
tk_cond_var_awake | 唤醒。
tk_cond_var_create | 创建cond_var。
tk_cond_var_destroy | 销毁cond_var对象。
tk_cond_var_wait | 等待。

tk_cond_var_awake 函数

  • 函数功能：

唤醒。

  • 函数原型：
ret_t tk_cond_var_awake (tk_cond_var_t* cond_var);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond_var | tk_cond_var_t* | cond_var对象。

tk_cond_var_create 函数

  • 函数功能：

创建cond_var。

  • 函数原型：
tk_cond_var_t* tk_cond_var_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_cond_var_t* | cond_var对象。

tk_cond_var_destroy 函数

  • 函数功能：

销毁cond_var对象。

  • 函数原型：
ret_t tk_cond_var_destroy (tk_cond_var_t* cond_var);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond_var | tk_cond_var_t* | cond_var对象。

tk_cond_var_wait 函数

  • 函数功能：

等待。

  • 函数原型：
ret_t tk_cond_var_wait (tk_cond_var_t* cond_var, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
cond_var | tk_cond_var_t* | cond_var对象。
timeout_ms | uint32_t | 最长等待时间。


tk_dl_t

概述

动态链接库对象。

函数

函数名称 | 说明
tk_dl_close | 关闭dl对象。
tk_dl_error | 获取最后的错误信息。
tk_dl_open | 打开动态链接库。
tk_dl_sym | 获取指定名称函数的地址。

tk_dl_close 函数

  • 函数功能：

关闭dl对象。

  • 函数原型：
ret_t tk_dl_close (tk_dl_t* dl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dl | tk_dl_t* | dl对象。

tk_dl_error 函数

  • 函数功能：

获取最后的错误信息。

  • 函数原型：
const char* tk_dl_error ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回error message.

tk_dl_open 函数

  • 函数功能：

打开动态链接库。

  • 函数原型：
tk_dl_t* tk_dl_open (const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_dl_t* | 动态链接库对象。
filename | const char* | 文件名。

tk_dl_sym 函数

  • 函数功能：

获取指定名称函数的地址。

  • 函数原型：
void* tk_dl_sym (tk_dl_t* dl, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回函数的地址。
dl | tk_dl_t* | dl对象。
name | const char* | 函数名。


tk_ext_widgets_t

概述

函数

函数名称 | 说明
tk_ext_widgets_init | 初始化AWTK扩展控件。

tk_ext_widgets_init 函数

  • 函数功能：

初始化AWTK扩展控件。

  • 函数原型：
ret_t tk_ext_widgets_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。


tk_iostream_mbedtls_t

概述

基于MBEDTLS实现的输入输出流。

函数

函数名称 | 说明
tk_iostream_mbedtls_create | 创建iostream对象。

tk_iostream_mbedtls_create 函数

  • 函数功能：

创建iostream对象。

  • 函数原型：
tk_iostream_t* tk_iostream_mbedtls_create (mbedtls_conn_t* conn);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
conn | mbedtls_conn_t* | ssl连接。


tk_iostream_mem_t

概述

基于内存实现的输入输出流。

函数

函数名称 | 说明
tk_iostream_mem_create | 创建iostream对象。

tk_iostream_mem_create 函数

  • 函数功能：

创建iostream对象。

  • 函数原型：
tk_iostream_t* tk_iostream_mem_create (void* buff_in, uint32_t size_in, void* buff_out, uint32_t size_out, bool_t own_the_buff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
buff_in | void* | 输入流缓冲区。
size_in | uint32_t | 输入流缓冲区大小。
buff_out | void* | 输入流缓冲区。
size_out | uint32_t | 输入流缓冲区大小。
own_the_buff | bool_t | 是否让istream对象拥有buff。


tk_iostream_noisy_t

概述

在输出流中注入错误，方便进行可靠性测试。

函数

函数名称 | 说明
tk_iostream_noisy_create | 创建iostream对象。

tk_iostream_noisy_create 函数

  • 函数功能：

创建iostream对象。

本函数自动增加real_iostream的引用计数。

  • 函数原型：
tk_iostream_t* tk_iostream_noisy_create (tk_iostream_t* real_iostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
real_iostream | tk_iostream_t* | 底层的iostream。


tk_iostream_process_t

概述

基于子程序实现的输入流。 备注：如果需要在 Windows 平台运行，请在应用程序初始化时，调用 tk_socket_init 函数初始化 socket。

函数

函数名称 | 说明
tk_iostream_process_create | 创建iostream对象。
tk_iostream_process_start | 启动子进程流。

属性

属性名称 | 类型 | 说明
argc | uint32_t | 参数列表长度。
args | const char** | 参数列表。
file_path | char* | 子进程路径。

tk_iostream_process_create 函数

  • 函数功能：

创建iostream对象。 备注：如果需要在 Windows 平台运行，请在应用程序初始化时，调用 tk_socket_init 函数初始化 socket。

  • 函数原型：
tk_iostream_t* tk_iostream_process_create (const char* file_path, const char** args, uint32_t argc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
file_path | const char* | 子进程程序路径。(如果为空的话，使用命令行来执行参数)
args | const char** | 子进程参数。
argc | uint32_t | 子进程参数长度。

tk_iostream_process_start 函数

  • 函数功能：

启动子进程流。

  • 函数原型：
ret_t tk_iostream_process_start (tk_iostream_t* iostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
iostream | tk_iostream_t* | 子程序对象。

argc 属性

参数列表长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

args 属性

参数列表。

  • 类型：const char**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

file_path 属性

子进程路径。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


tk_iostream_serial_t

概述

基于串口实现的输入输出流。 备注：如果需要在 Windows 平台运行，请在应用程序初始化时，调用 tk_socket_init 函数初始化 socket。

函数

函数名称 | 说明
tk_iostream_serial_config | 配置串口。
tk_iostream_serial_create | 创建iostream对象。
tk_iostream_serial_wait_for_data | 等待串口数据。

tk_iostream_serial_config 函数

  • 函数功能：

配置串口。 备注：如果需要在 Windows 平台运行，请在应用程序初始化时，调用 tk_socket_init 函数初始化 socket。

  • 函数原型：
ret_t tk_iostream_serial_config (tk_iostream_t* iostream, int32_t baudrate, bytesize_t bytesize, parity_t parity, stopbits_t stopbits, flowcontrol_t flowcontrol);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
iostream | tk_iostream_t* | 串口对象。
baudrate | int32_t | 波特率。
bytesize | bytesize_t | 字节位数。
parity | parity_t | 奇偶校验。
stopbits | stopbits_t | 停止位。
flowcontrol | flowcontrol_t | 流控。

tk_iostream_serial_create 函数

  • 函数功能：

创建iostream对象。 缺省配置: baudrate=115200 bytesize=8 stopbits=1 flowcontrol=0 parity=0

  • 函数原型：
tk_iostream_t* tk_iostream_serial_create (const char* port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
port | const char* | port name。

tk_iostream_serial_wait_for_data 函数

  • 函数功能：

等待串口数据。

  • 函数原型：
ret_t tk_iostream_serial_wait_for_data (tk_iostream_t* iostream, uint32_t timeout);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
iostream | tk_iostream_t* | 串口对象。
timeout | uint32_t | 等待时间(ms)。


tk_iostream_shdlc_t

概述

基于简化版的HDLC协议实现可靠的iostream。

一般用于串口通信。

函数

函数名称 | 说明
tk_iostream_shdlc_create | 创建iostream对象。

tk_iostream_shdlc_create 函数

  • 函数功能：

创建iostream对象。

本函数自动增加real_iostream的引用计数。

  • 函数原型：
tk_iostream_t* tk_iostream_shdlc_create (tk_iostream_t* real_iostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
real_iostream | tk_iostream_t* | 底层的iostream。


tk_iostream_stats_t

概述

带统计功能的输入输出流。

函数

函数名称 | 说明
tk_iostream_stats_create | 创建iostream对象。

tk_iostream_stats_create 函数

  • 函数功能：

创建iostream对象。

  • 函数原型：
tk_iostream_t* tk_iostream_stats_create (tk_iostream_t* impl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
impl | tk_iostream_t* | 被统计的流对象。


tk_iostream_t

概述

输入输出流的接口。

函数

函数名称 | 说明
tk_iostream_get_istream | 获取输入流对象。
tk_iostream_get_ostream | 获取输出流对象。
tk_iostream_read | 读取数据。
tk_iostream_read_len | 读取指定长度的数据。
tk_iostream_write | 写入数据。
tk_iostream_write_len | 写入指定长度的数据。

tk_iostream_get_istream 函数

  • 函数功能：

获取输入流对象。

  • 函数原型：
tk_istream_t* tk_iostream_get_istream (tk_iostream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回输入流对象。
stream | tk_iostream_t* | iostream对象。

tk_iostream_get_ostream 函数

  • 函数功能：

获取输出流对象。

  • 函数原型：
tk_ostream_t* tk_iostream_get_ostream (tk_iostream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回输出流对象。
stream | tk_iostream_t* | iostream对象。

tk_iostream_read 函数

  • 函数功能：

读取数据。

  • 函数原型：
int32_t tk_iostream_read (tk_iostream_t* stream, void* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示读取失败，否则返回实际读取数据的长度。
stream | tk_iostream_t* | iostream对象。
buff | void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。

tk_iostream_read_len 函数

  • 函数功能：

读取指定长度的数据。

  • 函数原型：
int32_t tk_iostream_read_len (tk_iostream_t* stream, void* buff, uint32_t max_size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示读取失败，否则返回实际读取数据的长度。
stream | tk_iostream_t* | iostream对象。
buff | void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。
timeout_ms | uint32_t | timeout.

tk_iostream_write 函数

  • 函数功能：

写入数据。

  • 函数原型：
int32_t tk_iostream_write (tk_iostream_t* stream, const void* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示写入失败，否则返回实际写入数据的长度。
stream | tk_iostream_t* | iostream对象。
buff | const void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。

tk_iostream_write_len 函数

  • 函数功能：

写入指定长度的数据。

  • 函数原型：
int32_t tk_iostream_write_len (tk_iostream_t* stream, const void* buff, uint32_t max_size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示写入失败，否则返回实际写入数据的长度。
stream | tk_iostream_t* | iostream对象。
buff | const void* | 数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。
timeout_ms | uint32_t | timeout.


tk_iostream_tcp_t

概述

基于TCP实现的输入输出流。

函数

函数名称 | 说明
tk_iostream_tcp_create | 创建iostream对象。
tk_iostream_tcp_create_client | 创建iostream对象(客户端)。

tk_iostream_tcp_create 函数

  • 函数功能：

创建iostream对象。

  • 函数原型：
tk_iostream_t* tk_iostream_tcp_create (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
sock | int | socket。

tk_iostream_tcp_create_client 函数

  • 函数功能：

创建iostream对象(客户端)。

  • 函数原型：
tk_iostream_t* tk_iostream_tcp_create_client (const char* host, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
host | const char* | 服务器地址。
port | int | 服务器端口。


tk_iostream_udp_t

概述

基于UDP实现的输入输出流。

函数

函数名称 | 说明
tk_iostream_udp_create | 创建iostream对象(客户端)。
tk_iostream_udp_create_client | 创建iostream对象(客户端)。
tk_iostream_udp_create_client_ex | 创建iostream对象(客户端)。

tk_iostream_udp_create 函数

  • 函数功能：

创建iostream对象(客户端)。

  • 函数原型：
tk_iostream_t* tk_iostream_udp_create (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
sock | int | socket

tk_iostream_udp_create_client 函数

  • 函数功能：

创建iostream对象(客户端)。

  • 函数原型：
tk_iostream_t* tk_iostream_udp_create_client (const char* host, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
host | const char* | 服务器地址。
port | int | 服务器端口。

tk_iostream_udp_create_client_ex 函数

  • 函数功能：

创建iostream对象(客户端)。

  • 函数原型：
tk_iostream_t* tk_iostream_udp_create_client_ex (const char* host, int port, const char* local_ip, int local_port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
host | const char* | 服务器地址。
port | int | 服务器端口。
local_ip | const char* | 本地IP地址(为NULL时自动绑定)。
local_port | int | 本地端口。


tk_istream_buffered_t

概述

缓冲输入流。

如果调用者每次只读取少量数据，可以使用本类对底层istream进行装饰，以提高读取效率。

函数

函数名称 | 说明
tk_istream_buffered_create | 创建istream对象。

tk_istream_buffered_create 函数

  • 函数功能：

创建istream对象。

本函数自动增加real_ostream的引用计数。

  • 函数原型：
tk_istream_t* tk_istream_buffered_create (tk_istream_t* real_istream, uint32_t buffer_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
real_istream | tk_istream_t* | 实际的istream。
buffer_size | uint32_t | 缓冲区的大小。


tk_istream_file_t

概述

基于文件实现的输入流。

函数

函数名称 | 说明
tk_istream_file_create | 创建istream对象。
tk_istream_file_create_ex | 创建istream对象。

tk_istream_file_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_file_create (const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
filename | const char* | 文件名。

tk_istream_file_create_ex 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_file_create_ex (const char* filename, const char* mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
filename | const char* | 文件名。
mode | const char* | 模式。


tk_istream_mbedtls_t

概述

基于MBEDTLS实现的输入流。

函数

函数名称 | 说明
tk_istream_mbedtls_create | 创建istream对象。

tk_istream_mbedtls_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_mbedtls_create (mbedtls_ssl_context* ssl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
ssl | mbedtls_ssl_context* | ssl对象。


tk_istream_mem_t

概述

基于内存实现的输入流。

函数

函数名称 | 说明
tk_istream_mem_create | 创建istream对象。

tk_istream_mem_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_mem_create (uint8_t* buff, uint32_t size, uint32_t packet_size, bool_t own_the_buff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
buff | uint8_t* | 返回数据的缓冲区。
size | uint32_t | 缓冲区的大小。
packet_size | uint32_t | 缺省一次读取的数据的长度。
own_the_buff | bool_t | 是否让istream对象拥有buff。


tk_istream_process_t

概述

基于子程序实现的输入流。

函数

函数名称 | 说明
tk_istream_process_create | 创建istream对象。

tk_istream_process_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_process_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。


tk_istream_serial_t

概述

基于串口实现的输入流。

函数

函数名称 | 说明
tk_istream_serial_create | 创建istream对象。

tk_istream_serial_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_serial_create (serial_handle_t fd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
fd | serial_handle_t | fd。


tk_istream_shdlc_t

概述

reliable istream base on simple HDLC

函数

函数名称 | 说明
tk_istream_shdlc_create | 创建istream对象。

属性

属性名称 | 类型 | 说明
retry_times | uint8_t | 失败重传次数。
timeout | uint32_t | 读写超时时间(ms)

tk_istream_shdlc_create 函数

  • 函数功能：

创建istream对象。

只能由iostream_shdlc调用。

  • 函数原型：
tk_istream_t* tk_istream_shdlc_create (tk_iostream_shdlc_t* iostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
iostream | tk_iostream_shdlc_t* | iostream对象。

retry_times 属性

失败重传次数。

  • 类型：uint8_t

timeout 属性

读写超时时间(ms)

  • 类型：uint32_t


tk_istream_stats_t

概述

带统计功能的输入流。

函数

函数名称 | 说明
tk_istream_stats_create | 创建istream对象。

tk_istream_stats_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_stats_create (tk_istream_t* impl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
impl | tk_istream_t* | 被统计的输入流对象


tk_istream_t

概述

输入流的接口。

函数

函数名称 | 说明
tk_istream_eos | 判断数据是否读完。
tk_istream_flush | 刷新数据。
tk_istream_read | 读取数据。
tk_istream_read_len | 读取指定长度的数据。
tk_istream_read_line | 读取一行数据。
tk_istream_read_line_str | 读取一行数据。
tk_istream_seek | 设置偏移量。
tk_istream_tell | 获取当前读取位置。
tk_istream_wait_for_data | 等待数据。

tk_istream_eos 函数

  • 函数功能：

判断数据是否读完。

  • 函数原型：
bool_t tk_istream_eos (tk_istream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示数据读完，否则表示还有数据。
stream | tk_istream_t* | istream对象。

tk_istream_flush 函数

  • 函数功能：

刷新数据。

  • 函数原型：
ret_t tk_istream_flush (tk_istream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_istream_t* | istream对象。

tk_istream_read 函数

  • 函数功能：

读取数据。

  • 函数原型：
int32_t tk_istream_read (tk_istream_t* stream, void* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示读取失败，否则返回实际读取数据的长度。
stream | tk_istream_t* | istream对象。
buff | void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。

tk_istream_read_len 函数

  • 函数功能：

读取指定长度的数据。

  • 函数原型：
int32_t tk_istream_read_len (tk_istream_t* stream, void* buff, uint32_t max_size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示读取失败，否则返回实际读取数据的长度。
stream | tk_istream_t* | istream对象。
buff | void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。
timeout_ms | uint32_t | timeout.

tk_istream_read_line 函数

  • 函数功能：

读取一行数据。

  • 函数原型：
int32_t tk_istream_read_line (tk_istream_t* stream, void* buff, uint32_t max_size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示读取失败，否则返回实际读取数据的长度。
stream | tk_istream_t* | istream对象。
buff | void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。
timeout_ms | uint32_t | timeout.

tk_istream_read_line_str 函数

  • 函数功能：

读取一行数据。 istream必须支持随机读写(seek/tell)。

  • 函数原型：
ret_t tk_istream_read_line_str (tk_istream_t* stream, str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_istream_t* | istream对象。
str | str_t* | 返回数据的str对象。

tk_istream_seek 函数

  • 函数功能：

设置偏移量。

  • 函数原型：
ret_t tk_istream_seek (tk_istream_t* stream, uint32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_istream_t* | istream对象。
offset | uint32_t | 偏移量。

tk_istream_tell 函数

  • 函数功能：

获取当前读取位置。

  • 函数原型：
int32_t tk_istream_tell (tk_istream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示失败，否则返回当前读取位置。
stream | tk_istream_t* | istream对象。

tk_istream_wait_for_data 函数

  • 函数功能：

等待数据。

  • 函数原型：
ret_t tk_istream_wait_for_data (tk_istream_t* stream, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_istream_t* | istream对象。
timeout_ms | uint32_t | 超时时间。


tk_istream_tcp_t

概述

基于TCP实现的输入流。

函数

函数名称 | 说明
tk_istream_tcp_create | 创建istream对象。

tk_istream_tcp_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_tcp_create (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
sock | int | socket。


tk_istream_udp_t

概述

基于UDP实现的输入流。

函数

函数名称 | 说明
tk_istream_udp_create | 创建istream对象。
tk_istream_udp_set_target_with_addr | 设置目标。
tk_istream_udp_set_target_with_host | 设置目标。

tk_istream_udp_create 函数

  • 函数功能：

创建istream对象。

  • 函数原型：
tk_istream_t* tk_istream_udp_create (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_istream_t* | 返回istream对象。
sock | int | socket。

tk_istream_udp_set_target_with_addr 函数

  • 函数功能：

设置目标。

  • 函数原型：
ret_t tk_istream_udp_set_target_with_addr (tk_istream_t* stream, struct sockaddr_in addr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_istream_t* | istream对象。
addr | struct sockaddr_in | 地址。

tk_istream_udp_set_target_with_host 函数

  • 函数功能：

设置目标。

  • 函数原型：
ret_t tk_istream_udp_set_target_with_host (tk_istream_t* stream, const char* host, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_istream_t* | istream对象。
host | const char* | 主机或IP。
port | int | 端口。


tk_mem_t

概述

内存管理相关的宏和函数。

示例：

char* str = (char*)TKMEM_ALLOC(100);
...
TKMEM_FREE(str);

char* str = (char*)TKMEM_ALLOC(100);
...
str = (char*)TKMEM_REALLOC(str, 128);
...
TKMEM_FREE(str);

函数

函数名称 | 说明
tk_mem_dump | 显示内存信息。
tk_mem_init | 初始化内存。
tk_mem_init_ex | 初始化内存，支持多块不连续的内存。
tk_mem_init_stage2 | 初始化互斥和oom。
tk_mem_is_valid_addr | 检查给定的地址是否是一个有效的heap地址。
tk_mem_set_on_out_of_memory | 设置内存耗尽时的处理函数。
TKMEM_ALLOC | 分配一块内存。
TKMEM_CALLOC | 分配一块内存，并将内容清零。
TKMEM_FREE | 释放内存。
TKMEM_REALLOC | 重新分配一块内存，如果原来的内存块大于等于需要的空间，直接返回原来的内存块。

tk_mem_dump 函数

  • 函数功能：

显示内存信息。

  • 函数原型：
void tk_mem_dump ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回void。

tk_mem_init 函数

  • 函数功能：

初始化内存。

  • 函数原型：
ret_t tk_mem_init (void* buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buffer | void* | 内存地址。
size | uint32_t | 内存长度。

tk_mem_init_ex 函数

  • 函数功能：

初始化内存，支持多块不连续的内存。 最后一个参数必须为NULL。

示例：

tk_mem_init_ex(mem1, sizeof(mem1), mem2, sizeof(mem2), mem3, sizeof(mem3), NULL);
  • 函数原型：
ret_t tk_mem_init_ex (void* buffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buffer | void* | 内存地址。
size | uint32_t | 内存长度。

tk_mem_init_stage2 函数

  • 函数功能：

初始化互斥和oom。

  • 函数原型：
ret_t tk_mem_init_stage2 ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_mem_is_valid_addr 函数

  • 函数功能：

检查给定的地址是否是一个有效的heap地址。 用于辅助发现内存问题。

  • 函数原型：
bool_t tk_mem_is_valid_addr (void* addr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE一定是无效地址，返回TRUE在PC则不太确定。
addr | void* | 内存地址。

tk_mem_set_on_out_of_memory 函数

  • 函数功能：

设置内存耗尽时的处理函数。

  • 函数原型：
ret_t tk_mem_set_on_out_of_memory (tk_mem_on_out_of_memory_t on_out_of_memory, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
on_out_of_memory | tk_mem_on_out_of_memory_t | 回调函数。
ctx | void* | 回调函数的上下文。

TKMEM_ALLOC 宏

  • 函数功能：

分配一块内存。

  • 函数原型：
void* TKMEM_ALLOC (uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回内存块首地址，失败返回NULL。
size | uint32_t | 内存大小。

TKMEM_CALLOC 宏

  • 函数功能：

分配一块内存，并将内容清零。

  • 函数原型：
void* TKMEM_CALLOC (uint32_t nmemb, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回内存块首地址，失败返回NULL。
nmemb | uint32_t | 内存块数量。
size | uint32_t | 每一块的大小。

TKMEM_FREE 宏

  • 函数功能：

释放内存。

  • 函数原型：
void TKMEM_FREE (void* p);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 无。
p | void* | 内存地址。

TKMEM_REALLOC 宏

  • 函数功能：

重新分配一块内存，如果原来的内存块大于等于需要的空间，直接返回原来的内存块。

  • 函数原型：
void* TKMEM_REALLOC (void* p, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 成功返回内存块首地址，失败返回NULL。
p | void* | 原来的内存地址。
size | uint32_t | 每一块的大小。


tk_mutex_nest_t

概述

嵌套互斥锁。允许同一个线程多次加锁。

函数

函数名称 | 说明
tk_mutex_nest_create | 创建嵌套互斥锁。
tk_mutex_nest_destroy | 销毁mutex_nest对象。
tk_mutex_nest_lock | 加锁。
tk_mutex_nest_try_lock | 尝试加锁。
tk_mutex_nest_unlock | 解锁。只允许解锁当前线程所加的锁。

tk_mutex_nest_create 函数

  • 函数功能：

创建嵌套互斥锁。

  • 函数原型：
tk_mutex_nest_t* tk_mutex_nest_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_mutex_nest_t* | mutex_nest对象。

tk_mutex_nest_destroy 函数

  • 函数功能：

销毁mutex_nest对象。

  • 函数原型：
ret_t tk_mutex_nest_destroy (tk_mutex_nest_t* mutex_nest);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex_nest | tk_mutex_nest_t* | mutex_nest对象。

tk_mutex_nest_lock 函数

  • 函数功能：

加锁。

  • 函数原型：
ret_t tk_mutex_nest_lock (tk_mutex_nest_t* mutex_nest);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex_nest | tk_mutex_nest_t* | mutex_nest对象。

tk_mutex_nest_try_lock 函数

  • 函数功能：

尝试加锁。

  • 函数原型：
ret_t tk_mutex_nest_try_lock (tk_mutex_nest_t* mutex_nest);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex_nest | tk_mutex_nest_t* | mutex_nest对象。

tk_mutex_nest_unlock 函数

  • 函数功能：

解锁。只允许解锁当前线程所加的锁。

  • 函数原型：
ret_t tk_mutex_nest_unlock (tk_mutex_nest_t* mutex_nest);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex_nest | tk_mutex_nest_t* | mutex_nest对象。


tk_mutex_t

概述

互斥锁。

函数

函数名称 | 说明
tk_mutex_create | 创建mutex。
tk_mutex_destroy | 销毁mutex对象。
tk_mutex_lock | 加锁。
tk_mutex_try_lock | 尝试加锁。
tk_mutex_unlock | 解锁。

tk_mutex_create 函数

  • 函数功能：

创建mutex。

  • 函数原型：
tk_mutex_t* tk_mutex_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_mutex_t* | mutex对象。

tk_mutex_destroy 函数

  • 函数功能：

销毁mutex对象。

  • 函数原型：
ret_t tk_mutex_destroy (tk_mutex_t* mutex);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex | tk_mutex_t* | mutex对象。

tk_mutex_lock 函数

  • 函数功能：

加锁。

  • 函数原型：
ret_t tk_mutex_lock (tk_mutex_t* mutex);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex | tk_mutex_t* | mutex对象。

tk_mutex_try_lock 函数

  • 函数功能：

尝试加锁。

  • 函数原型：
ret_t tk_mutex_try_lock (tk_mutex_t* mutex);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex | tk_mutex_t* | mutex对象。

tk_mutex_unlock 函数

  • 函数功能：

解锁。

  • 函数原型：
ret_t tk_mutex_unlock (tk_mutex_t* mutex);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
mutex | tk_mutex_t* | mutex对象。


tk_object_t

概述

对象接口。

函数

函数名称 | 说明
tk_object_can_exec | 检查是否可以执行指定的命令。
tk_object_can_exec_by_path | 检查是否可以执行指定的命令。
tk_object_clone | clone对象。
tk_object_compare | 比较两个对象。
tk_object_copy_prop | 拷贝指定的属性。
tk_object_copy_props | 拷贝全部的属性。
tk_object_create | 创建对象。
tk_object_create_ex | 创建对象。
tk_object_eval | 计算一个表达式，表达式中引用的变量从prop中获取。
tk_object_exec | 执行指定的命令。
tk_object_exec_by_path | 执行指定的命令。
tk_object_foreach_prop | 遍历所有属性。
tk_object_get_child_object | 获取下一级子对象。
tk_object_get_desc | 获取对象的描述信息。
tk_object_get_prop | 获取指定属性的值。
tk_object_get_prop_bool | 获取指定属性的bool类型的值。
tk_object_get_prop_bool_by_path | 获取指定属性的bool类型的值。
tk_object_get_prop_by_path | 获取指定path属性的值。
tk_object_get_prop_double | 获取指定属性的浮点数类型的值。
tk_object_get_prop_float | 获取指定属性的浮点数类型的值。
tk_object_get_prop_float_by_path | 获取指定属性的浮点数类型的值。
tk_object_get_prop_int | 获取指定属性的整数类型的值。
tk_object_get_prop_int_by_path | 获取指定属性的整数类型的值。
tk_object_get_prop_int16 | 获取指定属性的int16类型的值。
tk_object_get_prop_int32 | 获取指定属性的int32类型的值。
tk_object_get_prop_int64 | 获取指定属性的int64类型的值。
tk_object_get_prop_int8 | 获取指定属性的int8类型的值。
tk_object_get_prop_object | 获取指定属性的object类型的值。
tk_object_get_prop_object_by_path | 获取指定属性的object类型的值。
tk_object_get_prop_pointer | 获取指定属性的指针类型的值。
tk_object_get_prop_pointer_by_path | 获取指定属性的指针类型的值。
tk_object_get_prop_str | 获取指定属性的字符串类型的值。
tk_object_get_prop_str_by_path | 获取指定属性的字符串类型的值。
tk_object_get_prop_uint16 | 获取指定属性的uint16类型的值。
tk_object_get_prop_uint32 | 获取指定属性的uint32类型的值。
tk_object_get_prop_uint64 | 获取指定属性的uint64类型的值。
tk_object_get_prop_uint8 | 获取指定属性的uint8类型的值。
tk_object_get_size | 获取对象占用内存的大小。
tk_object_get_type | 获取对象的类型名称。
tk_object_has_prop | 检查是否存在指定的属性。
tk_object_has_prop_by_path | 检查是否存在指定的属性。
tk_object_is_collection | 判断对象是否是集合。
tk_object_notify_changed | 触发EVT_PROPS_CHANGED事件。
tk_object_ref | 引用计数加1。
tk_object_remove_prop | 删除指定属性。
tk_object_set_name | 设置对象的名称。
tk_object_set_prop | 设置指定属性的值。
tk_object_set_prop_bool | 设置指定属性的bool类型的值。
tk_object_set_prop_bool_by_path | 设置指定属性的bool类型的值。
tk_object_set_prop_by_path | 设置指定属性的值。
tk_object_set_prop_double | 设置指定属性的浮点数类型的值。
tk_object_set_prop_float | 设置指定属性的浮点数类型的值。
tk_object_set_prop_float_by_path | 设置指定属性的浮点数类型的值。
tk_object_set_prop_int | 设置指定属性的整数类型的值。
tk_object_set_prop_int_by_path | 设置指定属性的整数类型的值。
tk_object_set_prop_int16 | 设置指定属性的int16类型的值。
tk_object_set_prop_int32 | 设置指定属性的int32类型的值。
tk_object_set_prop_int64 | 设置指定属性的int64类型的值。
tk_object_set_prop_int8 | 设置指定属性的int8类型的值。
tk_object_set_prop_object | 设置指定属性的object类型的值。
tk_object_set_prop_object_by_path | 设置指定属性的object类型的值。
tk_object_set_prop_pointer | 设置指定属性的指针类型的值。
tk_object_set_prop_pointer_by_path | 设置指定属性的指针类型的值。
tk_object_set_prop_pointer_ex | 设置指定属性的指针类型的值。
tk_object_set_prop_str | 设置指定属性的字符串类型的值。
tk_object_set_prop_str_by_path | 设置指定属性的字符串类型的值。
tk_object_set_prop_uint16 | 设置指定属性的uint16类型的值。
tk_object_set_prop_uint32 | 设置指定属性的uint32类型的值。
tk_object_set_prop_uint64 | 设置指定属性的uint64类型的值。
tk_object_set_prop_uint8 | 设置指定属性的uint8类型的值。
tk_object_to_json | 转换成JSON字符串。
tk_object_unref | 引用计数减1。引用计数为0时，销毁对象。

属性

属性名称 | 类型 | 说明
name | char* | 对象的名称。
ref_count | int32_t | 引用计数。

tk_object_can_exec 函数

  • 函数功能：

检查是否可以执行指定的命令。

  • 函数原型：
bool_t tk_object_can_exec (tk_object_t* obj, const char* name, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示可以执行，否则表示不可以执行。
obj | tk_object_t* | object对象。
name | const char* | 命令的名称。
args | const char* | 命令的参数。

tk_object_can_exec_by_path 函数

  • 函数功能：

检查是否可以执行指定的命令。

  • 函数原型：
bool_t tk_object_can_exec_by_path (tk_object_t* obj, const char* path, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示可以执行，否则表示不可以执行。
obj | tk_object_t* | object对象。
path | const char* | 命令的path。
args | const char* | 命令的参数。

tk_object_clone 函数

  • 函数功能：

clone对象。

  • 函数原型：
tk_object_t* tk_object_clone (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
obj | tk_object_t* | object对象。

tk_object_compare 函数

  • 函数功能：

比较两个对象。

  • 函数原型：
int tk_object_compare (tk_object_t* obj, tk_object_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回比较结果。
obj | tk_object_t* | object对象。
other | tk_object_t* | 比较的object对象。

tk_object_copy_prop 函数

  • 函数功能：

拷贝指定的属性。

  • 函数原型：
ret_t tk_object_copy_prop (tk_object_t* obj, tk_object_t* src, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 目标对象。
src | tk_object_t* | 源对象。
name | const char* | 属性的名称。

tk_object_copy_props 函数

  • 函数功能：

拷贝全部的属性。

  • 函数原型：
ret_t tk_object_copy_props (tk_object_t* obj, tk_object_t* src, bool_t overwrite);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | 目标对象。
src | tk_object_t* | 源对象。
overwrite | bool_t | 如果属性存在是否覆盖。

tk_object_create 函数

  • 函数功能：

创建对象。

仅供子类调用。

  • 函数原型：
tk_object_t* tk_object_create (const object_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
vt | const object_vtable_t* | 虚函数表。

tk_object_create_ex 函数

  • 函数功能：

创建对象。

仅供子类调用。

  • 函数原型：
tk_object_t* tk_object_create_ex (const object_vtable_t* vt, uint32_t extra_data_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
vt | const object_vtable_t* | 虚函数表。
extra_data_size | uint32_t | 额外的内存大小。

tk_object_eval 函数

  • 函数功能：

计算一个表达式，表达式中引用的变量从prop中获取。

  • 函数原型：
ret_t tk_object_eval (tk_object_t* obj, const char* expr, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
expr | const char* | 表达式。
v | value_t* | 返回计算结果。

tk_object_exec 函数

  • 函数功能：

执行指定的命令。

  • 函数原型：
ret_t tk_object_exec (tk_object_t* obj, const char* name, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 命令的名称。
args | const char* | 命令的参数。

tk_object_exec_by_path 函数

  • 函数功能：

执行指定的命令。

  • 函数原型：
ret_t tk_object_exec_by_path (tk_object_t* obj, const char* path, const char* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 命令的path。
args | const char* | 命令的参数。

tk_object_foreach_prop 函数

  • 函数功能：

遍历所有属性。

  • 函数原型：
ret_t tk_object_foreach_prop (tk_object_t* obj, tk_visit_t on_prop, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
on_prop | tk_visit_t | 回调函数(data参数为named_value_t类型)。
ctx | void* | 回调函数上下文。

tk_object_get_child_object 函数

  • 函数功能：

获取下一级子对象。 属性路径之间使用符号”.”分割，例如：name.sub_name。

  • 函数原型：
tk_object_t* tk_object_get_child_object (tk_object_t* obj, const char* path, const char** next_path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回下一级子对象，如果找不到则返回 NULL。
obj | tk_object_t* | object对象。
path | const char* | 属性路径。
next_path | const char** | 返回下一级属性路径。

tk_object_get_desc 函数

  • 函数功能：

获取对象的描述信息。

  • 函数原型：
const char* tk_object_get_desc (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对象的描述信息。
obj | tk_object_t* | object对象。

tk_object_get_prop 函数

  • 函数功能：

获取指定属性的值。

  • 函数原型：
ret_t tk_object_get_prop (tk_object_t* obj, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
v | value_t* | 返回属性的值。

tk_object_get_prop_bool 函数

  • 函数功能：

获取指定属性的bool类型的值。

  • 函数原型：
bool_t tk_object_get_prop_bool (tk_object_t* obj, const char* name, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回指定属性的bool类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | bool_t | 缺省值。

tk_object_get_prop_bool_by_path 函数

  • 函数功能：

获取指定属性的bool类型的值。

  • 函数原型：
bool_t tk_object_get_prop_bool_by_path (tk_object_t* obj, const char* path, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回指定属性的bool类型的值。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
defval | bool_t | 缺省值。

tk_object_get_prop_by_path 函数

  • 函数功能：

获取指定path属性的值。

  • 函数原型：
ret_t tk_object_get_prop_by_path (tk_object_t* obj, const char* path, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path，各级之间用.分隔。
v | value_t* | 返回属性的值。

tk_object_get_prop_double 函数

  • 函数功能：

获取指定属性的浮点数类型的值。

  • 函数原型：
double tk_object_get_prop_double (tk_object_t* obj, const char* name, double defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回指定属性的浮点数类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | double | 缺省值。

tk_object_get_prop_float 函数

  • 函数功能：

获取指定属性的浮点数类型的值。

  • 函数原型：
float_t tk_object_get_prop_float (tk_object_t* obj, const char* name, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回指定属性的浮点数类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | float_t | 缺省值。

tk_object_get_prop_float_by_path 函数

  • 函数功能：

获取指定属性的浮点数类型的值。

e

  • 函数原型：
float_t tk_object_get_prop_float_by_path (tk_object_t* obj, const char* path, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回指定属性的浮点数类型的值。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
defval | float_t | 缺省值。

tk_object_get_prop_int 函数

  • 函数功能：

获取指定属性的整数类型的值。

  • 函数原型：
int32_t tk_object_get_prop_int (tk_object_t* obj, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定属性的整数类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | int32_t | 缺省值。

tk_object_get_prop_int_by_path 函数

  • 函数功能：

获取指定属性的整数类型的值。

  • 函数原型：
int32_t tk_object_get_prop_int_by_path (tk_object_t* obj, const char* path, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定属性的整数类型的值。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
defval | int32_t | 缺省值。

tk_object_get_prop_int16 函数

  • 函数功能：

获取指定属性的int16类型的值。

  • 函数原型：
int16_t tk_object_get_prop_int16 (tk_object_t* obj, const char* name, int16_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int16_t | 返回指定属性的int16类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | int16_t | 缺省值。

tk_object_get_prop_int32 函数

  • 函数功能：

获取指定属性的int32类型的值。

  • 函数原型：
int32_t tk_object_get_prop_int32 (tk_object_t* obj, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定属性的int32类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | int32_t | 缺省值。

tk_object_get_prop_int64 函数

  • 函数功能：

获取指定属性的int64类型的值。

  • 函数原型：
int64_t tk_object_get_prop_int64 (tk_object_t* obj, const char* name, int64_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回指定属性的int64类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | int64_t | 缺省值。

tk_object_get_prop_int8 函数

  • 函数功能：

获取指定属性的int8类型的值。

  • 函数原型：
int8_t tk_object_get_prop_int8 (tk_object_t* obj, const char* name, int8_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int8_t | 返回指定属性的int8类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | int8_t | 缺省值。

tk_object_get_prop_object 函数

  • 函数功能：

获取指定属性的object类型的值。

  • 函数原型：
tk_object_t* tk_object_get_prop_object (tk_object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回指定属性的object类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。

tk_object_get_prop_object_by_path 函数

  • 函数功能：

获取指定属性的object类型的值。

  • 函数原型：
tk_object_t* tk_object_get_prop_object_by_path (tk_object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回指定属性的object类型的值。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。

tk_object_get_prop_pointer 函数

  • 函数功能：

获取指定属性的指针类型的值。

  • 函数原型：
void* tk_object_get_prop_pointer (tk_object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回指定属性的指针类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。

tk_object_get_prop_pointer_by_path 函数

  • 函数功能：

获取指定属性的指针类型的值。

  • 函数原型：
void* tk_object_get_prop_pointer_by_path (tk_object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回指定属性的指针类型的值。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。

tk_object_get_prop_str 函数

  • 函数功能：

获取指定属性的字符串类型的值。

  • 函数原型：
const char* tk_object_get_prop_str (tk_object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定属性的字符串类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。

tk_object_get_prop_str_by_path 函数

  • 函数功能：

获取指定属性的字符串类型的值。

  • 函数原型：
const char* tk_object_get_prop_str_by_path (tk_object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定属性的字符串类型的值。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。

tk_object_get_prop_uint16 函数

  • 函数功能：

获取指定属性的uint16类型的值。

  • 函数原型：
uint16_t tk_object_get_prop_uint16 (tk_object_t* obj, const char* name, uint16_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 返回指定属性的uint16类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | uint16_t | 缺省值。

tk_object_get_prop_uint32 函数

  • 函数功能：

获取指定属性的uint32类型的值。

  • 函数原型：
uint32_t tk_object_get_prop_uint32 (tk_object_t* obj, const char* name, uint32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回指定属性的uint32类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | uint32_t | 缺省值。

tk_object_get_prop_uint64 函数

  • 函数功能：

获取指定属性的uint64类型的值。

  • 函数原型：
uint64_t tk_object_get_prop_uint64 (tk_object_t* obj, const char* name, uint64_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回指定属性的uint64类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | uint64_t | 缺省值。

tk_object_get_prop_uint8 函数

  • 函数功能：

获取指定属性的uint8类型的值。

  • 函数原型：
uint8_t tk_object_get_prop_uint8 (tk_object_t* obj, const char* name, uint8_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 返回指定属性的uint8类型的值。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
defval | uint8_t | 缺省值。

tk_object_get_size 函数

  • 函数功能：

获取对象占用内存的大小。

  • 函数原型：
uint32_t tk_object_get_size (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回对象占用内存的大小。
obj | tk_object_t* | object对象。

tk_object_get_type 函数

  • 函数功能：

获取对象的类型名称。

  • 函数原型：
const char* tk_object_get_type (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对象的类型名称。
obj | tk_object_t* | object对象。

tk_object_has_prop 函数

  • 函数功能：

检查是否存在指定的属性。

  • 函数原型：
bool_t tk_object_has_prop (tk_object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。

tk_object_has_prop_by_path 函数

  • 函数功能：

检查是否存在指定的属性。

  • 函数原型：
bool_t tk_object_has_prop_by_path (tk_object_t* obj, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示存在，否则表示不存在。
obj | tk_object_t* | object对象。
path | const char* | 属性的path，各级之间用.分隔。

tk_object_is_collection 函数

  • 函数功能：

判断对象是否是集合。

  • 函数原型：
bool_t tk_object_is_collection (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是集合，否则不是。
obj | tk_object_t* | object对象。

tk_object_notify_changed 函数

  • 函数功能：

触发EVT_PROPS_CHANGED事件。

  • 函数原型：
ret_t tk_object_notify_changed (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。

tk_object_ref 函数

  • 函数功能：

引用计数加1。

  • 函数原型：
tk_object_t* tk_object_ref (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object对象。
obj | tk_object_t* | object对象。

tk_object_remove_prop 函数

  • 函数功能：

删除指定属性。

  • 函数原型：
ret_t tk_object_remove_prop (tk_object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。

tk_object_set_name 函数

  • 函数功能：

设置对象的名称。

  • 函数原型：
ret_t tk_object_set_name (tk_object_t* obj, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 对象的名称。

tk_object_set_prop 函数

  • 函数功能：

设置指定属性的值。

  • 函数原型：
ret_t tk_object_set_prop (tk_object_t* obj, const char* name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | const value_t* | 属性的值。

tk_object_set_prop_bool 函数

  • 函数功能：

设置指定属性的bool类型的值。

  • 函数原型：
ret_t tk_object_set_prop_bool (tk_object_t* obj, const char* name, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | bool_t | 属性的值。

tk_object_set_prop_bool_by_path 函数

  • 函数功能：

设置指定属性的bool类型的值。

  • 函数原型：
ret_t tk_object_set_prop_bool_by_path (tk_object_t* obj, const char* path, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | bool_t | 属性的值。

tk_object_set_prop_by_path 函数

  • 函数功能：

设置指定属性的值。

  • 函数原型：
ret_t tk_object_set_prop_by_path (tk_object_t* obj, const char* path, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | const value_t* | 属性的值。

tk_object_set_prop_double 函数

  • 函数功能：

设置指定属性的浮点数类型的值。

  • 函数原型：
ret_t tk_object_set_prop_double (tk_object_t* obj, const char* name, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | double | 属性的值。

tk_object_set_prop_float 函数

  • 函数功能：

设置指定属性的浮点数类型的值。

  • 函数原型：
ret_t tk_object_set_prop_float (tk_object_t* obj, const char* name, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | float_t | 属性的值。

tk_object_set_prop_float_by_path 函数

  • 函数功能：

设置指定属性的浮点数类型的值。

  • 函数原型：
ret_t tk_object_set_prop_float_by_path (tk_object_t* obj, const char* path, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | float_t | 属性的值。

tk_object_set_prop_int 函数

  • 函数功能：

设置指定属性的整数类型的值。

  • 函数原型：
ret_t tk_object_set_prop_int (tk_object_t* obj, const char* name, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | int32_t | 属性的值。

tk_object_set_prop_int_by_path 函数

  • 函数功能：

设置指定属性的整数类型的值。

  • 函数原型：
ret_t tk_object_set_prop_int_by_path (tk_object_t* obj, const char* path, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | int32_t | 属性的值。

tk_object_set_prop_int16 函数

  • 函数功能：

设置指定属性的int16类型的值。

  • 函数原型：
ret_t tk_object_set_prop_int16 (tk_object_t* obj, const char* name, int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | int16_t | 属性的值。

tk_object_set_prop_int32 函数

  • 函数功能：

设置指定属性的int32类型的值。

  • 函数原型：
ret_t tk_object_set_prop_int32 (tk_object_t* obj, const char* name, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | int32_t | 属性的值。

tk_object_set_prop_int64 函数

  • 函数功能：

设置指定属性的int64类型的值。

  • 函数原型：
ret_t tk_object_set_prop_int64 (tk_object_t* obj, const char* name, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | int64_t | 属性的值。

tk_object_set_prop_int8 函数

  • 函数功能：

设置指定属性的int8类型的值。

  • 函数原型：
ret_t tk_object_set_prop_int8 (tk_object_t* obj, const char* name, int8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | int8_t | 属性的值。

tk_object_set_prop_object 函数

  • 函数功能：

设置指定属性的object类型的值。

  • 函数原型：
ret_t tk_object_set_prop_object (tk_object_t* obj, const char* name, tk_object_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | tk_object_t* | 属性的值。

tk_object_set_prop_object_by_path 函数

  • 函数功能：

设置指定属性的object类型的值。

  • 函数原型：
ret_t tk_object_set_prop_object_by_path (tk_object_t* obj, const char* path, tk_object_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | tk_object_t* | 属性的值。

tk_object_set_prop_pointer 函数

  • 函数功能：

设置指定属性的指针类型的值。

  • 函数原型：
ret_t tk_object_set_prop_pointer (tk_object_t* obj, const char* name, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | void* | 属性的值。

tk_object_set_prop_pointer_by_path 函数

  • 函数功能：

设置指定属性的指针类型的值。

  • 函数原型：
ret_t tk_object_set_prop_pointer_by_path (tk_object_t* obj, const char* path, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | void* | 属性的值。

tk_object_set_prop_pointer_ex 函数

  • 函数功能：

设置指定属性的指针类型的值。

  • 函数原型：
ret_t tk_object_set_prop_pointer_ex (tk_object_t* obj, const char* name, void* value, tk_destroy_t destroy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | void* | 属性的值。
destroy | tk_destroy_t | 销毁函数。

tk_object_set_prop_str 函数

  • 函数功能：

设置指定属性的字符串类型的值。

  • 函数原型：
ret_t tk_object_set_prop_str (tk_object_t* obj, const char* name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | const char* | 属性的值。

tk_object_set_prop_str_by_path 函数

  • 函数功能：

设置指定属性的字符串类型的值。

  • 函数原型：
ret_t tk_object_set_prop_str_by_path (tk_object_t* obj, const char* path, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
path | const char* | 属性的path。
value | const char* | 属性的值。

tk_object_set_prop_uint16 函数

  • 函数功能：

设置指定属性的uint16类型的值。

  • 函数原型：
ret_t tk_object_set_prop_uint16 (tk_object_t* obj, const char* name, uint16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | uint16_t | 属性的值。

tk_object_set_prop_uint32 函数

  • 函数功能：

设置指定属性的uint32类型的值。

  • 函数原型：
ret_t tk_object_set_prop_uint32 (tk_object_t* obj, const char* name, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | uint32_t | 属性的值。

tk_object_set_prop_uint64 函数

  • 函数功能：

设置指定属性的uint64类型的值。

  • 函数原型：
ret_t tk_object_set_prop_uint64 (tk_object_t* obj, const char* name, uint64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | uint64_t | 属性的值。

tk_object_set_prop_uint8 函数

  • 函数功能：

设置指定属性的uint8类型的值。

  • 函数原型：
ret_t tk_object_set_prop_uint8 (tk_object_t* obj, const char* name, uint8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
name | const char* | 属性的名称。
value | uint8_t | 属性的值。

tk_object_to_json 函数

  • 函数功能：

转换成JSON字符串。

  • 函数原型：
ret_t tk_object_to_json (tk_object_t* obj, str_t* json, uint32_t indent, uint32_t level, bool_t oneline);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
json | str_t* | 返回JSON字符串。
indent | uint32_t | 缩进空格数。
level | uint32_t | 初始缩进层级。
oneline | bool_t | 是否不换行。

tk_object_unref 函数

  • 函数功能：

引用计数减1。引用计数为0时，销毁对象。

  • 函数原型：
ret_t tk_object_unref (tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。

name 属性

对象的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ref_count 属性

引用计数。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


tk_ostream_buffered_t

概述

先将数据写入一个缓存区，调用flush时才真正写入底层的ostream。

函数

函数名称 | 说明
tk_ostream_buffered_create | 创建ostream对象。
tk_ostream_buffered_get_size | 获取当前缓存数据的长度。

tk_ostream_buffered_create 函数

  • 函数功能：

创建ostream对象。

本函数自动增加real_ostream的引用计数。

  • 函数原型：
tk_ostream_t* tk_ostream_buffered_create (tk_ostream_t* real_ostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
real_ostream | tk_ostream_t* | 实际的ostream对象。

tk_ostream_buffered_get_size 函数

  • 函数功能：

获取当前缓存数据的长度。

  • 函数原型：
uint32_t tk_ostream_buffered_get_size (tk_ostream_t* ostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回缓存数据的长度。
ostream | tk_ostream_t* | ostream对象。


tk_ostream_file_t

概述

基于文件实现的输出流。

函数

函数名称 | 说明
tk_ostream_file_create | 创建ostream对象。
tk_ostream_file_create_ex | 创建ostream对象。

tk_ostream_file_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_file_create (const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
filename | const char* | 文件名。

tk_ostream_file_create_ex 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_file_create_ex (const char* filename, const char* mode);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
filename | const char* | 文件名。
mode | const char* | 模式。


tk_ostream_mbedtls_t

概述

基于MBEDTLS实现的输出流。

函数

函数名称 | 说明
tk_ostream_mbedtls_create | 创建ostream对象。

tk_ostream_mbedtls_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_mbedtls_create (mbedtls_ssl_context* ssl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
ssl | mbedtls_ssl_context* | ssl对象。


tk_ostream_mem_t

概述

基于内存实现的输出流。

函数

函数名称 | 说明
tk_ostream_mem_create | 创建ostream对象。

tk_ostream_mem_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_mem_create (uint8_t* buff, uint32_t size, uint32_t packet_size, bool_t own_the_buff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
buff | uint8_t* | 返回数据的缓冲区。
size | uint32_t | 缓冲区的大小。
packet_size | uint32_t | 缺省一次读取的数据的长度。
own_the_buff | bool_t | 是否让ostream对象拥有buff。


tk_ostream_noisy_t

概述

在输出流中注入错误，方便进行可靠性测试。

函数

函数名称 | 说明
tk_ostream_noisy_create | 创建ostream对象。

属性

属性名称 | 类型 | 说明
error_count | uint32_t | 注入的错误数。
error_level | uint32_t | error level.
write_count | uint32_t | 写入的次数。

tk_ostream_noisy_create 函数

  • 函数功能：

创建ostream对象。

只能由iostream_noisy调用。

  • 函数原型：
tk_ostream_t* tk_ostream_noisy_create (tk_ostream_t* real_ostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
real_ostream | tk_ostream_t* | 实际的ostream对象。

error_count 属性

注入的错误数。

  • 类型：uint32_t

error_level 属性

error level.

  • 类型：uint32_t

write_count 属性

写入的次数。

  • 类型：uint32_t


tk_ostream_process_t

概述

基于串口实现的输出流。

input stream base on fd

函数

函数名称 | 说明
process_create | 创建子进程。
process_destroy | 释放子进程。
process_handle_get_fd | 获取文件描述符。
process_is_broken | 子进程是否断开
process_read | 读子进程的数据（StdIntput 的方式）
process_wait_for_data | 等待数据。
process_write | 给子进程写数据（StdOutput 的方式）
tk_ostream_process_create | 创建ostream对象。

process_create 函数

  • 函数功能：

创建子进程。

  • 函数原型：
process_handle_t process_create (const char* file_path, const char** args, uint32_t argc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | process_handle_t | 返回子进程句柄。
file_path | const char* | 子进程程序路径。(如果为空的话，使用命令行来执行参数的内容)
args | const char** | 子进程参数。
argc | uint32_t | 子进程参数长度。

process_destroy 函数

  • 函数功能：

释放子进程。

  • 函数原型：
ret_t process_destroy (process_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | process_handle_t | 子进程句柄。

process_handle_get_fd 函数

  • 函数功能：

获取文件描述符。

  • 函数原型：
int process_handle_get_fd (process_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回文件描述符。
handle | process_handle_t | 子进程句柄。

process_is_broken 函数

  • 函数功能：

子进程是否断开

  • 函数原型：
bool_t process_is_broken (process_handle_t handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 断开返回 true。
handle | process_handle_t | 子进程句柄。

process_read 函数

  • 函数功能：

读子进程的数据（StdIntput 的方式）

  • 函数原型：
int32_t process_read (process_handle_t handle, uint8_t* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际读取的字节数。
handle | process_handle_t | 子进程句柄。
buff | uint8_t* | 数据缓冲区。
max_size | uint32_t | 数据长度。

process_wait_for_data 函数

  • 函数功能：

等待数据。

  • 函数原型：
ret_t process_wait_for_data (process_handle_t handle, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
handle | process_handle_t | 子进程句柄。
timeout_ms | uint32_t | 等待时间(ms)。

process_write 函数

  • 函数功能：

给子进程写数据（StdOutput 的方式）

  • 函数原型：
int32_t process_write (process_handle_t handle, const uint8_t* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际写入的字节数。
handle | process_handle_t | 子进程句柄。
buff | const uint8_t* | 数据缓冲区。
max_size | uint32_t | 数据长度。

tk_ostream_process_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_process_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。


tk_ostream_retry_t

概述

如果写数据失败，将数据放入ring_buffer，后面再重试(flush)。

如果重试次数超出最大值，则丢掉数据。

函数

函数名称 | 说明
tk_ostream_retry_clear_buffer | 清除缓存的数据。
tk_ostream_retry_create | 创建ostream对象。
tk_ostream_retry_set_discard_policy | 设置数据丢弃策略。
tk_ostream_retry_set_max_buffer_size | 设置最大缓存大小。
tk_ostream_retry_set_max_retry_times | 设置最大尝试次数。

属性

属性名称 | 类型 | 说明
discard_bytes | uint32_t | 总共丢弃数据的字节数。
discard_packets | uint32_t | 总共丢弃数据包的个数。
discard_policy | data_discard_policy_t | 缓存不够时，丢弃数据包的策略。
max_retry_times | uint32_t | 尝试次数超过指定的值时丢弃该数据包。
pending_bytes | uint32_t | 待重写的数据大小。
pending_packets | uint32_t | 待重写的数据包的个数。
timeout | uint32_t | 写超时时间(ms)。

tk_ostream_retry_clear_buffer 函数

  • 函数功能：

清除缓存的数据。

  • 函数原型：
ret_t tk_ostream_retry_clear_buffer (tk_ostream_t* ostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ostream | tk_ostream_t* | ostream对象。

tk_ostream_retry_create 函数

  • 函数功能：

创建ostream对象。

本函数自动增加real_ostream的引用计数。

  • 函数原型：
tk_ostream_t* tk_ostream_retry_create (tk_ostream_t* real_ostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
real_ostream | tk_ostream_t* | 实际的ostream对象。

tk_ostream_retry_set_discard_policy 函数

  • 函数功能：

设置数据丢弃策略。

  • 函数原型：
ret_t tk_ostream_retry_set_discard_policy (tk_ostream_t* ostream, data_discard_policy_t discard_policy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ostream | tk_ostream_t* | ostream对象。
discard_policy | data_discard_policy_t | 丢弃策略。

tk_ostream_retry_set_max_buffer_size 函数

  • 函数功能：

设置最大缓存大小。

  • 函数原型：
ret_t tk_ostream_retry_set_max_buffer_size (tk_ostream_t* ostream, uint32_t max_buffer_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ostream | tk_ostream_t* | ostream对象。
max_buffer_size | uint32_t | 缓存大小。

tk_ostream_retry_set_max_retry_times 函数

  • 函数功能：

设置最大尝试次数。

  • 函数原型：
ret_t tk_ostream_retry_set_max_retry_times (tk_ostream_t* ostream, uint32_t max_retry_times);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ostream | tk_ostream_t* | ostream对象。
max_retry_times | uint32_t | 最大尝试次数。

discard_bytes 属性

总共丢弃数据的字节数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

discard_packets 属性

总共丢弃数据包的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

discard_policy 属性

缓存不够时，丢弃数据包的策略。

  • 类型：data_discard_policy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max_retry_times 属性

尝试次数超过指定的值时丢弃该数据包。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

pending_bytes 属性

待重写的数据大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

pending_packets 属性

待重写的数据包的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

timeout 属性

写超时时间(ms)。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


tk_ostream_serial_t

概述

基于串口实现的输出流。

input stream base on fd

函数

函数名称 | 说明
tk_ostream_serial_create | 创建ostream对象。

tk_ostream_serial_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_serial_create (serial_handle_t fd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
fd | serial_handle_t | fd.


tk_ostream_shdlc_t

概述

reliable ostream base on simple HDLC

函数

函数名称 | 说明
tk_ostream_shdlc_create | 创建ostream对象。

属性

属性名称 | 类型 | 说明
compress_threshold | uint32_t | 激活压缩的阈值。
retry_times | uint8_t | 失败重传次数。
timeout | uint32_t | 读写超时时间(ms)

tk_ostream_shdlc_create 函数

  • 函数功能：

创建ostream对象。

只能由iostream_shdlc调用。

  • 函数原型：
tk_ostream_t* tk_ostream_shdlc_create (tk_iostream_shdlc_t* iostream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
iostream | tk_iostream_shdlc_t* | iostream对象。

compress_threshold 属性

激活压缩的阈值。

  • 类型：uint32_t

retry_times 属性

失败重传次数。

  • 类型：uint8_t

timeout 属性

读写超时时间(ms)

  • 类型：uint32_t


tk_ostream_stats_t

概述

带统计功能的输出流。

函数

函数名称 | 说明
tk_ostream_stats_create | 创建ostream对象。

tk_ostream_stats_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_stats_create (tk_ostream_t* impl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
impl | tk_ostream_t* | 被统计的输出流对象


tk_ostream_t

概述

输出流的接口。

函数

函数名称 | 说明
tk_ostream_flush | 刷新数据。
tk_ostream_printf | 写入格式化字符串。
tk_ostream_seek | 设置偏移量。
tk_ostream_tell | 获取当前读取位置。
tk_ostream_write | 写入数据。
tk_ostream_write_byte | 写入一个字节的数据。
tk_ostream_write_len | 写入指定长度的数据。
tk_ostream_write_str | 写入字符串。

tk_ostream_flush 函数

  • 函数功能：

刷新数据。

  • 函数原型：
ret_t tk_ostream_flush (tk_ostream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。

tk_ostream_printf 函数

  • 函数功能：

写入格式化字符串。 长度不超过1024。

  • 函数原型：
ret_t tk_ostream_printf (tk_ostream_t* stream, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。
format | const char* | 格式化字符串。

tk_ostream_seek 函数

  • 函数功能：

设置偏移量。

  • 函数原型：
ret_t tk_ostream_seek (tk_ostream_t* stream, uint32_t offset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。
offset | uint32_t | 偏移量。

tk_ostream_tell 函数

  • 函数功能：

获取当前读取位置。

  • 函数原型：
int32_t tk_ostream_tell (tk_ostream_t* stream);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示失败，否则返回当前读取位置。
stream | tk_ostream_t* | ostream对象。

tk_ostream_write 函数

  • 函数功能：

写入数据。

  • 函数原型：
int32_t tk_ostream_write (tk_ostream_t* stream, const void* buff, uint32_t max_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示写入失败，否则返回实际写入数据的长度。
stream | tk_ostream_t* | ostream对象。
buff | const void* | 返回数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。

tk_ostream_write_byte 函数

  • 函数功能：

写入一个字节的数据。

  • 函数原型：
ret_t tk_ostream_write_byte (tk_ostream_t* stream, uint8_t byte);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。
byte | uint8_t | 数据。

tk_ostream_write_len 函数

  • 函数功能：

写入指定长度的数据。

  • 函数原型：
int32_t tk_ostream_write_len (tk_ostream_t* stream, const void* buff, uint32_t max_size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回负数表示写入失败，否则返回实际写入数据的长度。
stream | tk_ostream_t* | ostream对象。
buff | const void* | 数据的缓冲区。
max_size | uint32_t | 缓冲区的大小。
timeout_ms | uint32_t | timeout.

tk_ostream_write_str 函数

  • 函数功能：

写入字符串。

  • 函数原型：
ret_t tk_ostream_write_str (tk_ostream_t* stream, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。
str | const char* | 字符串。


tk_ostream_tcp_t

概述

基于TCP实现的输出流。

函数

函数名称 | 说明
tk_ostream_tcp_create | 创建ostream对象。

tk_ostream_tcp_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_tcp_create (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
sock | int | socket.


tk_ostream_udp_t

概述

基于UDP实现的输出流。

函数

函数名称 | 说明
tk_ostream_udp_create | 创建ostream对象。
tk_ostream_udp_set_target_with_addr | 设置目标。
tk_ostream_udp_set_target_with_host | 设置目标。

tk_ostream_udp_create 函数

  • 函数功能：

创建ostream对象。

  • 函数原型：
tk_ostream_t* tk_ostream_udp_create (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_ostream_t* | 返回ostream对象。
sock | int | socket.

tk_ostream_udp_set_target_with_addr 函数

  • 函数功能：

设置目标。

  • 函数原型：
ret_t tk_ostream_udp_set_target_with_addr (tk_ostream_t* stream, struct sockaddr_in addr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。
addr | struct sockaddr_in | 地址。

tk_ostream_udp_set_target_with_host 函数

  • 函数功能：

设置目标。

  • 函数原型：
ret_t tk_ostream_udp_set_target_with_host (tk_ostream_t* stream, const char* host, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
stream | tk_ostream_t* | ostream对象。
host | const char* | 主机或IP。
port | int | 端口。


tk_semaphore_t

概述

信号量。

函数

函数名称 | 说明
tk_semaphore_create | 创建信号量对象。
tk_semaphore_destroy | 销毁信号量对象。
tk_semaphore_post | 释放资源。
tk_semaphore_wait | 获取资源。

tk_semaphore_create 函数

  • 函数功能：

创建信号量对象。

  • 函数原型：
tk_semaphore_t* tk_semaphore_create (uint32_t value, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_semaphore_t* | semaphore对象。
value | uint32_t | 初始值。
name | const char* | 名称。

tk_semaphore_destroy 函数

  • 函数功能：

销毁信号量对象。

  • 函数原型：
ret_t tk_semaphore_destroy (tk_semaphore_t* semaphore);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
semaphore | tk_semaphore_t* | 信号量对象。

tk_semaphore_post 函数

  • 函数功能：

释放资源。

  • 函数原型：
ret_t tk_semaphore_post (tk_semaphore_t* semaphore);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
semaphore | tk_semaphore_t* | 信号量对象。

tk_semaphore_wait 函数

  • 函数功能：

获取资源。

  • 函数原型：
ret_t tk_semaphore_wait (tk_semaphore_t* semaphore, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
semaphore | tk_semaphore_t* | 信号量对象。
timeout_ms | uint32_t | 超时时间。


tk_sha256_t

概述

sha256

函数

函数名称 | 说明
tk_sha256 | 计算数据的sha256哈希值。
tk_sha256_done | 完成计算。
tk_sha256_file | 计算文件的sha256哈希值。
tk_sha256_hash | 更新数据。
tk_sha256_init | 初始化。

tk_sha256 函数

  • 函数功能：

计算数据的sha256哈希值。

  • 函数原型：
ret_t tk_sha256 (const void* data, uint32_t len, str_t* hash);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | const void* | 数据。
len | uint32_t | 数据长度。
hash | str_t* | 用于返回计算结果。

tk_sha256_done 函数

  • 函数功能：

完成计算。

  • 函数原型：
ret_t tk_sha256_done (tk_sha256_t* sha256, uint8_t* hash);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sha256 | tk_sha256_t* | sha256对象。
hash | uint8_t* | 用于返回计算结果。

tk_sha256_file 函数

  • 函数功能：

计算文件的sha256哈希值。

  • 函数原型：
ret_t tk_sha256_file (const char* filename, uint32_t block_size, str_t* hash);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 文件名。
block_size | uint32_t | 数据块长度。
hash | str_t* | 用于返回计算结果。

tk_sha256_hash 函数

  • 函数功能：

更新数据。

  • 函数原型：
ret_t tk_sha256_hash (tk_sha256_t* sha256, const uint8_t* data, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sha256 | tk_sha256_t* | sha256对象。
data | const uint8_t* | 数据。
len | uint32_t | 数据长度。

tk_sha256_init 函数

  • 函数功能：

初始化。

  • 函数原型：
ret_t tk_sha256_init (tk_sha256_t* sha256);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sha256 | tk_sha256_t* | sha256对象。


tk_sm_event_t

概述

状态机事件


tk_sm_state_t

概述

状态结构体


tk_sm_transition_t

概述

状态转换条件


tk_socket_t

概述

函数

函数名称 | 说明
tk_socket_bind | 绑定到指定端口。
tk_socket_bind_ex | 绑定到指定IP和端口。
tk_socket_close | 关闭socket句柄。
tk_socket_deinit | tcp/udp 平台~初始化。
tk_socket_get_client_ip | 获取客户端IP。
tk_socket_get_client_ip_str | 获取客户端IP。
tk_socket_get_self_ip | 获取本地IP。
tk_socket_get_self_ip_str | 获取本地IP。
tk_socket_init | tcp/udp 平台初始化。
tk_socket_last_io_has_error | 判断最后一次IO操作是否正常。
tk_socket_recv | 接收数据。
tk_socket_recvfrom | 从指定地址接收数据。
tk_socket_resolve | 解析主机名，并初始化addr对象。
tk_socket_send | 发送数据。
tk_socket_sendto | 发送数据到指定地址。
tk_socket_set_blocking | 设置为阻塞或非阻塞模式。
tk_socket_wait_for_data | 等待数据。

tk_socket_bind 函数

  • 函数功能：

绑定到指定端口。

  • 函数原型：
ret_t tk_socket_bind (int sock, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
port | int | 端口号。

tk_socket_bind_ex 函数

  • 函数功能：

绑定到指定IP和端口。

  • 函数原型：
ret_t tk_socket_bind_ex (int sock, const char* ip, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
ip | const char* | IP地址(可以为NULL)。
port | int | 端口号。

tk_socket_close 函数

  • 函数功能：

关闭socket句柄。

  • 函数原型：
ret_t tk_socket_close (int sock);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。

tk_socket_deinit 函数

  • 函数功能：

tcp/udp 平台~初始化。

  • 函数原型：
ret_t tk_socket_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_socket_get_client_ip 函数

  • 函数功能：

获取客户端IP。

  • 函数原型：
uint32_t tk_socket_get_client_ip (int sockfd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回客户端IP。
sockfd | int | socket句柄。

tk_socket_get_client_ip_str 函数

  • 函数功能：

获取客户端IP。

  • 函数原型：
const char* tk_socket_get_client_ip_str (int sockfd, char* ip, int len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回IP地址。
sockfd | int | socket句柄。
ip | char* | 存放IP地址的内存。
len | int | 存放IP地址的内存的长度。

tk_socket_get_self_ip 函数

  • 函数功能：

获取本地IP。

  • 函数原型：
uint32_t tk_socket_get_self_ip (int sockfd);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回本地IP。
sockfd | int | socket句柄。

tk_socket_get_self_ip_str 函数

  • 函数功能：

获取本地IP。

  • 函数原型：
const char* tk_socket_get_self_ip_str (int sockfd, char* ip, int len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回IP地址。
sockfd | int | socket句柄。
ip | char* | 存放IP地址的内存。
len | int | 存放IP地址的内存的长度。

tk_socket_init 函数

  • 函数功能：

tcp/udp 平台初始化。

  • 函数原型：
ret_t tk_socket_init ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_socket_last_io_has_error 函数

  • 函数功能：

判断最后一次IO操作是否正常。

  • 函数原型：
bool_t tk_socket_last_io_has_error ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示有错误，否则表示正常。

tk_socket_recv 函数

  • 函数功能：

接收数据。

  • 函数原型：
int32_t tk_socket_recv (int sock, void* buffer, uint32_t size, int flags);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际接收的字节数。
sock | int | socket句柄。
buffer | void* | 用于返回数据的缓冲区。
size | uint32_t | 缓冲区大小。
flags | int | 标志。

tk_socket_recvfrom 函数

  • 函数功能：

从指定地址接收数据。

  • 函数原型：
int32_t tk_socket_recvfrom (int sock, void* buffer, uint32_t size, int flags, struct sockaddr* dest_addr, uint32_t* dest_len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际接收的字节数。
sock | int | socket句柄。
buffer | void* | 用于返回数据的缓冲区。
size | uint32_t | 缓冲区大小。
flags | int | 标志。
dest_addr | struct sockaddr* | 目标地址。
dest_len | uint32_t* | 目标地址长度。

tk_socket_resolve 函数

  • 函数功能：

解析主机名，并初始化addr对象。

  • 函数原型：
struct sockaddr* tk_socket_resolve (const char* host, int port, struct sockaddr_in* addr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | struct sockaddr* | 返回地址对象。
host | const char* | 主机名。
port | int | 端口号。
addr | struct sockaddr_in* | 地址对象。

tk_socket_send 函数

  • 函数功能：

发送数据。

  • 函数原型：
int32_t tk_socket_send (int sock, const void* buffer, uint32_t size, int flags);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际发送的字节数。
sock | int | socket句柄。
buffer | const void* | 数据缓冲区。
size | uint32_t | 数据长度。
flags | int | 标志。

tk_socket_sendto 函数

  • 函数功能：

发送数据到指定地址。

  • 函数原型：
int32_t tk_socket_sendto (int sock, const void* buffer, uint32_t size, int flags, const struct sockaddr* dest_addr, uint32_t dest_len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回实际发送的字节数。
sock | int | socket句柄。
buffer | const void* | 数据缓冲区。
size | uint32_t | 数据长度。
flags | int | 标志。
dest_addr | const struct sockaddr* | 目标地址。
dest_len | uint32_t | 目标地址长度。

tk_socket_set_blocking 函数

  • 函数功能：

设置为阻塞或非阻塞模式。

  • 函数原型：
ret_t tk_socket_set_blocking (int sock, bool_t blocking);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
blocking | bool_t | 是否阻塞。

tk_socket_wait_for_data 函数

  • 函数功能：

等待数据。

  • 函数原型：
ret_t tk_socket_wait_for_data (int sock, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
sock | int | socket句柄。
timeout_ms | uint32_t | 等待时间(ms)。


tk_state_machine_t

概述

状态机结构体

函数

函数名称 | 说明
tk_state_machine_current_get | 获取当前状态
tk_state_machine_deinit | 反初始化
tk_state_machine_handle | 事件处理
tk_state_machine_init | 初始化
tk_state_machine_previous_get | 获取上一个状态

tk_state_machine_current_get 函数

  • 函数功能：

获取当前状态

  • 函数原型：
const tk_sm_state_t* tk_state_machine_current_get (tk_state_machine_t* fsm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const tk_sm_state_t* | 返回 tk_sm_state_t 对象
fsm | tk_state_machine_t* | 状态机地址

tk_state_machine_deinit 函数

  • 函数功能：

反初始化

  • 函数原型：
ret_t tk_state_machine_deinit (tk_state_machine_t* fsm, tk_sm_event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t 值
fsm | tk_state_machine_t* | 状态机地址
event | tk_sm_event_t* | 事件

tk_state_machine_handle 函数

  • 函数功能：

事件处理

  • 函数原型：
ret_t tk_state_machine_handle (tk_state_machine_t* fsm, tk_sm_event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t 值
fsm | tk_state_machine_t* | 状态机地址
event | tk_sm_event_t* | 事件

tk_state_machine_init 函数

  • 函数功能：

初始化

  • 函数原型：
ret_t tk_state_machine_init (tk_state_machine_t* fsm, const tk_sm_state_t* initial_state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t 值
fsm | tk_state_machine_t* | 状态机地址
initial_state | const tk_sm_state_t* | 初始状态

tk_state_machine_previous_get 函数

  • 函数功能：

获取上一个状态

  • 函数原型：
const tk_sm_state_t* tk_state_machine_previous_get (tk_state_machine_t* fsm);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const tk_sm_state_t* | 返回 tk_sm_state_t 对象
fsm | tk_state_machine_t* | 状态机地址


tk_stream_factory_t

概述

流工厂。

函数

函数名称 | 说明
tk_stream_factory_create_iostream | 创建iostream对象。目前支持：

tk_stream_factory_create_iostream 函数

  • 函数功能：

创建iostream对象。目前支持： * tcp client: tcp://host:port * udp client: udp://host:port * serial : serial://device?baudrate=115200&stopbits=1 * serial : serial://device?baudrate=115200&stopbits=1&parity=odd&flowcontrol=soft&bytesize=8

串口URL参数说明： * baudrate {int} 波特率。常用值： 9600, 38400, 57600, 115200。(默认值：115200) * stopbits {string} 停止位。可选值：1, 1.5, 2。(默认值：1) * parity {string} 校验位。可选值：none, odd, even, mark, space。(默认值：none) * flowcontrol {string} 流控。可选值：none, hardware, software。(默认值：none) * bytesize {string} 数据位。可选值：5, 6, 7, 8 。(默认值：8)

  • 函数原型：
tk_iostream_t* tk_stream_factory_create_iostream (const char* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_iostream_t* | 返回iostream对象。
url | const char* | URL。


tk_t

概述

TK全局对象。

函数

函数名称 | 说明
tk_init | 初始化TK。
tk_quit | 退出TK事件主循环。
tk_run | 进入TK事件主循环。
tk_set_lcd_orientation | 设置屏幕的旋转方向(XXX:目前仅支持0度和90度)。

tk_init 函数

  • 函数功能：

初始化TK。

  • 函数原型：
ret_t tk_init (wh_t w, wh_t h, app_type_t app_type, const char* app_name, const char* app_root);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
w | wh_t | LCD宽度。
h | wh_t | LCD高度。
app_type | app_type_t | 应用程序的类型。
app_name | const char* | 应用程序的名称(必须为常量字符串)。
app_root | const char* | 应用程序的根目录，用于定位资源文件(必须为常量字符串)。

tk_quit 函数

  • 函数功能：

退出TK事件主循环。

  • 函数原型：
ret_t tk_quit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_run 函数

  • 函数功能：

进入TK事件主循环。

  • 函数原型：
ret_t tk_run ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

tk_set_lcd_orientation 函数

  • 函数功能：

设置屏幕的旋转方向(XXX:目前仅支持0度和90度)。

  • 函数原型：
ret_t tk_set_lcd_orientation (int orientation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
orientation | int | 旋转方向。


tk_thread_t

概述

线程对象。

函数

函数名称 | 说明
tk_thread_create | 创建thread对象。
tk_thread_destroy | 销毁thread对象。
tk_thread_get_args | 获取线程的参数。
tk_thread_get_priority_from_platform | 获取平台相关的优先级
tk_thread_join | 等待线程退出。
tk_thread_self | 获取当前线程的原生句柄。
tk_thread_set_name | 设置线程的名称。
tk_thread_set_priority | 设置线程的优先级。
tk_thread_set_stack_size | 设置线程的栈大小。
tk_thread_start | 启动线程。

tk_thread_create 函数

  • 函数功能：

创建thread对象。

  • 函数原型：
tk_thread_t* tk_thread_create (tk_thread_entry_t entry, void* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_thread_t* | thread对象。
entry | tk_thread_entry_t | 线程函数。
args | void* | 线程函数的上下文。

tk_thread_destroy 函数

  • 函数功能：

销毁thread对象。 在销毁对象前必须调用 tk_thread_join 函数等待退出线程

  • 函数原型：
ret_t tk_thread_destroy (tk_thread_t* thread);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | tk_thread_t* | thread对象。

tk_thread_get_args 函数

  • 函数功能：

获取线程的参数。

  • 函数原型：
void* tk_thread_get_args (tk_thread_t* thread);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回线程的参数。
thread | tk_thread_t* | thread对象。

tk_thread_get_priority_from_platform 函数

  • 函数功能：

获取平台相关的优先级

部分平台支持。 根据 AWTK 通用优先级枚举获取平台相关的优先级

  • 函数原型：
int32_t tk_thread_get_priority_from_platform (tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回平台相关的优先级。
priority | tk_thread_priority_t | 优先级。

tk_thread_join 函数

  • 函数功能：

等待线程退出。 必须调用 tk_thread_destroy 函数来释放线程资源，以免出现内存泄漏的问题。

  • 函数原型：
ret_t tk_thread_join (tk_thread_t* thread);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | tk_thread_t* | thread对象。

tk_thread_self 函数

  • 函数功能：

获取当前线程的原生句柄。

  • 函数原型：
uint64_t tk_thread_self ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回当前线程的原生句柄。

tk_thread_set_name 函数

  • 函数功能：

设置线程的名称。

需要在调用start之前调用本函数。

  • 函数原型：
ret_t tk_thread_set_name (tk_thread_t* thread, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | tk_thread_t* | thread对象。
name | const char* | 名称。

tk_thread_set_priority 函数

  • 函数功能：

设置线程的优先级。

部分平台支持。

  • 函数原型：
ret_t tk_thread_set_priority (tk_thread_t* thread, tk_thread_priority_t priority);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | tk_thread_t* | thread对象。
priority | tk_thread_priority_t | 优先级。

tk_thread_set_stack_size 函数

  • 函数功能：

设置线程的栈大小。

需要在调用start之前调用本函数。

  • 函数原型：
ret_t tk_thread_set_stack_size (tk_thread_t* thread, uint32_t stack_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | tk_thread_t* | thread对象。
stack_size | uint32_t | 栈的大小。

tk_thread_start 函数

  • 函数功能：

启动线程。

  • 函数原型：
ret_t tk_thread_start (tk_thread_t* thread);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
thread | tk_thread_t* | thread对象。


tokenizer_t

概述

从字符串中解析出一个一个的token。

tokenizer_t tokenizer;
tokenizer_t* t = tokenizer_init(&tokenizer, "20,111.2,22.3,333.3,44,555.5", 0xffffff, ",");

while(tokenizer_has_more(t)) {
double v = tokenizer_next_float(t, 0);
log_debug("%lf\n", v);
}

tokenizer_deinit(t);

函数

函数名称 | 说明
tokenizer_deinit | 重置tokenizer。
tokenizer_has_more | 是否还有下一个token。
tokenizer_init | 初始化tokenizer对象。
tokenizer_init_ex | 初始化tokenizer对象。
tokenizer_next | 获取下一个token。
tokenizer_next_expr_until | 获取下一个expr，该expr直到遇到指定的char。
tokenizer_next_float | 获取下一个token，并转换成float。
tokenizer_next_int | 获取下一个token，并转换成int。
tokenizer_next_str | 获取下一个字符串(允许使用英文单引号和双引号界定字符串)。
tokenizer_next_until | 获取下一个token，该token直到遇到指定的char。

属性

属性名称 | 类型 | 说明
cursor | uint32_t | 当前位置。
separtor | const char* | 分隔字符串。
single_char_token | const char* | 单字符的token。
size | uint32_t | 字符串的长度。
str | const char* | 字符串。

tokenizer_deinit 函数

  • 函数功能：

重置tokenizer。

  • 函数原型：
ret_t tokenizer_deinit (tokenizer_t* tokenizer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
tokenizer | tokenizer_t* | tokenizer对象。

tokenizer_has_more 函数

  • 函数功能：

是否还有下一个token。

  • 函数原型：
bool_t tokenizer_has_more (tokenizer_t* tokenizer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 还有下一个token返回TRUE，否则返回FALSE。
tokenizer | tokenizer_t* | tokenizer对象。

tokenizer_init 函数

  • 函数功能：

初始化tokenizer对象。

  • 函数原型：
tokenizer_t* tokenizer_init (tokenizer_t* tokenizer, const char* str, uint32_t size, const char* separtor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tokenizer_t* | tokenizer对象本身。
tokenizer | tokenizer_t* | tokenizer对象。
str | const char* | 要解析的字符串。
size | uint32_t | 字符串长度。
separtor | const char* | 分隔字符。

tokenizer_init_ex 函数

  • 函数功能：

初始化tokenizer对象。

  • 函数原型：
tokenizer_t* tokenizer_init_ex (tokenizer_t* tokenizer, const char* str, uint32_t size, const char* separtor, const char* single_char_token);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tokenizer_t* | tokenizer对象本身。
tokenizer | tokenizer_t* | tokenizer对象。
str | const char* | 要解析的字符串。
size | uint32_t | 字符串长度。
separtor | const char* | 分隔字符。
single_char_token | const char* | 单字符token。

tokenizer_next 函数

  • 函数功能：

获取下一个token。

  • 函数原型：
const char* tokenizer_next (tokenizer_t* tokenizer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 成功返回token，失败返回NULL。
tokenizer | tokenizer_t* | tokenizer对象。

tokenizer_next_expr_until 函数

  • 函数功能：

获取下一个expr，该expr直到遇到指定的char。

  • 函数原型：
const char* tokenizer_next_expr_until (tokenizer_t* tokenizer, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 成功返回token，失败返回NULL。
tokenizer | tokenizer_t* | tokenizer对象。
str | const char* | 字符集。

tokenizer_next_float 函数

  • 函数功能：

获取下一个token，并转换成float。

  • 函数原型：
float tokenizer_next_float (tokenizer_t* tokenizer, float defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 成功返回token的float值，失败返回缺省值。
tokenizer | tokenizer_t* | tokenizer对象。
defval | float | 缺省值。

tokenizer_next_int 函数

  • 函数功能：

获取下一个token，并转换成int。

  • 函数原型：
int tokenizer_next_int (tokenizer_t* tokenizer, int defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 成功返回token的int值，失败返回缺省值。
tokenizer | tokenizer_t* | tokenizer对象。
defval | int | 缺省值。

tokenizer_next_str 函数

  • 函数功能：

获取下一个字符串(允许使用英文单引号和双引号界定字符串)。

  • 函数原型：
const char* tokenizer_next_str (tokenizer_t* tokenizer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 成功返回字符串，失败返回NULL。
tokenizer | tokenizer_t* | tokenizer对象。

tokenizer_next_until 函数

  • 函数功能：

获取下一个token，该token直到遇到指定的char。

  • 函数原型：
const char* tokenizer_next_until (tokenizer_t* tokenizer, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 成功返回token，失败返回NULL。
tokenizer | tokenizer_t* | tokenizer对象。
str | const char* | 字符集。

cursor 属性

当前位置。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

separtor 属性

分隔字符串。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

single_char_token 属性

单字符的token。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

字符串的长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

str 属性

字符串。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


typed_array_t

概述

带类型的动态数组，根据元素个数动态调整数组的容量。

示例：

value_t v;
typed_array_t* typed_array = typed_array_create(VALUE_TYPE_INT, 10);
typed_array_push(a, value_set_int(&v, 123));
typed_array_push(a, value_set_int(&v, 234));
...
typed_array_destroy(typed_array);

函数

函数名称 | 说明
typed_array_clear | 清除全部元素。
typed_array_create | 创建typed_array对象。
typed_array_destroy | 销毁typed_array对象。
typed_array_extend | 扩展typed_array到指定容量。
typed_array_get | 获取指定序数的元素。
typed_array_insert | 在指定序数插入元素。
typed_array_pop | 弹出最后一个元素。
typed_array_push | 在尾巴追加一个元素。
typed_array_remove | 删除指定位置的元素。
typed_array_set | 设置指定序数的元素。
typed_array_tail | 返回最后一个元素。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 数组的容量大小。
data | uint8_t* | 数组中的元素。
element_size | uint32_t | 单个元素的大小。
size | uint32_t | 数组中元素的个数。
type | value_type_t | 元素的类型。

typed_array_clear 函数

  • 函数功能：

清除全部元素。

  • 函数原型：
ret_t typed_array_clear (typed_array_t* typed_array);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。

typed_array_create 函数

  • 函数功能：

创建typed_array对象。

  • 函数原型：
typed_array_t* typed_array_create (value_type_t type, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | typed_array_t* | 数组对象。
type | value_type_t | 元素的类型。
capacity | uint32_t | 数组的初始容量(元素个数)。

typed_array_destroy 函数

  • 函数功能：

销毁typed_array对象。

  • 函数原型：
ret_t typed_array_destroy (typed_array_t* typed_array);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。

typed_array_extend 函数

  • 函数功能：

扩展typed_array到指定容量。

  • 函数原型：
ret_t typed_array_extend (typed_array_t* typed_array, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 元素的类型。
capacity | uint32_t | 数组的容量(元素个数)。

typed_array_get 函数

  • 函数功能：

获取指定序数的元素。

  • 函数原型：
ret_t typed_array_get (typed_array_t* typed_array, uint32_t index, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
index | uint32_t | 序数。
v | value_t* | 返回的元素。

typed_array_insert 函数

  • 函数功能：

在指定序数插入元素。

  • 函数原型：
ret_t typed_array_insert (typed_array_t* typed_array, uint32_t index, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
index | uint32_t | 序数。
v | const value_t* | 元素。

typed_array_pop 函数

  • 函数功能：

弹出最后一个元素。

  • 函数原型：
ret_t typed_array_pop (typed_array_t* typed_array, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
v | value_t* | 弹出的元素。

typed_array_push 函数

  • 函数功能：

在尾巴追加一个元素。

  • 函数原型：
ret_t typed_array_push (typed_array_t* typed_array, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
v | const value_t* | 待追加的元素。

typed_array_remove 函数

  • 函数功能：

删除指定位置的元素。

  • 函数原型：
ret_t typed_array_remove (typed_array_t* typed_array, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
index | uint32_t | 位置序数。

typed_array_set 函数

  • 函数功能：

设置指定序数的元素。

  • 函数原型：
ret_t typed_array_set (typed_array_t* typed_array, uint32_t index, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
index | uint32_t | 序数。
v | const value_t* | 元素。

typed_array_tail 函数

  • 函数功能：

返回最后一个元素。

  • 函数原型：
ret_t typed_array_tail (typed_array_t* typed_array, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
typed_array | typed_array_t* | 数组对象。
v | value_t* | 返回的元素。

capacity 属性

数组的容量大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

data 属性

数组中的元素。

  • 类型：uint8_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

element_size 属性

单个元素的大小。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

数组中元素的个数。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

type 属性

元素的类型。

  • 类型：value_type_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


ubjson_parser_t

概述

ubjson parser

函数

函数名称 | 说明
ubjson_dump | 将ubjson数据打印到控制台。
ubjson_parse | 解析ubjson数据，遇到key/value时调用提供的回调函数。
ubjson_to_object | 解析ubjson数据，生成object对象。

ubjson_dump 函数

  • 函数功能：

将ubjson数据打印到控制台。

  • 函数原型：
ret_t ubjson_dump (void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | void* | 数据。
size | uint32_t | 数据的长度。

ubjson_parse 函数

  • 函数功能：

解析ubjson数据，遇到key/value时调用提供的回调函数。

  • 函数原型：
ret_t ubjson_parse (void* data, uint32_t size, ubjson_on_key_value_t on_key_value, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | void* | 数据。
size | uint32_t | 数据的长度。
on_key_value | ubjson_on_key_value_t | 回调函数。
ctx | void* | 回调函数的上下文。

ubjson_to_object 函数

  • 函数功能：

解析ubjson数据，生成object对象。

  • 函数原型：
tk_object_t* ubjson_to_object (void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 返回object表示的数据。
data | void* | 数据。
size | uint32_t | 数据的长度。


ubjson_writer_t

概述

ubjson writer

函数

函数名称 | 说明
ubjson_writer_init | 初始化。
ubjson_writer_write_array_begin | 写入数组开始。
ubjson_writer_write_array_end | 写入数组结束。
ubjson_writer_write_char | 写入char。
ubjson_writer_write_data | 写入二进制数据。
ubjson_writer_write_false | 写入false。
ubjson_writer_write_float32 | 写入float。
ubjson_writer_write_float64 | 写入double。
ubjson_writer_write_int | 写入int。
ubjson_writer_write_int16 | 写入int16。
ubjson_writer_write_int32 | 写入int32。
ubjson_writer_write_int64 | 写入int64。
ubjson_writer_write_int8 | 写入int8。
ubjson_writer_write_key | 写入key。
ubjson_writer_write_kv_array_begin | 写key和数组的开始。
ubjson_writer_write_kv_bool | 写入key和bool的值。
ubjson_writer_write_kv_double | 写入key和double的值。
ubjson_writer_write_kv_float | 写入key和float的值。
ubjson_writer_write_kv_int | 写入key和int的值。
ubjson_writer_write_kv_int64 | 写入key和int64_t的值。
ubjson_writer_write_kv_object | 写key和对象。
ubjson_writer_write_kv_object_begin | 写key和对象的开始。
ubjson_writer_write_kv_str | 写入key和str的值。
ubjson_writer_write_kv_str_len | 写入key和str的值。
ubjson_writer_write_kv_value | 写入key和value_t的值。
ubjson_writer_write_kv_wstr | 写入key和wstr的值。
ubjson_writer_write_kv_wstr_len | 写入key和wstr的值。
ubjson_writer_write_noop | 写入noop。
ubjson_writer_write_null | 写入null。
ubjson_writer_write_object | 写入obj。
ubjson_writer_write_object_begin | 写入对象开始。
ubjson_writer_write_object_end | 写入对象结束。
ubjson_writer_write_str | 写入str。
ubjson_writer_write_str_len | 写入str。
ubjson_writer_write_true | 写入true。
ubjson_writer_write_uint8 | 写入uint8。
ubjson_writer_write_wstr | 写入wstr。
ubjson_writer_write_wstr_len | 写入wstr。

ubjson_writer_init 函数

  • 函数功能：

初始化。

  • 函数原型：
ubjson_writer_t* ubjson_writer_init (ubjson_writer_t* writer, ubjson_write_callback_t write, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ubjson_writer_t* | 返回writer对象。
writer | ubjson_writer_t* | writer对象。
write | ubjson_write_callback_t | 真正写入数据的函数。
ctx | void* | write函数的上下文。

ubjson_writer_write_array_begin 函数

  • 函数功能：

写入数组开始。 即： [

  • 函数原型：
ret_t ubjson_writer_write_array_begin (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_array_end 函数

  • 函数功能：

写入数组结束。 即： ]

  • 函数原型：
ret_t ubjson_writer_write_array_end (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_char 函数

  • 函数功能：

写入char。

  • 函数原型：
ret_t ubjson_writer_write_char (ubjson_writer_t* writer, char value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | char | 要写入的值。

ubjson_writer_write_data 函数

  • 函数功能：

写入二进制数据。

  • 函数原型：
ret_t ubjson_writer_write_data (ubjson_writer_t* writer, const void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
data | const void* | 数据。
size | uint32_t | 数据长度。

ubjson_writer_write_false 函数

  • 函数功能：

写入false。

  • 函数原型：
ret_t ubjson_writer_write_false (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_float32 函数

  • 函数功能：

写入float。

  • 函数原型：
ret_t ubjson_writer_write_float32 (ubjson_writer_t* writer, float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | float | 要写入的值。

ubjson_writer_write_float64 函数

  • 函数功能：

写入double。

  • 函数原型：
ret_t ubjson_writer_write_float64 (ubjson_writer_t* writer, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | double | 要写入的值。

ubjson_writer_write_int 函数

  • 函数功能：

写入int。

  • 函数原型：
ret_t ubjson_writer_write_int (ubjson_writer_t* writer, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | int32_t | 要写入的值。

ubjson_writer_write_int16 函数

  • 函数功能：

写入int16。

  • 函数原型：
ret_t ubjson_writer_write_int16 (ubjson_writer_t* writer, int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | int16_t | 要写入的值。

ubjson_writer_write_int32 函数

  • 函数功能：

写入int32。

  • 函数原型：
ret_t ubjson_writer_write_int32 (ubjson_writer_t* writer, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | int32_t | 要写入的值。

ubjson_writer_write_int64 函数

  • 函数功能：

写入int64。

  • 函数原型：
ret_t ubjson_writer_write_int64 (ubjson_writer_t* writer, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | int64_t | 要写入的值。

ubjson_writer_write_int8 函数

  • 函数功能：

写入int8。

  • 函数原型：
ret_t ubjson_writer_write_int8 (ubjson_writer_t* writer, int8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | int8_t | 要写入的值。

ubjson_writer_write_key 函数

  • 函数功能：

写入key。

  • 函数原型：
ret_t ubjson_writer_write_key (ubjson_writer_t* writer, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | const char* | key的名称。

ubjson_writer_write_kv_array_begin 函数

  • 函数功能：

写key和数组的开始。

即：”key”: [

  • 函数原型：
ret_t ubjson_writer_write_kv_array_begin (ubjson_writer_t* writer, const char* key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键值。

ubjson_writer_write_kv_bool 函数

  • 函数功能：

写入key和bool的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_bool (ubjson_writer_t* writer, const char* key, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | bool_t | 值。

ubjson_writer_write_kv_double 函数

  • 函数功能：

写入key和double的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_double (ubjson_writer_t* writer, const char* key, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | double | 值。

ubjson_writer_write_kv_float 函数

  • 函数功能：

写入key和float的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_float (ubjson_writer_t* writer, const char* key, float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | float | 值。

ubjson_writer_write_kv_int 函数

  • 函数功能：

写入key和int的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_int (ubjson_writer_t* writer, const char* key, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | int32_t | 值。

ubjson_writer_write_kv_int64 函数

  • 函数功能：

写入key和int64_t的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_int64 (ubjson_writer_t* writer, const char* key, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | int64_t | 值。

ubjson_writer_write_kv_object 函数

  • 函数功能：

写key和对象。

即：”key”: { object }

  • 函数原型：
ret_t ubjson_writer_write_kv_object (ubjson_writer_t* writer, const char* key, tk_object_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | tk_object_t* | 对象。

ubjson_writer_write_kv_object_begin 函数

  • 函数功能：

写key和对象的开始。

即：”key”: {

  • 函数原型：
ret_t ubjson_writer_write_kv_object_begin (ubjson_writer_t* writer, const char* key);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键值。

ubjson_writer_write_kv_str 函数

  • 函数功能：

写入key和str的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_str (ubjson_writer_t* writer, const char* key, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | const char* | 字符串。

ubjson_writer_write_kv_str_len 函数

  • 函数功能：

写入key和str的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_str_len (ubjson_writer_t* writer, const char* key, const char* value, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | const char* | 字符串。
len | uint32_t | 字符串的长度。

ubjson_writer_write_kv_value 函数

  • 函数功能：

写入key和value_t的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_value (ubjson_writer_t* writer, const char* key, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | const value_t* | 值。

ubjson_writer_write_kv_wstr 函数

  • 函数功能：

写入key和wstr的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_wstr (ubjson_writer_t* writer, const char* key, const wchar_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | const wchar_t* | 字符串。

ubjson_writer_write_kv_wstr_len 函数

  • 函数功能：

写入key和wstr的值。

即：”key”: value

  • 函数原型：
ret_t ubjson_writer_write_kv_wstr_len (ubjson_writer_t* writer, const char* key, const wchar_t* value, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
key | const char* | 键名。
value | const wchar_t* | 字符串。
len | uint32_t | 字符串的长度。

ubjson_writer_write_noop 函数

  • 函数功能：

写入noop。

  • 函数原型：
ret_t ubjson_writer_write_noop (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_null 函数

  • 函数功能：

写入null。

  • 函数原型：
ret_t ubjson_writer_write_null (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_object 函数

  • 函数功能：

写入obj。

  • 函数原型：
ret_t ubjson_writer_write_object (ubjson_writer_t* writer, tk_object_t* obj);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
obj | tk_object_t* | 要写入的对象。

ubjson_writer_write_object_begin 函数

  • 函数功能：

写入对象开始。 即： {

  • 函数原型：
ret_t ubjson_writer_write_object_begin (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_object_end 函数

  • 函数功能：

写入对象结束。 即：}

  • 函数原型：
ret_t ubjson_writer_write_object_end (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_str 函数

  • 函数功能：

写入str。

  • 函数原型：
ret_t ubjson_writer_write_str (ubjson_writer_t* writer, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | const char* | 要写入的字符串。

ubjson_writer_write_str_len 函数

  • 函数功能：

写入str。

  • 函数原型：
ret_t ubjson_writer_write_str_len (ubjson_writer_t* writer, const char* value, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | const char* | 要写入的字符串。
len | uint32_t | 字符串的长度。

ubjson_writer_write_true 函数

  • 函数功能：

写入true。

  • 函数原型：
ret_t ubjson_writer_write_true (ubjson_writer_t* writer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。

ubjson_writer_write_uint8 函数

  • 函数功能：

写入uint8。

  • 函数原型：
ret_t ubjson_writer_write_uint8 (ubjson_writer_t* writer, uint8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | uint8_t | 要写入的值。

ubjson_writer_write_wstr 函数

  • 函数功能：

写入wstr。

  • 函数原型：
ret_t ubjson_writer_write_wstr (ubjson_writer_t* writer, const wchar_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | const wchar_t* | 要写入的字符串。

ubjson_writer_write_wstr_len 函数

  • 函数功能：

写入wstr。

  • 函数原型：
ret_t ubjson_writer_write_wstr_len (ubjson_writer_t* writer, const wchar_t* value, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
writer | ubjson_writer_t* | writer对象。
value | const wchar_t* | 要写入的字符串。
len | uint32_t | 字符串的长度。


udp_t

概述

函数

函数名称 | 说明
tk_udp_connect | 连接到指定服务器。
tk_udp_listen | 监听指定端口，成功返回sock句柄。
tk_udp_socket | 创建UDP socket。

tk_udp_connect 函数

  • 函数功能：

连接到指定服务器。

  • 函数原型：
int tk_udp_connect (const char* host, int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回sock句柄。
host | const char* | 主机名或IP地址。
port | int | 端口号。

tk_udp_listen 函数

  • 函数功能：

监听指定端口，成功返回sock句柄。

  • 函数原型：
int tk_udp_listen (int port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回sock句柄。
port | int | 端口号。

tk_udp_socket 函数

  • 函数功能：

创建UDP socket。

  • 函数原型：
int tk_udp_socket ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回sock句柄。


ui_binary_writer_t

概述

生成二进制格式的UI描述数据。

函数

函数名称 | 说明
ui_binary_writer_init | 初始化ui_binary_writer对象。

ui_binary_writer_init 函数

  • 函数功能：

初始化ui_binary_writer对象。

  • 函数原型：
ui_builder_t* ui_binary_writer_init (ui_binary_writer_t* writer, wbuffer_t* wbuffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ui_builder_t* | 返回ui\_builder对象。
writer | ui_binary_writer_t* | writer对象。
wbuffer | wbuffer_t* | 保存结果的buffer。


ui_builder_default_t

概述

构建widget树。

函数

函数名称 | 说明
ui_builder_default_create | 创建缺省的ui_builder对象。

ui_builder_default_create 函数

  • 函数功能：

创建缺省的ui_builder对象。

  • 函数原型：
ui_builder_t* ui_builder_default_create (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ui_builder_t* | 返回ui\_builder对象。
name | const char* | 窗口的缺省名称。


ui_builder_t

概述

界面构造器接口。

负责把ui_loader解析的数据进一步处理，至于具体做什么，由具体实现决定。常见的实现有：

  • 构建widget对象树。

  • 生成二进制的UI描述数据。

  • 生成XML格式的UI描述数据。

函数

函数名称 | 说明
ui_builder_destroy | 销毁builder。
ui_builder_on_end | ui_loader在解析结束时，调用本函数做些收尾工作。
ui_builder_on_start | ui_loader在解析开始时，调用本函数做些准备工作。
ui_builder_on_widget_end | ui_loader在解析到widget结束时，调用本函数进一步处理。
ui_builder_on_widget_prop | ui_loader在解析到widget的属性时，调用本函数进一步处理。
ui_builder_on_widget_prop_end | ui_loader在解析到widget全部属性结束时，调用本函数进一步处理。
ui_builder_on_widget_start | ui_loader在解析到widget时，调用本函数进一步处理。

ui_builder_destroy 函数

  • 函数功能：

销毁builder。

  • 函数原型：
ret_t ui_builder_destroy (ui_builder_t* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。

ui_builder_on_end 函数

  • 函数功能：

ui_loader在解析结束时，调用本函数做些收尾工作。

  • 函数原型：
ret_t ui_builder_on_end (ui_builder_t* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。

ui_builder_on_start 函数

  • 函数功能：

ui_loader在解析开始时，调用本函数做些准备工作。

  • 函数原型：
ret_t ui_builder_on_start (ui_builder_t* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。

ui_builder_on_widget_end 函数

  • 函数功能：

ui_loader在解析到widget结束时，调用本函数进一步处理。

  • 函数原型：
ret_t ui_builder_on_widget_end (ui_builder_t* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。

ui_builder_on_widget_prop 函数

  • 函数功能：

ui_loader在解析到widget的属性时，调用本函数进一步处理。

  • 函数原型：
ret_t ui_builder_on_widget_prop (ui_builder_t* builder, const char* name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。
name | const char* | 属性名。
value | const char* | 属性值。

ui_builder_on_widget_prop_end 函数

  • 函数功能：

ui_loader在解析到widget全部属性结束时，调用本函数进一步处理。

  • 函数原型：
ret_t ui_builder_on_widget_prop_end (ui_builder_t* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。

ui_builder_on_widget_start 函数

  • 函数功能：

ui_loader在解析到widget时，调用本函数进一步处理。

  • 函数原型：
ret_t ui_builder_on_widget_start (ui_builder_t* builder, const widget_desc_t* desc);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
builder | ui_builder_t* | builder对象。
desc | const widget_desc_t* | widget描述信息。


ui_feedback_t

概述

提供按键音、触屏音和震动等反馈。

函数

函数名称 | 说明
ui_feedback_deinit | ~初始化。
ui_feedback_init | 初始化。
ui_feedback_request | 请求反馈。

ui_feedback_deinit 函数

  • 函数功能：

~初始化。

  • 函数原型：
ret_t ui_feedback_deinit ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。

ui_feedback_init 函数

  • 函数功能：

初始化。 设置实际的处理函数。

  • 函数原型：
ret_t ui_feedback_init (ui_on_feedback_t on_feedback, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
on_feedback | ui_on_feedback_t | 实际的处理函数。
ctx | void* | 回调函数的上下文。

ui_feedback_request 函数

  • 函数功能：

请求反馈。

  • 函数原型：
ret_t ui_feedback_request (widget_t* widget, event_t* evt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
evt | event_t* | event对象。


ui_loader_default_t

概述

二进制格式的UI资源加载器。

函数

函数名称 | 说明
default_ui_loader | 获取二进制格式格式的UI资源加载器对象。

default_ui_loader 函数

  • 函数功能：

获取二进制格式格式的UI资源加载器对象。

  • 函数原型：
ui_loader_t* default_ui_loader ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ui_loader_t* | 返回UI加载器对象。


ui_loader_t

概述

UI加载器。

负责从资源加载界面描述数据，然后分发给ui_builder，由ui_builder进一步处理。

常见的实现有两种：

  • XML格式的加载器。

  • 二进制格式的加载器。

函数

函数名称 | 说明
ui_loader_load | 加载界面描述数据，然后分发给ui_builder，由ui_builder进一步处理。
ui_loader_load_widget | 从指定的资源加载widget对象，通常用于加载非窗口的widget。
ui_loader_load_widget_from_xml | 从xml数据创建widget。
ui_loader_load_widget_with_parent | 从指定的资源加载widget对象，并为widget对象指定父控件对象，通常用于加载非窗口的widget。

ui_loader_load 函数

  • 函数功能：

加载界面描述数据，然后分发给ui_builder，由ui_builder进一步处理。

  • 函数原型：
ret_t ui_loader_load (ui_loader_t* loader, const uint8_t* data, uint32_t size, ui_builder_t* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
loader | ui_loader_t* | loader对象。
data | const uint8_t* | 数据。
size | uint32_t | 数据长度。
builder | ui_builder_t* | 负责进一步处理，比如构建UI界面。

ui_loader_load_widget 函数

  • 函数功能：

从指定的资源加载widget对象，通常用于加载非窗口的widget。

需要自己将widget加入窗口后，再调用widget_layout。

  • 函数原型：
widget_t* ui_loader_load_widget (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回widget对象。
name | const char* | 资源名。

ui_loader_load_widget_from_xml 函数

  • 函数功能：

从xml数据创建widget。

需要自己将widget加入窗口后，再调用widget_layout。

  • 函数原型：
widget_t* ui_loader_load_widget_from_xml (widget_t* parent, const char* xml, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回widget对象。
parent | widget_t* | 父控件对象。
xml | const char* | XML数据。
size | uint32_t | XML数据长度。

ui_loader_load_widget_with_parent 函数

  • 函数功能：

从指定的资源加载widget对象，并为widget对象指定父控件对象，通常用于加载非窗口的widget。

  • 函数原型：
widget_t* ui_loader_load_widget_with_parent (const char* name, widget_t* parent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回widget对象。
name | const char* | 资源名。
parent | widget_t* | 父控件对象。


ui_loader_xml_t

概述

XML格式的UI资源加载器。

函数

函数名称 | 说明
xml_ui_loader | 获取XML格式的UI资源加载器对象。

xml_ui_loader 函数

  • 函数功能：

获取XML格式的UI资源加载器对象。

  • 函数原型：
ui_loader_t* xml_ui_loader ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | ui_loader_t* | 返回UI加载器对象。


ui_xml_writer_t

概述

生成XML格式的UI描述数据。

函数

函数名称 | 说明
ui_xml_writer_init | 初始化ui_xml_writer对象。

ui_xml_writer_init 函数

  • 函数功能：

初始化ui_xml_writer对象。

  • 函数原型：
ui_builder_t* ui_xml_writer_init (ui_xml_writer_t* writer, str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ui_builder_t* | 返回ui\_builder对象。
writer | ui_xml_writer_t* | writer对象。
str | str_t* | 保存结果的str。


url_t

概述

URL

函数

函数名称 | 说明
url_create | 创建URL对象。
url_destroy | 销毁url对象。
url_get_param | 获取参数。
url_get_param_bool | 获取参数。
url_get_param_int32 | 获取参数。
url_set_host | 设置主机名。
url_set_param | 设置参数。
url_set_password | 设置密码。
url_set_path | 设置路径。
url_set_port | 设置端口。
url_set_schema | 设置schema。
url_set_user_name | 设置用户名。
url_to_string | 格式化成字符串。

属性

属性名称 | 类型 | 说明
host | char* | 主机名。
params | tk_object_t* | 参数集合。
password | char* | 密码。
path | char* | 路径。
port | int32_t | 端口。
schema | char* | schema。
user_name | char* | 用户名。

url_create 函数

  • 函数功能：

创建URL对象。

  • 函数原型：
url_t* url_create (const char* surl);
  • 参数说明：
参数 | 类型 | 说明
返回值 | url_t* | 返回URL对象。
surl | const char* | 字符串格式的URL。

url_destroy 函数

  • 函数功能：

销毁url对象。

  • 函数原型：
ret_t url_destroy (url_t* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。

url_get_param 函数

  • 函数功能：

获取参数。

  • 函数原型：
const char* url_get_param (url_t* url, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回指定参数名的参数值。
url | url_t* | url对象。
name | const char* | 参数名。

url_get_param_bool 函数

  • 函数功能：

获取参数。

  • 函数原型：
bool_t url_get_param_bool (url_t* url, const char* name, bool_t defvalue);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回指定参数名的参数值。
url | url_t* | url对象。
name | const char* | 参数名。
defvalue | bool_t | 默认值。

url_get_param_int32 函数

  • 函数功能：

获取参数。

  • 函数原型：
int32_t url_get_param_int32 (url_t* url, const char* name, int32_t defvalue);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回指定参数名的参数值。
url | url_t* | url对象。
name | const char* | 参数名。
defvalue | int32_t | 默认值。

url_set_host 函数

  • 函数功能：

设置主机名。

  • 函数原型：
ret_t url_set_host (url_t* url, const char* host);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
host | const char* | 主机名。

url_set_param 函数

  • 函数功能：

设置参数。

  • 函数原型：
ret_t url_set_param (url_t* url, const char* name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
name | const char* | 参数名。
value | const char* | 参数值。

url_set_password 函数

  • 函数功能：

设置密码。

  • 函数原型：
ret_t url_set_password (url_t* url, const char* password);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
password | const char* | 密码。

url_set_path 函数

  • 函数功能：

设置路径。

  • 函数原型：
ret_t url_set_path (url_t* url, const char* path);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
path | const char* | 路径。

url_set_port 函数

  • 函数功能：

设置端口。

  • 函数原型：
ret_t url_set_port (url_t* url, int32_t port);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
port | int32_t | 端口。

url_set_schema 函数

  • 函数功能：

设置schema。

  • 函数原型：
ret_t url_set_schema (url_t* url, const char* schema);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
schema | const char* | schema。

url_set_user_name 函数

  • 函数功能：

设置用户名。

  • 函数原型：
ret_t url_set_user_name (url_t* url, const char* user_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
url | url_t* | url对象。
user_name | const char* | 用户名。

url_to_string 函数

  • 函数功能：

格式化成字符串。

返回的字符串在URL对象销毁或下一次调用本函数时失效。

  • 函数原型：
const char* url_to_string (url_t* url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串格式的URL。
url | url_t* | url对象。

host 属性

主机名。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

params 属性

参数集合。

  • 类型：tk_object_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

password 属性

密码。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

path 属性

路径。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

port 属性

端口。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

schema 属性

schema。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

user_name 属性

用户名。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


utf8

概述

wchar_t和char类型转换接口。

示例：

 const char* str = "hello";
 const wchar_t* wstr = L"hello";
 char res_str[128];
 wchar_t res_wstr[128];

 tk_utf8_to_utf16(str, res_wstr, ARRAY_SIZE(res_wstr));
 tk_utf8_from_utf16(wstr, res_str, ARRAY_SIZE(res_str));

函数

函数名称 | 说明
tk_\utf8_from_utf16 |
tk_utf8_to_utf16 |

utf8_from_utf16 函数

  • 函数功能：

将wchar_t类型转换为char类型。

  • 函数原型：
char* tk_utf8_from_utf16 (const wchar_t* str, const char* out, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 值。
str | const wchar_t* | str。
out | const char* | 返回结果缓冲区。
size | uint32_t | 缓冲区大小。

utf8_from_utf16 函数

  • 函数功能：

将char类型转换为wchar_t类型。

  • 函数原型：
wchar_t* tk_utf8_to_utf16 (const char* str, const wchar_t* out, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wchar_t* | 值。
str | const char* | str。
out | const wchar_t* | 返回结果缓冲区。
size | uint32_t | 缓冲区大小。


utf8_t

概述

wchar_t和char类型转换接口。

示例：

const char* str = "hello";
const wchar_t* wstr = L"hello";
char res_str[128];
wchar_t res_wstr[128];

tk_utf8_to_utf16(str, res_wstr, ARRAY_SIZE(res_wstr));
tk_utf8_from_utf16(wstr, res_str, ARRAY_SIZE(res_str));

函数

函数名称 | 说明
tk_utf8_dup_utf16 | 把ucs字符串转成UTF8字符串。
tk_utf8_from_utf16 | 把ucs字符串转成UTF8字符串。
tk_utf8_from_utf16_ex | 把ucs字符串转成UTF8字符串。
tk_utf8_get_bytes_of_leading | 获取第一个字节为c的字符的字节数。
tk_utf8_to_utf16 | 将char类型转换为wchar_t类型。
tk_utf8_to_utf16_ex | 将char类型转换为wchar_t类型。
tk_utf8_trim_invalid_char | 如果字符串最后一个字符串是无效的，删掉该无效字符。

tk_utf8_dup_utf16 函数

  • 函数功能：

把ucs字符串转成UTF8字符串。 由调用者释放返回的指针。

  • 函数原型：
char* tk_utf8_dup_utf16 (const wchar_t* in, int32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回UTF8字符串。
in | const wchar_t* | 输入字符串。
size | int32_t | 字符串长度。

tk_utf8_from_utf16 函数

  • 函数功能：

把ucs字符串转成UTF8字符串。

  • 函数原型：
char* tk_utf8_from_utf16 (const wchar_t* in, char* out, uint32_t out_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回UTF8字符串。
in | const wchar_t* | 输入字符串。
out | char* | 输出字符串。
out_size | uint32_t | 输出字符串的最大长度。

tk_utf8_from_utf16_ex 函数

  • 函数功能：

把ucs字符串转成UTF8字符串。

  • 函数原型：
char* tk_utf8_from_utf16_ex (const wchar_t* in, uint32_t in_size, char* out, uint32_t out_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回UTF8字符串。
in | const wchar_t* | 输入字符串。
in_size | uint32_t | 输入字符串的长度。
out | char* | 输出字符串。
out_size | uint32_t | 输出字符串的最大长度。

tk_utf8_get_bytes_of_leading 函数

  • 函数功能：

获取第一个字节为c的字符的字节数。

  • 函数原型：
uint32_t tk_utf8_get_bytes_of_leading (uint8_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回字符的字节数。
c | uint8_t | 字符的第一个字节。

tk_utf8_to_utf16 函数

  • 函数功能：

将char类型转换为wchar_t类型。

  • 函数原型：
wchar_t* tk_utf8_to_utf16 (const char* str, wchar_t* out, uint32_t out_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wchar_t* | 值。
str | const char* | str。
out | wchar_t* | 返回结果缓冲区。
out_size | uint32_t | 缓冲区大小。

tk_utf8_to_utf16_ex 函数

  • 函数功能：

将char类型转换为wchar_t类型。

  • 函数原型：
wchar_t* tk_utf8_to_utf16_ex (const char* str, uint32_t size, wchar_t* out, uint32_t out_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wchar_t* | 值。
str | const char* | str。
size | uint32_t | 缓冲区大小。
out | wchar_t* | 返回结果缓冲区。
out_size | uint32_t | 缓冲区大小。

tk_utf8_trim_invalid_char 函数

  • 函数功能：

如果字符串最后一个字符串是无效的，删掉该无效字符。

对于用strncpy/snprintf等生成字符串时，如果目标字符串内存大小不够， 可能最后一个字符被从中间截断，导致该字符是无效的，这可能会触发assert， 本函数可以用来删除最后一个无效字符。

  • 函数原型：
char* tk_utf8_trim_invalid_char (char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回UTF8字符串。
str | char* | 输入字符串。


utils_t

概述

工具类。

函数

函数名称 | 说明
bits_stream_get | 从buff中获取第index位的值。
bits_stream_set | 设置buff中第index位的值。
compare_always_equal | 始终返回相等。
data_url_copy | 将数据从源URL拷贝到目标URL。
default_destroy | 缺省的destroy函数。释放data指向的内存。
dummy_destroy | 空的destroy函数。
file_read_as_unix_text | 读取文本文件。并将windows换行(\r\n)或macos换行(\r)转换为uinux换行(\n)。
filename_to_name | 从完整文件名中获取文件名。
filename_to_name_ex | 从完整文件名中获取文件名。
image_region_parse | 解析子图的区域信息。
object_to_json | 将对象转换成json字符串。
pointer_compare | 指针比较。
ret_code_from_name | 将ret_t的文本名称转换成对应的值。
ret_code_to_name | 将ret_t转换成对应的文本名称。
tk_atob | 将字符串转换为布尔类型。
tk_atof | 将字符串转换为浮点类型。
tk_atoi | 将字符串转换为整型数。
tk_atol | 将字符串转换为整型。
tk_atoul | 将字符串转换为整型。
tk_eval_ratio_or_px | 如果expr以px/PX结束，直接返回expr前面的数值。
tk_free_utf8_argv | 释放utf8字符串数组。
tk_ftoa | 将浮点型转换为字符串。
tk_is_ui_thread | 判断当前线程是否是UI线程。
tk_is_valid_name | 判断是否是有效的属性名。
tk_itoa | 将整型转换为字符串。
tk_lltoa | 将整型转换为字符串。
tk_memcpy | 内存拷贝。
tk_memcpy16 | 拷贝数据2字节。
tk_memcpy32 | 拷贝数据4字节。
tk_memdup | 内存拷贝。
tk_memset16 | 设置数据2字节。
tk_memset24 | 设置数据3字节。
tk_memset32 | 设置数据4字节。
tk_normalize_key_name | 标准化key_name
tk_pixel_copy | 已bpp字节为标准拷贝数据。
tk_pointer_from_int | 将int转换成指针。
tk_pointer_to_int | 将指针转换成int。
tk_qsort | 快速排序。
tk_replace_char | 替换字符。
tk_replace_locale | 将文本中的$locale$替换为对应的语言。
tk_set_ui_thread | 设置UI线程的ID。
tk_skip_to_num | 跳过字符串函数，如：字符串”hello123world”，返回的结果是”123world”。
tk_snprintf | 将可变参数(…)按照format格式化字符串，并将字符串复制到str中。
tk_sscanf | 从字符串读取格式化输入。
tk_sscanf_simple | 从字符串读取格式化输入。
tk_str_append | 字符串追加函数。
tk_str_copy | 字符串拷贝函数。
tk_str_end_with | 检查字符串是否以指定的字符串appendix结尾。
tk_str_is_in_array | 检查字符串是否在字符串数组中。
tk_str_start_with | 检查字符串是否以指定的字符串prefix开头。
tk_str_tolower | 将大写字母转换为小写字母。
tk_str_totitle | 将单词首字母转换为大写字母。
tk_str_toupper | 将小写字母转换为大写字母。
tk_strcmp | 字符串比较函数。
tk_strcpy | 将src所指向的字符串复制到dst。
tk_strdup | 字符串拷贝函数。
tk_stricmp | 字符串比较函数（不区分大小写）。
tk_strlen | 获取字符串的长度。str为空时返回0。
tk_strncpy | 将src所指向的字符串复制到dst，最多复制len个字符串，并在[len]位置添加’\0’。
tk_strncpy_s | 将src所指向的字符串复制到dst，最多复制min(dst_len-1, src_len)个字符串，并在[len]位置添加’\0’。
tk_strndup | 字符串拷贝函数，最多复制len个字符串。
tk_strnlen | 获取字符串的长度。str为空时返回0。
tk_strrstr | 从后往前查找指定的字符串。
tk_strtoi | 将字符串转换为整型。
tk_strtol | 将字符串转换为长整型。
tk_strtoll | 将字符串转换为长整型。
tk_to_utf8_argv | 将宽字符串数组转换成utf8字符串数组。
tk_under_score_to_camel | 将下划线名字转成驼峰名字。
tk_utf8_dup_wstr | 将UCS字符串拷贝为utf8字符串。
tk_vsnprintf | 将可变参数ap按照format格式化字符串，并将字符串复制到str中。
tk_watob | 将宽字符串转换为布尔类型。
tk_watof | 将宽字符串转换为浮点类型。
tk_watoi | 将宽字符串转换为整型。
tk_watoi_n | 将宽字符串转换为整型。
tk_wild_card_match | 简单的通配符匹配。*匹配0到多个字符，?匹配1个字符。
tk_wstr_count_c | 统计UCS字符串中某个字符出现的次数。
tk_wstr_dup_utf8 | 将utf8字符串拷贝为UCS字符串。
tk_wstr_select_word | 获取字符串中距离某个位置最近的单词（中文或英文字符）或数字字符的范围，选取的范围由标点符号或空格分隔开，得到的范围由left与right两个指针获取。
tk_wstrcmp | 字符串比较函数。
tk_wstrdup | 宽字符串拷贝函数。
tk_wstricmp | 字符串比较函数（不区分大小写）。
xml_file_expand_read | expand include process instruction to file content: <?include filename=”view_me.inc” ?>

bits_stream_get 函数

  • 函数功能：

从buff中获取第index位的值。

  • 函数原型：
ret_t bits_stream_get (const uint8_t* buff, uint32_t size, uint32_t index, bool_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buff | const uint8_t* | 数据。
size | uint32_t | 数据长度。
index | uint32_t | 位索引。
value | bool_t* | 返回值。

bits_stream_set 函数

  • 函数功能：

设置buff中第index位的值。

  • 函数原型：
ret_t bits_stream_set (uint8_t* buff, uint32_t size, uint32_t index, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
buff | uint8_t* | 数据。
size | uint32_t | 数据长度。
index | uint32_t | 位索引。
value | bool_t | 值。

compare_always_equal 函数

  • 函数功能：

始终返回相等。

  • 函数原型：
int compare_always_equal (const void* a, const void* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 始终返回0。
a | const void* | 数据a。
b | const void* | 数据b。

data_url_copy 函数

  • 函数功能：

将数据从源URL拷贝到目标URL。

  • 函数原型：
ret_t data_url_copy (const char* dst_url, const char* src_url);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dst_url | const char* | 目标URL。
src_url | const char* | 源URL。

default_destroy 函数

  • 函数功能：

缺省的destroy函数。释放data指向的内存。

  • 函数原型：
ret_t default_destroy (void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | void* | 数据。

dummy_destroy 函数

  • 函数功能：

空的destroy函数。

  • 函数原型：
ret_t dummy_destroy (void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
data | void* | 数据。

file_read_as_unix_text 函数

  • 函数功能：

读取文本文件。并将windows换行(\r\n)或macos换行(\r)转换为uinux换行(\n)。

  • 函数原型：
char* file_read_as_unix_text (const char* filename, uint32_t* size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回读取的数据，需要调用TKMEM_FREE释放。
filename | const char* | 文件名。
size | uint32_t* | 返回实际读取的长度。

filename_to_name 函数

  • 函数功能：

从完整文件名中获取文件名。

  • 函数原型：
ret_t filename_to_name (const char* filename, char* str, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 完整的文件名。
str | char* | 用于返回文件名。
size | uint32_t | 文件名(str参数)的最大长度。

filename_to_name_ex 函数

  • 函数功能：

从完整文件名中获取文件名。

  • 函数原型：
ret_t filename_to_name_ex (const char* filename, char* str, uint32_t size, bool_t remove_extname);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 完整的文件名。
str | char* | 用于返回文件名。
size | uint32_t | 文件名(str参数)的最大长度。
remove_extname | bool_t | 是否移除扩展名。

image_region_parse 函数

  • 函数功能：

解析子图的区域信息。

  • 函数原型：
ret_t image_region_parse (uint32_t img_w, uint32_t img_h, const char* region, rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
img_w | uint32_t | 图片宽度。
img_h | uint32_t | 图片宽度。
region | const char* | region。
r | rect_t* | 返回具体位置。

object_to_json 函数

  • 函数功能：

将对象转换成json字符串。

  • 函数原型：
ret_t object_to_json (tk_object_t* obj, str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
obj | tk_object_t* | object对象。
str | str_t* | 用于返回结果。

pointer_compare 函数

  • 函数功能：

指针比较。

  • 函数原型：
int pointer_compare (const void* a, const void* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回0表示相等，返回负数表示小于，返回整数表示大于。
a | const void* | 数据a。
b | const void* | 数据b。

ret_code_from_name 函数

  • 函数功能：

将ret_t的文本名称转换成对应的值。

  • 函数原型：
ret_t ret_code_from_name (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回对应的值。
name | const char* | 字符串。

ret_code_to_name 函数

  • 函数功能：

将ret_t转换成对应的文本名称。

  • 函数原型：
const char* ret_code_to_name (ret_t ret);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对应的名称。
ret | ret_t | 代码。

tk_atob 函数

  • 函数功能：

将字符串转换为布尔类型。

  • 函数原型：
bool_t tk_atob (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回转换后的布尔类型。
str | const char* | 要转换为布尔类型的字符串。

tk_atof 函数

  • 函数功能：

将字符串转换为浮点类型。

  • 函数原型：
double tk_atof (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回转换后的浮点类型。
str | const char* | 要转换为浮点类型的字符串。

tk_atoi 函数

  • 函数功能：

将字符串转换为整型数。

  • 函数原型：
int32_t tk_atoi (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回转换后的整型。
str | const char* | 要转换为整型数的字符串。

tk_atol 函数

  • 函数功能：

将字符串转换为整型。

  • 函数原型：
int64_t tk_atol (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回转换后的整型。
str | const char* | 要转换为整型的字符串。

tk_atoul 函数

  • 函数功能：

将字符串转换为整型。

  • 函数原型：
uint64_t tk_atoul (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 返回转换后的整型。
str | const char* | 要转换为整型的字符串。

tk_eval_ratio_or_px 函数

  • 函数功能：

如果expr以px/PX结束，直接返回expr前面的数值。 如果expr以%结束，而且数值大于1，返回(数值 * value)/100。 否则将数值当作比例，返回(数值 * value)。

为了兼容以前的处理，如果expr以%结束，但是数值在0到1之间，此时忽略%。

tk_eval_ratio_or_px("0.5", 100) => 50
tk_eval_ratio_or_px("20px", 100) => 20
tk_eval_ratio_or_px("20%", 100) => 20
tk_eval_ratio_or_px("0.5%", 100) => 50
  • 函数原型：
float_t tk_eval_ratio_or_px (const char* expr, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回计算结果。
expr | const char* | 表达式(如100px, 0.5等)
value | int32_t | 值。

tk_free_utf8_argv 函数

  • 函数功能：

释放utf8字符串数组。

  • 函数原型：
ret_t tk_free_utf8_argv (int argc, char** argv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
argc | int | 参数个数。
argv | char** | 参数。

tk_ftoa 函数

  • 函数功能：

将浮点型转换为字符串。

  • 函数原型：
const char* tk_ftoa (char* str, int len, double f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串。
str | char* | 保存字符串缓冲区。
len | int | 缓冲区大小。
f | double | 要转换的浮点型。

tk_is_ui_thread 函数

  • 函数功能：

判断当前线程是否是UI线程。

  • 函数原型：
bool_t tk_is_ui_thread ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示否。

tk_is_valid_name 函数

  • 函数功能：

判断是否是有效的属性名。

  • 函数原型：
bool_t tk_is_valid_name (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 如果名称有效返回TRUE，否则返回FALSE。
name | const char* | 名字字符串。

tk_itoa 函数

  • 函数功能：

将整型转换为字符串。

  • 函数原型：
const char* tk_itoa (char* str, int len, int n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串。
str | char* | 保存字符串缓冲区。
len | int | 缓冲区大小。
n | int | 要转换的整型。

tk_lltoa 函数

  • 函数功能：

将整型转换为字符串。

  • 函数原型：
const char* tk_lltoa (char* str, int len, int64_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串。
str | char* | 保存字符串缓冲区。
len | int | 缓冲区大小。
n | int64_t | 要转换的整型。

tk_memcpy 函数

  • 函数功能：

内存拷贝。 在地址对齐的情况下并且少于 64 个字节，效率会比 memcpy 要快，否则会退化为 memcpy。

  • 函数原型：
void* tk_memcpy (void* dst, const void* src, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回成功返回 dst 地址，失败返回 NULL。
dst | void* | 目标字符串。
src | const void* | 源字符串。
len | uint32_t | 拷贝长度。

tk_memcpy16 函数

  • 函数功能：

拷贝数据2字节。

  • 函数原型：
uint16_t* tk_memcpy16 (uint16_t* dst, uint16_t* src, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t* | 返回设置好的buff。
dst | uint16_t* | 目标
src | uint16_t* | 源。
size | uint32_t | 个数。

tk_memcpy32 函数

  • 函数功能：

拷贝数据4字节。

  • 函数原型：
uint32_t* tk_memcpy32 (uint32_t* dst, uint32_t* src, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t* | 返回设置好的buff。
dst | uint32_t* | 目标
src | uint32_t* | 源。
size | uint32_t | 个数。

tk_memdup 函数

  • 函数功能：

内存拷贝。

  • 函数原型：
void* tk_memdup (const void* data, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回指向的向新的内存指针，如果失败则返回NULL。
data | const void* | 原内存。
len | uint32_t | 长度。

tk_memset16 函数

  • 函数功能：

设置数据2字节。

  • 函数原型：
uint16_t* tk_memset16 (uint16_t* buff, uint16_t val, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t* | 返回设置好的buff。
buff | uint16_t* | buff
val | uint16_t | 值。
size | uint32_t | 个数。

tk_memset24 函数

  • 函数功能：

设置数据3字节。

  • 函数原型：
uint32_t* tk_memset24 (uint32_t* buff, void* val, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t* | 返回设置好的buff。
buff | uint32_t* | buff。
val | void* | 值。
size | uint32_t | 个数。

tk_memset32 函数

  • 函数功能：

设置数据4字节。

  • 函数原型：
uint32_t* tk_memset32 (uint32_t* buff, uint32_t val, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t* | 返回设置好的buff。
buff | uint32_t* | buff。
val | uint32_t | 值。
size | uint32_t | 个数。

tk_normalize_key_name 函数

  • 函数功能：

标准化key_name

  • 函数原型：
const char* tk_normalize_key_name (const char* name, char* fixed_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回标准化后的字符串。
name | const char* | key_name。
fixed_name | char* | 保存标准化后的字符串。

tk_pixel_copy 函数

  • 函数功能：

已bpp字节为标准拷贝数据。

  • 函数原型：
void* tk_pixel_copy (void* dst, const void* src, uint32_t size, uint8_t bpp);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回设置好的buff。
dst | void* | 目标
src | const void* | 源。
size | uint32_t | 个数。
bpp | uint8_t | 单个数据的字节数。

tk_pointer_from_int 函数

  • 函数功能：

将int转换成指针。

常用于将int类型的数据作为回调函数的ctx。

  • 函数原型：
void* tk_pointer_from_int (int32_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回对应的指针。
v | int32_t | 整数。

tk_pointer_to_int 函数

  • 函数功能：

将指针转换成int。

与tk_pointer_from_int配套使用，也就是pointer本身必须就是整数，而不是指针，否则pointer会被截断。

  • 函数原型：
int32_t tk_pointer_to_int (const void* p);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回对应的int数据。
p | const void* | 指针。

tk_qsort 函数

  • 函数功能：

快速排序。

  • 函数原型：
ret_t tk_qsort (void** array, size_t nr, tk_compare_t cmp);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
array | void** | 数据。
nr | size_t | 元素个数。
cmp | tk_compare_t | 比较函数。

tk_replace_char 函数

  • 函数功能：

替换字符。

  • 函数原型：
char* tk_replace_char (char* str, char from, char to);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回str。
str | char* | 原字符串。
from | char | 被替换的字符。
to | char | 替换成的字符。

tk_replace_locale 函数

  • 函数功能：

将文本中的$locale$替换为对应的语言。

  • 函数原型：
ret_t tk_replace_locale (const char* name, char* out, const char* locale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
name | const char* | 文本。
out | char* | 替换后保存的字符串。
locale | const char* | 语言。

tk_set_ui_thread 函数

  • 函数功能：

设置UI线程的ID。

  • 函数原型：
ret_t tk_set_ui_thread (uint64_t ui_thread_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ui_thread_id | uint64_t | UI线程的ID。

tk_skip_to_num 函数

  • 函数功能：

跳过字符串函数，如：字符串”hello123world”，返回的结果是”123world”。

  • 函数原型：
const char* tk_skip_to_num (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回转换后的字符串。
str | const char* | 要输入的原始字符串。

tk_snprintf 函数

  • 函数功能：

将可变参数(…)按照format格式化字符串，并将字符串复制到str中。

  • 函数原型：
int tk_snprintf (char* str, size_t size, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回格式化后的字符串长度。
str | char* | 目标字符串。
size | size_t | 拷贝字节数。
format | const char* | 格式化字符串。

tk_sscanf 函数

  • 函数功能：

从字符串读取格式化输入。

  • 函数原型：
int tk_sscanf (const char* str, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回成功匹配和赋值的个数。
str | const char* | 要输入的字符串。
format | const char* | 格式化字符串。

tk_sscanf_simple 函数

  • 函数功能：

从字符串读取格式化输入。 TKC自己实现的，只支持几种简单的格式，在没有sscanf函数时使用。

  • 函数原型：
int tk_sscanf_simple (const char* str, const char* format);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回成功匹配和赋值的个数。
str | const char* | 要输入的字符串。
format | const char* | 格式化字符串。

tk_str_append 函数

  • 函数功能：

字符串追加函数。

  • 函数原型：
ret_t tk_str_append (char* str, uint32_t max_len, const char* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | char* | 被追加字符串。
max_len | uint32_t | 字符串的最大长度。
s | const char* | 要追加的字符串。

tk_str_copy 函数

  • 函数功能：

字符串拷贝函数。 XXX: 要求dst为NULL或内存块的首地址，本函数调用之后，dst可能无效，请保留返回的地址 该函数会自动申请内存，调用后需要使用TKMEM_FREE释放。

  • 函数原型：
char* tk_str_copy (char* dst, const char* src);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回指向的复制字符串指针，如果失败则返回NULL。
dst | char* | 目标字符串。
src | const char* | 源字符串。

tk_str_end_with 函数

  • 函数功能：

检查字符串是否以指定的字符串appendix结尾。

  • 函数原型：
bool_t tk_str_end_with (const char* str, const char* appendix);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是；否则表示不是。
str | const char* | 要检查字符串。
appendix | const char* | 被检查的字符串。

tk_str_is_in_array 函数

  • 函数功能：

检查字符串是否在字符串数组中。

  • 函数原型：
bool_t tk_str_is_in_array (const char* str, const char** str_array, uint32_t array_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示在，否则表示不在。
str | const char* | 字符串。
str_array | const char** | 字符串数组。
array_size | uint32_t | 字符串数组中字符串的个数。

tk_str_start_with 函数

  • 函数功能：

检查字符串是否以指定的字符串prefix开头。

  • 函数原型：
bool_t tk_str_start_with (const char* str, const char* prefix);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是；否则表示不是。
str | const char* | 要检查字符串。
prefix | const char* | 被检查的字符串。

tk_str_tolower 函数

  • 函数功能：

将大写字母转换为小写字母。 修改传入的字符串。

  • 函数原型：
char* tk_str_tolower (char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回转换后的小写字母字符串。
str | char* | 要被转换成小写字母的字符串。

tk_str_totitle 函数

  • 函数功能：

将单词首字母转换为大写字母。 修改传入的字符串。

  • 函数原型：
char* tk_str_totitle (char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回转换后的字符串。
str | char* | 被转换的字符串。

tk_str_toupper 函数

  • 函数功能：

将小写字母转换为大写字母。 修改传入的字符串。

  • 函数原型：
char* tk_str_toupper (char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回转换后的大写字母字符串。
str | char* | 要被转换成大写字母的字符串。

tk_strcmp 函数

  • 函数功能：

字符串比较函数。

  • 函数原型：
int32_t tk_strcmp (const char* a, const char* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果返回值=-1，则表示a为NULL；如果返回值=1，则表示b为NULL；如果返回值<0，则表示a小于b；如果返回值>0，则表示a大于b；如果返回值=0，则表示a等于b。
a | const char* | 要进行比较的第一个字符串。
b | const char* | 要进行比较的第二个字符串。

tk_strcpy 函数

  • 函数功能：

将src所指向的字符串复制到dst。

  • 函数原型：
char* tk_strcpy (char* dst, const char* src);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回目标字符串。
dst | char* | 目标字符串。
src | const char* | 原字符串。

tk_strdup 函数

  • 函数功能：

字符串拷贝函数。

  • 函数原型：
char* tk_strdup (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回指向的复制字符串指针，如果失败则返回NULL。
str | const char* | 原字符串。

tk_stricmp 函数

  • 函数功能：

字符串比较函数（不区分大小写）。

  • 函数原型：
int32_t tk_stricmp (const char* a, const char* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果返回值=-1，则表示a为NULL；如果返回值=1，则表示b为NULL；如果返回值<0，则表示a小于b；如果返回值>0，则表示a大于b；如果返回值=0，则表示a等于b。
a | const char* | 要进行比较的第一个字符串。
b | const char* | 要进行比较的第二个字符串。

tk_strlen 函数

  • 函数功能：

获取字符串的长度。str为空时返回0。

  • 函数原型：
uint32_t tk_strlen (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回字符串的长度。
str | const char* | 字符串。

tk_strncpy 函数

  • 函数功能：

将src所指向的字符串复制到dst，最多复制len个字符串，并在[len]位置添加’\0’。

请确保dst的长度>=(len+1)

  • 函数原型：
char* tk_strncpy (char* dst, const char* src, size_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回目标字符串。
dst | char* | 目标字符串。
src | const char* | 源字符串。
len | size_t | 要复制的字符串个数。

tk_strncpy_s 函数

  • 函数功能：

将src所指向的字符串复制到dst，最多复制min(dst_len-1, src_len)个字符串，并在[len]位置添加’\0’。 如果 dst 和 src 的地址对齐的话，效率会比 strncpy 高，如果小于 64 个字节的话，效率是最高的。

  • 函数原型：
char* tk_strncpy_s (char* dst, size_t dst_len, const char* src, size_t src_len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回目标字符串。
dst | char* | 目标字符串。
dst_len | size_t | 目标字符串内存长度。
src | const char* | 源字符串。
src_len | size_t | 要复制的字符串个数。

tk_strndup 函数

  • 函数功能：

字符串拷贝函数，最多复制len个字符串。

  • 函数原型：
char* tk_strndup (const char* str, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回指向的复制字符串指针，如果失败则返回NULL。
str | const char* | 原字符串。
len | uint32_t | 要复制的字符串个数。

tk_strnlen 函数

  • 函数功能：

获取字符串的长度。str为空时返回0。

  • 函数原型：
uint32_t tk_strnlen (const char* str, uint32_t maxlen);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回字符串的长度。
str | const char* | 字符串。
maxlen | uint32_t | 最大长度。

tk_strrstr 函数

  • 函数功能：

从后往前查找指定的字符串。

  • 函数原型：
const char* tk_strrstr (const char* str, const char* substr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回字符串的位置或者NULL。
str | const char* | 字符串。
substr | const char* | 子字符串。

tk_strtoi 函数

  • 函数功能：

将字符串转换为整型。

  • 函数原型：
int32_t tk_strtoi (const char* str, const char** end, int base);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回转换后的整型。
str | const char* | 要转换为整型的字符串。
end | const char** | 对类型char*的对象的引用。
base | int | 基数。

tk_strtol 函数

  • 函数功能：

将字符串转换为长整型。

  • 函数原型：
long tk_strtol (const char* str, const char** end, int base);
  • 参数说明：
参数 | 类型 | 说明
返回值 | long | 返回转换后的长整型。
str | const char* | 要转换为长整型的字符串。
end | const char** | 对类型char*的对象的引用。
base | int | 基数。

tk_strtoll 函数

  • 函数功能：

将字符串转换为长整型。

  • 函数原型：
int64_t tk_strtoll (const char* str, const char** end, int base);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 返回转换后的长整型。
str | const char* | 要转换为长整型的字符串。
end | const char** | 对类型char*的对象的引用。
base | int | 基数。

tk_to_utf8_argv 函数

  • 函数功能：

将宽字符串数组转换成utf8字符串数组。

  • 函数原型：
char** tk_to_utf8_argv (int argc, wchar_t** argv);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char** | 返回utf8字符串数组。
argc | int | 参数个数。
argv | wchar_t** | 参数。

tk_under_score_to_camel 函数

  • 函数功能：

将下划线名字转成驼峰名字。

  • 函数原型：
const char* tk_under_score_to_camel (const char* name, char* out, uint32_t max_out_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回T驼峰名字。
name | const char* | 下划线名字。
out | char* | 驼峰名字(保存结果)。
max_out_size | uint32_t | 结果最大长度。

tk_utf8_dup_wstr 函数

  • 函数功能：

将UCS字符串拷贝为utf8字符串。

  • 函数原型：
char* tk_utf8_dup_wstr (const wchar_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | char* | 返回UTF-8字符串(需要调用TKMEM_FREE释放)。
str | const wchar_t* | 字符串。

tk_vsnprintf 函数

  • 函数功能：

将可变参数ap按照format格式化字符串，并将字符串复制到str中。

  • 函数原型：
int tk_vsnprintf (char* str, size_t size, const char* format, va_list ap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回格式化后的字符串长度。
str | char* | 目标字符串。
size | size_t | 拷贝字节数。
format | const char* | 格式化字符串。
ap | va_list | 可变参数。

tk_watob 函数

  • 函数功能：

将宽字符串转换为布尔类型。

  • 函数原型：
bool_t tk_watob (const wchar_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回转换后的布尔类型。
str | const wchar_t* | 要转换为布尔类型的宽字符串。

tk_watof 函数

  • 函数功能：

将宽字符串转换为浮点类型。

  • 函数原型：
double tk_watof (const wchar_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 返回转换后的浮点类型。
str | const wchar_t* | 要转换为浮点类型的宽字符串。

tk_watoi 函数

  • 函数功能：

将宽字符串转换为整型。

  • 函数原型：
int tk_watoi (const wchar_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回转换后的整型。
str | const wchar_t* | 要转换为整型的宽字符串。

tk_watoi_n 函数

  • 函数功能：

将宽字符串转换为整型。

  • 函数原型：
int tk_watoi_n (const wchar_t* str, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 返回转换后的整型。
str | const wchar_t* | 要转换为整型的宽字符串。
len | uint32_t | 字符串长度。

tk_wild_card_match 函数

  • 函数功能：

简单的通配符匹配。*匹配0到多个字符，?匹配1个字符。 示例：

tk_wild_card_match("*c", "abc");
tk_wild_card_match("a?c", "abc");
  • 函数原型：
bool_t tk_wild_card_match (const char* pattern, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示匹配，否则表示不匹配。
pattern | const char* | 字符串。
str | const char* | 字符串。

tk_wstr_count_c 函数

  • 函数功能：

统计UCS字符串中某个字符出现的次数。

  • 函数原型：
uint32_t tk_wstr_count_c (const wchar_t* str, wchar_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回字符出现的次数。
str | const wchar_t* | 字符串。
c | wchar_t | 字符。

tk_wstr_dup_utf8 函数

  • 函数功能：

将utf8字符串拷贝为UCS字符串。

  • 函数原型：
wchar_t* tk_wstr_dup_utf8 (const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wchar_t* | 返回UCS字符串(需要调用TKMEM_FREE释放)。
str | const char* | utf8编码的字符串。

tk_wstr_select_word 函数

  • 函数功能：

获取字符串中距离某个位置最近的单词（中文或英文字符）或数字字符的范围，选取的范围由标点符号或空格分隔开，得到的范围由left与right两个指针获取。

  • 函数原型：
ret_t tk_wstr_select_word (const wchar_t* str, uint32_t len, uint32_t index, int32_t* left, int32_t* right);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | const wchar_t* | 字符串。
len | uint32_t | 字符串的长度。
index | uint32_t | 字符串中某个位置的下标。
left | int32_t* | int32_t指针，用来获取范围结果的左边界值
right | int32_t* | int32_t指针，用来获取范围结果的右边界值

tk_wstrcmp 函数

  • 函数功能：

字符串比较函数。

  • 函数原型：
int32_t tk_wstrcmp (const wchar_t* a, const wchar_t* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果返回值=-1，则表示a为NULL；如果返回值=1，则表示b为NULL；如果返回值<0，则表示a小于b；如果返回值>0，则表示a大于b；如果返回值=0，则表示a等于b。
a | const wchar_t* | 要进行比较的第一个字符串。
b | const wchar_t* | 要进行比较的第二个字符串。

tk_wstrdup 函数

  • 函数功能：

宽字符串拷贝函数。

  • 函数原型：
wchar_t* tk_wstrdup (const wchar_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wchar_t* | 返回指向的复制宽字符串指针，如果失败则返回NULL。
str | const wchar_t* | 原宽字符串。

tk_wstricmp 函数

  • 函数功能：

字符串比较函数（不区分大小写）。

  • 函数原型：
int32_t tk_wstricmp (const wchar_t* a, const wchar_t* b);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 如果返回值=-1，则表示a为NULL；如果返回值=1，则表示b为NULL；如果返回值<0，则表示a小于b；如果返回值>0，则表示a大于b；如果返回值=0，则表示a等于b。
a | const wchar_t* | 要进行比较的第一个字符串。
b | const wchar_t* | 要进行比较的第二个字符串。

xml_file_expand_read 函数

  • 函数功能：

expand include process instruction to file content: <?include filename=”view_me.inc” ?>

  • 函数原型：
ret_t xml_file_expand_read (const char* filename, str_t* s);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
filename | const char* | 文件名。
s | str_t* | 用于返回内容。


value_change_event_t

概述

值变化事件。

函数

函数名称 | 说明
value_change_event_cast | 把event对象转value_change_event_t对象。
value_change_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
new_value | value_t | 新值。
old_value | value_t | 旧值。

value_change_event_cast 函数

  • 函数功能：

把event对象转value_change_event_t对象。

  • 函数原型：
value_change_event_t* value_change_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_change_event_t* | event对象。
event | event_t* | event对象。

value_change_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* value_change_event_init (value_change_event_t* event, uint32_t type, void* target);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | value_change_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。

new_value 属性

新值。

  • 类型：value_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

old_value 属性

旧值。

  • 类型：value_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_binary_t

概述

二进制类型属性描述。

属性

属性名称 | 类型 | 说明
max | uint32_t | 最大长度。
min | uint32_t | 最小长度。

max 属性

最大长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_bool_t

概述

布尔类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | bool_t | 缺省值。

defvalue 属性

缺省值。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_double_t

概述

单精度浮点数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | double | 缺省值。
max | double | 最大值。
min | double | 最小值。
step | double | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：double
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_float_t

概述

单精度浮点数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | float | 缺省值。
max | float | 最大值。
min | float | 最小值。
step | float_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_int16_t

概述

有符号16位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int16_t | 缺省值。
max | int16_t | 最大值。
min | int16_t | 最小值。
step | int16_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：int16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：int16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：int16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：int16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_int32_t

概述

有符号32位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int32_t | 缺省值。
max | int32_t | 最大值。
min | int32_t | 最小值。
step | int32_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_int64_t

概述

有符号64位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int64_t | 缺省值。
max | int64_t | 最大值。
min | int64_t | 最小值。
step | int64_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：int64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_int8_t

概述

有符号8位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int8_t | 缺省值。
max | int8_t | 最大值。
min | int8_t | 最小值。
step | int8_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：int8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：int8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：int8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：int8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_int_enums_t

概述

整数枚举类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | int32_t | 缺省值。
enums | const char** | 枚举值（每一项用英文冒号分隔值和名称）。

defvalue 属性

缺省值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

enums 属性

枚举值（每一项用英文冒号分隔值和名称）。

  • 类型：const char**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_string_enums_t

概述

字符串枚举类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | const char* | 缺省值。
enums | const char** | 枚举值。

defvalue 属性

缺省值。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

enums 属性

枚举值。

  • 类型：const char**
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_string_t

概述

字符串类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | const char* | 缺省值。
max | uint32_t | 最大长度。
min | uint32_t | 最小长度。

defvalue 属性

缺省值。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_t

概述

属性描述。

属性

属性名称 | 类型 | 说明
desc | const char* | 描述。
display_name | const char* | 显示名称。
flags | uint16_t | flags。
format | uint8_t | 格式。
name | const char* | 名称。
type | uint8_t | 类型。

desc 属性

描述。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

display_name 属性

显示名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

flags 属性

flags。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

format 属性

格式。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

名称。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

type 属性

类型。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_type_t

概述

属性描述类型常量定义。

常量

名称 | 说明
VALUE_DESC_TYPE_INT8 | 有符号8位整数类型。
VALUE_DESC_TYPE_UINT8 | 无符号8位整数类型。
VALUE_DESC_TYPE_INT16 | 有符号16位整数类型。
VALUE_DESC_TYPE_UINT16 | 无符号16位整数类型。
VALUE_DESC_TYPE_INT32 | 有符号32位整数类型。
VALUE_DESC_TYPE_UINT32 | 无符号32位整数类型。
VALUE_DESC_TYPE_INT64 | 有符号64位整数类型。
VALUE_DESC_TYPE_UINT64 | 无符号64位整数类型。
VALUE_DESC_TYPE_FLOAT | 单精度浮点数类型。
VALUE_DESC_TYPE_DOUBLE | 双精度浮点数类型。
VALUE_DESC_TYPE_BOOL | 布尔类型。
VALUE_DESC_TYPE_STRING | 字符串类型。
VALUE_DESC_TYPE_BINARY | 二进制类型。
VALUE_DESC_TYPE_INT_ENUMS | 整数枚举类型。
VALUE_DESC_TYPE_STRING_ENUMS | 字符串枚举类型。


value_desc_uint16_t

概述

无符号16位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | uint16_t | 缺省值。
max | uint16_t | 最大值。
min | uint16_t | 最小值。
step | uint16_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_uint32_t

概述

无符号32位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | uint32_t | 缺省值。
max | uint32_t | 最大值。
min | uint32_t | 最小值。
step | uint32_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_uint64_t

概述

无符号64位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | uint64_t | 缺省值。
max | uint64_t | 最大值。
min | uint64_t | 最小值。
step | uint64_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：uint64_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_desc_uint8_t

概述

无符号8位整数类型属性描述。

属性

属性名称 | 类型 | 说明
defvalue | uint8_t | 缺省值。
max | uint8_t | 最大值。
min | uint8_t | 最小值。
step | uint8_t | 步长。
unit | const char* | 单位。

defvalue 属性

缺省值。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

max 属性

最大值。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

min 属性

最小值。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

step 属性

步长。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

unit 属性

单位。

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


value_format_type_t

概述

属性描述格式常量定义。

常量

名称 | 说明
VALUE_FORMAT_TYPE_NONE | 无特殊格式。
VALUE_FORMAT_TYPE_HEX | 16进制格式。
VALUE_FORMAT_TYPE_UNSIGNED | 非负格式(用于进一步限制float/double)。
VALUE_FORMAT_TYPE_PHONE | 手机号码格式。
VALUE_FORMAT_TYPE_EMAIL | 邮件格式。
VALUE_FORMAT_TYPE_IP4_ADDRESS | ip4地址格式。
VALUE_FORMAT_TYPE_DOMAIN_NAME | 域名格式。
VALUE_FORMAT_TYPE_URL | URL格式。
VALUE_FORMAT_TYPE_JSON | JSON格式。
VALUE_FORMAT_TYPE_XML | XML格式。
VALUE_FORMAT_TYPE_UBJSON | UBJSON格式。
VALUE_FORMAT_TYPE_JS | JS格式。
VALUE_FORMAT_TYPE_CSV | CSV格式。


value_t

概述

一个通用数据类型，用来存放整数、浮点数、字符串和其它对象。

在C/C++中，一般不需动态创建对象，直接声明并初始化即可。如：

value_t v;
value_set_int(&v, 100);

> 在脚本语言中，需要动态创建对象。

函数

函数名称 | 说明
value_abs | 将v取绝对值，并放入result对象。
value_add | 将v和other求和，并放入result对象。
value_binary_data | 获取为binary_data的值。
value_bit_and | 将v和other按位取与，并放入result对象。
value_bit_not | 将v按位取反，并放入result对象。
value_bit_or | 将v和other按位取或，并放入result对象。
value_bit_xor | 将v和other按位取异或，并放入result对象。
value_bitmap | 获取类型为位图对象。
value_bool | 获取类型为bool的值。
value_cast | 转换为value对象。
value_copy | 拷贝value的值。
value_create | 创建value对象。
value_deep_copy | 深拷贝value的值。
value_destroy | 销毁value对象。
value_div | 将v和other求商，并放入result对象。
value_double | 获取类型为double的值。
value_dup_binary_data | 设置类型为binary_data的值(复制数据)。
value_dup_str | 设置类型为字符串的值(并拷贝字符串)。
value_dup_str_with_len | 设置类型为字符串的值(并拷贝字符串)。
value_dup_wstr | 设置类型为宽字符串的值(并拷贝宽字符串)。
value_equal | 判断两个value是否相同。
value_expt | 计算v的other次幂，并放入result对象。
value_float | 获取类型为float_t的值。
value_float32 | 获取类型为float的值。
value_func | 获取类型为func的值。
value_func_def | 获取类型为func_def的值。
value_get_bit | 将v指定的位数取出，并放入result对象。
value_gradient | 获取为gradient的值。
value_id | 获取类型为ID的值。
value_int | 转换为int的值。
value_int16 | 获取类型为int16的值。
value_int32 | 获取类型为int32的值。
value_int64 | 获取类型为int64的值。
value_int8 | 获取类型为int8的值。
value_is_null | 判断value是否为空值。
value_lshift | 将v左移指定的位数，并将结果放入result对象。
value_lshift_r | 将v循环左移指定的位数，并将结果放入result对象。
value_max | 从数组中选择最大值，并放入result对象。
value_min | 从数组中选择最小值，并放入result对象。
value_mod | 将v和other求模，并放入result对象。
value_mul | 将v和other求积，并放入result对象。
value_object | 转换为object的值。
value_pointer | 获取类型为pointer的值。
value_rect | 获取类型为矩形区域数据。
value_reset | 重置value对象。
value_rshift | 将v右移指定的位数，并将结果放入result对象。
value_rshift_r | 将v循环右移指定的位数，并将结果放入result对象。
value_set_binary_data | 设置类型为binary_data的值。
value_set_bit | 将v指定的位数设置为bit，并放入result对象。
value_set_bitmap | 设置类型为位图对象。
value_set_bool | 设置类型为bool的值。
value_set_double | 设置类型为double的值。
value_set_float | 设置类型为float_t的值。
value_set_float32 | 设置类型为float的值。
value_set_func | 设置类型为func的值。
value_set_func_def | 设置类型为func_def的值。
value_set_gradient | 设置类型为gradient的值。
value_set_id | 设置类型为ID的值。
value_set_int | 设置类型为int的值。
value_set_int16 | 设置类型为int16的值。
value_set_int32 | 设置类型为int32的值。
value_set_int64 | 设置类型为int64的值。
value_set_int8 | 设置类型为int8的值。
value_set_object | 设置类型为object的值。
value_set_pointer | 设置类型为pointer的值。
value_set_pointer_ex | 设置类型为pointer的值。
value_set_rect | 设置类型为矩形区域数据。
value_set_sized_str | 设置类型为带长度的字符串的值。
value_set_str | 设置类型为字符串的值。
value_set_token | 设置类型为token的值。
value_set_ubjson | 设置类型为ubjson的值。
value_set_uint16 | 设置类型为uint16的值。
value_set_uint32 | 设置类型为uint32的值。
value_set_uint64 | 设置类型为uint64的值。
value_set_uint8 | 设置类型为uint8的值。
value_set_wstr | 设置类型为宽字符串的值。
value_sized_str | 获取为sized_str的值。
value_str | 获取类型为字符串的值。
value_str_ex | 获取类型为字符串的值。
value_sub | 将v和other求差，并放入result对象。
value_toggle_bit | 将v指定的位数取反，并将结果放入result对象。
value_token | 获取token的值。
value_type_name | 获取指定类型数据的名称。
value_type_size | 获取指定类型数据大小。
value_ubjson | 获取为ubjson的值。
value_uint16 | 获取类型为uint16的值。
value_uint32 | 获取类型为uint32的值。
value_uint64 | 获取类型为uint64的值。
value_uint8 | 获取类型为uint8的值。
value_wstr | 获取类型为宽字符串的值。

value_abs 函数

  • 函数功能：

将v取绝对值，并放入result对象。

  • 函数原型：
ret_t value_abs (value_t* v, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是数值类型)。
result | value_t* | 返回结果的value对象。

value_add 函数

  • 函数功能：

将v和other求和，并放入result对象。

  • 函数原型：
ret_t value_add (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是数值类型)。
other | value_t* | value对象(必须是数值类型)。
result | value_t* | 返回结果的value对象。

value_binary_data 函数

  • 函数功能：

获取为binary_data的值。

  • 函数原型：
binary_data_t* value_binary_data (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | binary_data_t* | 值。
v | const value_t* | value对象。

value_bit_and 函数

  • 函数功能：

将v和other按位取与，并放入result对象。

  • 函数原型：
ret_t value_bit_and (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
other | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。

value_bit_not 函数

  • 函数功能：

将v按位取反，并放入result对象。

  • 函数原型：
ret_t value_bit_not (value_t* v, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。

value_bit_or 函数

  • 函数功能：

将v和other按位取或，并放入result对象。

  • 函数原型：
ret_t value_bit_or (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
other | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。

value_bit_xor 函数

  • 函数功能：

将v和other按位取异或，并放入result对象。

  • 函数原型：
ret_t value_bit_xor (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
other | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。

value_bitmap 函数

  • 函数功能：

获取类型为位图对象。

  • 函数原型：
void* value_bitmap (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 位图对象。
v | const value_t* | value对象。

value_bool 函数

  • 函数功能：

获取类型为bool的值。

  • 函数原型：
bool_t value_bool (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 值。
v | const value_t* | value对象。

value_cast 函数

  • 函数功能：

转换为value对象。

供脚本语言使用

  • 函数原型：
value_t* value_cast (value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | 对象。
value | value_t* | value对象。

value_copy 函数

  • 函数功能：

拷贝value的值。

  • 函数原型：
ret_t value_copy (value_t* dst, const value_t* src);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dst | value_t* | 目的value对象。
src | const value_t* | 源value对象。

value_create 函数

  • 函数功能：

创建value对象。

  • 函数原型：
value_t* value_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | 对象。

value_deep_copy 函数

  • 函数功能：

深拷贝value的值。 dst使用完成后，要调用value_reset，确保不会发生内存泄漏。

  • 函数原型：
ret_t value_deep_copy (value_t* dst, const value_t* src);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
dst | value_t* | 目的value对象。
src | const value_t* | 源value对象。

value_destroy 函数

  • 函数功能：

销毁value对象。

  • 函数原型：
ret_t value_destroy (value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象。

value_div 函数

  • 函数功能：

将v和other求商，并放入result对象。

  • 函数原型：
ret_t value_div (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是数值类型)。
other | value_t* | value对象(必须是数值类型)。
result | value_t* | 返回结果的value对象。

value_double 函数

  • 函数功能：

获取类型为double的值。

  • 函数原型：
double value_double (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | double | 值。
v | const value_t* | value对象。

value_dup_binary_data 函数

  • 函数功能：

设置类型为binary_data的值(复制数据)。

  • 函数原型：
value_t* value_dup_binary_data (value_t* v, const void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
data | const void* | 待设置的值。
size | uint32_t | 长度。

value_dup_str 函数

  • 函数功能：

设置类型为字符串的值(并拷贝字符串)。

  • 函数原型：
value_t* value_dup_str (value_t* v, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | const char* | 待设置的值。

value_dup_str_with_len 函数

  • 函数功能：

设置类型为字符串的值(并拷贝字符串)。

  • 函数原型：
value_t* value_dup_str_with_len (value_t* v, const char* value, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | const char* | 待设置的值。
len | uint32_t | 长度。

value_dup_wstr 函数

  • 函数功能：

设置类型为宽字符串的值(并拷贝宽字符串)。

  • 函数原型：
value_t* value_dup_wstr (value_t* v, const wchar_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | const wchar_t* | 待设置的值。

value_equal 函数

  • 函数功能：

判断两个value是否相同。

  • 函数原型：
bool_t value_equal (const value_t* value, const value_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 为空值返回TRUE，否则返回FALSE。
value | const value_t* | value对象。
other | const value_t* | value对象。

value_expt 函数

  • 函数功能：

计算v的other次幂，并放入result对象。

  • 函数原型：
ret_t value_expt (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是数值类型)。
other | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。

value_float 函数

  • 函数功能：

获取类型为float_t的值。

  • 函数原型：
float_t value_float (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 值。
v | const value_t* | value对象。

value_float32 函数

  • 函数功能：

获取类型为float的值。

  • 函数原型：
float value_float32 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float | 值。
v | const value_t* | value对象。

value_func 函数

  • 函数功能：

获取类型为func的值。

  • 函数原型：
void* value_func (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 值。
v | const value_t* | value对象。

value_func_def 函数

  • 函数功能：

获取类型为func_def的值。

  • 函数原型：
void* value_func_def (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 值。
v | const value_t* | value对象。

value_get_bit 函数

  • 函数功能：

将v指定的位数取出，并放入result对象。

  • 函数原型：
ret_t value_get_bit (value_t* v, value_t* result, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。

value_gradient 函数

  • 函数功能：

获取为gradient的值。

  • 函数原型：
binary_data_t* value_gradient (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | binary_data_t* | 值。
v | const value_t* | value对象。

value_id 函数

  • 函数功能：

获取类型为ID的值。

  • 函数原型：
const char* value_id (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 值。
v | const value_t* | value对象。

value_int 函数

  • 函数功能：

转换为int的值。

  • 函数原型：
int value_int (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int | 值。
v | const value_t* | value对象。

value_int16 函数

  • 函数功能：

获取类型为int16的值。

  • 函数原型：
int16_t value_int16 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int16_t | 值。
v | const value_t* | value对象。

value_int32 函数

  • 函数功能：

获取类型为int32的值。

  • 函数原型：
int32_t value_int32 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 值。
v | const value_t* | value对象。

value_int64 函数

  • 函数功能：

获取类型为int64的值。

  • 函数原型：
int64_t value_int64 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int64_t | 值。
v | const value_t* | value对象。

value_int8 函数

  • 函数功能：

获取类型为int8的值。

  • 函数原型：
int8_t value_int8 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int8_t | 值。
v | const value_t* | value对象。

value_is_null 函数

  • 函数功能：

判断value是否为空值。

  • 函数原型：
bool_t value_is_null (value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 为空值返回TRUE，否则返回FALSE。
value | value_t* | value对象。

value_lshift 函数

  • 函数功能：

将v左移指定的位数，并将结果放入result对象。

  • 函数原型：
ret_t value_lshift (value_t* v, value_t* result, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。

value_lshift_r 函数

  • 函数功能：

将v循环左移指定的位数，并将结果放入result对象。

  • 函数原型：
ret_t value_lshift_r (value_t* v, value_t* result, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。

value_max 函数

  • 函数功能：

从数组中选择最大值，并放入result对象。

  • 函数原型：
ret_t value_max (value_t* arr, uint32_t size, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
arr | value_t* | 数组。
size | uint32_t | 数组元素个数
result | value_t* | 返回结果的value对象。

value_min 函数

  • 函数功能：

从数组中选择最小值，并放入result对象。

  • 函数原型：
ret_t value_min (value_t* arr, uint32_t size, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
arr | value_t* | 数组。
size | uint32_t | 数组元素个数
result | value_t* | 返回结果的value对象。

value_mod 函数

  • 函数功能：

将v和other求模，并放入result对象。

  • 函数原型：
ret_t value_mod (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
other | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。

value_mul 函数

  • 函数功能：

将v和other求积，并放入result对象。

  • 函数原型：
ret_t value_mul (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是数值类型)。
other | value_t* | value对象(必须是数值类型)。
result | value_t* | 返回结果的value对象。

value_object 函数

  • 函数功能：

转换为object的值。

  • 函数原型：
tk_object_t* value_object (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | tk_object_t* | 值。
v | const value_t* | value对象。

value_pointer 函数

  • 函数功能：

获取类型为pointer的值。

  • 函数原型：
void* value_pointer (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 值。
v | const value_t* | value对象。

value_rect 函数

  • 函数功能：

获取类型为矩形区域数据。

  • 函数原型：
rect_t* value_rect (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t* | 返回矩形区域数据。
v | const value_t* | value对象。

value_reset 函数

  • 函数功能：

重置value对象。

  • 函数原型：
ret_t value_reset (value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象。

value_rshift 函数

  • 函数功能：

将v右移指定的位数，并将结果放入result对象。

  • 函数原型：
ret_t value_rshift (value_t* v, value_t* result, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。

value_rshift_r 函数

  • 函数功能：

将v循环右移指定的位数，并将结果放入result对象。

  • 函数原型：
ret_t value_rshift_r (value_t* v, value_t* result, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。

value_set_binary_data 函数

  • 函数功能：

设置类型为binary_data的值。

  • 函数原型：
value_t* value_set_binary_data (value_t* v, void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
data | void* | 待设置的值。
size | uint32_t | 长度。

value_set_bit 函数

  • 函数功能：

将v指定的位数设置为bit，并放入result对象。

  • 函数原型：
ret_t value_set_bit (value_t* v, value_t* result, uint32_t n, bool_t bit);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。
bit | bool_t | 值。

value_set_bitmap 函数

  • 函数功能：

设置类型为位图对象。

  • 函数原型：
value_t* value_set_bitmap (value_t* v, void* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
bitmap | void* | 待设置的值。

value_set_bool 函数

  • 函数功能：

设置类型为bool的值。

  • 函数原型：
value_t* value_set_bool (value_t* v, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | bool_t | 待设置的值。

value_set_double 函数

  • 函数功能：

设置类型为double的值。

  • 函数原型：
value_t* value_set_double (value_t* v, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | double | 待设置的值。

value_set_float 函数

  • 函数功能：

设置类型为float_t的值。

  • 函数原型：
value_t* value_set_float (value_t* v, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | float_t | 待设置的值。

value_set_float32 函数

  • 函数功能：

设置类型为float的值。

  • 函数原型：
value_t* value_set_float32 (value_t* v, float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | float | 待设置的值。

value_set_func 函数

  • 函数功能：

设置类型为func的值。

  • 函数原型：
value_t* value_set_func (value_t* v, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | void* | 待设置的值。

value_set_func_def 函数

  • 函数功能：

设置类型为func_def的值。

  • 函数原型：
value_t* value_set_func_def (value_t* v, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | void* | 待设置的值。

value_set_gradient 函数

  • 函数功能：

设置类型为gradient的值。

  • 函数原型：
value_t* value_set_gradient (value_t* v, void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
data | void* | 待设置的值。
size | uint32_t | 长度。

value_set_id 函数

  • 函数功能：

设置类型为ID的值。

  • 函数原型：
value_t* value_set_id (value_t* v, const char* value, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | const char* | 待设置的值。
len | uint32_t | 长度。

value_set_int 函数

  • 函数功能：

设置类型为int的值。

  • 函数原型：
value_t* value_set_int (value_t* v, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | int32_t | 待设置的值。

value_set_int16 函数

  • 函数功能：

设置类型为int16的值。

  • 函数原型：
value_t* value_set_int16 (value_t* v, int16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | int16_t | 待设置的值。

value_set_int32 函数

  • 函数功能：

设置类型为int32的值。

  • 函数原型：
value_t* value_set_int32 (value_t* v, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | int32_t | 待设置的值。

value_set_int64 函数

  • 函数功能：

设置类型为int64的值。

  • 函数原型：
value_t* value_set_int64 (value_t* v, int64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | int64_t | 待设置的值。

value_set_int8 函数

  • 函数功能：

设置类型为int8的值。

  • 函数原型：
value_t* value_set_int8 (value_t* v, int8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | int8_t | 待设置的值。

value_set_object 函数

  • 函数功能：

设置类型为object的值。

  • 函数原型：
value_t* value_set_object (value_t* v, tk_object_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | tk_object_t* | 待设置的值。

value_set_pointer 函数

  • 函数功能：

设置类型为pointer的值。

  • 函数原型：
value_t* value_set_pointer (value_t* v, void* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | void* | 待设置的值。

value_set_pointer_ex 函数

  • 函数功能：

设置类型为pointer的值。

  • 函数原型：
value_t* value_set_pointer_ex (value_t* v, void* value, tk_destroy_t destroy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | void* | 待设置的值。
destroy | tk_destroy_t | 销毁函数。

value_set_rect 函数

  • 函数功能：

设置类型为矩形区域数据。

  • 函数原型：
value_t* value_set_rect (value_t* v, rect_t r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
r | rect_t | 待设置的值。

value_set_sized_str 函数

  • 函数功能：

设置类型为带长度的字符串的值。

  • 函数原型：
value_t* value_set_sized_str (value_t* v, char* str, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
str | char* | 待设置的值。
size | uint32_t | 长度。

value_set_str 函数

  • 函数功能：

设置类型为字符串的值。

  • 函数原型：
value_t* value_set_str (value_t* v, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | const char* | 待设置的值。

value_set_token 函数

  • 函数功能：

设置类型为token的值。

  • 函数原型：
value_t* value_set_token (value_t* v, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | uint32_t | 待设置的值。

value_set_ubjson 函数

  • 函数功能：

设置类型为ubjson的值。

  • 函数原型：
value_t* value_set_ubjson (value_t* v, void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
data | void* | 待设置的值。
size | uint32_t | 长度。

value_set_uint16 函数

  • 函数功能：

设置类型为uint16的值。

  • 函数原型：
value_t* value_set_uint16 (value_t* v, uint16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | uint16_t | 待设置的值。

value_set_uint32 函数

  • 函数功能：

设置类型为uint32的值。

  • 函数原型：
value_t* value_set_uint32 (value_t* v, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | uint32_t | 待设置的值。

value_set_uint64 函数

  • 函数功能：

设置类型为uint64的值。

  • 函数原型：
value_t* value_set_uint64 (value_t* v, uint64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | uint64_t | 待设置的值。

value_set_uint8 函数

  • 函数功能：

设置类型为uint8的值。

  • 函数原型：
value_t* value_set_uint8 (value_t* v, uint8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | uint8_t | 待设置的值。

value_set_wstr 函数

  • 函数功能：

设置类型为宽字符串的值。

  • 函数原型：
value_t* value_set_wstr (value_t* v, const wchar_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | value_t* | value对象本身。
v | value_t* | value对象。
value | const wchar_t* | 待设置的值。

value_sized_str 函数

  • 函数功能：

获取为sized_str的值。

  • 函数原型：
sized_str_t* value_sized_str (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | sized_str_t* | 值。
v | const value_t* | value对象。

value_str 函数

  • 函数功能：

获取类型为字符串的值。

  • 函数原型：
const char* value_str (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 值。
v | const value_t* | value对象。

value_str_ex 函数

  • 函数功能：

获取类型为字符串的值。

  • 函数原型：
const char* value_str_ex (const value_t* v, char* buff, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 值。
v | const value_t* | value对象。
buff | char* | 用于格式转换的缓冲区（如果 v 对象为 string 类型的话，不会把字符串数据拷贝到 buff 中）。
size | uint32_t | 缓冲区大小。

value_sub 函数

  • 函数功能：

将v和other求差，并放入result对象。

  • 函数原型：
ret_t value_sub (value_t* v, value_t* other, value_t* result);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是数值类型)。
other | value_t* | value对象(必须是数值类型)。
result | value_t* | 返回结果的value对象。

value_toggle_bit 函数

  • 函数功能：

将v指定的位数取反，并将结果放入result对象。

  • 函数原型：
ret_t value_toggle_bit (value_t* v, value_t* result, uint32_t n);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | value_t* | value对象(必须是整数类型)。
result | value_t* | 返回结果的value对象。
n | uint32_t | 位数。

value_token 函数

  • 函数功能：

获取token的值。

  • 函数原型：
uint32_t value_token (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 值。
v | const value_t* | value对象。

value_type_name 函数

  • 函数功能：

获取指定类型数据的名称。

  • 函数原型：
const char* value_type_name (value_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回对应数据类型的名称。
type | value_type_t | 类型。

value_type_size 函数

  • 函数功能：

获取指定类型数据大小。

  • 函数原型：
uint32_t value_type_size (value_type_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回对应数据类型的长度。
type | value_type_t | 类型。

value_ubjson 函数

  • 函数功能：

获取为ubjson的值。

  • 函数原型：
binary_data_t* value_ubjson (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | binary_data_t* | 值。
v | const value_t* | value对象。

value_uint16 函数

  • 函数功能：

获取类型为uint16的值。

  • 函数原型：
uint16_t value_uint16 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint16_t | 值。
v | const value_t* | value对象。

value_uint32 函数

  • 函数功能：

获取类型为uint32的值。

  • 函数原型：
uint32_t value_uint32 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 值。
v | const value_t* | value对象。

value_uint64 函数

  • 函数功能：

获取类型为uint64的值。

  • 函数原型：
uint64_t value_uint64 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint64_t | 值。
v | const value_t* | value对象。

value_uint8 函数

  • 函数功能：

获取类型为uint8的值。

  • 函数原型：
uint8_t value_uint8 (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint8_t | 值。
v | const value_t* | value对象。

value_wstr 函数

  • 函数功能：

获取类型为宽字符串的值。

  • 函数原型：
const wchar_t* value_wstr (const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const wchar_t* | 值。
v | const value_t* | value对象。


value_type_t

概述

类型常量定义。

常量

名称 | 说明
VALUE_TYPE_INVALID | 无效类型。
VALUE_TYPE_BOOL | BOOL类型。
VALUE_TYPE_INT8 | int8_t类型。
VALUE_TYPE_UINT8 | uint8_t类型。
VALUE_TYPE_INT16 | int16_t类型。
VALUE_TYPE_UINT16 | uint16_t类型。
VALUE_TYPE_INT32 | int32_t类型。
VALUE_TYPE_UINT32 | uint32_t类型。
VALUE_TYPE_INT64 | int64_t类型。
VALUE_TYPE_UINT64 | uint64_t类型。
VALUE_TYPE_POINTER | void*类型。
VALUE_TYPE_FLOAT | float_t类型。
VALUE_TYPE_FLOAT32 | float类型。
VALUE_TYPE_DOUBLE | double类型。
VALUE_TYPE_STRING | char*类型。
VALUE_TYPE_WSTRING | wchar_t*类型。
VALUE_TYPE_OBJECT | tk_object_t*类型。
VALUE_TYPE_SIZED_STRING | 带长度的字符串。
VALUE_TYPE_BINARY | 二进制数据。
VALUE_TYPE_UBJSON | 二进制数据(UBJSON)。
VALUE_TYPE_TOKEN | 特殊用途。
VALUE_TYPE_GRADIENT | 渐变颜色。
VALUE_TYPE_ID | id。
VALUE_TYPE_FUNC | func。
VALUE_TYPE_FUNC_DEF | func definition。
VALUE_TYPE_POINTER_REF | void*类型。
VALUE_TYPE_BITMAP | 位图类型。
VALUE_TYPE_RECT | 矩形类型。


velocity_t

概述

velocity。

函数

函数名称 | 说明
velocity_reset | 重置状态。
velocity_update | 更新位置。

velocity_reset 函数

  • 函数功能：

重置状态。

  • 函数原型：
velocity_t* velocity_reset (velocity_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | velocity_t* | 返回velocity对象。
v | velocity_t* | velocity对象。

velocity_update 函数

  • 函数功能：

更新位置。

  • 函数原型：
ret_t velocity_update (velocity_t* v, uint64_t time, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
v | velocity_t* | velocity对象。
time | uint64_t | 时间。
x | xy_t | x坐标。
y | xy_t | y坐标。


vgcanvas_line_cap_t

概述

线帽类型。

常量

名称 | 说明
VGCANVAS_LINE_CAP_ROUND | 圆头。
VGCANVAS_LINE_CAP_SQUARE | 方头。
VGCANVAS_LINE_CAP_BUTT | 平头。


vgcanvas_line_join_t

概述

线条连接类型。

常量

名称 | 说明
VGCANVAS_LINE_JOIN_ROUND | round。
VGCANVAS_LINE_JOIN_BEVEL | bevel。
VGCANVAS_LINE_JOIN_MITTER | mitter。


vgcanvas_t

概述

矢量图画布抽象基类。

具体实现时可以使用agg，nanovg, cairo和skia等方式。

cairo和skia体积太大，不适合嵌入式平台，但在PC平台也是一种选择。

目前我们只提供了基于nanovg的实现，支持软件渲染和硬件渲染。

我们对nanovg进行了一些改进:

  • 可以用agg/agge实现软件渲染(暂时不支持文本绘制)。

  • 可以用bgfx使用DirectX(Windows平台)和Metal(iOS)平台硬件加速。

示例：

vgcanvas_t* vg = canvas_get_vgcanvas(c);
vgcanvas_save(vg);
vgcanvas_translate(vg, 0, 100);

vgcanvas_set_line_width(vg, 1);
vgcanvas_set_fill_color(vg, color_init(0xff, 0, 0, 0xff));
vgcanvas_rect(vg, 5, 5, 100, 100);
vgcanvas_fill(vg);
vgcanvas_restore(vg);

>请参考：https://www.w3schools.com/tags/ref_canvas.asp

函数

函数名称 | 说明
vgcanvas_arc | 生成一条圆弧。
vgcanvas_arc_to | 生成一条圆弧路径到指定点。
vgcanvas_begin_frame | 开始绘制，系统内部调用。
vgcanvas_begin_path | 清除之前的路径，并重新开始一条路径。
vgcanvas_bezier_to | 生成一条三次贝塞尔曲线。
vgcanvas_bind_fbo | 绑定 fbo 对象。
vgcanvas_cast | 转换为vgcanvas对象(供脚本语言使用)。
vgcanvas_clear_cache | 释放vgcanvas对象的缓冲数据。
vgcanvas_clear_rect | 用颜色清除指定矩形区域。
vgcanvas_clip_path | 使用当前的path裁剪。
vgcanvas_clip_rect | 矩形裁剪。
vgcanvas_close_path | 闭合路径。
vgcanvas_create | 创建vgcanvas。
vgcanvas_create_fbo | 创建 fbo 对象。
vgcanvas_destroy | 销毁vgcanvas对象。
vgcanvas_destroy_fbo | 销毁 fbo 对象。
vgcanvas_draw_icon | 绘制图标。
vgcanvas_draw_image | 绘制图片。
vgcanvas_draw_image_repeat | 绘制图片。
vgcanvas_ellipse | 生成一个椭圆路径。
vgcanvas_end_frame | 结束绘制。系统内部调用。
vgcanvas_fbo_to_bitmap | 把 fbo 对象的数据拷贝到 bitmap 中。
vgcanvas_fill | 填充多边形。
vgcanvas_fill_text | 绘制文本。
vgcanvas_flush | flush
vgcanvas_get_canvas | 获取 canvas 对象。
vgcanvas_get_clip_rect | 获取矩形裁剪。
vgcanvas_get_height | 获取高度。
vgcanvas_get_text_metrics | 获取当前字体的度量信息。
vgcanvas_get_width | 获取宽度。
vgcanvas_intersect_clip_rect | 设置一个与前一个裁剪区做交集的矩形裁剪区。
vgcanvas_is_point_in_path | 检查点是否在当前路径中。
vgcanvas_is_rectf_in_clip_rect | 矩形区域是否在矩形裁剪中。
vgcanvas_line_to | 生成一条线段(从当前点到目标点)。
vgcanvas_measure_text | 测量文本的宽度。
vgcanvas_move_to | 移动当前点到指定点。
vgcanvas_paint | 用图片填充/画多边形(可能存在可移植性问题，除非必要请勿使用)。
vgcanvas_path_winding | 设置路径填充实心与否。
vgcanvas_quad_to | 生成一条二次贝塞尔曲线。
vgcanvas_rect | 生成一个矩形路径。
vgcanvas_reinit | 重新初始化，系统内部调用。
vgcanvas_reset | 重置所有状态。
vgcanvas_reset_curr_state | 重置当前状态。
vgcanvas_restore | 恢复上次save的状态。
vgcanvas_rotate | 旋转。
vgcanvas_rounded_rect | 生成一个圆角矩形路径。
vgcanvas_save | 保存当前的状态。如颜色和矩阵等信息。
vgcanvas_scale | 缩放。
vgcanvas_set_antialias | 设置是否启用反走样。
vgcanvas_set_fill_color | 设置填充颜色。
vgcanvas_set_fill_color_str | 设置填充颜色。
vgcanvas_set_fill_gradient | 设置填充颜色为渐变色。
vgcanvas_set_fill_linear_gradient | 设置填充颜色为线性渐变色。
vgcanvas_set_fill_radial_gradient | 设置填充颜色为径向渐变色。
vgcanvas_set_font | 设置字体的名称。
vgcanvas_set_font_size | 设置字体的大小。
vgcanvas_set_global_alpha | 设置全局透明度。
vgcanvas_set_line_cap | 设置line cap。
vgcanvas_set_line_join | 设置line join。
vgcanvas_set_line_width | 设置线条的宽度。
vgcanvas_set_miter_limit | 设置miter limit。
vgcanvas_set_stroke_color | 设置线条颜色。
vgcanvas_set_stroke_color_str | 设置线条颜色。
vgcanvas_set_stroke_gradient | 设置线条颜色为渐变色。
vgcanvas_set_stroke_linear_gradient | 设置线条颜色为线性渐变色。
vgcanvas_set_stroke_radial_gradient | 设置线条颜色为径向渐变色。
vgcanvas_set_text_align | 设置文本水平对齐的方式。
vgcanvas_set_text_baseline | 设置文本垂直对齐的方式。
vgcanvas_set_transform | 设置变换矩阵。
vgcanvas_stroke | 画线。
vgcanvas_transform | 变换矩阵。
vgcanvas_translate | 平移。
vgcanvas_unbind_fbo | 解开绑定 fbo 对象。

属性

属性名称 | 类型 | 说明
anti_alias | bool_t | 是否启用反走样功能。
fill_color | color_t | 填充颜色
font | char* | 字体。
font_size | float_t | 字体大小。
global_alpha | float_t | 全局alpha。
h | uint32_t | canvas的高度
line_cap | const char* | line_cap。
line_join | const char* | line_join。
line_width | float_t | 线宽。
miter_limit | float_t | miter_limit。
ratio | float_t | 显示比例。
stride | uint32_t | 一行占的字节
stroke_color | color_t | 线条颜色
text_align | char* | 文本对齐方式。
text_baseline | char* | 文本基线。
w | uint32_t | canvas的宽度

vgcanvas_arc 函数

  • 函数功能：

生成一条圆弧。

  • 函数原型：
ret_t vgcanvas_arc (vgcanvas_t* vg, float_t x, float_t y, float_t r, float_t start_angle, float_t end_angle, bool_t ccw);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | 原点x坐标。
y | float_t | 原点y坐标。
r | float_t | 半径。
start_angle | float_t | 起始角度。
end_angle | float_t | 结束角度。
ccw | bool_t | 是否逆时针。

vgcanvas_arc_to 函数

  • 函数功能：

生成一条圆弧路径到指定点。

  • 函数原型：
ret_t vgcanvas_arc_to (vgcanvas_t* vg, float_t x1, float_t y1, float_t x2, float_t y2, float_t r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x1 | float_t | 起始点x坐标。
y1 | float_t | 起始点y坐标。
x2 | float_t | 结束点x坐标。
y2 | float_t | 结束点y坐标。
r | float_t | 半径。

vgcanvas_begin_frame 函数

  • 函数功能：

开始绘制，系统内部调用。

  • 函数原型：
ret_t vgcanvas_begin_frame (vgcanvas_t* vg, const dirty_rects_t* dirty_rects);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
dirty_rects | const dirty_rects_t* | 需要绘制的区域。

vgcanvas_begin_path 函数

  • 函数功能：

清除之前的路径，并重新开始一条路径。

  • 函数原型：
ret_t vgcanvas_begin_path (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_bezier_to 函数

  • 函数功能：

生成一条三次贝塞尔曲线。

  • 函数原型：
ret_t vgcanvas_bezier_to (vgcanvas_t* vg, float_t cp1x, float_t cp1y, float_t cp2x, float_t cp2y, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
cp1x | float_t | 控制点1x坐标。
cp1y | float_t | 控制点1y坐标。
cp2x | float_t | 控制点2x坐标。
cp2y | float_t | 控制点2y坐标。
x | float_t | x坐标。
y | float_t | y坐标。

vgcanvas_bind_fbo 函数

  • 函数功能：

绑定 fbo 对象。

  • 函数原型：
ret_t vgcanvas_bind_fbo (vgcanvas_t* vg, framebuffer_object_t* fbo);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
fbo | framebuffer_object_t* | 需要创建 fbo 的对象。

vgcanvas_cast 函数

  • 函数功能：

转换为vgcanvas对象(供脚本语言使用)。

  • 函数原型：
vgcanvas_t* vgcanvas_cast (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vgcanvas_t* | vgcanvas对象。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_clear_cache 函数

  • 函数功能：

释放vgcanvas对象的缓冲数据。

  • 函数原型：
ret_t vgcanvas_clear_cache (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_clear_rect 函数

  • 函数功能：

用颜色清除指定矩形区域。

  • 函数原型：
ret_t vgcanvas_clear_rect (vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。
w | float_t | 宽度。
h | float_t | 高度。
color | color_t | 颜色。

vgcanvas_clip_path 函数

  • 函数功能：

使用当前的path裁剪。 目前只有部分backend支持(如cairo)。

  • 函数原型：
ret_t vgcanvas_clip_path (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_clip_rect 函数

  • 函数功能：

矩形裁剪。

  • 函数原型：
ret_t vgcanvas_clip_rect (vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。
w | float_t | 宽度。
h | float_t | 高度。

vgcanvas_close_path 函数

  • 函数功能：

闭合路径。

闭合路径是指把起点和终点连接起来，形成一个封闭的多边形。

  • 函数原型：
ret_t vgcanvas_close_path (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_create 函数

  • 函数功能：

创建vgcanvas。

  • 函数原型：
vgcanvas_t* vgcanvas_create (uint32_t w, uint32_t h, uint32_t stride, bitmap_format_t format, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vgcanvas_t* | 返回vgcanvas对象。
w | uint32_t | 宽度
h | uint32_t | 高度
stride | uint32_t | 一行占用的字节数。
format | bitmap_format_t | 如果data是framebuffer，format指定data的格式。
data | void* | framebuffer或其它ctx。

vgcanvas_create_fbo 函数

  • 函数功能：

创建 fbo 对象。

  • 函数原型：
ret_t vgcanvas_create_fbo (vgcanvas_t* vg, uint32_t w, uint32_t h, bool_t custom_draw_model, framebuffer_object_t* fbo);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
w | uint32_t | fbo 对象的宽。
h | uint32_t | fbo 对象的高。
custom_draw_model | bool_t | 是否脱离 awtk 默认的 OpenGL 绘图方法。
fbo | framebuffer_object_t* | 需要创建 fbo 的对象。

vgcanvas_destroy 函数

  • 函数功能：

销毁vgcanvas对象。

  • 函数原型：
ret_t vgcanvas_destroy (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_destroy_fbo 函数

  • 函数功能：

销毁 fbo 对象。

  • 函数原型：
ret_t vgcanvas_destroy_fbo (vgcanvas_t* vg, framebuffer_object_t* fbo);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
fbo | framebuffer_object_t* | 需要创建 fbo 的对象。

vgcanvas_draw_icon 函数

  • 函数功能：

绘制图标。

绘制图标时会根据屏幕密度进行自动缩放，而绘制普通图片时不会。

  • 函数原型：
ret_t vgcanvas_draw_icon (vgcanvas_t* vg, bitmap_t* img, float_t sx, float_t sy, float_t sw, float_t sh, float_t dx, float_t dy, float_t dw, float_t dh);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
img | bitmap_t* | 图片。
sx | float_t | sx
sy | float_t | sy
sw | float_t | sw
sh | float_t | sh
dx | float_t | dx
dy | float_t | dy
dw | float_t | dw
dh | float_t | dh

vgcanvas_draw_image 函数

  • 函数功能：

绘制图片。

  • 函数原型：
ret_t vgcanvas_draw_image (vgcanvas_t* vg, bitmap_t* img, float_t sx, float_t sy, float_t sw, float_t sh, float_t dx, float_t dy, float_t dw, float_t dh);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
img | bitmap_t* | 图片。
sx | float_t | sx
sy | float_t | sy
sw | float_t | sw
sh | float_t | sh
dx | float_t | dx
dy | float_t | dy
dw | float_t | dw
dh | float_t | dh

vgcanvas_draw_image_repeat 函数

  • 函数功能：

绘制图片。

备注： 当绘制区域大于原图区域时，多余的绘制区域会重复绘制原图区域的东西。（绘制图区按照绘制图片的宽高来绘制的） 当绘制图片的宽高和原图的不同，在重复绘制的同时加入缩放。

  • 函数原型：
ret_t vgcanvas_draw_image_repeat (vgcanvas_t* vg, bitmap_t* img, float_t sx, float_t sy, float_t sw, float_t sh, float_t dx, float_t dy, float_t dw, float_t dh, float_t dst_w, float_t dst_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
img | bitmap_t* | 图片。
sx | float_t | 原图区域的 x
sy | float_t | 原图区域的 y
sw | float_t | 原图区域的 w
sh | float_t | 原图区域的 h
dx | float_t | 绘制区域的 x
dy | float_t | 绘制区域的 y
dw | float_t | 绘制区域的 w
dh | float_t | 绘制区域的 h
dst_w | float_t | 绘制图片的宽
dst_h | float_t | 绘制图片的高

vgcanvas_ellipse 函数

  • 函数功能：

生成一个椭圆路径。

  • 函数原型：
ret_t vgcanvas_ellipse (vgcanvas_t* vg, float_t x, float_t y, float_t rx, float_t ry);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。
rx | float_t | 圆角半径。
ry | float_t | 圆角半径。

vgcanvas_end_frame 函数

  • 函数功能：

结束绘制。系统内部调用。

  • 函数原型：
ret_t vgcanvas_end_frame (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_fbo_to_bitmap 函数

  • 函数功能：

把 fbo 对象的数据拷贝到 bitmap 中。

  • 函数原型：
ret_t vgcanvas_fbo_to_bitmap (vgcanvas_t* vg, framebuffer_object_t* fbo, bitmap_t* img, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
fbo | framebuffer_object_t* | 需要创建 fbo 的对象。
img | bitmap_t* | 输出的 bitmap 的对象。
r | const rect_t* | 需要拷贝的区域。

vgcanvas_fill 函数

  • 函数功能：

填充多边形。

  • 函数原型：
ret_t vgcanvas_fill (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_fill_text 函数

  • 函数功能：

绘制文本。

  • 函数原型：
ret_t vgcanvas_fill_text (vgcanvas_t* vg, const char* text, float_t x, float_t y, float_t max_width);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
text | const char* | text
x | float_t | x坐标。
y | float_t | y坐标。
max_width | float_t | 最大宽度。

vgcanvas_flush 函数

  • 函数功能：

flush

  • 函数原型：
ret_t vgcanvas_flush (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_get_canvas 函数

  • 函数功能：

获取 canvas 对象。

  • 函数原型：
canvas_t* vgcanvas_get_canvas (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 成功返回 canvas 对象，失败返回 NULL。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_get_clip_rect 函数

  • 函数功能：

获取矩形裁剪。

  • 函数原型：
const rectf_t* vgcanvas_get_clip_rect (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const rectf_t* | 返回裁剪区。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_get_height 函数

  • 函数功能：

获取高度。

  • 函数原型：
wh_t vgcanvas_get_height (vgcanvas_t* vgcanvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回高度。
vgcanvas | vgcanvas_t* | vgcanvas对象。

vgcanvas_get_text_metrics 函数

  • 函数功能：

获取当前字体的度量信息。

  • 函数原型：
ret_t vgcanvas_get_text_metrics (vgcanvas_t* vg, float_t* ascent, float_t* descent, float_t* line_hight);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
ascent | float_t* | 用于返回ascent。
descent | float_t* | 用于返回descent。
line_hight | float_t* | 用于返回line height。

vgcanvas_get_width 函数

  • 函数功能：

获取宽度。

  • 函数原型：
wh_t vgcanvas_get_width (vgcanvas_t* vgcanvas);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wh_t | 返回宽度。
vgcanvas | vgcanvas_t* | vgcanvas对象。

vgcanvas_intersect_clip_rect 函数

  • 函数功能：

设置一个与前一个裁剪区做交集的矩形裁剪区。 如果下面这种情况，则不能直接调用 rect_intersect 函数来做矩形交集和 vgcanvas_clip_rect 函数设置裁剪区，而采用本函数做交集。 由于缩放和旋转以及平移会导致 vg 的坐标系和上一个裁剪区的坐标系不同， 导致直接使用做交集的话，裁剪区会出错。

vgcanvas_clip_rect(vg, old_r.x, old_r.y, old_r.w, old_r.h);
vgcanvas_save(vg);
vgcanvas_scale(vg, scale_x, scale_y);
vgcanvas_rotate(vg, TK_D2R(15));
vgcanvas_intersect_clip_rect(vg, r.x, r.y, r.w, r.h);
..................
vgcanvas_restore(vg);
  • 函数原型：
ret_t vgcanvas_intersect_clip_rect (vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。
w | float_t | 宽度。
h | float_t | 高度。

vgcanvas_is_point_in_path 函数

  • 函数功能：

检查点是否在当前路径中。

  • 函数原型：
bool_t vgcanvas_is_point_in_path (vgcanvas_t* vg, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示在，否则表示不在。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。

vgcanvas_is_rectf_in_clip_rect 函数

  • 函数功能：

矩形区域是否在矩形裁剪中。

  • 函数原型：
bool_t vgcanvas_is_rectf_in_clip_rect (vgcanvas_t* vg, float_t left, float_t top, float_t right, float_t bottom);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回 TURE 则在区域中，返回 FALSE 则不在区域中。
vg | vgcanvas_t* | vgcanvas对象。
left | float_t | 矩形区域左边。
top | float_t | 矩形区域上边。
right | float_t | 矩形区域右边。
bottom | float_t | 矩形区域下边。

vgcanvas_line_to 函数

  • 函数功能：

生成一条线段(从当前点到目标点)。

  • 函数原型：
ret_t vgcanvas_line_to (vgcanvas_t* vg, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。

vgcanvas_measure_text 函数

  • 函数功能：

测量文本的宽度。

  • 函数原型：
float_t vgcanvas_measure_text (vgcanvas_t* vg, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回text的宽度。
vg | vgcanvas_t* | vgcanvas对象。
text | const char* | text

vgcanvas_move_to 函数

  • 函数功能：

移动当前点到指定点。

  • 函数原型：
ret_t vgcanvas_move_to (vgcanvas_t* vg, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。

vgcanvas_paint 函数

  • 函数功能：

用图片填充/画多边形(可能存在可移植性问题，除非必要请勿使用)。 多边形的顶点必须在图片范围内，可以通过矩阵变化画到不同的位置。

  • 函数原型：
ret_t vgcanvas_paint (vgcanvas_t* vg, bool_t stroke, bitmap_t* img);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
stroke | bool_t | TRUE表示画线FALSE表示填充。
img | bitmap_t* | 图片。

vgcanvas_path_winding 函数

  • 函数功能：

设置路径填充实心与否。

CCW(1)为实心，CW(2)为镂空，设置其他则默认根据非零环绕规则判断(nonzero)。

  • 函数原型：
ret_t vgcanvas_path_winding (vgcanvas_t* vg, bool_t dir);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
dir | bool_t | 填充方法。

vgcanvas_quad_to 函数

  • 函数功能：

生成一条二次贝塞尔曲线。

  • 函数原型：
ret_t vgcanvas_quad_to (vgcanvas_t* vg, float_t cpx, float_t cpy, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
cpx | float_t | 控制点x坐标。
cpy | float_t | 控制点y坐标。
x | float_t | x坐标。
y | float_t | y坐标。

vgcanvas_rect 函数

  • 函数功能：

生成一个矩形路径。

  • 函数原型：
ret_t vgcanvas_rect (vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。
w | float_t | 宽度。
h | float_t | 高度。

vgcanvas_reinit 函数

  • 函数功能：

重新初始化，系统内部调用。

  • 函数原型：
ret_t vgcanvas_reinit (vgcanvas_t* vg, uint32_t w, uint32_t h, uint32_t stride, bitmap_format_t format, void* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
w | uint32_t | 宽度
h | uint32_t | 高度
stride | uint32_t | 一行占用的字节数。
format | bitmap_format_t | 如果data是framebuffer，format指定data的格式。
data | void* | framebuffer或其它ctx。

vgcanvas_reset 函数

  • 函数功能：

重置所有状态。

  • 函数原型：
ret_t vgcanvas_reset (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_reset_curr_state 函数

  • 函数功能：

重置当前状态。

  • 函数原型：
ret_t vgcanvas_reset_curr_state (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_restore 函数

  • 函数功能：

恢复上次save的状态。

save/restore必须配套使用，否则可能导致状态混乱。

  • 函数原型：
ret_t vgcanvas_restore (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_rotate 函数

  • 函数功能：

旋转。

  • 函数原型：
ret_t vgcanvas_rotate (vgcanvas_t* vg, float_t rad);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
rad | float_t | 旋转角度(单位弧度)

vgcanvas_rounded_rect 函数

  • 函数功能：

生成一个圆角矩形路径。

  • 函数原型：
ret_t vgcanvas_rounded_rect (vgcanvas_t* vg, float_t x, float_t y, float_t w, float_t h, float_t r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x坐标。
y | float_t | y坐标。
w | float_t | 宽度。
h | float_t | 高度。
r | float_t | 圆角半径。

vgcanvas_save 函数

  • 函数功能：

保存当前的状态。如颜色和矩阵等信息。

save/restore必须配套使用，否则可能导致状态混乱。

  • 函数原型：
ret_t vgcanvas_save (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_scale 函数

  • 函数功能：

缩放。

  • 函数原型：
ret_t vgcanvas_scale (vgcanvas_t* vg, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x方向缩放比例。
y | float_t | y方向缩放比例。

vgcanvas_set_antialias 函数

  • 函数功能：

设置是否启用反走样。

  • 函数原型：
ret_t vgcanvas_set_antialias (vgcanvas_t* vg, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | bool_t | 是否启用反走样。

vgcanvas_set_fill_color 函数

  • 函数功能：

设置填充颜色。

  • 函数原型：
ret_t vgcanvas_set_fill_color (vgcanvas_t* vg, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
color | color_t | 颜色。

vgcanvas_set_fill_color_str 函数

  • 函数功能：

设置填充颜色。

  • 函数原型：
ret_t vgcanvas_set_fill_color_str (vgcanvas_t* vg, const char* color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
color | const char* | 颜色。

vgcanvas_set_fill_gradient 函数

  • 函数功能：

设置填充颜色为渐变色。

目前只有部分backend支持(如cairo)。

  • 函数原型：
ret_t vgcanvas_set_fill_gradient (vgcanvas_t* vg, const vg_gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
gradient | const vg_gradient_t* | gradient对象。

vgcanvas_set_fill_linear_gradient 函数

  • 函数功能：

设置填充颜色为线性渐变色。

  • 函数原型：
ret_t vgcanvas_set_fill_linear_gradient (vgcanvas_t* vg, float_t sx, float_t sy, float_t ex, float_t ey, color_t icolor, color_t ocolor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
sx | float_t | start x
sy | float_t | start y
ex | float_t | end x
ey | float_t | end y
icolor | color_t | 开始颜色。
ocolor | color_t | 结束颜色。

vgcanvas_set_fill_radial_gradient 函数

  • 函数功能：

设置填充颜色为径向渐变色。

  • 函数原型：
ret_t vgcanvas_set_fill_radial_gradient (vgcanvas_t* vg, float_t cx, float_t cy, float_t inr, float_t outr, color_t icolor, color_t ocolor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
cx | float_t | center x
cy | float_t | center y
inr | float_t | 内环半径
outr | float_t | 外环半径。
icolor | color_t | 开始颜色。
ocolor | color_t | 结束颜色。

vgcanvas_set_font 函数

  • 函数功能：

设置字体的名称。

  • 函数原型：
ret_t vgcanvas_set_font (vgcanvas_t* vg, const char* font);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
font | const char* | 字体名称。

vgcanvas_set_font_size 函数

  • 函数功能：

设置字体的大小。

  • 函数原型：
ret_t vgcanvas_set_font_size (vgcanvas_t* vg, float_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
size | float_t | 字体大小。

vgcanvas_set_global_alpha 函数

  • 函数功能：

设置全局透明度。

  • 函数原型：
ret_t vgcanvas_set_global_alpha (vgcanvas_t* vg, float_t alpha);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
alpha | float_t | global alpha。

vgcanvas_set_line_cap 函数

  • 函数功能：

设置line cap。

  • 函数原型：
ret_t vgcanvas_set_line_cap (vgcanvas_t* vg, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | const char* | 取值：butt

vgcanvas_set_line_join 函数

  • 函数功能：

设置line join。

  • 函数原型：
ret_t vgcanvas_set_line_join (vgcanvas_t* vg, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | const char* | 取值：bevel

vgcanvas_set_line_width 函数

  • 函数功能：

设置线条的宽度。

  • 函数原型：
ret_t vgcanvas_set_line_width (vgcanvas_t* vg, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | float_t | 线宽。

vgcanvas_set_miter_limit 函数

  • 函数功能：

设置miter limit。

  • 函数原型：
ret_t vgcanvas_set_miter_limit (vgcanvas_t* vg, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | float_t | miter limit

vgcanvas_set_stroke_color 函数

  • 函数功能：

设置线条颜色。

  • 函数原型：
ret_t vgcanvas_set_stroke_color (vgcanvas_t* vg, color_t color);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
color | color_t | 颜色。

vgcanvas_set_stroke_color_str 函数

  • 函数功能：

设置线条颜色。

  • 函数原型：
ret_t vgcanvas_set_stroke_color_str (vgcanvas_t* vg, const char* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
str | const char* | 颜色。

vgcanvas_set_stroke_gradient 函数

  • 函数功能：

设置线条颜色为渐变色。

目前只有部分backend支持(如cairo)。

  • 函数原型：
ret_t vgcanvas_set_stroke_gradient (vgcanvas_t* vg, const vg_gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
gradient | const vg_gradient_t* | gradient对象。

vgcanvas_set_stroke_linear_gradient 函数

  • 函数功能：

设置线条颜色为线性渐变色。

  • 函数原型：
ret_t vgcanvas_set_stroke_linear_gradient (vgcanvas_t* vg, float_t sx, float_t sy, float_t ex, float_t ey, color_t icolor, color_t ocolor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
sx | float_t | start x
sy | float_t | start y
ex | float_t | end x
ey | float_t | end y
icolor | color_t | 开始颜色。
ocolor | color_t | 结束颜色。

vgcanvas_set_stroke_radial_gradient 函数

  • 函数功能：

设置线条颜色为径向渐变色。

  • 函数原型：
ret_t vgcanvas_set_stroke_radial_gradient (vgcanvas_t* vg, float_t cx, float_t cy, float_t inr, float_t outr, color_t icolor, color_t ocolor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
cx | float_t | center x
cy | float_t | center y
inr | float_t | 内环半径
outr | float_t | 外环半径。
icolor | color_t | 开始颜色。
ocolor | color_t | 结束颜色。

vgcanvas_set_text_align 函数

  • 函数功能：

设置文本水平对齐的方式。

  • 函数原型：
ret_t vgcanvas_set_text_align (vgcanvas_t* vg, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | const char* | 取值：left

vgcanvas_set_text_baseline 函数

  • 函数功能：

设置文本垂直对齐的方式。

  • 函数原型：
ret_t vgcanvas_set_text_baseline (vgcanvas_t* vg, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
value | const char* | 取值：top

vgcanvas_set_transform 函数

  • 函数功能：

设置变换矩阵。

  • 函数原型：
ret_t vgcanvas_set_transform (vgcanvas_t* vg, float_t a, float_t b, float_t c, float_t d, float_t e, float_t f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
a | float_t | a
b | float_t | b
c | float_t | c
d | float_t | d
e | float_t | e
f | float_t | f

vgcanvas_stroke 函数

  • 函数功能：

画线。

  • 函数原型：
ret_t vgcanvas_stroke (vgcanvas_t* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。

vgcanvas_transform 函数

  • 函数功能：

变换矩阵。

  • 函数原型：
ret_t vgcanvas_transform (vgcanvas_t* vg, float_t a, float_t b, float_t c, float_t d, float_t e, float_t f);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
a | float_t | a
b | float_t | b
c | float_t | c
d | float_t | d
e | float_t | e
f | float_t | f

vgcanvas_translate 函数

  • 函数功能：

平移。

  • 函数原型：
ret_t vgcanvas_translate (vgcanvas_t* vg, float_t x, float_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
x | float_t | x方向偏移。
y | float_t | y方向偏移。

vgcanvas_unbind_fbo 函数

  • 函数功能：

解开绑定 fbo 对象。

  • 函数原型：
ret_t vgcanvas_unbind_fbo (vgcanvas_t* vg, framebuffer_object_t* fbo);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vg | vgcanvas_t* | vgcanvas对象。
fbo | framebuffer_object_t* | 需要创建 fbo 的对象。

anti_alias 属性

是否启用反走样功能。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

fill_color 属性

填充颜色

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

font 属性

字体。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

font_size 属性

字体大小。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

global_alpha 属性

全局alpha。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

h 属性

canvas的高度

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

line_cap 属性

line_cap。 @see http://www.w3school.com.cn/tags/canvas_linecap.asp

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

line_join 属性

line_join。 @see http://www.w3school.com.cn/tags/canvas_linejoin.asp

  • 类型：const char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

line_width 属性

线宽。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

miter_limit 属性

miter_limit。 @see http://www.w3school.com.cn/tags/canvas_miterlimit.asp

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ratio 属性

显示比例。

  • 类型：float_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

stride 属性

一行占的字节

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

stroke_color 属性

线条颜色

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

text_align 属性

文本对齐方式。

@see http://www.w3school.com.cn/tags/canvas_textalign.asp

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

text_baseline 属性

文本基线。

@see http://www.w3school.com.cn/tags/canvas_textbaseline.asp

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

w 属性

canvas的宽度

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


vg_gradient_linear_info_t

概述

线性渐变。

属性

属性名称 | 类型 | 说明
ex | float | 结束点x坐标。
ey | float | 结束点y坐标。
sx | float | 起始点x坐标。
sy | float | 起始点y坐标。

ex 属性

结束点x坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

ey 属性

结束点y坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

sx 属性

起始点x坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

sy 属性

起始点y坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


vg_gradient_radial_info_t

概述

放射渐变。

属性

属性名称 | 类型 | 说明
r0 | float | 起始圆的半径。
r1 | float | 结束圆的半径。
x0 | float | 起始圆的x坐标。
x1 | float | 结束圆的x坐标。
y0 | float | 起始圆的y坐标。
y1 | float | 结束圆的y坐标。

r0 属性

起始圆的半径。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

r1 属性

结束圆的半径。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

x0 属性

起始圆的x坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

x1 属性

结束圆的x坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

y0 属性

起始圆的y坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

y1 属性

结束圆的y坐标。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


vg_gradient_stop_t

概述

渐变关键点。

属性

属性名称 | 类型 | 说明
color | color_t | 颜色。
offset | float | 偏移量(0-1)。

color 属性

颜色。

  • 类型：color_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

offset 属性

偏移量(0-1)。

  • 类型：float
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


vg_gradient_t

概述

渐变。

函数

函数名称 | 说明
vg_gradient_create_linear | 创建线性渐变。
vg_gradient_create_radial | 创建放射渐变。
vg_gradient_destroy | 销毁gradient对象。
vg_gradient_init_linear | 初始化线性。
vg_gradient_init_radial | 初始化放射渐变。
vg_gradient_init_with_gradient | 初始化矢量画布的渐变对象。
vgcanvas_asset_manager | 获取缺省矢量画布资源管理器。
vgcanvas_asset_manager_add_font | 添加一个字库资源
vgcanvas_asset_manager_add_image | 添加一个贴图资源
vgcanvas_asset_manager_add_vg | 添加一个矢量画布的对象
vgcanvas_asset_manager_create | 创建矢量画布资源管理器。
vgcanvas_asset_manager_destroy | 释放建矢量画布资源管理器对象
vgcanvas_asset_manager_get_font_ctx | 获取字库的相关上下文
vgcanvas_asset_manager_get_image_specific | 获取贴图的特殊相关上下文
vgcanvas_asset_manager_remove_font | 移除字库资源
vgcanvas_asset_manager_remove_image | 移除贴图资源
vgcanvas_asset_manager_remove_vg | 移除一个矢量画布的对象
vgcanvas_asset_manager_set | 设置缺省矢量画布资源管理器。

属性

属性名称 | 类型 | 说明
info | vg_gradient_info_t | 信息。

vg_gradient_create_linear 函数

  • 函数功能：

创建线性渐变。

  • 函数原型：
vg_gradient_t* vg_gradient_create_linear (float sx, float sy, float ex, float ey);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vg_gradient_t* | 返回gradient对象。
sx | float | 起始点x坐标。
sy | float | 起始点y坐标。
ex | float | 结束点x坐标。
ey | float | 结束点y坐标。

vg_gradient_create_radial 函数

  • 函数功能：

创建放射渐变。

  • 函数原型：
vg_gradient_t* vg_gradient_create_radial (float x0, float y0, float r0, float x1, float y1, float r1);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vg_gradient_t* | 返回gradient对象。
x0 | float | 起始圆的x坐标。
y0 | float | 起始圆的y坐标。
r0 | float | 起始圆的半径。
x1 | float | 结束圆的x坐标。
y1 | float | 结束圆的y坐标。
r1 | float | 结束圆的半径。

vg_gradient_destroy 函数

  • 函数功能：

销毁gradient对象。

  • 函数原型：
ret_t vg_gradient_destroy (vg_gradient_t* gradient);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
gradient | vg_gradient_t* | gradient对象。

vg_gradient_init_linear 函数

  • 函数功能：

初始化线性。

  • 函数原型：
vg_gradient_t* vg_gradient_init_linear (vg_gradient_t* gradient, float sx, float sy, float ex, float ey);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vg_gradient_t* | 返回gradient对象。
gradient | vg_gradient_t* | gradient对象。
sx | float | 起始点x坐标。
sy | float | 起始点y坐标。
ex | float | 结束点x坐标。
ey | float | 结束点y坐标。

vg_gradient_init_radial 函数

  • 函数功能：

初始化放射渐变。

  • 函数原型：
vg_gradient_t* vg_gradient_init_radial (vg_gradient_t* gradient, float x0, float y0, float r0, float x1, float y1, float r1);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vg_gradient_t* | 返回gradient对象。
gradient | vg_gradient_t* | gradient对象。
x0 | float | 起始圆的x坐标。
y0 | float | 起始圆的y坐标。
r0 | float | 起始圆的半径。
x1 | float | 结束圆的x坐标。
y1 | float | 结束圆的y坐标。
r1 | float | 结束圆的半径。

vg_gradient_init_with_gradient 函数

  • 函数功能：

初始化矢量画布的渐变对象。

  • 函数原型：
vg_gradient_t* vg_gradient_init_with_gradient (vg_gradient_t* gradient, const rect_t* rect, const gradient_t* g);
  • 参数说明：
参数 | 类型 | 说明
返回值 | vg_gradient_t* | 返回gradient对象。
gradient | vg_gradient_t* | gradient对象。
rect | const rect_t* | 矩形区域。
g | const gradient_t* | 渐变对象。

vgcanvas_asset_manager 函数

  • 函数功能：

获取缺省矢量画布资源管理器。

  • 函数原型：
vgcanvas_asset_manager_t* vgcanvas_asset_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | vgcanvas_asset_manager_t* | 返回矢量画布资源管理器对象。

vgcanvas_asset_manager_add_font 函数

  • 函数功能：

添加一个字库资源

  • 函数原型：
ret_t vgcanvas_asset_manager_add_font (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, const char* font_name, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 使用该字库的矢量画布对象
font_name | const char* | 字库名称。
ctx | void* | 上下文参数。

vgcanvas_asset_manager_add_image 函数

  • 函数功能：

添加一个贴图资源

  • 函数原型：
ret_t vgcanvas_asset_manager_add_image (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, bitmap_t* img, void* specific);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 使用该字库的矢量画布对象
img | bitmap_t* | 贴图对象。
specific | void* | 贴图特殊上下文参数。

vgcanvas_asset_manager_add_vg 函数

  • 函数功能：

添加一个矢量画布的对象

  • 函数原型：
ret_t vgcanvas_asset_manager_add_vg (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, vgcanvas_asset_manager_bitmap_destroy_t bitmap_destroy, vgcanvas_asset_manager_font_destroy_t font_destroy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 矢量画布对象。
bitmap_destroy | vgcanvas_asset_manager_bitmap_destroy_t | 矢量画布对象释放贴图资源的回调函数。
font_destroy | vgcanvas_asset_manager_font_destroy_t | 矢量画布对象释放字库资源的回调函数。

vgcanvas_asset_manager_create 函数

  • 函数功能：

创建矢量画布资源管理器。

  • 函数原型：
vgcanvas_asset_manager_t* vgcanvas_asset_manager_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | vgcanvas_asset_manager_t* | 返回矢量画布资源管理器对象。

vgcanvas_asset_manager_destroy 函数

  • 函数功能：

释放建矢量画布资源管理器对象

  • 函数原型：
ret_t vgcanvas_asset_manager_destroy (vgcanvas_asset_manager_t* vgcanvas_asset_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。

vgcanvas_asset_manager_get_font_ctx 函数

  • 函数功能：

获取字库的相关上下文

  • 函数原型：
const void* vgcanvas_asset_manager_get_font_ctx (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, const char* font_name, ret_t* reuslt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const void* | 返回上下文。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 使用该字库的矢量画布对象
font_name | const char* | 字库名称。
reuslt | ret_t* | 返回获取结果是否成功，成功返回 RET_OK，否则表示失败。

vgcanvas_asset_manager_get_image_specific 函数

  • 函数功能：

获取贴图的特殊相关上下文

  • 函数原型：
const void* vgcanvas_asset_manager_get_image_specific (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, bitmap_t* img, ret_t* reuslt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const void* | 返回特殊上下文。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 使用该字库的矢量画布对象
img | bitmap_t* | 贴图对象。
reuslt | ret_t* | 返回获取结果是否成功，成功返回 RET_OK，否则表示失败。

vgcanvas_asset_manager_remove_font 函数

  • 函数功能：

移除字库资源 备注：如果字库名字为 NULL，则移除该 vg 对象下的所有字库。

  • 函数原型：
ret_t vgcanvas_asset_manager_remove_font (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, const char* font_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 使用该字库的矢量画布对象
font_name | const char* | 字库名称。

vgcanvas_asset_manager_remove_image 函数

  • 函数功能：

移除贴图资源 备注：如果 bitmap 对象为 NULL，则移除该 vg 对象下的所有贴图。

  • 函数原型：
ret_t vgcanvas_asset_manager_remove_image (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg, bitmap_t* img);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 使用该字库的矢量画布对象
img | bitmap_t* | 贴图对象。

vgcanvas_asset_manager_remove_vg 函数

  • 函数功能：

移除一个矢量画布的对象

  • 函数原型：
ret_t vgcanvas_asset_manager_remove_vg (vgcanvas_asset_manager_t* vgcanvas_asset_manager, void* vg);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器。
vg | void* | 矢量画布对象。

vgcanvas_asset_manager_set 函数

  • 函数功能：

设置缺省矢量画布资源管理器。

  • 函数原型：
ret_t vgcanvas_asset_manager_set (vgcanvas_asset_manager_t* vgcanvas_asset_manager);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
vgcanvas_asset_manager | vgcanvas_asset_manager_t* | 矢量画布资源管理器对象。

info 属性

信息。

  • 类型：vg_gradient_info_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


vg_gradient_type_t

概述

渐变色类型。

常量

名称 | 说明
VG_GRADIENT_NONE | 无效类型。
VG_GRADIENT_LINEAR | 线性渐变。
VG_GRADIENT_RADIAL | 放射渐变。


view_t

概述

一个通用的容器控件。

它本身不提供布局功能，仅提供具有语义的标签，让xml更具有可读性。 子控件的布局可用layout_children属性指定。 请参考布局参数。

view_t是widget_t的子类控件，widget_t的函数均适用于view_t控件。

在xml中使用”view”标签创建view。如：

<view x="0" y="0" w="100%" h="100%" children_layout="default(c=2,r=2,m=5,s=5)">
</view>

可用通过style来设置控件的显示风格，如背景颜色等。如：

<style name="default" border_color="#a0a0a0">
<normal     bg_color="#f0f0f0" />
</style>

函数

函数名称 | 说明
view_cast | 转换为view对象(供脚本语言使用)。
view_create | 创建view对象
view_set_default_focused_child | 设置缺省获得焦点的子控件(可用控件名或类型)。

属性

属性名称 | 类型 | 说明
default_focused_child | char* | 缺省获得焦点的子控件(可用控件名或类型)。

view_cast 函数

  • 函数功能：

转换为view对象(供脚本语言使用)。

  • 函数原型：
widget_t* view_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | view对象。
widget | widget_t* | view对象。

view_create 函数

  • 函数功能：

创建view对象

  • 函数原型：
widget_t* view_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

view_set_default_focused_child 函数

  • 函数功能：

设置缺省获得焦点的子控件(可用控件名或类型)。

  • 函数原型：
ret_t view_set_default_focused_child (widget_t* widget, const char* default_focused_child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
default_focused_child | const char* | 缺省获得焦点的子控件(可用控件名或类型)。

default_focused_child 属性

缺省获得焦点的子控件(可用控件名或类型)。

view作为pages/slideview的直接子控件才需要设置。 正常情况下，一个窗口只能指定一个初始焦点。 但是对于pages/slideview来说，可能希望每一个页面都有一个初始焦点，此时可用default_focused_child来指定。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


vpage_event_t

概述

虚拟页面的事件。

常量

名称 | 说明
EVT_VPAGE_WILL_OPEN | 页面即将打开(动画前)。
EVT_VPAGE_OPEN | 页面打开完成(动画后)。
EVT_VPAGE_CLOSE | 页面已经关闭(动画后)。


vpage_t

概述

虚拟页面(根据情况自动加载/卸载页面，并提供入场/出场动画)。

虚拟页面只能作为pages的直接子控件使用。

如果指定了ui_asset:

  • 当页面切换到后台时自动卸载，并触发EVT_VPAGE_CLOSE消息。
  • 当页面切换到前台时自动加载，在动画前出发EVT_VPAGE_WILL_OPEN消息，在动画完成时触发 EVT_VPAGE_CLOSE消息。

vpage_t也可以当作普通view嵌入到pages中，让tab控件在切换时具有动画效果。

在xml中使用”vpage”标签创建控件。如：

<!-- ui -->
<vpage x="c" y="50" w="100" h="100" ui_asset="mypage"/>

可用通过style来设置控件的显示风格，如字体的大小和颜色等等(一般无需指定)。如：

<!-- style -->
<vpage>
<style name="default">
<normal />
</style>
</vpage>

函数

函数名称 | 说明
vpage_cast | 转换为vpage对象(供脚本语言使用)。
vpage_create | 创建vpage对象
vpage_get_widget_vtable | 获取 vpage 虚表。
vpage_set_anim_hint | 设置动画类型(vtranslate: 垂直平移，htranslate: 水平平移)。
vpage_set_ui_asset | 设置 UI资源名称。

属性

属性名称 | 类型 | 说明
anim_hint | char* | 动画类型(目前支持：vtranslate: 垂直平移，htranslate: 水平平移)。
ui_asset | char* | UI资源名称。

事件

事件名称 | 类型 | 说明
EVT_VPAGE_WILL_OPEN | event_t | 页面即将打开(动画前)。
EVT_VPAGE_OPEN | event_t | 页面打开完成(动画后)。
EVT_VPAGE_CLOSE | event_t | 页面已经关闭(动画后)。

vpage_cast 函数

  • 函数功能：

转换为vpage对象(供脚本语言使用)。

  • 函数原型：
widget_t* vpage_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | vpage对象。
widget | widget_t* | vpage对象。

vpage_create 函数

  • 函数功能：

创建vpage对象

  • 函数原型：
widget_t* vpage_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | vpage对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

vpage_get_widget_vtable 函数

  • 函数功能：

获取 vpage 虚表。

  • 函数原型：
const widget_vtable_t* vpage_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 vpage 虚表。

vpage_set_anim_hint 函数

  • 函数功能：

设置动画类型(vtranslate: 垂直平移，htranslate: 水平平移)。

  • 函数原型：
ret_t vpage_set_anim_hint (widget_t* widget, const char* anim_hint);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
anim_hint | const char* | 动画类型。

vpage_set_ui_asset 函数

  • 函数功能：

设置 UI资源名称。

  • 函数原型：
ret_t vpage_set_ui_asset (widget_t* widget, const char* ui_asset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
ui_asset | const char* | UI资源名称。

anim_hint 属性

动画类型(目前支持：vtranslate: 垂直平移，htranslate: 水平平移)。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

ui_asset 属性

UI资源名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


waitable_action_darray_t

概述

waitable actionqueue

函数

函数名称 | 说明
waitable_action_darray_create | 创建waitable_action_darray对象。
waitable_action_darray_destroy | 销毁。
waitable_action_darray_find | 查找 qaction
waitable_action_darray_find_ex | 查找 qaction
waitable_action_darray_recv | 接收一个请求。
waitable_action_darray_remove | 从 darray 中移除并销毁 qaction 对象
waitable_action_darray_remove_ex | 从 darray 中移除并销毁 qaction 对象
waitable_action_darray_replace | 替换 qaction，旧的 qaction 会被销毁
waitable_action_darray_replace_ex | 替换 qaction
waitable_action_darray_send | 发送一个请求。

waitable_action_darray_create 函数

  • 函数功能：

创建waitable_action_darray对象。

  • 函数原型：
waitable_action_darray_t* waitable_action_darray_create (uint16_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | waitable_action_darray_t* | waitable_action_darray对象。
capacity | uint16_t | action的容量。

waitable_action_darray_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t waitable_action_darray_destroy (waitable_action_darray_t* q);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | waitable_action_darray_t* | waitable_action_darray对象。

waitable_action_darray_find 函数

  • 函数功能：

查找 qaction

  • 函数原型：
qaction_t* waitable_action_darray_find (waitable_action_darray_t* q, qaction_exec_t exec);
  • 参数说明：
参数 | 类型 | 说明
返回值 | qaction_t* | 返回 qaction_t对象
q | waitable_action_darray_t* | waitable_action_darray对象。
exec | qaction_exec_t | action 中的函数回调

waitable_action_darray_find_ex 函数

  • 函数功能：

查找 qaction

  • 函数原型：
qaction_t* waitable_action_darray_find_ex (waitable_action_darray_t* q, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | qaction_t* | 返回 qaction_t对象
q | waitable_action_darray_t* | waitable_action_darray对象。
cmp | tk_compare_t | 比较函数
ctx | void* | 比较函数参数

waitable_action_darray_recv 函数

  • 函数功能：

接收一个请求。

  • 函数原型：
ret_t waitable_action_darray_recv (waitable_action_darray_t* q, qaction_t** action, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | waitable_action_darray_t* | waitable_action_darray对象。
action | qaction_t** | 用于返回action对象。
timeout_ms | uint32_t | 超时时间(ms)

waitable_action_darray_remove 函数

  • 函数功能：

从 darray 中移除并销毁 qaction 对象

  • 函数原型：
ret_t waitable_action_darray_remove (waitable_action_darray_t* q, qaction_exec_t exec);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t值
q | waitable_action_darray_t* | waitable_action_darray对象。
exec | qaction_exec_t | action 中的函数回调

waitable_action_darray_remove_ex 函数

  • 函数功能：

从 darray 中移除并销毁 qaction 对象

  • 函数原型：
ret_t waitable_action_darray_remove_ex (waitable_action_darray_t* q, tk_compare_t cmp, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t值
q | waitable_action_darray_t* | waitable_action_darray对象。
cmp | tk_compare_t | 比较函数
ctx | void* | 比较函数参数

waitable_action_darray_replace 函数

  • 函数功能：

替换 qaction，旧的 qaction 会被销毁

  • 函数原型：
ret_t waitable_action_darray_replace (waitable_action_darray_t* q, qaction_t* new_action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t值
q | waitable_action_darray_t* | waitable_action_darray对象。
new_action | qaction_t* | 新的 action 对象

waitable_action_darray_replace_ex 函数

  • 函数功能：

替换 qaction

  • 函数原型：
ret_t waitable_action_darray_replace_ex (waitable_action_darray_t* q, qaction_exec_t exec, qaction_t* new_action);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回 ret_t值
q | waitable_action_darray_t* | waitable_action_darray对象。
exec | qaction_exec_t | 旧 action 中的函数回调
new_action | qaction_t* | 新的 action 对象

waitable_action_darray_send 函数

  • 函数功能：

发送一个请求。

  • 函数原型：
ret_t waitable_action_darray_send (waitable_action_darray_t* q, qaction_t* action, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | waitable_action_darray_t* | waitable_action_darray对象。
action | qaction_t* | action对象。
timeout_ms | uint32_t | 超时时间(ms)


waitable_action_queue_t

概述

waitable actionqueue

函数

函数名称 | 说明
waitable_action_queue_create | 创建waitable_action_queue对象。
waitable_action_queue_destroy | 销毁。
waitable_action_queue_recv | 接收一个请求。
waitable_action_queue_send | 发送一个请求。

waitable_action_queue_create 函数

  • 函数功能：

创建waitable_action_queue对象。

  • 函数原型：
waitable_action_queue_t* waitable_action_queue_create (uint16_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | waitable_action_queue_t* | waitable_action_queue对象。
capacity | uint16_t | action的容量。

waitable_action_queue_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t waitable_action_queue_destroy (waitable_action_queue_t* q);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | waitable_action_queue_t* | waitable_action_queue对象。

waitable_action_queue_recv 函数

  • 函数功能：

接收一个请求。

  • 函数原型：
ret_t waitable_action_queue_recv (waitable_action_queue_t* q, qaction_t** action, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | waitable_action_queue_t* | waitable_action_queue对象。
action | qaction_t** | 用于返回action对象。
timeout_ms | uint32_t | 超时时间(ms)

waitable_action_queue_send 函数

  • 函数功能：

发送一个请求。

  • 函数原型：
ret_t waitable_action_queue_send (waitable_action_queue_t* q, qaction_t* action, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
q | waitable_action_queue_t* | waitable_action_queue对象。
action | qaction_t* | action对象。
timeout_ms | uint32_t | 超时时间(ms)


waitable_ring_buffer_t

概述

waitable ring buffer

函数

函数名称 | 说明
waitable_ring_buffer_create | 创建waitable_ring_buffer对象。
waitable_ring_buffer_destroy | 销毁。
waitable_ring_buffer_read | 读取数据。
waitable_ring_buffer_write | 写入数据。

waitable_ring_buffer_create 函数

  • 函数功能：

创建waitable_ring_buffer对象。

  • 函数原型：
waitable_ring_buffer_t* waitable_ring_buffer_create (uint32_t capacity, uint32_t block_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | waitable_ring_buffer_t* | waitable_ring_buffer对象。
capacity | uint32_t | 容量。
block_size | uint32_t | 块的大小。

waitable_ring_buffer_destroy 函数

  • 函数功能：

销毁。

  • 函数原型：
ret_t waitable_ring_buffer_destroy (waitable_ring_buffer_t* rb);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rb | waitable_ring_buffer_t* | waitable_ring_buffer对象。

waitable_ring_buffer_read 函数

  • 函数功能：

读取数据。

  • 函数原型：
ret_t waitable_ring_buffer_read (waitable_ring_buffer_t* rb, void* buff, uint32_t size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rb | waitable_ring_buffer_t* | waitable_ring_buffer对象。
buff | void* | 接收数据的buff。
size | uint32_t | 读取数据的长度(必须等于 block_size)。
timeout_ms | uint32_t | 超时时间(ms)

waitable_ring_buffer_write 函数

  • 函数功能：

写入数据。

  • 函数原型：
ret_t waitable_ring_buffer_write (waitable_ring_buffer_t* rb, const void* buff, uint32_t size, uint32_t timeout_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
rb | waitable_ring_buffer_t* | waitable_ring_buffer对象。
buff | const void* | 要写入的数据。
size | uint32_t | 数据的长度(必须等于 block_size)。
timeout_ms | uint32_t | 超时时间(ms)


wbuffer_t

概述

Write Buffer。用于数据打包。

示例：

uint8_t buff[128];
wbuffer_t wbuffer;
rbuffer_t rbuffer;
const char* str = NULL;
wbuffer_init(&wbuffer, buff, sizeof(buff));

wbuffer_write_string(&wbuffer, "hello awtk");

rbuffer_init(&rbuffer, wbuffer.data, wbuffer.cursor);
rbuffer_read_string(&rbuffer, &str);

wbuffer_t wbuffer;
wbuffer_init_extendable(&wbuffer);

wbuffer_write_string(&wbuffer, "hello awtk");

wbuffer_deinit(&wbuffer);

> 如果初始化为extendable，则最后需要调用wbuffer_deinit释放资源。

函数

函数名称 | 说明
wbuffer_deinit | 释放资源。
wbuffer_extend_capacity | 扩展缓冲区至指定的大小。
wbuffer_has_room | 是否还有空间。
wbuffer_init | 初始wbuffer对象。
wbuffer_init_extendable | 初始wbuffer对象，容量不够时是否支持自动扩展，使用完成后需要调用wbuffer_deinit释放资源。
wbuffer_rewind | 重置当前写入位置。
wbuffer_skip | 跳过指定的长度。
wbuffer_write_binary | 写入指定长度的二进制数据。
wbuffer_write_double | 写入double数据。
wbuffer_write_float | 写入float数据。
wbuffer_write_int32 | 写入int32数据。
wbuffer_write_string | 写入字符串。
wbuffer_write_uint16 | 写入uint16数据。
wbuffer_write_uint32 | 写入uint32数据。
wbuffer_write_uint64 | 写入uint64数据。
wbuffer_write_uint8 | 写入uint8数据。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 数据缓冲区最大容量。
cursor | uint32_t | 当前写入位置。
data | uint8_t* | 数据缓冲区。用于保存写入的数据。
extendable | bool_t | 容量不够时是否支持自动扩展。

wbuffer_deinit 函数

  • 函数功能：

释放资源。

  • 函数原型：
ret_t wbuffer_deinit (wbuffer_t* wbuffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。

wbuffer_extend_capacity 函数

  • 函数功能：

扩展缓冲区至指定的大小。

  • 函数原型：
ret_t wbuffer_extend_capacity (wbuffer_t* wbuffer, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
capacity | uint32_t | 缓冲区的容量。

wbuffer_has_room 函数

  • 函数功能：

是否还有空间。

  • 函数原型：
bool_t wbuffer_has_room (wbuffer_t* wbuffer, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示无，否则表示有。
wbuffer | wbuffer_t* | wbuffer对象。
size | uint32_t | 空间大小。

wbuffer_init 函数

  • 函数功能：

初始wbuffer对象。

  • 函数原型：
wbuffer_t* wbuffer_init (wbuffer_t* wbuffer, uint8_t* data, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wbuffer_t* | wbuffer对象本身。
wbuffer | wbuffer_t* | wbuffer对象。
data | uint8_t* | 缓冲区。
capacity | uint32_t | 缓冲区的容量。

wbuffer_init_extendable 函数

  • 函数功能：

初始wbuffer对象，容量不够时是否支持自动扩展，使用完成后需要调用wbuffer_deinit释放资源。

  • 函数原型：
wbuffer_t* wbuffer_init_extendable (wbuffer_t* wbuffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wbuffer_t* | wbuffer对象本身。
wbuffer | wbuffer_t* | wbuffer对象。

wbuffer_rewind 函数

  • 函数功能：

重置当前写入位置。

  • 函数原型：
ret_t wbuffer_rewind (wbuffer_t* wbuffer);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。

wbuffer_skip 函数

  • 函数功能：

跳过指定的长度。

  • 函数原型：
ret_t wbuffer_skip (wbuffer_t* wbuffer, int32_t delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
delta | int32_t | 跳过的偏移量，正数往前负数往回跳。

wbuffer_write_binary 函数

  • 函数功能：

写入指定长度的二进制数据。

  • 函数原型：
ret_t wbuffer_write_binary (wbuffer_t* wbuffer, const void* data, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
data | const void* | 要写入的数据。
size | uint32_t | 要写入的数据长度。

wbuffer_write_double 函数

  • 函数功能：

写入double数据。

  • 函数原型：
ret_t wbuffer_write_double (wbuffer_t* wbuffer, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | double | 要写入的数据。

wbuffer_write_float 函数

  • 函数功能：

写入float数据。

  • 函数原型：
ret_t wbuffer_write_float (wbuffer_t* wbuffer, float value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | float | 要写入的数据。

wbuffer_write_int32 函数

  • 函数功能：

写入int32数据。

  • 函数原型：
ret_t wbuffer_write_int32 (wbuffer_t* wbuffer, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | int32_t | 要写入的数据。

wbuffer_write_string 函数

  • 函数功能：

写入字符串。

  • 函数原型：
ret_t wbuffer_write_string (wbuffer_t* wbuffer, const char* data);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
data | const char* | 要写入的字符串。

wbuffer_write_uint16 函数

  • 函数功能：

写入uint16数据。

  • 函数原型：
ret_t wbuffer_write_uint16 (wbuffer_t* wbuffer, uint16_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | uint16_t | 要写入的数据。

wbuffer_write_uint32 函数

  • 函数功能：

写入uint32数据。

  • 函数原型：
ret_t wbuffer_write_uint32 (wbuffer_t* wbuffer, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | uint32_t | 要写入的数据。

wbuffer_write_uint64 函数

  • 函数功能：

写入uint64数据。

  • 函数原型：
ret_t wbuffer_write_uint64 (wbuffer_t* wbuffer, uint64_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | uint64_t | 要写入的数据。

wbuffer_write_uint8 函数

  • 函数功能：

写入uint8数据。

  • 函数原型：
ret_t wbuffer_write_uint8 (wbuffer_t* wbuffer, uint8_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wbuffer | wbuffer_t* | wbuffer对象。
value | uint8_t | 要写入的数据。

capacity 属性

数据缓冲区最大容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

cursor 属性

当前写入位置。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

data 属性

数据缓冲区。用于保存写入的数据。

  • 类型：uint8_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

extendable 属性

容量不够时是否支持自动扩展。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


wheel_event_t

概述

滚轮事件。

函数

函数名称 | 说明
wheel_event_cast | 把event对象转wheel_event_t对象。
wheel_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
alt | bool_t | alt键是否按下。
ctrl | bool_t | ctrl键是否按下。
dy | int32_t | 滚轮的y值。
shift | bool_t | shift键是否按下。

wheel_event_cast 函数

  • 函数功能：

把event对象转wheel_event_t对象。

  • 函数原型：
wheel_event_t* wheel_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wheel_event_t* | event对象。
event | event_t* | event对象。

wheel_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* wheel_event_init (wheel_event_t* event, uint32_t type, void* target, int32_t dy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | wheel_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
dy | int32_t | 滚轮的y值。

alt 属性

alt键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

ctrl 属性

ctrl键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

dy 属性

滚轮的y值。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

shift 属性

shift键是否按下。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


widget_animator_event_t

概述

控件动画事件。

函数

函数名称 | 说明
widget_animator_event_cast | 把event对象转widget_animator_event_t对象。
widget_animator_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
animator | void* | 控件动画句柄。
widget | widget_t* | 控件对象。

widget_animator_event_cast 函数

  • 函数功能：

把event对象转widget_animator_event_t对象。

  • 函数原型：
widget_animator_event_t* widget_animator_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_event_t* | event对象。
event | event_t* | event对象。

widget_animator_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* widget_animator_event_init (widget_animator_event_t* event, uint32_t type, widget_t* widget, void* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | widget_animator_event_t* | event对象。
type | uint32_t | 类型。
widget | widget_t* | 控件对象。
animator | void* | 控件动画句柄。

animator 属性

控件动画句柄。

  • 类型：void*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

widget 属性

控件对象。

  • 类型：widget_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


widget_animator_manager_t

概述

控件动画管理器。

函数

函数名称 | 说明
widget_animator_manager | 获取缺省的控件动画管理器。
widget_animator_manager_add | 添加指定的动画，动画在创建时调用本函数。
widget_animator_manager_count | 获取动画个数。
widget_animator_manager_create | 创建控件动画管理器。
widget_animator_manager_deinit | 析构控件动画管理器。
widget_animator_manager_destroy | 析构并释放控件动画管理器。
widget_animator_manager_find | 查找满足条件的动画。
widget_animator_manager_init | 初始化控件动画管理器。
widget_animator_manager_pause | 暂停满足条件的动画。
widget_animator_manager_remove | 移出指定的动画，动画在销毁时调用本函数。。
widget_animator_manager_remove_all | 销毁满足条件的动画。
widget_animator_manager_set | 设置缺省的控件动画管理器。
widget_animator_manager_set_time_scale | 设置时间倍率。
widget_animator_manager_start | 播放满足条件的动画。
widget_animator_manager_stop | 停止满足条件的动画。
widget_animator_manager_time_elapse | 时间流失，调用本函数更新动画(public for test)。

属性

属性名称 | 类型 | 说明
time_scale | float_t | 时间倍率，可以让时间变快或变慢。

widget_animator_manager 函数

  • 函数功能：

获取缺省的控件动画管理器。

  • 函数原型：
widget_animator_manager_t* widget_animator_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_manager_t* | 返回控件动画管理器。

widget_animator_manager_add 函数

  • 函数功能：

添加指定的动画，动画在创建时调用本函数。

  • 函数原型：
ret_t widget_animator_manager_add (widget_animator_manager_t* am, widget_animator_t* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
animator | widget_animator_t* | 动画对象。

widget_animator_manager_count 函数

  • 函数功能：

获取动画个数。

  • 函数原型：
uint32_t widget_animator_manager_count (widget_animator_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回动画个数。
am | widget_animator_manager_t* | 控件动画管理器。

widget_animator_manager_create 函数

  • 函数功能：

创建控件动画管理器。

  • 函数原型：
widget_animator_manager_t* widget_animator_manager_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_manager_t* | 返回控件动画管理器。

widget_animator_manager_deinit 函数

  • 函数功能：

析构控件动画管理器。

  • 函数原型：
ret_t widget_animator_manager_deinit (widget_animator_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。

widget_animator_manager_destroy 函数

  • 函数功能：

析构并释放控件动画管理器。

  • 函数原型：
ret_t widget_animator_manager_destroy (widget_animator_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。

widget_animator_manager_find 函数

  • 函数功能：

查找满足条件的动画。

  • 函数原型：
widget_animator_t* widget_animator_manager_find (widget_animator_manager_t* am, widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_t* | 成功返回动画对象，失败返回NULL。
am | widget_animator_manager_t* | 控件动画管理器。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_animator_manager_init 函数

  • 函数功能：

初始化控件动画管理器。

  • 函数原型：
widget_animator_manager_t* widget_animator_manager_init (widget_animator_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_manager_t* | 返回控件动画管理器。
am | widget_animator_manager_t* | 控件动画管理器。

widget_animator_manager_pause 函数

  • 函数功能：

暂停满足条件的动画。 1.widget为NULL时，暂停所有名称为name的动画。 2.name为NULL时，暂停所有widget相关的动画。 3.widget和name均为NULL，暂停所有动画。

  • 函数原型：
ret_t widget_animator_manager_pause (widget_animator_manager_t* am, widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_animator_manager_remove 函数

  • 函数功能：

移出指定的动画，动画在销毁时调用本函数。。

  • 函数原型：
ret_t widget_animator_manager_remove (widget_animator_manager_t* am, widget_animator_t* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
animator | widget_animator_t* | 动画对象。

widget_animator_manager_remove_all 函数

  • 函数功能：

销毁满足条件的动画。

  • 函数原型：
ret_t widget_animator_manager_remove_all (widget_animator_manager_t* am, widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_animator_manager_set 函数

  • 函数功能：

设置缺省的控件动画管理器。

  • 函数原型：
ret_t widget_animator_manager_set (widget_animator_manager_t* am);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。

widget_animator_manager_set_time_scale 函数

  • 函数功能：

设置时间倍率。 设置动画的时间倍率，<0: 时间倒退，<1: 时间变慢，>1 时间变快。

  • 函数原型：
ret_t widget_animator_manager_set_time_scale (widget_animator_manager_t* am, widget_t* widget, const char* name, float_t time_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。
time_scale | float_t | 时间倍率。

widget_animator_manager_start 函数

  • 函数功能：

播放满足条件的动画。 1.widget为NULL时，播放所有名称为name的动画。 2.name为NULL时，播放所有widget相关的动画。 3.widget和name均为NULL，播放所有动画。

  • 函数原型：
ret_t widget_animator_manager_start (widget_animator_manager_t* am, widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_animator_manager_stop 函数

  • 函数功能：

停止满足条件的动画。 1.widget为NULL时，停止所有名称为name的动画。 2.name为NULL时，停止所有widget相关的动画。 3.widget和name均为NULL，停止所有动画。

  • 函数原型：
ret_t widget_animator_manager_stop (widget_animator_manager_t* am, widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_animator_manager_time_elapse 函数

  • 函数功能：

时间流失，调用本函数更新动画(public for test)。

  • 函数原型：
ret_t widget_animator_manager_time_elapse (widget_animator_manager_t* am, uint32_t delta_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
am | widget_animator_manager_t* | 控件动画管理器。
delta_time | uint32_t | 流失的时间(毫秒)。

time_scale 属性

时间倍率，可以让时间变快或变慢。

  • 类型：float_t


widget_animator_prop2_t

概述

通过修改对象的两个指定属性形成动画效果。

函数

函数名称 | 说明
widget_animator_prop2_create | 创建双属性动画对象。
widget_animator_prop2_set_params | 设置动画对象的参数。

widget_animator_prop2_create 函数

  • 函数功能：

创建双属性动画对象。

  • 函数原型：
widget_animator_t* widget_animator_prop2_create (widget_t* widget, uint32_t duration, uint32_t delay, easing_type_t easing, const char* prop1_name, const char* prop2_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_t* | 成功返回动画对象，失败返回NULL。
widget | widget_t* | 控件对象。
duration | uint32_t | 动画持续时间。
delay | uint32_t | 动画执行时间。
easing | easing_type_t | 插值函数类型。
prop1_name | const char* | 属性1的名称。
prop2_name | const char* | 属性2的名称。

widget_animator_prop2_set_params 函数

  • 函数功能：

设置动画对象的参数。

  • 函数原型：
ret_t widget_animator_prop2_set_params (widget_animator_t* animator, double from1, double from2, double to1, double to2);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象本身。
from1 | double | x的初值。
from2 | double | y的初值。
to1 | double | x的终值。
to2 | double | y的终值。


widget_animator_prop_t

概述

通过修改对象的指定属性形成动画效果。

函数

函数名称 | 说明
widget_animator_prop_create | 创建单属性动画对象。
widget_animator_prop_set_params | 设置动画对象的参数。

widget_animator_prop_create 函数

  • 函数功能：

创建单属性动画对象。

  • 函数原型：
widget_animator_t* widget_animator_prop_create (widget_t* widget, uint32_t duration, uint32_t delay, easing_type_t easing, const char* prop_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_t* | 成功返回动画对象，失败返回NULL。
widget | widget_t* | 控件对象。
duration | uint32_t | 动画持续时间。
delay | uint32_t | 动画执行时间。
easing | easing_type_t | 插值函数类型。
prop_name | const char* | 属性的名称。

widget_animator_prop_set_params 函数

  • 函数功能：

设置动画对象的参数。

  • 函数原型：
ret_t widget_animator_prop_set_params (widget_animator_t* animator, double from, double to);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象本身。
from | double | prop起始值。
to | double | prop结束值。


widget_animator_scroll_t

概述

滚动控件的动画。 本动画也可以用widget_animator_prop2实现，但滚动控件需要访问内部数据结构，出于可读性考虑保留独立实现。

函数

函数名称 | 说明
widget_animator_scroll_create | 创建动画对象。
widget_animator_scroll_set_params | 设置动画对象的参数。

widget_animator_scroll_create 函数

  • 函数功能：

创建动画对象。

  • 函数原型：
widget_animator_t* widget_animator_scroll_create (widget_t* widget, uint32_t duration, uint32_t delay, easing_type_t easing);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_t* | 成功返回动画对象，失败返回NULL。
widget | widget_t* | 控件对象。
duration | uint32_t | 动画持续时间。
delay | uint32_t | 动画执行时间。
easing | easing_type_t | 插值函数类型。

widget_animator_scroll_set_params 函数

  • 函数功能：

设置动画对象的参数。

  • 函数原型：
ret_t widget_animator_scroll_set_params (widget_animator_t* animator, xy_t x_from, xy_t y_from, xy_t x_to, xy_t y_to);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象本身。
x_from | xy_t | x起点值。
y_from | xy_t | y起点值。
x_to | xy_t | x终点值。
y_to | xy_t | y终点值。


widget_animator_t

概述

控件动画接口。

函数

函数名称 | 说明
widget_animator_destroy | 销毁animator对象。
widget_animator_init | 初始化。仅供子类内部使用。
widget_animator_off | 注销指定事件的处理函数。
widget_animator_on | 注册指定事件的处理函数。
widget_animator_pause | 暂停动画。
widget_animator_set_destroy_when_done | 设置完成时是否自动销毁动画对象(缺省销毁)。
widget_animator_set_name | 设置名称。
widget_animator_set_relayout | 设置每帧是否重新布局。
widget_animator_set_repeat | 设置为重复模式。
widget_animator_set_reversed | 设置为逆向模式。
widget_animator_set_time_scale | 设置时间倍率，用于实现时间加速减速和停滞的功能。
widget_animator_set_yoyo | 设置为yoyo模式。
widget_animator_start | 启动动画。
widget_animator_stop | 停止动画。

属性

属性名称 | 类型 | 说明
name | char* | 名称。

widget_animator_destroy 函数

  • 函数功能：

销毁animator对象。

  • 函数原型：
ret_t widget_animator_destroy (widget_animator_t* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。

widget_animator_init 函数

  • 函数功能：

初始化。仅供子类内部使用。

  • 函数原型：
ret_t widget_animator_init (widget_animator_t* animator, widget_t* widget, uint32_t duration, uint32_t delay, easing_func_t easing);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
widget | widget_t* | 控件对象。
duration | uint32_t | 动画持续时间。
delay | uint32_t | 动画执行时间。
easing | easing_func_t | 插值函数。

widget_animator_off 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t widget_animator_off (widget_animator_t* animator, uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
id | uint32_t | widget_animator_on返回的ID。

widget_animator_on 函数

  • 函数功能：

注册指定事件的处理函数。

  • 函数原型：
uint32_t widget_animator_on (widget_animator_t* animator, event_type_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于widget_animator_off。
animator | widget_animator_t* | 动画对象。
type | event_type_t | 事件类型。目前支持：EVT_ANIM_START,EVT_ANIM_STOP,EVT_ANIM_PAUSE,EVT_ANIM_ONCE和EVT_ANIM_END。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

widget_animator_pause 函数

  • 函数功能：

暂停动画。

  • 函数原型：
ret_t widget_animator_pause (widget_animator_t* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。

widget_animator_set_destroy_when_done 函数

  • 函数功能：

设置完成时是否自动销毁动画对象(缺省销毁)。

  • 函数原型：
ret_t widget_animator_set_destroy_when_done (widget_animator_t* animator, bool_t destroy_when_done);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
destroy_when_done | bool_t | 完成时是否自动销毁动画对象。

widget_animator_set_name 函数

  • 函数功能：

设置名称。

  • 函数原型：
ret_t widget_animator_set_name (widget_animator_t* animator, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
name | const char* | 名称。

widget_animator_set_relayout 函数

  • 函数功能：

设置每帧是否重新布局。

  • 函数原型：
ret_t widget_animator_set_relayout (widget_animator_t* animator, bool_t relayout);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
relayout | bool_t | 是否重新布局。

widget_animator_set_repeat 函数

  • 函数功能：

设置为重复模式。

  • 函数原型：
ret_t widget_animator_set_repeat (widget_animator_t* animator, uint32_t repeat_times);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
repeat_times | uint32_t | 重复的次数。

widget_animator_set_reversed 函数

  • 函数功能：

设置为逆向模式。

  • 函数原型：
ret_t widget_animator_set_reversed (widget_animator_t* animator, bool_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
value | bool_t | 是否为逆向模式。

widget_animator_set_time_scale 函数

  • 函数功能：

设置时间倍率，用于实现时间加速减速和停滞的功能。

  • 函数原型：
ret_t widget_animator_set_time_scale (widget_animator_t* animator, float_t time_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
time_scale | float_t | 时间倍率。

widget_animator_set_yoyo 函数

  • 函数功能：

设置为yoyo模式。

  • 函数原型：
ret_t widget_animator_set_yoyo (widget_animator_t* animator, uint32_t yoyo_times);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。
yoyo_times | uint32_t | yoyo的次数，往返视为两次。

widget_animator_start 函数

  • 函数功能：

启动动画。

  • 函数原型：
ret_t widget_animator_start (widget_animator_t* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。

widget_animator_stop 函数

  • 函数功能：

停止动画。

  • 函数原型：
ret_t widget_animator_stop (widget_animator_t* animator);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
animator | widget_animator_t* | 动画对象。

name 属性

名称。

  • 类型：char*


widget_cursor_t

概述

控件鼠标光标常量定义。

常量

名称 | 说明
WIDGET_CURSOR_DEFAULT | 默认光标。
WIDGET_CURSOR_EDIT | 文本选择光标。
WIDGET_CURSOR_HAND | 手指光标。
WIDGET_CURSOR_WAIT | 等待光标。
WIDGET_CURSOR_CROSS | 叉光标。
WIDGET_CURSOR_NO | Slashed circle or crossbones。
WIDGET_CURSOR_SIZENWSE | Double arrow pointing northwest and southeast。
WIDGET_CURSOR_SIZENESW | Double arrow pointing northeast and southwest。
WIDGET_CURSOR_SIZEWE | Double arrow pointing west and east。
WIDGET_CURSOR_SIZENS | Double arrow pointing north and south。
WIDGET_CURSOR_SIZEALL | Four pointed arrow pointing north, south, east, and west。


widget_factory_t

概述

控件工厂对象。

提供通过类型创建控件的能力。 用户注册自定义控件，可以获得内置控件同等待遇。

函数

函数名称 | 说明
widget_factory | 获取缺省的控件工厂对象。
widget_factory_create | 创建控件工厂对象。
widget_factory_create_widget | 创建指定类型的控件。
widget_factory_destroy | 析构并释放控件工厂对象。
widget_factory_register | 注册控件创建函数。
widget_factory_register_multi | 注册控件创建函数。
widget_factory_set | 设置缺省的控件工厂对象。

widget_factory 函数

  • 函数功能：

获取缺省的控件工厂对象。

  • 函数原型：
widget_factory_t* widget_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_factory_t* | 返回控件工厂对象。

widget_factory_create 函数

  • 函数功能：

创建控件工厂对象。

  • 函数原型：
widget_factory_t* widget_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_factory_t* | 返回控件工厂对象。

widget_factory_create_widget 函数

  • 函数功能：

创建指定类型的控件。

  • 函数原型：
widget_t* widget_factory_create_widget (widget_factory_t* factory, const char* type, widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回控件对象。
factory | widget_factory_t* | 控件工厂对象。
type | const char* | 控件类型。
parent | widget_t* | 父控件。
x | xy_t | 初始X坐标。
y | xy_t | 初始Y坐标。
w | wh_t | 初始宽度。
h | wh_t | 初始高度。

widget_factory_destroy 函数

  • 函数功能：

析构并释放控件工厂对象。

  • 函数原型：
ret_t widget_factory_destroy (widget_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | widget_factory_t* | 控件工厂对象。

widget_factory_register 函数

  • 函数功能：

注册控件创建函数。

  • 函数原型：
ret_t widget_factory_register (widget_factory_t* factory, const char* type, widget_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | widget_factory_t* | 控件工厂对象。
type | const char* | 控件类型。
create | widget_create_t | 创建函数。

widget_factory_register_multi 函数

  • 函数功能：

注册控件创建函数。

  • 函数原型：
ret_t widget_factory_register_multi (widget_factory_t* factory, const general_factory_table_t* table);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | widget_factory_t* | 控件工厂对象。
table | const general_factory_table_t* | 表。

widget_factory_set 函数

  • 函数功能：

设置缺省的控件工厂对象。

  • 函数原型：
ret_t widget_factory_set (widget_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | widget_factory_t* | 控件工厂对象。


widget_pool_t

概述

有时需要频繁创建和销毁控件，widget pool把销毁的控件缓存起来，再次使用时直接拿回来用。

  • 优点：速度快，内存碎片少。
  • 缺点：占用一点内存空间。

通过宏WITH_WIDGET_POOL来指定最大缓存控件的数量。

控件可以通过vt->enable_pool参数决定该类控件是否启用缓存。

函数

函数名称 | 说明
widget_pool | 获取缺省widget pool对象。
widget_pool_clear_cache | 清除全部缓存控件。
widget_pool_count | 计算缓存控件个数。
widget_pool_create | 创建widget pool对象。
widget_pool_create_widget | 创建widget对象。
widget_pool_destroy | 清除全部缓存控件并销毁widget pool对象。
widget_pool_destroy_widget | 销毁或回收widget对象。
widget_pool_set | 设置缺省widget pool对象。

widget_pool 函数

  • 函数功能：

获取缺省widget pool对象。

  • 函数原型：
widget_pool_t* widget_pool ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_pool_t* | 返回widget pool对象。

widget_pool_clear_cache 函数

  • 函数功能：

清除全部缓存控件。

  • 函数原型：
ret_t widget_pool_clear_cache (widget_pool_t* pool);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
pool | widget_pool_t* | widget pool对象。

widget_pool_count 函数

  • 函数功能：

计算缓存控件个数。

  • 函数原型：
int32_t widget_pool_count (widget_pool_t* pool);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回缓存控件个数。
pool | widget_pool_t* | widget pool对象。

widget_pool_create 函数

  • 函数功能：

创建widget pool对象。

  • 函数原型：
widget_pool_t* widget_pool_create (uint32_t max_cache_nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_pool_t* | 返回widget pool对象。
max_cache_nr | uint32_t | 最大缓存对象个数。

widget_pool_create_widget 函数

  • 函数功能：

创建widget对象。

  • 函数原型：
widget_t widget_pool_create_widget (widget_pool_t* pool, const widget_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t | 返回控件对象。
pool | widget_pool_t* | widget pool对象。
vt | const widget_vtable_t* | 控件虚表。

widget_pool_destroy 函数

  • 函数功能：

清除全部缓存控件并销毁widget pool对象。

  • 函数原型：
ret_t widget_pool_destroy (widget_pool_t* pool);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
pool | widget_pool_t* | widget pool对象。

widget_pool_destroy_widget 函数

  • 函数功能：

销毁或回收widget对象。

  • 函数原型：
ret_t widget_pool_destroy_widget (widget_pool_t* pool, widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
pool | widget_pool_t* | widget pool对象。
widget | widget_t* | 控件对象。

widget_pool_set 函数

  • 函数功能：

设置缺省widget pool对象。

  • 函数原型：
ret_t widget_pool_set (widget_pool_t* pool);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
pool | widget_pool_t* | widget pool对象。


widget_prop_t

概述

控件的属性。

常量

名称 | 说明
WIDGET_PROP_EXEC | 用于执行某些特殊的命令（比如控制动画的启停），主要是方便MVVM通过属性来控制动画。
WIDGET_PROP_X | X坐标。
WIDGET_PROP_Y | Y坐标。
WIDGET_PROP_W | 宽度。
WIDGET_PROP_H | 高度。
WIDGET_PROP_MAX_H | 最大高度。
WIDGET_PROP_DESIGN_W | 窗口设计时宽度。
WIDGET_PROP_DESIGN_H | 窗口设计时宽度。
WIDGET_PROP_AUTO_SCALE_CHILDREN_X | 窗口大小与设计时大小不同时，是否自动调整子控件的x坐标。
WIDGET_PROP_AUTO_SCALE_CHILDREN_Y | 窗口大小与设计时大小不同时，是否自动调整子控件的y坐标。
WIDGET_PROP_AUTO_SCALE_CHILDREN_W | 窗口大小与设计时大小不同时，是否自动调整子控件的宽度。
WIDGET_PROP_AUTO_SCALE_CHILDREN_H | 窗口大小与设计时大小不同时，是否自动调整子控件的高度。
WIDGET_PROP_INPUTING | inputing。
WIDGET_PROP_ALWAYS_ON_TOP | always on top。
WIDGET_PROP_CARET_X | caret x。
WIDGET_PROP_CARET_Y | caret y。
WIDGET_PROP_LINE_HEIGHT | 行高。
WIDGET_PROP_DIRTY_RECT_TOLERANCE | 脏矩形超出控件本身大小的最大范围。
WIDGET_PROP_BIDI | bidi type(rtl,ltr,auto,wrtl,wltr,lro,rlo)。
WIDGET_PROP_CANVAS | Canvas。
WIDGET_PROP_LOCALIZE_OPTIONS | Canvas。
WIDGET_PROP_NATIVE_WINDOW | Native Window。
WIDGET_PROP_HIGHLIGHT | dialog highlight。
WIDGET_PROP_BAR_SIZE | slider中的bar的的宽度或高度。
WIDGET_PROP_OPACITY | 不透明度。
WIDGET_PROP_MIN_W | 最小宽度。
WIDGET_PROP_MAX_W | 最大宽度。
WIDGET_PROP_AUTO_ADJUST_SIZE | 根据子控件和文本自动调整大小。
WIDGET_PROP_SINGLE_INSTANCE | 窗口是否保持单例。
WIDGET_PROP_STRONGLY_FOCUS | 点击非focusable控件时，是否让当前焦点控件失去焦点。比如点击窗口空白区域，是否让编辑器失去焦点。
WIDGET_PROP_CHILDREN_LAYOUT | 子控件布局参数。
WIDGET_PROP_LAYOUT | 子控件布局参数(过时)。
WIDGET_PROP_SELF_LAYOUT | 控件布局参数。
WIDGET_PROP_LAYOUT_W | layout宽度。
WIDGET_PROP_LAYOUT_H | layout高度。
WIDGET_PROP_VIRTUAL_W | 虚拟宽度。
WIDGET_PROP_VIRTUAL_H | 虚拟高度。
WIDGET_PROP_LOADING | 控件正在加载。
WIDGET_PROP_NAME | 名称。
WIDGET_PROP_TYPE | 类型。
WIDGET_PROP_CLOSABLE | 是否可以关闭。
WIDGET_PROP_POINTER_CURSOR | 鼠标指针。
WIDGET_PROP_VALUE | 值。
WIDGET_PROP_EASY_TOUCH_MODE | 容易点击模式(目前用于spinbox)。
WIDGET_PROP_RADIO | CheckButton是否单选。
WIDGET_PROP_REVERSE | 进度条反向显示。
WIDGET_PROP_LENGTH | 长度。
WIDGET_PROP_LINE_WRAP | 自动换行。
WIDGET_PROP_WORD_WRAP | 是否允许单词中换行。
WIDGET_PROP_ELLIPSES | 是否省略。
WIDGET_PROP_TEXT | 文本。
WIDGET_PROP_TR_TEXT | 待翻译文本。
WIDGET_PROP_STYLE | style。
WIDGET_PROP_ENABLE | 是否启用。
WIDGET_PROP_FEEDBACK | 是否启用按键音等反馈。
WIDGET_PROP_FLOATING | 是否启用floating布局。
WIDGET_PROP_MARGIN | 边距。
WIDGET_PROP_SPACING | 间距。
WIDGET_PROP_LEFT_MARGIN | 左边距。
WIDGET_PROP_RIGHT_MARGIN | 右边距。
WIDGET_PROP_TOP_MARGIN | 顶边距。
WIDGET_PROP_BOTTOM_MARGIN | 底边距。
WIDGET_PROP_STEP | 步长。
WIDGET_PROP_VISIBLE | 是否可见。
WIDGET_PROP_SENSITIVE | 是否接受用户事件。
WIDGET_PROP_APPLET_NAME | 窗口所属的小应用程序(applet)名称。
WIDGET_PROP_ANIMATION | 控件动画。
WIDGET_PROP_ANIM_HINT | 窗口动画。
WIDGET_PROP_FULLSCREEN | 窗口设置为全部大小。
WIDGET_PROP_DISABLE_ANIM | 禁用窗口动画。
WIDGET_PROP_OPEN_ANIM_HINT | 打开窗口时的动画。
WIDGET_PROP_CLOSE_ANIM_HINT | 关闭窗口时的动画。
WIDGET_PROP_MIN | 最小值。
WIDGET_PROP_ACTION_TEXT | 软键盘上action按钮的文本。
WIDGET_PROP_TIPS | 提示信息。
WIDGET_PROP_TR_TIPS | 需要翻译的提示信息。
WIDGET_PROP_INPUT_TYPE | 输入类型。
WIDGET_PROP_KEYBOARD | 自定义软键盘资源名称。
WIDGET_PROP_DEFAULT_FOCUSED_CHILD | 缺省获得焦点的子控件(可用控件名或类型)。
WIDGET_PROP_READONLY | 只读模式。
WIDGET_PROP_CANCELABLE | 是否可取消。
WIDGET_PROP_PASSWORD_VISIBLE | 密码是否可见。
WIDGET_PROP_ACTIVE | 是否处于active状态。
WIDGET_PROP_CURR_PAGE | 当前页。
WIDGET_PROP_PAGE_MAX_NUMBER | 页面最大个数。
WIDGET_PROP_VERTICAL | 是否为垂直模式。
WIDGET_PROP_SHOW_TEXT | 是否显示文本。
WIDGET_PROP_XOFFSET | X方向的偏移。（如果控件有继承 get_offset 函数指针的话，一定要和 get_offset 返回值保持一致，否则容易出现问题）详情请看 docs/how_to_use_offset_in_custom_widget.md
WIDGET_PROP_YOFFSET | Y方向的偏移。（如果控件有继承 get_offset 函数指针的话，一定要和 get_offset 返回值保持一致，否则容易出现问题）详情请看 docs/how_to_use_offset_in_custom_widget.md
WIDGET_PROP_ALIGN_V | 垂直对齐模式。
WIDGET_PROP_ALIGN_H | 水平对齐模式。
WIDGET_PROP_AUTO_PLAY | 是否自动播放或指定播放的时间。
WIDGET_PROP_LOOP | 是否循环播放或循环播放的次数。
WIDGET_PROP_RUNNING | 是否正在运行(播放)。
WIDGET_PROP_AUTO_FIX | 是否启用自动更正功能。
WIDGET_PROP_SELECT_NONE_WHEN_FOCUSED | 编辑器在获得焦点时是否不选中文本。
WIDGET_PROP_OPEN_IM_WHEN_FOCUSED | 编辑器在获得焦点时是否打开输入法。
WIDGET_PROP_CLOSE_IM_WHEN_BLURED | 编辑器在失去焦点时是否关闭输入法。
WIDGET_PROP_X_MIN | X最小值。
WIDGET_PROP_X_MAX | X最大值。
WIDGET_PROP_Y_MIN | Y最小值。
WIDGET_PROP_Y_MAX | Y最大值。
WIDGET_PROP_MAX | 最大值。
WIDGET_PROP_GRAB_KEYS | 让窗口管理器直接把按键发给自己。
WIDGET_PROP_ROW | 行数或每行的高度。
WIDGET_PROP_STATE_FOR_STYLE | 控件状态。
WIDGET_PROP_THEME | 窗体样式名称。
WIDGET_PROP_STAGE | window stage
WIDGET_PROP_IMAGE_MANAGER | 图片管理器。
WIDGET_PROP_ASSETS_MANAGER | 资源管理器。
WIDGET_PROP_LOCALE_INFO | locale_info。
WIDGET_PROP_FONT_MANAGER | 字体管理器。
WIDGET_PROP_THEME_OBJ | 窗口的窗体样式对象。
WIDGET_PROP_DEFAULT_THEME_OBJ | 缺省的窗体样式对象。
WIDGET_PROP_ITEM_WIDTH | 项的宽度。
WIDGET_PROP_ITEM_HEIGHT | 项的高度。
WIDGET_PROP_DEFAULT_ITEM_HEIGHT | 项的缺省高度。
WIDGET_PROP_XSLIDABLE | X方向是否可拖动。
WIDGET_PROP_YSLIDABLE | Y方向是否可拖动。
WIDGET_PROP_REPEAT | 重复次数。
WIDGET_PROP_LONG_PRESS_TIME | 触发长按事件的时间(ms)。
WIDGET_PROP_ENABLE_LONG_PRESS | 是否启用长按。
WIDGET_PROP_ENABLE_PREVIEW | 是否启用预览。
WIDGET_PROP_CLICK_THROUGH | 是否启用点击穿透。
WIDGET_PROP_ANIMATABLE | 是否启用动画。
WIDGET_PROP_AUTO_HIDE | 是否自动隐藏。
WIDGET_PROP_AUTO_HIDE_SCROLL_BAR | 是否自动隐藏滚动条。
WIDGET_PROP_IMAGE | 图片名称。
WIDGET_PROP_FORMAT | 显示格式。
WIDGET_PROP_DRAW_TYPE | 图片绘制类型。
WIDGET_PROP_SELECTABLE | 是否可选择。
WIDGET_PROP_CLICKABLE | 是否可点击。
WIDGET_PROP_SCALE_X | X方向缩放比例。
WIDGET_PROP_SCALE_Y | Y方向缩放比例。
WIDGET_PROP_ANCHOR_X | x锚点。
WIDGET_PROP_ANCHOR_Y | y锚点。
WIDGET_PROP_ROTATION | 选中角度(幅度)
WIDGET_PROP_COMPACT | 紧凑模式。
WIDGET_PROP_SCROLLABLE | 是否支持滚动。
WIDGET_PROP_ICON | 图标名称。
WIDGET_PROP_OPTIONS | 选项集合。
WIDGET_PROP_SELECTED | 是否被选中。
WIDGET_PROP_CHECKED | 是否被勾选。
WIDGET_PROP_ACTIVE_ICON | active状态下的图标。
WIDGET_PROP_LOAD_UI | 动态加载UI名字。
WIDGET_PROP_OPEN_WINDOW | 要打开窗口的名称。
WIDGET_PROP_THEME_OF_POPUP | ComboBox打开弹出窗口的主题。
WIDGET_PROP_SELECTED_INDEX | 被选中项的索引。
WIDGET_PROP_CLOSE_WHEN_CLICK | 点击窗口时关闭窗口。
WIDGET_PROP_CLOSE_WHEN_CLICK_OUTSIDE | 点击窗口外部时关闭窗口。
WIDGET_PROP_CLOSE_WHEN_TIMEOUT | 超时后关闭窗口。
WIDGET_PROP_LINE_GAP | 行间距。
WIDGET_PROP_BG_COLOR | 背景颜色(仅仅使用于color tile)。
WIDGET_PROP_BORDER_COLOR | 边框颜色(仅仅使用于color tile)。
WIDGET_PROP_DELAY | 延迟时间(毫秒)
WIDGET_PROP_IS_KEYBOARD | 是否为键盘。
WIDGET_PROP_FOCUSED | 是否为焦点控件。
WIDGET_PROP_FOCUS | (过时请用focused)。
WIDGET_PROP_FOCUSABLE | 是否支持焦点停留。
WIDGET_PROP_WITH_FOCUS_STATE | 是否支持焦点状态(如果希望style支持焦点状态，但又不希望焦点停留，可用本属性)。
WIDGET_PROP_MOVE_FOCUS_PREV_KEY | 将焦点移到前一个的键值。
WIDGET_PROP_MOVE_FOCUS_NEXT_KEY | 将焦点移到后一个的键值。
WIDGET_PROP_MOVE_FOCUS_UP_KEY | 将焦点向上移动的键值。
WIDGET_PROP_MOVE_FOCUS_DOWN_KEY | 将焦点向下移动的键值。
WIDGET_PROP_MOVE_FOCUS_LEFT_KEY | 将焦点向左移动的键值。
WIDGET_PROP_MOVE_FOCUS_RIGHT_KEY | 将焦点向右移动的键值。
WIDGET_PROP_ROWS | 行数。
WIDGET_PROP_SHOW_GRID | 是否显示网格线。
WIDGET_PROP_COLUMNS_DEFINITION | 各列的定义。
WIDGET_PROP_DRAG_THRESHOLD | 拖拽临界值。
WIDGET_PROP_ANIMATING_TIME | 动画时间。
WIDGET_PROP_ANIMATE_PREFIX | 改变控件属性时附带动画的前缀。
WIDGET_PROP_ANIMATE_ANIMATING_TIME | 改变控件属性时附带动画的播放时间。
WIDGET_PROP_DIRTY_RECT | 控件脏矩形区域。


widget_state_t

概述

控件状态常量定义。

这里指定常用的状态值，扩展控件可以在自己的头文件中定义私有的状态。

常量

名称 | 说明
WIDGET_STATE_NONE | 无效状态。
WIDGET_STATE_NORMAL | 正常状态。
WIDGET_STATE_ACTIVATED | 3/5keys模式时，进入激活状态(此时方向键用于修改值)。
WIDGET_STATE_CHANGED | 内容被修改的状态。
WIDGET_STATE_PRESSED | 指针按下状态。
WIDGET_STATE_OVER | 指针悬浮状态。
WIDGET_STATE_DISABLE | 禁用状态。
WIDGET_STATE_FOCUSED | 聚焦状态。
WIDGET_STATE_CHECKED | 勾选状态。
WIDGET_STATE_UNCHECKED | 没勾选状态。
WIDGET_STATE_EMPTY | 编辑器无内容状态。
WIDGET_STATE_EMPTY_FOCUS | 编辑器无内容同时聚焦的状态。
WIDGET_STATE_EMPTY_OVER | 编辑器无内容同时指针悬浮的状态。
WIDGET_STATE_ERROR | 输入错误状态。
WIDGET_STATE_SELECTED | 选中状态。
WIDGET_STATE_NORMAL_OF_CHECKED | 正常状态(选中项)。
WIDGET_STATE_PRESSED_OF_CHECKED | 指针按下状态(选中项)。
WIDGET_STATE_OVER_OF_CHECKED | 指针悬浮状态(选中项)。
WIDGET_STATE_DISABLE_OF_CHECKED | 禁用状态(选中项)。
WIDGET_STATE_FOCUSED_OF_CHECKED | 焦点状态(选中项)。
WIDGET_STATE_NORMAL_OF_ACTIVE | 正常状态(当前项)。
WIDGET_STATE_PRESSED_OF_ACTIVE | 指针按下状态(当前项)。
WIDGET_STATE_OVER_OF_ACTIVE | 指针悬浮状态(当前项)。
WIDGET_STATE_DISABLE_OF_ACTIVE | 禁用状态(当前项)。
WIDGET_STATE_FOCUSED_OF_ACTIVE | 焦点状态(当前项)。


widget_t

概述

widget_t 是所有控件、窗口和窗口管理器的基类。 widget_t也是一个容器，可放其它widget_t到它的内部，形成一个树形结构。

通常widget_t通过一个矩形区域向用户呈现一些信息，接受用户的输入，并据此做出适当的反应。 它负责控件的生命周期、通用状态、事件分发和Style的管理。 本类提供的接口(函数和属性)除非特别说明，一般都适用于子类控件。

为了便于解释，这里特别说明一下几个术语：

  • 父控件与子控件：父控件与子控件指的两个控件的组合关系(这是在运行时决定的)。 比如：在窗口中放一个按钮，此时，我们称按钮是窗口的子控件，窗口是按钮的父控件。

  • 子类控件与父类控件：子类控件与父类控件指的两类控件的继承关系(这是在设计时决定的)。 比如：我们称button_t是widget_t的子类控件，widget_t是button_t的父类控件。

widget相关的函数都只能在GUI线程中执行，如果需在非GUI线程中想调用widget相关函数， 请用idle_queue或timer_queue进行串行化。 请参考demo thread

widget_t是抽象类，不要直接创建widget_t的实例。控件支持两种创建方式：

  • 通过XML创建。如：
<button x="c" y="m" w="80" h="30" text="OK"/>
  • 通过代码创建。如：
widget_t* button = button_create(win, 10, 10, 128, 30);
widget_set_text(button, L"OK");
widget_on(button, EVT_CLICK, on_click, NULL);

函数

函数名称 | 说明
widget_add_child | 加入一个子控件。
widget_add_child_default | 加入一个子控件默认实现(供子类调用)。
widget_add_idle | 创建idle。
widget_add_timer | 创建定时器。
widget_add_value | 增加控件的值。
widget_add_value_int | 增加控件的值。
widget_animate_value_to | 设置控件的值(以动画形式变化到指定的值)。
widget_auto_scale_children | 根据缩放子控件的位置和大小。
widget_back | 请求返回到前一个窗口。
widget_back_to_home | 请求返回到home窗口。
widget_begin_wait_pointer_cursor | 开始等待鼠标指针。
widget_calc_icon_text_rect | 计算icon text的位置。
widget_cast | 转换为widget对象(供脚本语言使用)。
widget_child | 查找指定名称的子控件(同widget_lookup(widget, name, FALSE))。
widget_child_on | 为指定名称的子控件注册指定事件的处理函数。
widget_clone | clone。
widget_close_window | 关闭控件所在的窗口。
widget_close_window_force | 关闭控件所在的窗口。
widget_count_children | 获取子控件的个数。
widget_create | 创建控件。仅在子类控件构造函数中使用。
widget_create_animator | 创建动画。
widget_destroy | 从父控件中移除控件，并调用unref函数销毁控件。
widget_destroy_animator | 销毁动画。
widget_destroy_async | 从父控件中移除控件，并调用unref函数销毁控件。
widget_destroy_children | 销毁全部子控件。
widget_dispatch | 分发一个事件。
widget_dispatch_async | 异步分发一个事件。
widget_dispatch_event_to_target_recursive | 递归分发事件到targe控件。
widget_dispatch_model_event | 分发model事件(分发到各个窗口)。
widget_dispatch_recursive | 分发一个事件控件本身及所有子控件。
widget_dispatch_simple_event | 分发一个简单事件。
widget_dispatch_to_key_target | 递归的分发一个事件到所有key_target子控件。
widget_dispatch_to_target | 递归的分发一个事件到所有target子控件。
widget_draw_background | 根据控件的style绘制背景矩形。
widget_draw_text_in_rect | 在canvas绘制一行文本。
widget_end_wait_pointer_cursor | 结束等待鼠标指针。
widget_ensure_visible_in_viewport | 使控件滚动到可见区域。
widget_equal | 判断两个widget是否相同。
widget_fill_bg_rect | 根据控件的style绘制背景矩形。
widget_fill_fg_rect | 根据控件的style绘制前景矩形。
widget_find_animator | 查找指定名称的动画。
widget_find_parent_by_name | 通过名称查找父控件。
widget_find_parent_by_type | 通过类型查找父控件。
widget_find_target | 查找x/y坐标对应的子控件。
widget_focus_first | 置焦点于第一个控件。
widget_focus_next | 把焦点移动下一个控件。
widget_focus_prev | 把焦点移动前一个控件。
widget_foreach | 遍历当前控件及子控件。
widget_get_assets_manager | 获取assets_manager对象。
widget_get_auto_adjust_size | 获取控件auto_adjust_size属性值。
widget_get_canvas | 获取canvas对象。
widget_get_child | 获取指定索引的子控件。
widget_get_child_text_utf8 | 获取子控件的文本。
widget_get_content_area | 获取widget去掉margin之外的区域。
widget_get_enable | 获取控件enable属性值。
widget_get_feedback | 获取控件feedback属性值。
widget_get_floating | 获取控件floating属性值。
widget_get_focusable | 获取控件focusable属性值。
widget_get_focused_widget | 获取当前窗口中的焦点控件。
widget_get_font_manager | 获取font_manager对象。
widget_get_image_manager | 获取image_manager对象。
widget_get_locale_info | 获取locale_info对象。
widget_get_native_window | 获取原生窗口对象。
widget_get_prop | 获取控件指定属性的值。
widget_get_prop_bool | 获取布尔格式的属性。
widget_get_prop_default_value | 获取控件指定属性的缺省值(在持久化控件时，无需保存缺省值)。
widget_get_prop_float | 获取浮点数格式的属性。
widget_get_prop_int | 获取整数格式的属性。
widget_get_prop_pointer | 获取指针格式的属性。
widget_get_prop_str | 获取字符串格式的属性。
widget_get_sensitive | 获取控件sensitive属性值。
widget_get_state_for_style | 把控件的状态转成获取style选要的状态，一般只在子类中使用。
widget_get_style | 获取widget样式。
widget_get_style_type | 获取 widget 对应风格类型
widget_get_text | 获取控件的文本。
widget_get_text_utf8 | 获取控件的文本。
widget_get_theme_name | 获取 theme 的名称
widget_get_type | 获取当前控件的类型名称。
widget_get_value | 获取控件的值。只是对widget_get_prop的包装，值的意义由子类控件决定。
widget_get_value_int | 获取控件的值。只是对widget_get_prop的包装，值的意义由子类控件决定。
widget_get_visible | 获取控件visible属性值。
widget_get_widget_vtable | 获取 widget 虚表。
widget_get_window | 获取当前控件所在的窗口。
widget_get_window_manager | 获取当前的窗口管理器。
widget_get_window_theme | 获取控件的窗体样式。
widget_get_with_focus_state | 获取控件with_focus_state属性值。
widget_grab | 让指定子控件抓住事件。
widget_has_highlighter | 判断widget拥有高亮属性。
widget_index_of | 获取控件在父控件中的索引编号。
widget_init | 初始化控件。仅在子类控件构造函数中使用。
widget_insert_child | 插入子控件到指定的位置。
widget_invalidate | 请求重绘指定的区域
widget_invalidate_force | 请求强制重绘控件。
widget_is_always_on_top | 检查控件是否总在最上层。
widget_is_change_focus_key | 是否是切换焦点的键。
widget_is_designing_window | 判断当前控件是否是设计窗口。
widget_is_dialog | 检查控件是否是对话框类型。
widget_is_direct_parent_of | 判断当前控件是否是指定控件的直系父控件。
widget_is_fullscreen_window | 检查控件是否是全屏窗口。
widget_is_instance_of | 检查控件是否是指定的类型。
widget_is_keyboard | 判断当前控件是否是keyboard。
widget_is_normal_window | 检查控件是否是普通窗口类型。
widget_is_opened_dialog | 检查控件弹出对话框控件是否已经打开了（而非挂起状态）。
widget_is_opened_popup | 检查控件弹出窗口控件是否已经打开了（而非挂起状态）。
widget_is_overlay | 检查控件是否是overlay窗口类型。
widget_is_parent_of | 判断当前控件是否是指定控件的父控件(包括非直系)。
widget_is_point_in | 判断一个点是否在控件内。
widget_is_popup | 检查控件是否是弹出窗口类型。
widget_is_style_exist | 查询指定的style是否存在。
widget_is_support_highlighter | 判断widget是否支持高亮。
widget_is_system_bar | 检查控件是否是system bar类型。
widget_is_window | 判断当前控件是否是窗口。
widget_is_window_created | 判断窗口及子控件创建或加载是否完成。
widget_is_window_manager | 判断当前控件是否是窗口管理器。
widget_is_window_opened | 判断当前控件所在的窗口是否已经打开。
widget_layout | 布局当前控件及子控件。
widget_layout_children | layout子控件。
widget_load_asset | 加载资源。
widget_load_asset_ex | 加载资源。
widget_load_image | 加载图片。
widget_lookup | 查找指定名称的子控件(返回第一个)。
widget_lookup_by_type | 查找指定类型的子控件(返回第一个)。
widget_measure_text | 计算文本的宽度。
widget_move | 移动控件。
widget_move_resize | 移动控件并调整控件的大小。
widget_move_resize_ex | 移动控件并调整控件的大小。
widget_move_to_center | 移动控件到父控件中间。
widget_off | 注销指定事件的处理函数。
widget_off_by_ctx | 注销指定ctx的事件处理函数。
widget_off_by_func | 注销指定函数的事件处理函数。
widget_off_by_tag | 注销指定tag的事件处理函数。
widget_on | 注册指定事件的处理函数。
widget_on_keydown | 处理key down事件。
widget_on_keyup | 处理key up事件。
widget_on_paint_background | 绘制背景。
widget_on_paint_border | 绘制边框。
widget_on_paint_children | 绘制子控件。
widget_on_paint_self | 绘制自身。
widget_on_pointer_down_children | 处理子控件的pointer down事件。
widget_on_pointer_move_children | 处理子控件的pointer move事件。
widget_on_pointer_up_children | 处理子控件的pointer up事件。
widget_on_with_tag | 注册指定tag的事件处理函数。
widget_paint | 绘制控件到一个canvas上。
widget_paint_helper | 帮助子控件实现自己的绘制函数。
widget_pause_animator | 暂停动画。
widget_prepare_text_style | 从widget的style中取出字体名称、大小和颜色数据，设置到canvas中。
widget_prepare_text_style_ex | 从widget的style中取出字体名称、大小和颜色数据，设置到canvas中。
widget_re_translate_text | 语言改变后，重新翻译控件上的文本(包括子控件)。
widget_ref | 增加控件的引用计数。
widget_remove_child | 移出指定的子控件(并不销毁)。
widget_remove_idle | 删除指定的idle。
widget_remove_timer | 删除指定的timer。
widget_reset_canvas | 重置canvas对象。for designer only,调用者需要unload全部图片
widget_resize | 调整控件的大小。
widget_restack | 调整控件在父控件中的位置序数。
widget_set_animation | 设置控件的动画参数(仅用于在UI文件使用)。
widget_set_animator_time_scale | 设置动画的时间倍率，<0: 时间倒退，<1: 时间变慢，>1 时间变快。
widget_set_as_key_target | 递归的把父控件的key_target设置为自己。
widget_set_auto_adjust_size | 设置控件是否根据子控件和文本自动调整控件自身大小。
widget_set_child_text_utf8 | 设置子控件的文本。
widget_set_child_text_with_double | 用一个浮点数去设置子控件的文本。
widget_set_child_text_with_int | 用一个整数去设置子控件的文本。
widget_set_children_layout | 设置子控件的布局参数。
widget_set_dirty_rect_tolerance | 设置控件脏矩形超出控件本身大小的最大范围(一般不用指定)。
widget_set_enable | 设置控件的可用性。
widget_set_feedback | 设置控件是否启用反馈。
widget_set_floating | 设置控件的floating标志。
widget_set_focusable | 设置控件是否可获得焦点。
widget_set_focused | 设置控件是否获得焦点。
widget_set_name | 设置控件的名称。
widget_set_need_relayout | 设置控件需要relayout标识。
widget_set_need_relayout_children | 设置控件需要relayout标识。
widget_set_need_update_style | 设置需要更新Style。
widget_set_need_update_style_recursive | 让控件及子控件设置需要更新Style。
widget_set_opacity | 设置控件的不透明度。
widget_set_pointer_cursor | 设置鼠标指针的图片名。
widget_set_prop | 设置控件指定属性的值。
widget_set_prop_bool | 设置布尔格式的属性。
widget_set_prop_float | 设置浮点数格式的属性。
widget_set_prop_int | 设置整数格式的属性。
widget_set_prop_pointer | 设置指针格式的属性。
widget_set_prop_pointer_ex | 设置指针格式的属性。
widget_set_prop_str | 设置字符串格式的属性。
widget_set_props | 设置多个参数。
widget_set_self_layout | 设置控件自己的布局参数。
widget_set_self_layout_params | 设置控件自己的布局(缺省布局器)参数(过时，请用widget_set_self_layout)。
widget_set_sensitive | 设置控件是否接受用户事件。
widget_set_state | 设置控件的状态。
widget_set_style | 设置widget私有样式。
widget_set_style_color | 设置颜色类型的style。
widget_set_style_int | 设置整数类型的style。
widget_set_style_str | 设置字符串类型的style。
widget_set_text | 设置控件的文本。（如果字符串相同，则不会重复设置以及触发事件）
widget_set_text_ex | 设置控件的文本。
widget_set_text_utf8 | 设置控件的文本。（如果字符串相同，则不会重复设置以及触发事件）
widget_set_text_utf8_ex | 设置控件的文本。
widget_set_theme | 设置theme的名称，用于动态切换主题。名称与当前主题名称相同，则重新加载全部资源。
widget_set_tr_text | 获取翻译之后的文本，然后调用widget_set_text。
widget_set_value | 设置控件的值。
widget_set_value_int | 设置控件的值。
widget_set_visible | 设置控件的可见性。
widget_set_visible_only | 设置控件的可见性(不触发repaint和relayout)。
widget_start_animator | 播放动画。
widget_stop_animator | 停止动画(控件的相应属性回归原位)。
widget_stroke_border_rect | 根据控件的style绘制边框矩形。
widget_take_snapshot | 创建一个bitmap对象，将控件绘制到bitmap上，并返回bitmap对象。
widget_take_snapshot_rect | 创建一个bitmap对象，将控件绘制到bitmap上并且可以设置该控件的截屏区域，返回bitmap对象。
widget_to_global | 将控件内的本地坐标转换成全局坐标。
widget_to_local | 将屏幕坐标转换成控件内的本地坐标，即相对于控件左上角的坐标。
widget_to_screen | 将控件内的本地坐标转换成屏幕上的坐标。
widget_to_screen_ex | 将控件内的本地坐标根据祖父级控件转换成相对于祖父级控件的屏幕相对坐标。
widget_to_xml | 将widget转换成xml。
widget_ungrab | 让指定子控件放弃抓住事件。
widget_unload_asset | 卸载资源。
widget_unload_image | 卸载图片。
widget_unref | 减少控件的引用计数。引用计数为0时销毁控件。
widget_update_pointer_cursor | 更新鼠标指针。
widget_update_style | 让控件根据自己当前状态更新style。
widget_update_style_recursive | 让控件及子控件根据自己当前状态更新style。
widget_use_style | 启用指定的style。

属性

属性名称 | 类型 | 说明
animation | char* | 动画参数。请参考控件动画
astyle | style_t* | Style对象。
auto_adjust_size | bool_t | 是否根据子控件和文本自动调整控件自身大小。
auto_created | bool_t | 是否由父控件自动创建。
children | darray_t* | 全部子控件。
children_layout | children_layouter_t* | 子控件布局器。请参考控件布局参数
custom_props | tk_object_t* | 自定义属性。
destroying | bool_t | 标识控件正在被销毁。
dirty | bool_t | 标识控件是否需要重绘。
dirty_rect_tolerance | uint16_t | 脏矩形超出控件本身大小的最大范围(一般不用指定)。
emitter | emitter_t* | 事件发射器。
enable | bool_t | 启用/禁用状态。
feedback | bool_t | 是否启用按键音、触屏音和震动等反馈。
floating | bool_t | 标识控件是否启用浮动布局，不受父控件的children_layout的控制。
focusable | bool_t | 是否支持焦点停留。
focused | bool_t | 是否得到焦点。
h | wh_t | 高度。
initializing | bool_t | 标识控件正在初始化。
loading | bool_t | 标识控件正在加载。
name | char* | 控件名字。
need_update_style | bool_t | 标识控件是否需要update style。
opacity | uint8_t | 不透明度(0-255)，0完全透明，255完全不透明。
parent | widget_t* | 父控件
pointer_cursor | char* | 鼠标光标图片名称。
ref_count | int32_t | 引用计数，计数为0时销毁。
self_layout | self_layouter_t* | 控件布局器。请参考控件布局参数
sensitive | bool_t | 是否接受用户事件。
state | char* | 控件的状态(取值参考widget_state_t)。
style | char* | style的名称。
text | wstr_t | 文本。用途视具体情况而定。
tr_text | char* | 保存用于翻译的字符串。
visible | bool_t | 是否可见。
vt | const widget_vtable_t* | 虚函数表。
w | wh_t | 宽度。
with_focus_state | bool_t | 是否支持焦点状态。
x | xy_t | x坐标(相对于父控件的x坐标)。
y | xy_t | y坐标(相对于父控件的y坐标)。

事件

事件名称 | 类型 | 说明
EVT_WILL_MOVE | event_t | 控件移动前触发。
EVT_MOVE | event_t | 控件移动后触发。
EVT_WILL_RESIZE | event_t | 控件调整大小前触发。
EVT_RESIZE | event_t | 控件调整大小后触发。
EVT_WILL_MOVE_RESIZE | event_t | 控件移动并调整大小前触发。
EVT_MOVE_RESIZE | event_t | 控件移动并调整大小后触发。
EVT_THEME_CHANGED | event_t | 主题变化事件。
EVT_FOCUS | event_t | 控件得到焦点时触发。
EVT_BLUR | event_t | 控件失去焦点时触发。
EVT_WIDGET_ADD_CHILD | event_t | 控件加载新的子控件。
EVT_WIDGET_REMOVE_CHILD | event_t | 控件移除子控件。
EVT_WIDGET_WILL_RESTACK_CHILD | event_t | 控件即将调整子控件位置序数。
在该的回调函数中返回RET_STOP停止调整动作。 |  |
EVT_WIDGET_RESTACK_CHILD | event_t | 控件调整子控件位置序数。
EVT_PROP_WILL_CHANGE | prop_change_event_t | 控件属性改变前触发(通过set_prop设置属性，才会触发)。
EVT_PROP_CHANGED | prop_change_event_t | 控件属性改变后触发(通过set_prop设置属性，才会触发)。
EVT_PAINT | paint_event_t | 控件绘制时触发。
EVT_BEFORE_PAINT | paint_event_t | 控件绘制前触发。
EVT_AFTER_PAINT | paint_event_t | 控件绘制完成时触发。
EVT_PAINT_DONE | paint_event_t | 控件绘制完成时(canvas状态已经恢复)触发。
EVT_WHEEL_BEFORE_CHILDREN | wheel_event_t | 鼠标滚轮事件，在子控件处理之前触发。
EVT_WHEEL | wheel_event_t | 鼠标滚轮事件。
EVT_POINTER_LEAVE | pointer_event_t | 鼠标指针离开控件时触发。
EVT_POINTER_ENTER | pointer_event_t | 鼠标指针进入控件时触发。
EVT_KEY_DOWN_BEFORE_CHILDREN | key_event_t | 键按下事件，在子控件处理之前触发。
EVT_KEY_DOWN | key_event_t | 键按下事件。
EVT_KEY_LONG_PRESS | key_event_t | 键长按事件。
EVT_KEY_UP_BEFORE_CHILDREN | key_event_t | 键释放事件，在子控件处理之前触发。
EVT_KEY_UP | key_event_t | 键释放事件。
EVT_POINTER_DOWN_BEFORE_CHILDREN | pointer_event_t | 指针设备按下事件，在子控件处理之前触发。
EVT_POINTER_DOWN | pointer_event_t | 指针设备按下事件。
EVT_POINTER_DOWN_ABORT | pointer_event_t | 取消指针设备按下事件。
EVT_POINTER_MOVE | pointer_event_t | 指针设备移动事件。
EVT_POINTER_MOVE_BEFORE_CHILDREN | pointer_event_t | 指针设备移动事件，在子控件处理之前触发。
EVT_POINTER_UP | pointer_event_t | 指针设备释放事件。
EVT_POINTER_UP_BEFORE_CHILDREN | pointer_event_t | 指针设备释放事件，在子控件处理之前触发。
EVT_DESTROY | event_t | 控件销毁时触发。

widget_add_child 函数

  • 函数功能：

加入一个子控件。

  • 函数原型：
ret_t widget_add_child (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
child | widget_t* | 子控件对象。

widget_add_child_default 函数

  • 函数功能：

加入一个子控件默认实现(供子类调用)。

  • 函数原型：
ret_t widget_add_child_default (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
child | widget_t* | 子控件对象。

widget_add_idle 函数

  • 函数功能：

创建idle。 该idle在控件销毁时自动销毁，idle_info_t的ctx为widget。 如果idle的生命周期与控件无关，请直接调用idle_add，以避免不必要的内存开销。

  • 函数原型：
uint32_t widget_add_idle (widget_t* widget, idle_func_t on_idle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回idle的ID，TK_INVALID_ID表示失败。
widget | widget_t* | 控件对象。
on_idle | idle_func_t | idle回调函数。

widget_add_timer 函数

  • 函数功能：

创建定时器。 该定时器在控件销毁时自动销毁，timer_info_t的ctx为widget。 如果定时器的生命周期与控件无关，请直接调用timer_add，以避免不必要的内存开销。

使用示例：

static ret_t digit_clock_on_timer(const timer_info_t* info) {
widget_t* widget = WIDGET(info->ctx);

return RET_REPEAT;
}
...
widget_add_timer(widget, digit_clock_on_timer, 1000);
  • 函数原型：
uint32_t widget_add_timer (widget_t* widget, timer_func_t on_timer, uint32_t duration_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回timer的ID，TK_INVALID_ID表示失败。
widget | widget_t* | 控件对象。
on_timer | timer_func_t | timer回调函数。
duration_ms | uint32_t | 时间。

widget_add_value 函数

  • 函数功能：

增加控件的值。 只是对widget_set_prop的包装，值的意义由子类控件决定。

  • 函数原型：
ret_t widget_add_value (widget_t* widget, float_t delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
delta | float_t | 增量。

widget_add_value_int 函数

  • 函数功能：

增加控件的值。 只是对widget_set_prop的包装，值的意义由子类控件决定。

  • 函数原型：
ret_t widget_add_value_int (widget_t* widget, int32_t delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
delta | int32_t | 增量。

widget_animate_value_to 函数

  • 函数功能：

设置控件的值(以动画形式变化到指定的值)。 只是对widget_set_prop的包装，值的意义由子类控件决定。

  • 函数原型：
ret_t widget_animate_value_to (widget_t* widget, float_t value, uint32_t duration);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | float_t | 值。
duration | uint32_t | 动画持续时间(毫秒)。

widget_auto_scale_children 函数

  • 函数功能：

根据缩放子控件的位置和大小。

  • 函数原型：
ret_t widget_auto_scale_children (widget_t* widget, int32_t design_w, int32_t design_h, bool_t auto_scale_children_x, bool_t auto_scale_children_y, bool_t auto_scale_children_w, bool_t auto_scale_children_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
design_w | int32_t | 设置时的宽度。
design_h | int32_t | 设置时的高度。
auto_scale_children_x | bool_t | 缩放子控件的x坐标。
auto_scale_children_y | bool_t | 缩放子控件的y坐标。
auto_scale_children_w | bool_t | 缩放子控件的宽度。
auto_scale_children_h | bool_t | 缩放子控件的高度。

widget_back 函数

  • 函数功能：

请求返回到前一个窗口。

  • 函数原型：
ret_t widget_back (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_back_to_home 函数

  • 函数功能：

请求返回到home窗口。

  • 函数原型：
ret_t widget_back_to_home (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_begin_wait_pointer_cursor 函数

  • 函数功能：

开始等待鼠标指针。

  • 函数原型：
ret_t widget_begin_wait_pointer_cursor (widget_t* widget, bool_t ignore_user_input);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
ignore_user_input | bool_t | 是否忽略用户输入。

widget_calc_icon_text_rect 函数

  • 函数功能：

计算icon text的位置。

  • 函数原型：
ret_t widget_calc_icon_text_rect (const rect_t* ir, int32_t font_size, float_t text_size, int32_t icon_at, uint32_t img_w, uint32_t img_h, int32_t spacer, rect_t* r_text, rect_t* r_icon);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
ir | const rect_t* | ir。
font_size | int32_t | 字体大小。
text_size | float_t | 文本大小。
icon_at | int32_t | icon的位置。
img_w | uint32_t | 图像宽度。
img_h | uint32_t | 图像高度。
spacer | int32_t | 间距。
r_text | rect_t* | 返回文本的矩形区域。
r_icon | rect_t* | 返回icon的矩形区域。

widget_cast 函数

  • 函数功能：

转换为widget对象(供脚本语言使用)。

  • 函数原型：
widget_t* widget_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | widget对象。
widget | widget_t* | widget对象。

widget_child 函数

  • 函数功能：

查找指定名称的子控件(同widget_lookup(widget, name, FALSE))。

  • 函数原型：
widget_t* widget_child (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 子控件或NULL。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。

widget_child_on 函数

  • 函数功能：

为指定名称的子控件注册指定事件的处理函数。 递归查找指定名称的子控件，然后为其注册指定事件的处理函数。

  • 函数原型：
uint32_t widget_child_on (widget_t* widget, const char* name, uint32_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于widget_off。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。
type | uint32_t | 事件类型。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

widget_clone 函数

  • 函数功能：

clone。

  • 函数原型：
widget_t* widget_clone (widget_t* widget, widget_t* parent);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回clone的对象。
widget | widget_t* | 控件对象。
parent | widget_t* | clone新控件的parent对象。

widget_close_window 函数

  • 函数功能：

关闭控件所在的窗口。

  • 函数原型：
ret_t widget_close_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_close_window_force 函数

  • 函数功能：

关闭控件所在的窗口。

  • 函数原型：
ret_t widget_close_window_force (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_count_children 函数

  • 函数功能：

获取子控件的个数。

  • 函数原型：
int32_t widget_count_children (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 子控件的个数。
widget | widget_t* | 控件对象。

widget_create 函数

  • 函数功能：

创建控件。仅在子类控件构造函数中使用。

  • 函数原型：
widget_t* widget_create (widget_t* parent, const widget_vtable_t* vt, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | widget对象本身。
parent | widget_t* | widget的父控件。
vt | const widget_vtable_t* | 虚表。
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

widget_create_animator 函数

  • 函数功能：

创建动画。 请参考控件动画

  • 除非指定auto_start=false，动画创建后自动启动。

  • 除非指定auto_destroy=false，动画播放完成后自动销毁。

  • 函数原型：

ret_t widget_create_animator (widget_t* widget, const char* animation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
animation | const char* | 动画参数。

widget_destroy 函数

  • 函数功能：

从父控件中移除控件，并调用unref函数销毁控件。

一般无需直接调用，关闭窗口时，自动销毁相关控件。

  • 函数原型：
ret_t widget_destroy (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_destroy_animator 函数

  • 函数功能：

销毁动画。 请参考控件动画

  • 1.widget为NULL时，销毁所有名称为name的动画。
  • 2.name为NULL时，销毁所有widget相关的动画。

  • 3.widget和name均为NULL，销毁所有动画。

  • 函数原型：

ret_t widget_destroy_animator (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_destroy_async 函数

  • 函数功能：

从父控件中移除控件，并调用unref函数销毁控件。

一般无需直接调用，关闭窗口时，自动销毁相关控件。

  • 函数原型：
ret_t widget_destroy_async (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_destroy_children 函数

  • 函数功能：

销毁全部子控件。

  • 函数原型：
ret_t widget_destroy_children (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_dispatch 函数

  • 函数功能：

分发一个事件。

  • 函数原型：
ret_t widget_dispatch (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | event_t* | 事件。

widget_dispatch_async 函数

  • 函数功能：

异步分发一个事件。

  • 函数原型：
ret_t widget_dispatch_async (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | event_t* | 事件。

widget_dispatch_event_to_target_recursive 函数

  • 函数功能：

递归分发事件到targe控件。

  • 函数原型：
ret_t widget_dispatch_event_to_target_recursive (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | event_t* | 事件对象。

widget_dispatch_model_event 函数

  • 函数功能：

分发model事件(分发到各个窗口)。

  • 函数原型：
ret_t widget_dispatch_model_event (widget_t* widget, const char* name, const char* change_type, tk_object_t* model);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 名称。
change_type | const char* | 变化类型。
model | tk_object_t* | 模型。

widget_dispatch_recursive 函数

  • 函数功能：

分发一个事件控件本身及所有子控件。

  • 函数原型：
ret_t widget_dispatch_recursive (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | event_t* | 事件。

widget_dispatch_simple_event 函数

  • 函数功能：

分发一个简单事件。

  • 函数原型：
ret_t widget_dispatch_simple_event (widget_t* widget, uint32_t type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
type | uint32_t | 事件类型。

widget_dispatch_to_key_target 函数

  • 函数功能：

递归的分发一个事件到所有key_target子控件。

  • 函数原型：
ret_t widget_dispatch_to_key_target (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | event_t* | 事件。

widget_dispatch_to_target 函数

  • 函数功能：

递归的分发一个事件到所有target子控件。

  • 函数原型：
ret_t widget_dispatch_to_target (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | event_t* | 事件。

widget_draw_background 函数

  • 函数功能：

根据控件的style绘制背景矩形。

  • 函数原型：
ret_t widget_draw_background (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。

widget_draw_text_in_rect 函数

  • 函数功能：

在canvas绘制一行文本。

  • 函数原型：
ret_t widget_draw_text_in_rect (widget_t* widget, canvas_t* c, const wchar_t* str, uint32_t size, const rect_t* r, bool_t ellipses);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。
str | const wchar_t* | 文本。
size | uint32_t | 文本长度。
r | const rect_t* | 矩形区域。
ellipses | bool_t | 宽度不够时是否显示省略号。

widget_end_wait_pointer_cursor 函数

  • 函数功能：

结束等待鼠标指针。

  • 函数原型：
ret_t widget_end_wait_pointer_cursor (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_ensure_visible_in_viewport 函数

  • 函数功能：

使控件滚动到可见区域。

  • 函数原型：
ret_t widget_ensure_visible_in_viewport (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。

widget_equal 函数

  • 函数功能：

判断两个widget是否相同。

  • 函数原型：
bool_t widget_equal (widget_t* widget, widget_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示相同，否则表示不同。
widget | widget_t* | 控件对象。
other | widget_t* | 要比较的控件对象。

widget_fill_bg_rect 函数

  • 函数功能：

根据控件的style绘制背景矩形。

  • 函数原型：
ret_t widget_fill_bg_rect (widget_t* widget, canvas_t* c, const rect_t* r, image_draw_type_t draw_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。
r | const rect_t* | 矩形区域。
draw_type | image_draw_type_t | 图片缺省绘制方式。

widget_fill_fg_rect 函数

  • 函数功能：

根据控件的style绘制前景矩形。

  • 函数原型：
ret_t widget_fill_fg_rect (widget_t* widget, canvas_t* c, const rect_t* r, image_draw_type_t draw_type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。
r | const rect_t* | 矩形区域。
draw_type | image_draw_type_t | 图片缺省绘制方式。

widget_find_animator 函数

  • 函数功能：

查找指定名称的动画。

  • 函数原型：
widget_animator_t* widget_find_animator (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_animator_t* | 成功返回动画对象，失败返回NULL。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_find_parent_by_name 函数

  • 函数功能：

通过名称查找父控件。

  • 函数原型：
widget_t* widget_find_parent_by_name (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 父控件。
widget | widget_t* | 控件对象。
name | const char* | 名称。

widget_find_parent_by_type 函数

  • 函数功能：

通过类型查找父控件。

  • 函数原型：
widget_t* widget_find_parent_by_type (widget_t* widget, const char* type);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 父控件。
widget | widget_t* | 控件对象。
type | const char* | 类型。

widget_find_target 函数

  • 函数功能：

查找x/y坐标对应的子控件。

  • 函数原型：
widget_t* widget_find_target (widget_t* widget, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 子控件或NULL。
widget | widget_t* | 控件对象。
x | xy_t | x坐标。
y | xy_t | y坐标。

widget_focus_first 函数

  • 函数功能：

置焦点于第一个控件。

  • 函数原型：
ret_t widget_focus_first (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_focus_next 函数

  • 函数功能：

把焦点移动下一个控件。

widget必须是当前焦点控件。

  • 函数原型：
ret_t widget_focus_next (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_focus_prev 函数

  • 函数功能：

把焦点移动前一个控件。

widget必须是当前焦点控件。

  • 函数原型：
ret_t widget_focus_prev (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_foreach 函数

  • 函数功能：

遍历当前控件及子控件。

  • 函数原型：
ret_t widget_foreach (widget_t* widget, tk_visit_t visit, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
visit | tk_visit_t | 遍历的回调函数。
ctx | void* | 回调函数的上下文。

widget_get_assets_manager 函数

  • 函数功能：

获取assets_manager对象。

  • 函数原型：
assets_manager_t* widget_get_assets_manager (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | assets_manager_t* | 返回assets_manager对象。
widget | widget_t* | 控件对象。

widget_get_auto_adjust_size 函数

  • 函数功能：

获取控件auto_adjust_size属性值。

  • 函数原型：
bool_t widget_get_auto_adjust_size (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回auto_adjust_size。
widget | widget_t* | 控件对象。

widget_get_canvas 函数

  • 函数功能：

获取canvas对象。

  • 函数原型：
canvas_t* widget_get_canvas (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | canvas_t* | 返回canvas对象。
widget | widget_t* | 控件对象。

widget_get_child 函数

  • 函数功能：

获取指定索引的子控件。

  • 函数原型：
widget_t* widget_get_child (widget_t* widget, int32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 子控件。
widget | widget_t* | 控件对象。
index | int32_t | 索引。

widget_get_child_text_utf8 函数

  • 函数功能：

获取子控件的文本。 只是对widget_get_prop的包装，文本的意义由子类控件决定。

  • 函数原型：
ret_t widget_get_child_text_utf8 (widget_t* widget, const char* name, char* text, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。
text | char* | 用于返回文本。
size | uint32_t | text内存长度。

widget_get_content_area 函数

  • 函数功能：

获取widget去掉margin之外的区域。

  • 函数原型：
rect_t widget_get_content_area (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | rect_t | 返回去掉margin之外的区域。
widget | widget_t* | 控件对象。

widget_get_enable 函数

  • 函数功能：

获取控件enable属性值。

  • 函数原型：
bool_t widget_get_enable (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回enable。
widget | widget_t* | 控件对象。

widget_get_feedback 函数

  • 函数功能：

获取控件feedback属性值。

  • 函数原型：
bool_t widget_get_feedback (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回feedback。
widget | widget_t* | 控件对象。

widget_get_floating 函数

  • 函数功能：

获取控件floating属性值。

  • 函数原型：
bool_t widget_get_floating (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回floating。
widget | widget_t* | 控件对象。

widget_get_focusable 函数

  • 函数功能：

获取控件focusable属性值。

  • 函数原型：
bool_t widget_get_focusable (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回focusable。
widget | widget_t* | 控件对象。

widget_get_focused_widget 函数

  • 函数功能：

获取当前窗口中的焦点控件。

  • 函数原型：
widget_t* widget_get_focused_widget (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 焦点控件。
widget | widget_t* | 控件对象。

widget_get_font_manager 函数

  • 函数功能：

获取font_manager对象。

  • 函数原型：
font_manager_t* widget_get_font_manager (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | font_manager_t* | 返回font_manager对象。
widget | widget_t* | 控件对象。

widget_get_image_manager 函数

  • 函数功能：

获取image_manager对象。

  • 函数原型：
image_manager_t* widget_get_image_manager (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | image_manager_t* | 返回image_manager对象。
widget | widget_t* | 控件对象。

widget_get_locale_info 函数

  • 函数功能：

获取locale_info对象。

  • 函数原型：
locale_info_t* widget_get_locale_info (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | locale_info_t* | 返回locale_info对象。
widget | widget_t* | 控件对象。

widget_get_native_window 函数

  • 函数功能：

获取原生窗口对象。

  • 函数原型：
native_window_t* widget_get_native_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | native_window_t* | 原生窗口对象。
widget | widget_t* | 控件对象。

widget_get_prop 函数

  • 函数功能：

获取控件指定属性的值。

  • 函数原型：
ret_t widget_get_prop (widget_t* widget, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | value_t* | 返回属性的值。

widget_get_prop_bool 函数

  • 函数功能：

获取布尔格式的属性。

  • 函数原型：
bool_t widget_get_prop_bool (widget_t* widget, const char* name, bool_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回属性的值。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
defval | bool_t | 缺省值。

widget_get_prop_default_value 函数

  • 函数功能：

获取控件指定属性的缺省值(在持久化控件时，无需保存缺省值)。

  • 函数原型：
ret_t widget_get_prop_default_value (widget_t* widget, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | value_t* | 返回属性的缺省值。

widget_get_prop_float 函数

  • 函数功能：

获取浮点数格式的属性。

  • 函数原型：
float_t widget_get_prop_float (widget_t* widget, const char* name, float_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回属性的值。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
defval | float_t | 缺省值。

widget_get_prop_int 函数

  • 函数功能：

获取整数格式的属性。

  • 函数原型：
int32_t widget_get_prop_int (widget_t* widget, const char* name, int32_t defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回属性的值。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
defval | int32_t | 缺省值。

widget_get_prop_pointer 函数

  • 函数功能：

获取指针格式的属性。

  • 函数原型：
void* widget_get_prop_pointer (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void* | 返回属性的值。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。

widget_get_prop_str 函数

  • 函数功能：

获取字符串格式的属性。

  • 函数原型：
const char* widget_get_prop_str (widget_t* widget, const char* name, const char* defval);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回属性的值。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
defval | const char* | 缺省值。

widget_get_sensitive 函数

  • 函数功能：

获取控件sensitive属性值。

  • 函数原型：
bool_t widget_get_sensitive (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回sensitive。
widget | widget_t* | 控件对象。

widget_get_state_for_style 函数

  • 函数功能：

把控件的状态转成获取style选要的状态，一般只在子类中使用。

  • 函数原型：
const char* widget_get_state_for_style (widget_t* widget, bool_t active, bool_t checked);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回状态值。
widget | widget_t* | widget对象。
active | bool_t | 控件是否为当前项。
checked | bool_t | 控件是否为选中项。

widget_get_style 函数

  • 函数功能：

获取widget样式。

  • 函数原型：
ret_t widget_get_style (widget_t* widget, const char* state_and_name, value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
state_and_name | const char* | 样式对应类型与名字。
value | value_t* | 返回样式数据值。

widget_get_style_type 函数

  • 函数功能：

获取 widget 对应风格类型

  • 函数原型：
const char* widget_get_style_type (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回 widget 的对应风格类型。
widget | widget_t* | widget对象。

widget_get_text 函数

  • 函数功能：

获取控件的文本。 只是对widget_get_prop的包装，文本的意义由子类控件决定。

如果希望获取UTF8格式的文本，可以参考下面的代码：

str_t str;
str_init(&str, 0);
str_from_wstr(&str, widget_get_text(target));
log_debug("%s: %s\n", target->name, str.str);
str_reset(&str);
  • 函数原型：
const wchar_t* widget_get_text (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const wchar_t* | 返回文本。
widget | widget_t* | 控件对象。

widget_get_text_utf8 函数

  • 函数功能：

获取控件的文本。 只是对widget_get_prop的包装，文本的意义由子类控件决定。

  • 函数原型：
ret_t widget_get_text_utf8 (widget_t* widget, char* text, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | char* | 用于返回文本。
size | uint32_t | text内存长度。

widget_get_theme_name 函数

  • 函数功能：

获取 theme 的名称

  • 函数原型：
const char* widget_get_theme_name (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 成功返回主题名称，失败否则 NULL。
widget | widget_t* | 控件对象。

widget_get_type 函数

  • 函数功能：

获取当前控件的类型名称。

  • 函数原型：
const char* widget_get_type (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回类型名。
widget | widget_t* | 控件对象。

widget_get_value 函数

  • 函数功能：

获取控件的值。只是对widget_get_prop的包装，值的意义由子类控件决定。

  • 函数原型：
float_t widget_get_value (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回值。
widget | widget_t* | 控件对象。

widget_get_value_int 函数

  • 函数功能：

获取控件的值。只是对widget_get_prop的包装，值的意义由子类控件决定。

  • 函数原型：
int32_t widget_get_value_int (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 返回值。
widget | widget_t* | 控件对象。

widget_get_visible 函数

  • 函数功能：

获取控件visible属性值。

  • 函数原型：
bool_t widget_get_visible (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回visible。
widget | widget_t* | 控件对象。

widget_get_widget_vtable 函数

  • 函数功能：

获取 widget 虚表。

  • 函数原型：
const widget_vtable_t* widget_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 widget 虚表。

widget_get_window 函数

  • 函数功能：

获取当前控件所在的窗口。

  • 函数原型：
widget_t* widget_get_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 窗口对象。
widget | widget_t* | 控件对象。

widget_get_window_manager 函数

  • 函数功能：

获取当前的窗口管理器。

  • 函数原型：
widget_t* widget_get_window_manager (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 窗口管理器对象。
widget | widget_t* | 控件对象。

widget_get_window_theme 函数

  • 函数功能：

获取控件的窗体样式。

  • 函数原型：
ret_t widget_get_window_theme (widget_t* widget, theme_t** win_theme, theme_t** default_theme);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
win_theme | theme_t** | 返回窗体样式。
default_theme | theme_t** | 返回全局默认窗体样式。

widget_get_with_focus_state 函数

  • 函数功能：

获取控件with_focus_state属性值。

  • 函数原型：
bool_t widget_get_with_focus_state (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回with_focus_state。
widget | widget_t* | 控件对象。

widget_grab 函数

  • 函数功能：

让指定子控件抓住事件。 控件抓住之后，事件直接分发给该控件。

  • 函数原型：
ret_t widget_grab (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
child | widget_t* | 子控件对象。

widget_has_highlighter 函数

  • 函数功能：

判断widget拥有高亮属性。

  • 函数原型：
bool_t widget_has_highlighter (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 拥有返回 TRUE，没有返回 FALSE。
widget | widget_t* | 控件对象。

widget_index_of 函数

  • 函数功能：

获取控件在父控件中的索引编号。

  • 函数原型：
int32_t widget_index_of (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | int32_t | 在父控件中的索引编号。
widget | widget_t* | 控件对象。

widget_init 函数

  • 函数功能：

初始化控件。仅在子类控件构造函数中使用。

请用widget_create代替本函数。

@depreated

  • 函数原型：
widget_t* widget_init (widget_t* widget, widget_t* parent, const widget_vtable_t* vt, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | widget对象本身。
widget | widget_t* | widget对象。
parent | widget_t* | widget的父控件。
vt | const widget_vtable_t* | 虚表。
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

widget_insert_child 函数

  • 函数功能：

插入子控件到指定的位置。

  • 函数原型：
ret_t widget_insert_child (widget_t* widget, uint32_t index, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
index | uint32_t | 位置序数(大于等于总个数，则放到最后)。
child | widget_t* | 子控件对象。

widget_invalidate 函数

  • 函数功能：

请求重绘指定的区域

备注： 1，函数执行成功后，会把 widget->dirty 修改为 TRUE，如果 widget->dirty 已经为 TRUE，则直接返回 RET_OK，不再增加重绘区。 2，当控件执行 widget_paint 后会把 widget->dirty 修改为 FALSE。 3，如果同一个控件在同一帧内多次请求重绘不同区域的话，请使用 widget_invalidate_force。

  • 函数原型：
ret_t widget_invalidate (widget_t* widget, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
r | const rect_t* | 矩形对象(widget本地坐标)。

widget_invalidate_force 函数

  • 函数功能：

请求强制重绘控件。

  • 函数原型：
ret_t widget_invalidate_force (widget_t* widget, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
r | const rect_t* | 矩形对象(widget本地坐标)。

widget_is_always_on_top 函数

  • 函数功能：

检查控件是否总在最上层。

  • 函数原型：
bool_t widget_is_always_on_top (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_change_focus_key 函数

  • 函数功能：

是否是切换焦点的键。

  • 函数原型：
bool_t widget_is_change_focus_key (widget_t* widget, key_event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示否。
widget | widget_t* | 控件对象。
e | key_event_t* | 事件对象。

widget_is_designing_window 函数

  • 函数功能：

判断当前控件是否是设计窗口。

  • 函数原型：
bool_t widget_is_designing_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回当前控件是否是设计窗口。
widget | widget_t* | 控件对象。

widget_is_dialog 函数

  • 函数功能：

检查控件是否是对话框类型。

  • 函数原型：
bool_t widget_is_dialog (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_direct_parent_of 函数

  • 函数功能：

判断当前控件是否是指定控件的直系父控件。

  • 函数原型：
bool_t widget_is_direct_parent_of (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。
widget | widget_t* | 控件对象。
child | widget_t* | 控件对象。

widget_is_fullscreen_window 函数

  • 函数功能：

检查控件是否是全屏窗口。

  • 函数原型：
bool_t widget_is_fullscreen_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_instance_of 函数

  • 函数功能：

检查控件是否是指定的类型。

  • 函数原型：
bool_t widget_is_instance_of (widget_t* widget, const widget_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，FALSE表示否。
widget | widget_t* | 控件对象。
vt | const widget_vtable_t* | 虚表。

widget_is_keyboard 函数

  • 函数功能：

判断当前控件是否是keyboard。

keyboard收到pointer事件时，不会让当前控件失去焦点。

在自定义软键盘时，将所有按钮放到一个容器当中，并设置为is_keyboard。

widget_set_prop_bool(group, WIDGET_PROP_IS_KEYBOARD, TRUE);
  • 函数原型：
bool_t widget_is_keyboard (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | 控件对象。

widget_is_normal_window 函数

  • 函数功能：

检查控件是否是普通窗口类型。

  • 函数原型：
bool_t widget_is_normal_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_opened_dialog 函数

  • 函数功能：

检查控件弹出对话框控件是否已经打开了（而非挂起状态）。

  • 函数原型：
bool_t widget_is_opened_dialog (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_opened_popup 函数

  • 函数功能：

检查控件弹出窗口控件是否已经打开了（而非挂起状态）。

  • 函数原型：
bool_t widget_is_opened_popup (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_overlay 函数

  • 函数功能：

检查控件是否是overlay窗口类型。

  • 函数原型：
bool_t widget_is_overlay (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_parent_of 函数

  • 函数功能：

判断当前控件是否是指定控件的父控件(包括非直系)。

  • 函数原型：
bool_t widget_is_parent_of (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示是，否则表示不是。
widget | widget_t* | 控件对象。
child | widget_t* | 控件对象。

widget_is_point_in 函数

  • 函数功能：

判断一个点是否在控件内。

  • 函数原型：
bool_t widget_is_point_in (widget_t* widget, xy_t x, xy_t y, bool_t is_local);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
x | xy_t | x坐标
y | xy_t | y坐标
is_local | bool_t | TRUE表示是相对与控件左上角的坐标，否则表示全局坐标。

widget_is_popup 函数

  • 函数功能：

检查控件是否是弹出窗口类型。

  • 函数原型：
bool_t widget_is_popup (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_style_exist 函数

  • 函数功能：

查询指定的style是否存在。

  • 函数原型：
bool_t widget_is_style_exist (widget_t* widget, const char* style_name, const char* state_name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 存在返回 TRUE，不存在返回 FALSE。
widget | widget_t* | 控件对象。
style_name | const char* | style的名称（如果为 NULL，则默认为 default）。
state_name | const char* | state的名称（如果为 NULL，则默认为 normal）。

widget_is_support_highlighter 函数

  • 函数功能：

判断widget是否支持高亮。

  • 函数原型：
bool_t widget_is_support_highlighter (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 支持返回 TRUE，不支持返回 FALSE。
widget | widget_t* | 控件对象。

widget_is_system_bar 函数

  • 函数功能：

检查控件是否是system bar类型。

  • 函数原型：
bool_t widget_is_system_bar (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回FALSE表示不是，否则表示是。
widget | widget_t* | widget对象。

widget_is_window 函数

  • 函数功能：

判断当前控件是否是窗口。

  • 函数原型：
bool_t widget_is_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回当前控件是否是窗口。
widget | widget_t* | 控件对象。

widget_is_window_created 函数

  • 函数功能：

判断窗口及子控件创建或加载是否完成。

  • 函数原型：
bool_t widget_is_window_created (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回创建或加载是否完成。
widget | widget_t* | 控件对象。

widget_is_window_manager 函数

  • 函数功能：

判断当前控件是否是窗口管理器。

  • 函数原型：
bool_t widget_is_window_manager (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回当前控件是否是窗口管理器。
widget | widget_t* | 控件对象。

widget_is_window_opened 函数

  • 函数功能：

判断当前控件所在的窗口是否已经打开。

  • 函数原型：
bool_t widget_is_window_opened (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回当前控件所在的窗口是否已经打开。
widget | widget_t* | 控件对象。

widget_layout 函数

  • 函数功能：

布局当前控件及子控件。

  • 函数原型：
ret_t widget_layout (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_layout_children 函数

  • 函数功能：

layout子控件。

  • 函数原型：
ret_t widget_layout_children (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_load_asset 函数

  • 函数功能：

加载资源。

使用示例：

const asset_info_t* asset = widget_load_asset(widget, ASSET_TYPE_IMAGE, "mysvg");
...
widget_unload_asset(widget, asset);
  • 函数原型：
const asset_info_t* widget_load_asset (widget_t* widget, asset_type_t type, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const asset_info_t* | 返回资源句柄。
widget | widget_t* | 控件对象。
type | asset_type_t | 资源类型。
name | const char* | 资源名。

widget_load_asset_ex 函数

  • 函数功能：

加载资源。

使用示例：

const asset_info_t* asset = widget_load_asset_ex(widget, ASSET_TYPE_IMAGE, ASSET_TYPE_IMAGE_BSVG, "mysvg");
...
widget_unload_asset(widget, asset);
  • 函数原型：
const asset_info_t* widget_load_asset_ex (widget_t* widget, asset_type_t type, uint16_t subtype, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const asset_info_t* | 返回资源句柄。
widget | widget_t* | 控件对象。
type | asset_type_t | 资源类型。
subtype | uint16_t | 资源子类型。
name | const char* | 资源名。

widget_load_image 函数

  • 函数功能：

加载图片。 返回的bitmap对象只在当前调用有效，请不保存对bitmap对象的引用。

使用示例：

bitmap_t bitmap;
widget_load_image(widget, "myimage", &bitmap);
  • 函数原型：
ret_t widget_load_image (widget_t* widget, const char* name, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 图片名(不带扩展名)。
bitmap | bitmap_t* | 返回图片对象。

widget_lookup 函数

  • 函数功能：

查找指定名称的子控件(返回第一个)。

  • 函数原型：
widget_t* widget_lookup (widget_t* widget, const char* name, bool_t recursive);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 子控件或NULL。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。
recursive | bool_t | 是否递归查找全部子控件。

widget_lookup_by_type 函数

  • 函数功能：

查找指定类型的子控件(返回第一个)。

  • 函数原型：
widget_t* widget_lookup_by_type (widget_t* widget, const char* type, bool_t recursive);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 子控件或NULL。
widget | widget_t* | 控件对象。
type | const char* | 子控件的名称。
recursive | bool_t | 是否递归查找全部子控件。

widget_measure_text 函数

  • 函数功能：

计算文本的宽度。 字体由控件当前的状态和style决定。

  • 函数原型：
float_t widget_measure_text (widget_t* widget, const wchar_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | float_t | 返回文本的宽度。
widget | widget_t* | 控件对象。
text | const wchar_t* | 文本。

widget_move 函数

  • 函数功能：

移动控件。

  • 函数原型：
ret_t widget_move (widget_t* widget, xy_t x, xy_t y);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
x | xy_t | x坐标
y | xy_t | y坐标

widget_move_resize 函数

  • 函数功能：

移动控件并调整控件的大小。

  • 函数原型：
ret_t widget_move_resize (widget_t* widget, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

widget_move_resize_ex 函数

  • 函数功能：

移动控件并调整控件的大小。

  • 函数原型：
ret_t widget_move_resize_ex (widget_t* widget, xy_t x, xy_t y, wh_t w, wh_t h, bool_t update_layout);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度
update_layout | bool_t | 是否更新布局

widget_move_to_center 函数

  • 函数功能：

移动控件到父控件中间。

  • 函数原型：
ret_t widget_move_to_center (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_off 函数

  • 函数功能：

注销指定事件的处理函数。

  • 函数原型：
ret_t widget_off (widget_t* widget, uint32_t id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
id | uint32_t | widget_on返回的ID。

widget_off_by_ctx 函数

  • 函数功能：

注销指定ctx的事件处理函数。

  • 函数原型：
ret_t widget_off_by_ctx (widget_t* widget, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
ctx | void* | 事件处理函数上下文。

widget_off_by_func 函数

  • 函数功能：

注销指定函数的事件处理函数。

  • 函数原型：
ret_t widget_off_by_func (widget_t* widget, uint32_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
type | uint32_t | 事件类型。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

widget_off_by_tag 函数

  • 函数功能：

注销指定tag的事件处理函数。

  • 函数原型：
ret_t widget_off_by_tag (widget_t* widget, uint32_t tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
tag | uint32_t | tag。

widget_on 函数

  • 函数功能：

注册指定事件的处理函数。 使用示例：

widget_t* ok = button_create(win, 10, 10, 80, 30);
widget_on(ok, EVT_CLICK, on_click, NULL);
  • 函数原型：
uint32_t widget_on (widget_t* widget, uint32_t type, event_func_t on_event, void* ctx);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于widget_off。
widget | widget_t* | 控件对象。
type | uint32_t | 事件类型。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。

widget_on_keydown 函数

  • 函数功能：

处理key down事件。

  • 函数原型：
ret_t widget_on_keydown (widget_t* widget, key_event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | key_event_t* | 事件对象。

widget_on_keyup 函数

  • 函数功能：

处理key up事件。

  • 函数原型：
ret_t widget_on_keyup (widget_t* widget, key_event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | key_event_t* | 事件对象。

widget_on_paint_background 函数

  • 函数功能：

绘制背景。

  • 函数原型：
ret_t widget_on_paint_background (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。
c | canvas_t* | canvas对象。

widget_on_paint_border 函数

  • 函数功能：

绘制边框。

  • 函数原型：
ret_t widget_on_paint_border (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。
c | canvas_t* | canvas对象。

widget_on_paint_children 函数

  • 函数功能：

绘制子控件。

  • 函数原型：
ret_t widget_on_paint_children (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。
c | canvas_t* | canvas对象。

widget_on_paint_self 函数

  • 函数功能：

绘制自身。

  • 函数原型：
ret_t widget_on_paint_self (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。
c | canvas_t* | canvas对象。

widget_on_pointer_down_children 函数

  • 函数功能：

处理子控件的pointer down事件。

  • 函数原型：
ret_t widget_on_pointer_down_children (widget_t* widget, pointer_event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | pointer_event_t* | 事件对象。

widget_on_pointer_move_children 函数

  • 函数功能：

处理子控件的pointer move事件。

  • 函数原型：
ret_t widget_on_pointer_move_children (widget_t* widget, pointer_event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | pointer_event_t* | 事件对象。

widget_on_pointer_up_children 函数

  • 函数功能：

处理子控件的pointer up事件。

  • 函数原型：
ret_t widget_on_pointer_up_children (widget_t* widget, pointer_event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
e | pointer_event_t* | 事件对象。

widget_on_with_tag 函数

  • 函数功能：

注册指定tag的事件处理函数。

注册时指定一个tag，可用widget_off_by_tag注销相同tag的事件处理函数。

  • 函数原型：
uint32_t widget_on_with_tag (widget_t* widget, uint32_t type, event_func_t on_event, void* ctx, uint32_t tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回id，用于widget_off。
widget | widget_t* | 控件对象。
type | uint32_t | 事件类型。
on_event | event_func_t | 事件处理函数。
ctx | void* | 事件处理函数上下文。
tag | uint32_t | tag。

widget_paint 函数

  • 函数功能：

绘制控件到一个canvas上。

  • 函数原型：
ret_t widget_paint (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。

widget_paint_helper 函数

  • 函数功能：

帮助子控件实现自己的绘制函数。

  • 函数原型：
ret_t widget_paint_helper (widget_t* widget, canvas_t* c, const char* icon, wstr_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。
icon | const char* | 图标的名称。
text | wstr_t* | 文字。

widget_pause_animator 函数

  • 函数功能：

暂停动画。 请参考控件动画

  • 1.widget为NULL时，暂停所有名称为name的动画。
  • 2.name为NULL时，暂停所有widget相关的动画。

  • 3.widget和name均为NULL，暂停所有动画。

  • 函数原型：

ret_t widget_pause_animator (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_prepare_text_style 函数

  • 函数功能：

从widget的style中取出字体名称、大小和颜色数据，设置到canvas中。

  • 函数原型：
ret_t widget_prepare_text_style (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。

widget_prepare_text_style_ex 函数

  • 函数功能：

从widget的style中取出字体名称、大小和颜色数据，设置到canvas中。 备注：如果在风格中找不到才会使用默认的设置。

  • 函数原型：
ret_t widget_prepare_text_style_ex (widget_t* widget, canvas_t* c, color_t default_trans, const char* default_font, uint16_t default_font_size, align_h_t default_align_h, align_v_t default_align_v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。
default_trans | color_t | 默认文字颜色。
default_font | const char* | 默认字库名字。
default_font_size | uint16_t | 默认字体大小。
default_align_h | align_h_t | 默认文字水平方向对齐。
default_align_v | align_v_t | 默认文字垂直方向对齐。

widget_re_translate_text 函数

  • 函数功能：

语言改变后，重新翻译控件上的文本(包括子控件)。

  • 函数原型：
ret_t widget_re_translate_text (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_ref 函数

  • 函数功能：

增加控件的引用计数。

  • 函数原型：
widget_t* widget_ref (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回控件对象。
widget | widget_t* | 控件对象。

widget_remove_child 函数

  • 函数功能：

移出指定的子控件(并不销毁)。

  • 函数原型：
ret_t widget_remove_child (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
child | widget_t* | 子控件对象。

widget_remove_idle 函数

  • 函数功能：

删除指定的idle。

  • 函数原型：
ret_t widget_remove_idle (widget_t* widget, uint32_t idle_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
idle_id | uint32_t | idleID。

widget_remove_timer 函数

  • 函数功能：

删除指定的timer。

  • 函数原型：
ret_t widget_remove_timer (widget_t* widget, uint32_t timer_id);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
timer_id | uint32_t | timerID。

widget_reset_canvas 函数

  • 函数功能：

重置canvas对象。for designer only,调用者需要unload全部图片

  • 函数原型：
ret_t widget_reset_canvas (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_resize 函数

  • 函数功能：

调整控件的大小。

  • 函数原型：
ret_t widget_resize (widget_t* widget, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
w | wh_t | 宽度
h | wh_t | 高度

widget_restack 函数

  • 函数功能：

调整控件在父控件中的位置序数。

  • 函数原型：
ret_t widget_restack (widget_t* widget, uint32_t index);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
index | uint32_t | 位置序数(大于等于总个数，则放到最后)。

widget_set_animation 函数

  • 函数功能：

设置控件的动画参数(仅用于在UI文件使用)。 请参考控件动画

  • 函数原型：
ret_t widget_set_animation (widget_t* widget, const char* animation);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
animation | const char* | 动画参数。

widget_set_animator_time_scale 函数

  • 函数功能：

设置动画的时间倍率，<0: 时间倒退，<1: 时间变慢，>1 时间变快。 请参考控件动画

  • 1.widget为NULL时，设置所有名称为name的动画的时间倍率。
  • 2.name为NULL时，设置所有widget相关的动画的时间倍率。

  • 3.widget和name均为NULL，设置所有动画的时间倍率。

  • 函数原型：

ret_t widget_set_animator_time_scale (widget_t* widget, const char* name, float_t time_scale);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。
time_scale | float_t | 时间倍率。

widget_set_as_key_target 函数

  • 函数功能：

递归的把父控件的key_target设置为自己。

  • 函数原型：
ret_t widget_set_as_key_target (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_set_auto_adjust_size 函数

  • 函数功能：

设置控件是否根据子控件和文本自动调整控件自身大小。

  • 函数原型：
ret_t widget_set_auto_adjust_size (widget_t* widget, bool_t auto_adjust_size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
auto_adjust_size | bool_t | 是否根据子控件和文本自动调整控件自身大小。

widget_set_child_text_utf8 函数

  • 函数功能：

设置子控件的文本。 只是对widget_set_prop的包装，文本的意义由子类控件决定。

  • 函数原型：
ret_t widget_set_child_text_utf8 (widget_t* widget, const char* name, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。
text | const char* | 文本。

widget_set_child_text_with_double 函数

  • 函数功能：

用一个浮点数去设置子控件的文本。 只是对widget_set_prop的包装，文本的意义由子类控件决定。

  • 函数原型：
ret_t widget_set_child_text_with_double (widget_t* widget, const char* name, const char* format, double value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。
format | const char* | 格式字符串(如：”%2.2lf”)。
value | double | 浮点数值。

widget_set_child_text_with_int 函数

  • 函数功能：

用一个整数去设置子控件的文本。 只是对widget_set_prop的包装，文本的意义由子类控件决定。

  • 函数原型：
ret_t widget_set_child_text_with_int (widget_t* widget, const char* name, const char* format, int value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 子控件的名称。
format | const char* | 格式字符串(如：”%d”)。
value | int | 值。

widget_set_children_layout 函数

  • 函数功能：

设置子控件的布局参数。 备注：下一帧才会生效数据

  • 函数原型：
ret_t widget_set_children_layout (widget_t* widget, const char* params);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
params | const char* | 布局参数。

widget_set_dirty_rect_tolerance 函数

  • 函数功能：

设置控件脏矩形超出控件本身大小的最大范围(一般不用指定)。

  • 函数原型：
ret_t widget_set_dirty_rect_tolerance (widget_t* widget, uint16_t dirty_rect_tolerance);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
dirty_rect_tolerance | uint16_t | 控件脏脏矩形超出控件本身大小的最大范。

widget_set_enable 函数

  • 函数功能：

设置控件的可用性。

  • 函数原型：
ret_t widget_set_enable (widget_t* widget, bool_t enable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
enable | bool_t | 是否可用性。

widget_set_feedback 函数

  • 函数功能：

设置控件是否启用反馈。

  • 函数原型：
ret_t widget_set_feedback (widget_t* widget, bool_t feedback);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
feedback | bool_t | 是否启用反馈。

widget_set_floating 函数

  • 函数功能：

设置控件的floating标志。 floating的控件不受父控件的子控件布局参数的影响。

  • 函数原型：
ret_t widget_set_floating (widget_t* widget, bool_t floating);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
floating | bool_t | 是否启用floating布局。

widget_set_focusable 函数

  • 函数功能：

设置控件是否可获得焦点。

  • 函数原型：
ret_t widget_set_focusable (widget_t* widget, bool_t focusable);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
focusable | bool_t | 是否可获得焦点。

widget_set_focused 函数

  • 函数功能：

设置控件是否获得焦点。

  • 函数原型：
ret_t widget_set_focused (widget_t* widget, bool_t focused);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
focused | bool_t | 是否获得焦点。

widget_set_name 函数

  • 函数功能：

设置控件的名称。

  • 函数原型：
ret_t widget_set_name (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 名称。

widget_set_need_relayout 函数

  • 函数功能：

设置控件需要relayout标识。

  • 函数原型：
ret_t widget_set_need_relayout (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。

widget_set_need_relayout_children 函数

  • 函数功能：

设置控件需要relayout标识。

  • 函数原型：
ret_t widget_set_need_relayout_children (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回。
widget | widget_t* | 控件对象。

widget_set_need_update_style 函数

  • 函数功能：

设置需要更新Style。

  • 函数原型：
ret_t widget_set_need_update_style (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_set_need_update_style_recursive 函数

  • 函数功能：

让控件及子控件设置需要更新Style。

  • 函数原型：
ret_t widget_set_need_update_style_recursive (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_set_opacity 函数

  • 函数功能：

设置控件的不透明度。

在嵌入式平台，半透明效果会使性能大幅下降，请谨慎使用。

  • 函数原型：
ret_t widget_set_opacity (widget_t* widget, uint8_t opacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
opacity | uint8_t | 不透明度(取值0-255，0表示完全透明，255表示完全不透明)。

widget_set_pointer_cursor 函数

  • 函数功能：

设置鼠标指针的图片名。

  • 函数原型：
ret_t widget_set_pointer_cursor (widget_t* widget, const char* cursor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
cursor | const char* | 图片名称(无扩展名)。

widget_set_prop 函数

  • 函数功能：

设置控件指定属性的值。

  • 函数原型：
ret_t widget_set_prop (widget_t* widget, const char* name, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | const value_t* | 属性的值。

widget_set_prop_bool 函数

  • 函数功能：

设置布尔格式的属性。

  • 函数原型：
ret_t widget_set_prop_bool (widget_t* widget, const char* name, bool_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | bool_t | 属性的值。

widget_set_prop_float 函数

  • 函数功能：

设置浮点数格式的属性。

  • 函数原型：
ret_t widget_set_prop_float (widget_t* widget, const char* name, float_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | float_t | 属性的值。

widget_set_prop_int 函数

  • 函数功能：

设置整数格式的属性。

  • 函数原型：
ret_t widget_set_prop_int (widget_t* widget, const char* name, int32_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | int32_t | 属性的值。

widget_set_prop_pointer 函数

  • 函数功能：

设置指针格式的属性。

  • 函数原型：
ret_t widget_set_prop_pointer (widget_t* widget, const char* name, void* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | void* | 属性的值。

widget_set_prop_pointer_ex 函数

  • 函数功能：

设置指针格式的属性。

  • 函数原型：
ret_t widget_set_prop_pointer_ex (widget_t* widget, const char* name, void* v, tk_destroy_t destroy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | void* | 属性的值。
destroy | tk_destroy_t | 销毁函数。

widget_set_prop_str 函数

  • 函数功能：

设置字符串格式的属性。

  • 函数原型：
ret_t widget_set_prop_str (widget_t* widget, const char* name, const char* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 属性的名称。
v | const char* | 属性的值。

widget_set_props 函数

  • 函数功能：

设置多个参数。 参数之间用&分隔，名称和值之间用=分隔。如: name=awtk&min=10&max=100

  • 函数原型：
ret_t widget_set_props (widget_t* widget, const char* params);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
params | const char* | 参数列表。

widget_set_self_layout 函数

  • 函数功能：

设置控件自己的布局参数。 备注：下一帧才会生效数据

  • 函数原型：
ret_t widget_set_self_layout (widget_t* widget, const char* params);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
params | const char* | 布局参数。

widget_set_self_layout_params 函数

  • 函数功能：

设置控件自己的布局(缺省布局器)参数(过时，请用widget_set_self_layout)。 备注：下一帧才会生效数据

  • 函数原型：
ret_t widget_set_self_layout_params (widget_t* widget, const char* x, const char* y, const char* w, const char* h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
x | const char* | x参数。
y | const char* | y参数。
w | const char* | w参数。
h | const char* | h参数。

widget_set_sensitive 函数

  • 函数功能：

设置控件是否接受用户事件。

  • 函数原型：
ret_t widget_set_sensitive (widget_t* widget, bool_t sensitive);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
sensitive | bool_t | 是否接受用户事件。

widget_set_state 函数

  • 函数功能：

设置控件的状态。

  • 函数原型：
ret_t widget_set_state (widget_t* widget, const char* state);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
state | const char* | 状态(必须为真正的常量字符串，在widget的整个生命周期有效)。

widget_set_style 函数

  • 函数功能：

设置widget私有样式。

  • 函数原型：
ret_t widget_set_style (widget_t* widget, const char* state_and_name, const value_t* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
state_and_name | const char* | 样式对应类型与名字。
value | const value_t* | 值。

widget_set_style_color 函数

  • 函数功能：

设置颜色类型的style。

  • state 的取值
  • name 的取值

在下面这个例子中，R=0x11 G=0x22 B=0x33 A=0xFF

widget_set_style_color(label, "normal:bg_color", 0xFF332211);
  • 函数原型：
ret_t widget_set_style_color (widget_t* widget, const char* state_and_name, uint32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
state_and_name | const char* | 状态和名字，用英文的冒号分隔。
value | uint32_t | 值。颜色值一般用十六进制表示，每两个数字表示一个颜色通道，从高位到低位，依次是ABGR。

widget_set_style_int 函数

  • 函数功能：

设置整数类型的style。

  • state 的取值
  • name 的取值
  • 函数原型：
ret_t widget_set_style_int (widget_t* widget, const char* state_and_name, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
state_and_name | const char* | 状态和名字，用英文的冒号分隔。
value | int32_t | 值。

widget_set_style_str 函数

  • 函数功能：

设置字符串类型的style。

  • state 的取值
  • name 的取值
  • 函数原型：
ret_t widget_set_style_str (widget_t* widget, const char* state_and_name, const char* value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
state_and_name | const char* | 状态和名字，用英文的冒号分隔。
value | const char* | 值。

widget_set_text 函数

  • 函数功能：

设置控件的文本。（如果字符串相同，则不会重复设置以及触发事件）

  • 函数原型：
ret_t widget_set_text (widget_t* widget, const wchar_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | const wchar_t* | 文本。

widget_set_text_ex 函数

  • 函数功能：

设置控件的文本。

  • 函数原型：
ret_t widget_set_text_ex (widget_t* widget, const wchar_t* text, bool_t check_diff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | const wchar_t* | 文本。
check_diff | bool_t | 是否检查设置的文本是否和控件中的文本一样。

widget_set_text_utf8 函数

  • 函数功能：

设置控件的文本。（如果字符串相同，则不会重复设置以及触发事件）

  • 函数原型：
ret_t widget_set_text_utf8 (widget_t* widget, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | const char* | 文本。

widget_set_text_utf8_ex 函数

  • 函数功能：

设置控件的文本。

  • 函数原型：
ret_t widget_set_text_utf8_ex (widget_t* widget, const char* text, bool_t check_diff);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | const char* | 文本。
check_diff | bool_t | 是否检查设置的文本是否和控件中的文本一样。

widget_set_theme 函数

  • 函数功能：

设置theme的名称，用于动态切换主题。名称与当前主题名称相同，则重新加载全部资源。

  • 函数原型：
ret_t widget_set_theme (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 主题的名称。

widget_set_tr_text 函数

  • 函数功能：

获取翻译之后的文本，然后调用widget_set_text。

  • 函数原型：
ret_t widget_set_tr_text (widget_t* widget, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
text | const char* | 文本。

widget_set_value 函数

  • 函数功能：

设置控件的值。 只是对widget_set_prop的包装，值的意义由子类控件决定。

  • 函数原型：
ret_t widget_set_value (widget_t* widget, float_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | float_t | 值。

widget_set_value_int 函数

  • 函数功能：

设置控件的值。 只是对widget_set_prop的包装，值的意义由子类控件决定。

  • 函数原型：
ret_t widget_set_value_int (widget_t* widget, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
value | int32_t | 值。

widget_set_visible 函数

  • 函数功能：

设置控件的可见性。

  • 函数原型：
ret_t widget_set_visible (widget_t* widget, bool_t visible);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
visible | bool_t | 是否可见。

widget_set_visible_only 函数

  • 函数功能：

设置控件的可见性(不触发repaint和relayout)。

  • 函数原型：
ret_t widget_set_visible_only (widget_t* widget, bool_t visible);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
visible | bool_t | 是否可见。

widget_start_animator 函数

  • 函数功能：

播放动画。 请参考控件动画

  • 1.widget为NULL时，播放所有名称为name的动画。
  • 2.name为NULL时，播放所有widget相关的动画。

  • 3.widget和name均为NULL，播放所有动画。

  • 函数原型：

ret_t widget_start_animator (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_stop_animator 函数

  • 函数功能：

停止动画(控件的相应属性回归原位)。 请参考控件动画

  • 1.widget为NULL时，停止所有名称为name的动画。
  • 2.name为NULL时，停止所有widget相关的动画。

  • 3.widget和name均为NULL，停止所有动画。

  • 函数原型：

ret_t widget_stop_animator (widget_t* widget, const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
name | const char* | 动画名称。

widget_stroke_border_rect 函数

  • 函数功能：

根据控件的style绘制边框矩形。

  • 函数原型：
ret_t widget_stroke_border_rect (widget_t* widget, canvas_t* c, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
c | canvas_t* | 画布对象。
r | const rect_t* | 矩形区域。

widget_take_snapshot 函数

  • 函数功能：

创建一个bitmap对象，将控件绘制到bitmap上，并返回bitmap对象。

调用者需要调用bitmap_destroy销毁返回的bitmap对象。

bitmap_t* bitmap = widget_take_snapshot(window_manager());
bitmap_save_png(bitmap, "test.png");
bitmap_destroy(bitmap);
  • 函数原型：
bitmap_t* widget_take_snapshot (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回位图对象。
widget | widget_t* | 控件对象。

widget_take_snapshot_rect 函数

  • 函数功能：

创建一个bitmap对象，将控件绘制到bitmap上并且可以设置该控件的截屏区域，返回bitmap对象。

调用者需要调用bitmap_destroy销毁返回的bitmap对象。

bitmap_t* bitmap = widget_take_snapshot_rect(window_manager(), NULL);
bitmap_save_png(bitmap, "test.png");
bitmap_destroy(bitmap);
  • 函数原型：
bitmap_t* widget_take_snapshot_rect (widget_t* widget, const rect_t* r);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bitmap_t* | 返回位图对象。
widget | widget_t* | 控件对象。
r | const rect_t* | 截屏区域（输入NULL，则为控件全区域截屏）。

widget_to_global 函数

  • 函数功能：

将控件内的本地坐标转换成全局坐标。

  • 函数原型：
ret_t widget_to_global (widget_t* widget, point_t* p);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
p | point_t* | 坐标点。

widget_to_local 函数

  • 函数功能：

将屏幕坐标转换成控件内的本地坐标，即相对于控件左上角的坐标。

  • 函数原型：
ret_t widget_to_local (widget_t* widget, point_t* p);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
p | point_t* | 坐标点。

widget_to_screen 函数

  • 函数功能：

将控件内的本地坐标转换成屏幕上的坐标。

  • 函数原型：
ret_t widget_to_screen (widget_t* widget, point_t* p);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
p | point_t* | 坐标点。

widget_to_screen_ex 函数

  • 函数功能：

将控件内的本地坐标根据祖父级控件转换成相对于祖父级控件的屏幕相对坐标。 备注：如果 parent 不是 widget 控件的父级或者祖父级话，该函数会退化为 widget_to_screen 函数。

  • 函数原型：
ret_t widget_to_screen_ex (widget_t* widget, widget_t* parent, point_t* p);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
parent | widget_t* | 祖父级控。
p | point_t* | 坐标点。

widget_to_xml 函数

  • 函数功能：

将widget转换成xml。

  • 函数原型：
ret_t widget_to_xml (widget_t* widget, str_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。
str | str_t* | 用于保存xml结果。

widget_ungrab 函数

  • 函数功能：

让指定子控件放弃抓住事件。

  • 函数原型：
ret_t widget_ungrab (widget_t* widget, widget_t* child);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
child | widget_t* | 子控件对象。

widget_unload_asset 函数

  • 函数功能：

卸载资源。

使用示例：

const asset_info_t* asset = widget_load_asset(widget, ASSET_TYPE_IMAGE, "mysvg");
...
widget_unload_asset(widget, asset);
  • 函数原型：
ret_t widget_unload_asset (widget_t* widget, const asset_info_t* asset);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
asset | const asset_info_t* | 资源句柄。

widget_unload_image 函数

  • 函数功能：

卸载图片。

一般不需要调用，只有确认在图片不再需要时才调用本函数卸载。

  • 函数原型：
ret_t widget_unload_image (widget_t* widget, bitmap_t* bitmap);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
bitmap | bitmap_t* | 图片对象。

widget_unref 函数

  • 函数功能：

减少控件的引用计数。引用计数为0时销毁控件。

  • 函数原型：
ret_t widget_unref (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_update_pointer_cursor 函数

  • 函数功能：

更新鼠标指针。

  • 函数原型：
ret_t widget_update_pointer_cursor (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。

widget_update_style 函数

  • 函数功能：

让控件根据自己当前状态更新style。

  • 函数原型：
ret_t widget_update_style (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_update_style_recursive 函数

  • 函数功能：

让控件及子控件根据自己当前状态更新style。

  • 函数原型：
ret_t widget_update_style_recursive (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | widget对象。

widget_use_style 函数

  • 函数功能：

启用指定的style。

  • 函数原型：
ret_t widget_use_style (widget_t* widget, const char* style);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 控件对象。
style | const char* | style的名称。

animation 属性

动画参数。请参考控件动画

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

astyle 属性

Style对象。

  • 类型：style_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

auto_adjust_size 属性

是否根据子控件和文本自动调整控件自身大小。

为true时，最好不要使用 layout 的相关东西，否则可能有冲突。 注意：只是调整控件的本身的宽高，不会修改控件本身的位置。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_created 属性

是否由父控件自动创建。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

children 属性

全部子控件。

  • 类型：darray_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

children_layout 属性

子控件布局器。请参考控件布局参数

  • 类型：children_layouter_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

custom_props 属性

自定义属性。

  • 类型：tk_object_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

destroying 属性

标识控件正在被销毁。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

dirty 属性

标识控件是否需要重绘。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

dirty_rect_tolerance 属性

脏矩形超出控件本身大小的最大范围(一般不用指定)。

如果 border 太粗或 offset 太大等原因，导致脏矩形超出控件本身大小太多（大于缺省值）时，才需要指定。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是
可在IDE中设置 | 是

emitter 属性

事件发射器。

  • 类型：emitter_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

enable 属性

启用/禁用状态。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

feedback 属性

是否启用按键音、触屏音和震动等反馈。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

floating 属性

标识控件是否启用浮动布局，不受父控件的children_layout的控制。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

focusable 属性

是否支持焦点停留。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

focused 属性

是否得到焦点。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

h 属性

高度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

initializing 属性

标识控件正在初始化。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

loading 属性

标识控件正在加载。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

name 属性

控件名字。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

need_update_style 属性

标识控件是否需要update style。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

opacity 属性

不透明度(0-255)，0完全透明，255完全不透明。

  • 类型：uint8_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

parent 属性

父控件

  • 类型：widget_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是

pointer_cursor 属性

鼠标光标图片名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

ref_count 属性

引用计数，计数为0时销毁。

  • 类型：int32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

self_layout 属性

控件布局器。请参考控件布局参数

  • 类型：self_layouter_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

sensitive 属性

是否接受用户事件。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

state 属性

控件的状态(取值参考widget_state_t)。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

style 属性

style的名称。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

text 属性

文本。用途视具体情况而定。

  • 类型：wstr_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

tr_text 属性

保存用于翻译的字符串。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

visible 属性

是否可见。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

vt 属性

虚函数表。

  • 类型：const widget_vtable_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

w 属性

宽度。

  • 类型：wh_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

with_focus_state 属性

是否支持焦点状态。 如果希望style支持焦点状态，但又不希望焦点停留，可用本属性。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

x 属性

x坐标(相对于父控件的x坐标)。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

y 属性

y坐标(相对于父控件的y坐标)。

  • 类型：xy_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


widget_type_t

概述

控件的类型。

常量

名称 | 说明
WIDGET_TYPE_NONE | 无特殊类型。
WIDGET_TYPE_WINDOW_MANAGER | 窗口管理器。
WIDGET_TYPE_NORMAL_WINDOW | 普通窗口。
WIDGET_TYPE_OVERLAY | overlay窗口。
WIDGET_TYPE_TOOL_BAR | 工具条。
WIDGET_TYPE_DIALOG | 对话框。
WIDGET_TYPE_POPUP | 弹出窗口。
WIDGET_TYPE_SYSTEM_BAR | system bar window
WIDGET_TYPE_SYSTEM_BAR_BOTTOM | system bar window ato bottom
WIDGET_TYPE_SPRITE | 精灵窗口。
WIDGET_TYPE_KEYBOARD | 键盘窗口。
WIDGET_TYPE_DND | 拖放状态窗口。
WIDGET_TYPE_LABEL | 文本控件。
WIDGET_TYPE_BUTTON | 按钮控件。
WIDGET_TYPE_IMAGE | 图片控件。
WIDGET_TYPE_ICON | 图标控件。
WIDGET_TYPE_EDIT | 文本编辑控件。
WIDGET_TYPE_PROGRESS_BAR | 进度条控件。
WIDGET_TYPE_GROUP_BOX | 分组控件。
WIDGET_TYPE_CHECK_BUTTON | 多选按钮控件。
WIDGET_TYPE_RADIO_BUTTON | 单选按钮控件。
WIDGET_TYPE_DIALOG_TITLE | 对话框标题。
WIDGET_TYPE_DIALOG_CLIENT | 对话框客户区域。
WIDGET_TYPE_SLIDER | 滑块控件。
WIDGET_TYPE_VIEW | 视图控件。
WIDGET_TYPE_PAGE | page控件。
WIDGET_TYPE_COMBO_BOX | 下拉选择框控件。
WIDGET_TYPE_COMBO_BOX_ITEM | 下拉选择框的列表项控件。
WIDGET_TYPE_SLIDE_VIEW | 滑动视图控件。
WIDGET_TYPE_SLIDE_INDICATOR | 滑动视图的指示器控件。
WIDGET_TYPE_SLIDE_INDICATOR_ARC | 滑动视图的指示器控件（圆弧显示）。
WIDGET_TYPE_PAGES | 多页控件。
WIDGET_TYPE_TAB_BUTTON | 标签按钮控件。
WIDGET_TYPE_TAB_CONTROL | 标签控件。
WIDGET_TYPE_TAB_BUTTON_GROUP | 标签按钮分组控件。
WIDGET_TYPE_BUTTON_GROUP | 按钮分组控件。
WIDGET_TYPE_CANDIDATES | 候选字控件。
WIDGET_TYPE_SPIN_BOX | 数值编辑控件。
WIDGET_TYPE_DRAGGER | 拖动块控件。
WIDGET_TYPE_SCROLL_BAR | 滚动条控件。
WIDGET_TYPE_SCROLL_BAR_DESKTOP | 桌面版滚动条控件。
WIDGET_TYPE_SCROLL_BAR_MOBILE | 移动版滚动条控件。
WIDGET_TYPE_SCROLL_VIEW | 滚动视图控件。
WIDGET_TYPE_LIST_VIEW | 列表视图控件。
WIDGET_TYPE_LIST_VIEW_H | 水平列表视图控件。
WIDGET_TYPE_LIST_ITEM | 列表项控件。
WIDGET_TYPE_COLOR_PICKER | 颜色选择器控件。
WIDGET_TYPE_COLOR_COMPONENT | 颜色选择器组件控件。
WIDGET_TYPE_COLOR_TILE | 颜色块控件。
WIDGET_TYPE_CLIP_VIEW | 裁剪控件。
WIDGET_TYPE_RICH_TEXT | 富文本控件。
WIDGET_TYPE_APP_BAR | AppBar控件。
WIDGET_TYPE_GRID | 网格控件。
WIDGET_TYPE_GRID_ITEM | 网格项目控件。
WIDGET_TYPE_ROW | 行控件。
WIDGET_TYPE_COLUMN | 列控件。
WIDGET_TYPE_CALIBRATION_WIN | 电阻屏校准窗口。


window_animator_factory_t

概述

窗口动画工厂对象。

提供通过类型创建窗口动画的能力。 让用户可以自定义窗口动画，并获得内置窗口动画同等待遇。

函数

函数名称 | 说明
window_animator_create_for_close | 为关闭窗口创建动画。
window_animator_create_for_open | 为打开窗口创建动画。
window_animator_factory | 获取缺省的窗口动画工厂对象。
window_animator_factory_create | 创建窗口动画工厂对象。
window_animator_factory_create_animator | 创建指定类型的窗口动画。
window_animator_factory_destroy | 析构并释放窗口动画工厂对象。
window_animator_factory_register | 注册窗口动画创建函数。
window_animator_factory_set | 设置缺省的窗口动画工厂对象。

window_animator_create_for_close 函数

  • 函数功能：

为关闭窗口创建动画。

  • 函数原型：
window_animator_t* window_animator_create_for_close (const char* type, canvas_t* c, widget_t* prev_win, widget_t* curr_win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_animator_t* | 窗口动画对象。
type | const char* | 动画类型。
c | canvas_t* | canvas。
prev_win | widget_t* | 前一窗口。
curr_win | widget_t* | 当前窗口。

window_animator_create_for_open 函数

  • 函数功能：

为打开窗口创建动画。

  • 函数原型：
window_animator_t* window_animator_create_for_open (const char* type, canvas_t* c, widget_t* prev_win, widget_t* curr_win);
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_animator_t* | 窗口动画对象。
type | const char* | 动画类型。
c | canvas_t* | canvas。
prev_win | widget_t* | 前一窗口。
curr_win | widget_t* | 当前窗口。

window_animator_factory 函数

  • 函数功能：

获取缺省的窗口动画工厂对象。

  • 函数原型：
window_animator_factory_t* window_animator_factory ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_animator_factory_t* | 返回窗口动画工厂对象。

window_animator_factory_create 函数

  • 函数功能：

创建窗口动画工厂对象。

  • 函数原型：
window_animator_factory_t* window_animator_factory_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_animator_factory_t* | 返回窗口动画工厂对象。

window_animator_factory_create_animator 函数

  • 函数功能：

创建指定类型的窗口动画。

  • 函数原型：
window_animator_t* window_animator_factory_create_animator (window_animator_factory_t* factory, bool_t open, tk_object_t* args);
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_animator_t* | 返回窗口动画对象。
factory | window_animator_factory_t* | 窗口动画工厂对象。
open | bool_t | TRUE表示打开窗口时的动画，FALSE表示关闭窗口时的动画。
args | tk_object_t* | 参数。

window_animator_factory_destroy 函数

  • 函数功能：

析构并释放窗口动画工厂对象。

  • 函数原型：
ret_t window_animator_factory_destroy (window_animator_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | window_animator_factory_t* | 窗口动画工厂对象。

window_animator_factory_register 函数

  • 函数功能：

注册窗口动画创建函数。

  • 函数原型：
ret_t window_animator_factory_register (window_animator_factory_t* factory, const char* type, window_animator_create_t create);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | window_animator_factory_t* | 窗口动画工厂对象。
type | const char* | 窗口动画类型。
create | window_animator_create_t | 创建函数。

window_animator_factory_set 函数

  • 函数功能：

设置缺省的窗口动画工厂对象。

  • 函数原型：
ret_t window_animator_factory_set (window_animator_factory_t* factory);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
factory | window_animator_factory_t* | 窗口动画工厂对象。


window_animator_t

概述

窗口动画。

函数

函数名称 | 说明
window_animator_begin_frame | begin frame
window_animator_create | 创建窗口动画对象。
window_animator_destroy | 销毁窗口动画对象。
window_animator_end_frame | end frame
window_animator_update | 更新动画。

window_animator_begin_frame 函数

  • 函数功能：

begin frame

  • 函数原型：
ret_t window_animator_begin_frame (window_animator_t* wa);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wa | window_animator_t* | 窗口动画对象。

window_animator_create 函数

  • 函数功能：

创建窗口动画对象。

供子类构造函数用。

  • 函数原型：
window_animator_t* window_animator_create (bool_t open, const window_animator_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_animator_t* | 返回窗口动画对象。
open | bool_t | TRUE表示打开窗口的动画，FALSE表示关闭窗口的动画。
vt | const window_animator_vtable_t* | 虚表对象。

window_animator_destroy 函数

  • 函数功能：

销毁窗口动画对象。

  • 函数原型：
ret_t window_animator_destroy (window_animator_t* wa);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wa | window_animator_t* | 窗口动画对象。

window_animator_end_frame 函数

  • 函数功能：

end frame

  • 函数原型：
ret_t window_animator_end_frame (window_animator_t* wa);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wa | window_animator_t* | 窗口动画对象。

window_animator_update 函数

  • 函数功能：

更新动画。

  • 函数原型：
ret_t window_animator_update (window_animator_t* wa, uint64_t time_ms);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
wa | window_animator_t* | 窗口动画对象。
time_ms | uint64_t | 当前时间(毫秒)。


window_animator_type_t

概述

@type string 内置窗口动画常量定义。

常量

名称 | 说明
WINDOW_ANIMATOR_CENTER_SCALE | 中心缩放。适用于居中的对话框。
WINDOW_ANIMATOR_FADE | 淡入淡出。适用于toast之类的提示。
WINDOW_ANIMATOR_POPDOWN | 顶部部弹出。适用于对话框。
WINDOW_ANIMATOR_POPUP | 底部弹出。适用于对话框。
WINDOW_ANIMATOR_SLIDE_UP | 向上弹出。适用于窗口。
WINDOW_ANIMATOR_SLIDE_DOWN | 向下弹出。适用于窗口。
WINDOW_ANIMATOR_SLIDE_LEFT | 向左边弹出。适用于窗口。
WINDOW_ANIMATOR_SLIDE_RIGHT | 向右边弹出。适用于窗口。
WINDOW_ANIMATOR_HTRANSLATE | 水平平移。适用于窗口。
WINDOW_ANIMATOR_VTRANSLATE | 垂直平移。适用于窗口。


window_base_t

概述

窗口。

本类把窗口相关的公共行为进行抽象，放到一起方便重用。目前已知的具体实现如下图：

> 本类是一个抽象类，不能进行实例化。请在应用程序中使用具体的类，如window_t。

函数

函数名称 | 说明
window_base_auto_scale_children | 根据参数自动缩放子控件。
window_base_cast | 转换为window_base对象(供脚本语言使用)。
window_base_create | 创建window base对象。
window_base_get_prop | 窗口get_prop函数的缺省实现。
window_base_get_widget_vtable | 获取 window_base 虚表。
window_base_invalidate | 窗口on_invalidate函数的缺省实现。
window_base_on_copy | 默认拷贝函数。
window_base_on_destroy | 窗口on_destroy函数的缺省实现。
window_base_on_event | 窗口on_event函数的缺省实现。
window_base_on_paint_begin | 窗口on_paint_begin函数的缺省实现。
window_base_on_paint_end | 窗口on_paint_end函数的缺省实现。
window_base_on_paint_self | 窗口on_paint_self函数的缺省实现。
window_base_set_need_relayout | 设置是否需要relayout
window_base_set_prop | 窗口set_prop函数的缺省实现。

属性

属性名称 | 类型 | 说明
applet_name | char* | 小应用程序(applet)的名称。
assets_manager | assets_manager_t* | 获取资源管理器对象。
auto_scale_children_h | bool_t | 窗口大小与设计时大小不同时，是否自动调整子控件的高度。
auto_scale_children_w | bool_t | 窗口大小与设计时大小不同时，是否自动调整子控件的宽度。
auto_scale_children_x | bool_t | 窗口大小与设计时大小不同时，是否自动调整子控件的x坐标。
auto_scale_children_y | bool_t | 窗口大小与设计时大小不同时，是否自动调整子控件的y坐标。
closable | window_closable_t | 收到EVT_REQUEST_CLOSE_WINDOW是否自动关闭窗口。
close_anim_hint | char* | 关闭窗口动画的名称。
design_h | uint16_t | 设计时高度。
design_w | uint16_t | 设计时宽度。
disable_anim | bool_t | 禁用窗口动画。
font_manager | font_manager_t* | 获取字体管理器对象。
image_manager | image_manager_t* | 获取图片管理器对象。
locale_info | locale_info_t* | 获取多国语言字符串管理器对象。
move_focus_down_key | char* | 向下移动焦点的键值。
move_focus_left_key | char* | 向左移动焦点的键值。
move_focus_next_key | char* | 向后移动焦点的键值。
move_focus_prev_key | char* | 向前移动焦点的键值。
move_focus_right_key | char* | 向右移动焦点的键值。
move_focus_up_key | char* | 向上移动焦点的键值。
open_anim_hint | char* | 打开窗口动画的名称。
single_instance | bool_t | 单例。如果窗口存在，先关闭再打开。
stage | window_stage_t | 窗口当前处于的状态。
strongly_focus | bool_t | 点击非focusable控件时，是否让当前焦点控件失去焦点。比如点击窗口空白区域，是否让编辑器失去焦点。
theme | char* | 窗体样式资源的名称。
theme_obj | theme_t* | 窗口的常量窗体样式数据。

事件

事件名称 | 类型 | 说明
EVT_WINDOW_WILL_OPEN | event_t | 窗口即将打开事件。 如果有窗口动画，在窗口动画开始前触发。如果没有窗口动画，在窗口被加载后的下一次循环中触发。
EVT_WINDOW_OPEN | event_t | 窗口打开事件。 如果有窗口动画，在窗口动画完成时触发。如果没有窗口动画，在窗口被加载后的下一次循环中触发。
EVT_WINDOW_TO_BACKGROUND | event_t | 窗口被切换到后台事件。 打开新窗口时，当前窗口被切换到后台时，对当前窗口触发本事件。
EVT_WINDOW_TO_FOREGROUND | event_t | 窗口被切换到前台事件。 关闭当前窗口时，前一个窗口被切换到前台时，对前一个窗口触发本事件。
EVT_WINDOW_CLOSE | event_t | 窗口关闭事件。
EVT_WINDOW_LOAD | event_t | 窗口加载完成事件。
EVT_REQUEST_CLOSE_WINDOW | event_t | 请求关闭窗口的事件。
EVT_LOCALE_CHANGED | event_t | locale改变的事件。

window_base_auto_scale_children 函数

  • 函数功能：

根据参数自动缩放子控件。

  • 函数原型：
ret_t window_base_auto_scale_children (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。

window_base_cast 函数

  • 函数功能：

转换为window_base对象(供脚本语言使用)。

  • 函数原型：
widget_t* window_base_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | window_base对象。
widget | widget_t* | window_base对象。

window_base_create 函数

  • 函数功能：

创建window base对象。

  • 函数原型：
widget_t* window_base_create (widget_t* parent, const widget_vtable_t* vt, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 窗口对象。
parent | widget_t* | 父控件
vt | const widget_vtable_t* | vtable对象。
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

window_base_get_prop 函数

  • 函数功能：

窗口get_prop函数的缺省实现。

  • 函数原型：
ret_t window_base_get_prop (widget_t* widget, const char* name, value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。。
widget | widget_t* | window_base对象。g
name | const char* | 属性名。
v | value_t* | value对象

window_base_get_widget_vtable 函数

  • 函数功能：

获取 window_base 虚表。

  • 函数原型：
const widget_vtable_t* window_base_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 window_base 虚表。

window_base_invalidate 函数

  • 函数功能：

窗口on_invalidate函数的缺省实现。

  • 函数原型：
ret_t window_base_invalidate (widget_t* widget, const rect_t* rect);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。
rect | const rect_t* | rect对象。

window_base_on_copy 函数

  • 函数功能：

默认拷贝函数。

  • 函数原型：
ret_t window_base_on_copy (widget_t* widget, widget_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。。
widget | widget_t* | window_base对象。
other | widget_t* | other window_base对象。

window_base_on_destroy 函数

  • 函数功能：

窗口on_destroy函数的缺省实现。

  • 函数原型：
ret_t window_base_on_destroy (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。

window_base_on_event 函数

  • 函数功能：

窗口on_event函数的缺省实现。

  • 函数原型：
ret_t window_base_on_event (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。
e | event_t* | event对象。

window_base_on_paint_begin 函数

  • 函数功能：

窗口on_paint_begin函数的缺省实现。

  • 函数原型：
ret_t window_base_on_paint_begin (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。
c | canvas_t* | canvas对象。

window_base_on_paint_end 函数

  • 函数功能：

窗口on_paint_end函数的缺省实现。

  • 函数原型：
ret_t window_base_on_paint_end (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。1
widget | widget_t* | window_base对象。
c | canvas_t* | canvas对象。

window_base_on_paint_self 函数

  • 函数功能：

窗口on_paint_self函数的缺省实现。

  • 函数原型：
ret_t window_base_on_paint_self (widget_t* widget, canvas_t* c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。
c | canvas_t* | canvas对象。

window_base_set_need_relayout 函数

  • 函数功能：

设置是否需要relayout

  • 函数原型：
ret_t window_base_set_need_relayout (widget_t* widget, bool_t need_relayout);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。
need_relayout | bool_t | 是否需要relayout。

window_base_set_prop 函数

  • 函数功能：

窗口set_prop函数的缺省实现。

  • 函数原型：
ret_t window_base_set_prop (widget_t* widget, const char* name, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_base对象。
name | const char* | 属性名。
v | const value_t* | value对象

applet_name 属性

小应用程序(applet)的名称。

如果该窗口属于某个独立的小程序应用(applet)，需要指定它的名称，以便到对应的资源目录查找资源。

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

assets_manager 属性

获取资源管理器对象。

把资源管理器对象与窗口关联起来，是为了解决UI设计器与被设计的窗口需要从不同的位置加载资源资源的问题。

  • 类型：assets_manager_t*
特性 | 是否支持
可直接读取 | 否
可直接修改 | 否
可通过widget_get_prop读取 | 是

auto_scale_children_h 属性

窗口大小与设计时大小不同时，是否自动调整子控件的高度。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_scale_children_w 属性

窗口大小与设计时大小不同时，是否自动调整子控件的宽度。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_scale_children_x 属性

窗口大小与设计时大小不同时，是否自动调整子控件的x坐标。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

auto_scale_children_y 属性

窗口大小与设计时大小不同时，是否自动调整子控件的y坐标。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

closable 属性

收到EVT_REQUEST_CLOSE_WINDOW是否自动关闭窗口。

如果关闭窗口时，需要用户确认:

  • 1.将closable设置为WINDOW_CLOSABLE_CONFIRM

  • 2.处理窗口的EVT_REQUEST_CLOSE_WINDOW事件

closable在XML中取值为：yes/no/confirm，缺省为yes。

  • 类型：window_closable_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

close_anim_hint 属性

关闭窗口动画的名称。 请参考窗口动画

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

design_h 属性

设计时高度。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

design_w 属性

设计时宽度。

  • 类型：uint16_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

disable_anim 属性

禁用窗口动画。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

font_manager 属性

获取字体管理器对象。

把字体管理器对象与窗口关联起来，是为了解决UI设计器与被设计的窗口需要从不同的位置加载字体资源的问题。

  • 类型：font_manager_t*
特性 | 是否支持
可直接读取 | 否
可直接修改 | 否
可通过widget_get_prop读取 | 是

image_manager 属性

获取图片管理器对象。

把图片管理器对象与窗口关联起来，是为了解决UI设计器与被设计的窗口需要从不同的位置加载图片资源的问题。

  • 类型：image_manager_t*
特性 | 是否支持
可直接读取 | 否
可直接修改 | 否
可通过widget_get_prop读取 | 是

locale_info 属性

获取多国语言字符串管理器对象。

把多国语言字符串管理器对象与窗口关联起来，是为了解决UI设计器与被设计的窗口需要从不同的位置加载资源资源的问题。

  • 类型：locale_info_t*
特性 | 是否支持
可直接读取 | 否
可直接修改 | 否
可通过widget_get_prop读取 | 是

move_focus_down_key 属性

向下移动焦点的键值。

请参考控件焦点

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

move_focus_left_key 属性

向左移动焦点的键值。

请参考控件焦点

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

move_focus_next_key 属性

向后移动焦点的键值。

请参考控件焦点

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

move_focus_prev_key 属性

向前移动焦点的键值。

请参考控件焦点

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

move_focus_right_key 属性

向右移动焦点的键值。

请参考控件焦点

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

move_focus_up_key 属性

向上移动焦点的键值。

请参考控件焦点

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

open_anim_hint 属性

打开窗口动画的名称。 请参考窗口动画

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

single_instance 属性

单例。如果窗口存在，先关闭再打开。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

stage 属性

窗口当前处于的状态。

  • 类型：window_stage_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可通过widget_get_prop读取 | 是

strongly_focus 属性

点击非focusable控件时，是否让当前焦点控件失去焦点。比如点击窗口空白区域，是否让编辑器失去焦点。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

theme 属性

窗体样式资源的名称。 每个窗口都可以有独立的窗体样式文件，如果没指定，则使用系统缺省的窗体样式文件。 窗体样式是一个XML文件，放在assets/raw/styles目录下。 请参考窗体样式

  • 类型：char*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是

theme_obj 属性

窗口的常量窗体样式数据。

把窗体样式管理器对象与窗口关联起来，是为了解决UI设计器与被设计的窗口需要从不同的位置加载窗体样式资源的问题。

  • 类型：theme_t*
特性 | 是否支持
可直接读取 | 否
可直接修改 | 否
可通过widget_get_prop读取 | 是


window_closable_t

概述

窗口的closable常量定义。

常量

名称 | 说明
WINDOW_CLOSABLE_YES | 窗口可关闭。
WINDOW_CLOSABLE_NO | 窗口不可关闭。
WINDOW_CLOSABLE_CONFIRM | 窗口需要确认后才能关闭。


window_event_t

概述

窗口事件，由窗口管理器触发。

函数

函数名称 | 说明
pointer_event_rotate | 根据屏幕旋转方向修正pointer_event中的坐标。(旋转方向为逆时针)
window_event_cast | 把event对象转window_event_t对象。
window_event_init | 初始化事件。

属性

属性名称 | 类型 | 说明
window | widget_t* | canvas。

pointer_event_rotate 函数

  • 函数功能：

根据屏幕旋转方向修正pointer_event中的坐标。(旋转方向为逆时针)

  • 函数原型：
ret_t pointer_event_rotate (pointer_event_t* evt, system_info_t* info);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
evt | pointer_event_t* | 指针事件对象。
info | system_info_t* | 系统信息。

window_event_cast 函数

  • 函数功能：

把event对象转window_event_t对象。

  • 函数原型：
window_event_t* window_event_cast (event_t* event);
  • 参数说明：
参数 | 类型 | 说明
返回值 | window_event_t* | 对象。
event | event_t* | event对象。

window_event_init 函数

  • 函数功能：

初始化事件。

  • 函数原型：
event_t* window_event_init (window_event_t* event, uint32_t type, void* target, widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | event_t* | event对象。
event | window_event_t* | event对象。
type | uint32_t | 事件类型。
target | void* | 事件目标。
widget | widget_t* | window对象。

window 属性

canvas。

  • 类型：widget_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可脚本化 | 是


window_manager_default_t

概述

缺省窗口管理器。

函数

函数名称 | 说明
window_manager_create | 创建窗口管理器。

window_manager_create 函数

  • 函数功能：

创建窗口管理器。

  • 函数原型：
widget_t* window_manager_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回窗口管理器对象。


window_manager_simple_t

概述

简单窗口管理器(不支持窗口动画和对话框高亮策略)。

函数

函数名称 | 说明
window_manager_create | 创建窗口管理器。

window_manager_create 函数

  • 函数功能：

创建窗口管理器。

  • 函数原型：
widget_t* window_manager_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回窗口管理器对象。


window_manager_t

概述

窗口管理器。

函数

函数名称 | 说明
window_manager | 获取全局window_manager对象
window_manager_back | 请求关闭顶层窗口。
window_manager_back_to | 回到指定的窗口，关闭之上的全部窗口。
window_manager_back_to_home | 回到主窗口，关闭之上的全部窗口。
window_manager_begin_wait_pointer_cursor | 开始等待鼠标指针。
window_manager_cast | 转换为window_manager对象(供脚本语言使用)。
window_manager_close_all | 关闭全部窗口。
window_manager_close_window_force | 强制立即关闭窗口(内部使用函数，关闭窗口请使用 window_manager_close_window)。
window_manager_destroy | 销毁window_manager。
window_manager_dispatch_input_event | 分发输入事件。
window_manager_dispatch_native_window_event | 处理native window事件。
window_manager_end_wait_pointer_cursor | 结束等待鼠标指针。
window_manager_get_pointer_pressed | 获取指针当前是否按下。
window_manager_get_pointer_x | 获取指针当前的X坐标。
window_manager_get_pointer_y | 获取指针当前的Y坐标。
window_manager_get_prev_window | 获取前一个的窗口。
window_manager_get_top_main_window | 获取最上面的主窗口。
window_manager_get_top_window | 获取最上面的窗口。
window_manager_init | 初始化window_manager。
window_manager_is_animating | 获取当前窗口动画是否正在播放。
window_manager_open_window | 打开窗口。
window_manager_paint | 绘制。
window_manager_resize | 调整原生窗口的大小。
window_manager_set | 设置缺省的窗口管理器。
window_manager_set_cursor | 设置鼠标指针。
window_manager_set_ignore_input_events | 设置是否忽略用户输入事件。
window_manager_set_max_fps | 限制最大帧率。
window_manager_set_screen_saver_time | 设置屏保时间。
window_manager_set_show_fps | 设置是否显示FPS。
window_manager_switch_to | 切换到指定窗口。

属性

属性名称 | 类型 | 说明
global_emitter | emitter_t* | 全局事情分发器。

事件

事件名称 | 类型 | 说明
EVT_TOP_WINDOW_CHANGED | window_event_t | 顶层窗口改变的事件。
EVT_SCREEN_SAVER | window_event_t | 在指定的时间内，没有用户输入事件，由窗口管理器触发。
EVT_ORIENTATION_CHANGED | event_t | 屏幕旋转事件。
EVT_SYSTEM | system_event_t | SDL系统事件。

window_manager 函数

  • 函数功能：

获取全局window_manager对象

  • 函数原型：
widget_t* window_manager ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。

window_manager_back 函数

  • 函数功能：

请求关闭顶层窗口。

如果顶层窗口时模态对话框，用DIALOG_QUIT_NONE调用dialog_quit。

  • 函数原型：
ret_t window_manager_back (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。

window_manager_back_to 函数

  • 函数功能：

回到指定的窗口，关闭之上的全部窗口。

如果顶层窗口时模态对话框，用DIALOG_QUIT_NONE调用dialog_quit。

  • 函数原型：
ret_t window_manager_back_to (widget_t* widget, const char* target);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
target | const char* | 目标窗口的名称。

window_manager_back_to_home 函数

  • 函数功能：

回到主窗口，关闭之上的全部窗口。

如果顶层窗口时模态对话框，用DIALOG_QUIT_NONE调用dialog_quit。

  • 函数原型：
ret_t window_manager_back_to_home (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。

window_manager_begin_wait_pointer_cursor 函数

  • 函数功能：

开始等待鼠标指针。

  • 函数原型：
ret_t window_manager_begin_wait_pointer_cursor (widget_t* widget, bool_t ignore_user_input);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。。
widget | widget_t* | 窗口管理器对象。
ignore_user_input | bool_t | 是否忽略用户输入。

window_manager_cast 函数

  • 函数功能：

转换为window_manager对象(供脚本语言使用)。

  • 函数原型：
widget_t* window_manager_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | window_manager对象。
widget | widget_t* | window_manager对象。

window_manager_close_all 函数

  • 函数功能：

关闭全部窗口。

  • 函数原型：
ret_t window_manager_close_all (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。

window_manager_close_window_force 函数

  • 函数功能：

强制立即关闭窗口(内部使用函数，关闭窗口请使用 window_manager_close_window)。

本函数不会执行窗口动画。

  • 函数原型：
ret_t window_manager_close_window_force (widget_t* widget, widget_t* window);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
window | widget_t* | 窗口对象。

window_manager_destroy 函数

  • 函数功能：

销毁window_manager。

  • 函数原型：
ret_t window_manager_destroy (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window_manager对象。

window_manager_dispatch_input_event 函数

  • 函数功能：

分发输入事件。

一般仅由主循环调用，特殊情况也可以用来注入事件。

  • 函数原型：
ret_t window_manager_dispatch_input_event (widget_t* widget, event_t* e);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
e | event_t* | 事件对象。

window_manager_dispatch_native_window_event 函数

  • 函数功能：

处理native window事件。

  • 函数原型：
ret_t window_manager_dispatch_native_window_event (widget_t* widget, event_t* e, void* handle);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
e | event_t* | 事件。
handle | void* | native window句柄。

window_manager_end_wait_pointer_cursor 函数

  • 函数功能：

结束等待鼠标指针。

  • 函数原型：
ret_t window_manager_end_wait_pointer_cursor (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。。
widget | widget_t* | 窗口管理器对象。

window_manager_get_pointer_pressed 函数

  • 函数功能：

获取指针当前是否按下。

  • 函数原型：
bool_t window_manager_get_pointer_pressed (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回指针当前是否按下。
widget | widget_t* | 窗口管理器对象。

window_manager_get_pointer_x 函数

  • 函数功能：

获取指针当前的X坐标。

  • 函数原型：
xy_t window_manager_get_pointer_x (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | xy_t | 返回指针当前的X坐标。
widget | widget_t* | 窗口管理器对象。

window_manager_get_pointer_y 函数

  • 函数功能：

获取指针当前的Y坐标。

  • 函数原型：
xy_t window_manager_get_pointer_y (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | xy_t | 返回指针当前的X坐标。
widget | widget_t* | 窗口管理器对象。

window_manager_get_prev_window 函数

  • 函数功能：

获取前一个的窗口。

  • 函数原型：
widget_t* window_manager_get_prev_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回窗口对象。
widget | widget_t* | 窗口管理器对象。

window_manager_get_top_main_window 函数

  • 函数功能：

获取最上面的主窗口。

  • 函数原型：
widget_t* window_manager_get_top_main_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回窗口对象。
widget | widget_t* | 窗口管理器对象。

window_manager_get_top_window 函数

  • 函数功能：

获取最上面的窗口。

  • 函数原型：
widget_t* window_manager_get_top_window (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回窗口对象。
widget | widget_t* | 窗口管理器对象。

window_manager_init 函数

  • 函数功能：

初始化window_manager。

  • 函数原型：
widget_t* window_manager_init (window_manager_t* wm, const widget_vtable_t* wvt, const window_manager_vtable_t* vt);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 返回window_manager对象。
wm | window_manager_t* | window_manager对象。
wvt | const widget_vtable_t* | 控件基类虚表。
vt | const window_manager_vtable_t* | window_manager虚表。

window_manager_is_animating 函数

  • 函数功能：

获取当前窗口动画是否正在播放。

  • 函数原型：
bool_t window_manager_is_animating (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示正在播放，FALSE表示没有播放。
widget | widget_t* | 窗口管理器对象。

window_manager_open_window 函数

  • 函数功能：

打开窗口。

  • 函数原型：
ret_t window_manager_open_window (widget_t* widget, widget_t* window);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
window | widget_t* | 窗口对象。

window_manager_paint 函数

  • 函数功能：

绘制。

仅由主循环调用。

  • 函数原型：
ret_t window_manager_paint (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。

window_manager_resize 函数

  • 函数功能：

调整原生窗口的大小。

  • 函数原型：
ret_t window_manager_resize (widget_t* widget, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
w | wh_t | 宽度
h | wh_t | 高度

window_manager_set 函数

  • 函数功能：

设置缺省的窗口管理器。

  • 函数原型：
ret_t window_manager_set (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。

window_manager_set_cursor 函数

  • 函数功能：

设置鼠标指针。

  • 函数原型：
ret_t window_manager_set_cursor (widget_t* widget, const char* cursor);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
cursor | const char* | 图片名称(从图片管理器中加载)。

window_manager_set_ignore_input_events 函数

  • 函数功能：

设置是否忽略用户输入事件。

  • 函数原型：
ret_t window_manager_set_ignore_input_events (widget_t* widget, bool_t ignore_input_events);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
ignore_input_events | bool_t | 是否忽略用户输入事件。

window_manager_set_max_fps 函数

  • 函数功能：

限制最大帧率。

TK_MAX_LOOP_FPS/max_fps最好是整数，比如TK_MAX_LOOP_FPS为120，max_fps可取60/30/20/10等。

  • 函数原型：
ret_t window_manager_set_max_fps (widget_t* widget, uint32_t max_fps);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
max_fps | uint32_t | 最大帧率。

window_manager_set_screen_saver_time 函数

  • 函数功能：

设置屏保时间。

  • 函数原型：
ret_t window_manager_set_screen_saver_time (widget_t* widget, uint32_t screen_saver_time);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
screen_saver_time | uint32_t | 屏保时间(单位毫秒), 为0关闭屏保。

window_manager_set_show_fps 函数

  • 函数功能：

设置是否显示FPS。

  • 函数原型：
ret_t window_manager_set_show_fps (widget_t* widget, bool_t show_fps);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
show_fps | bool_t | 是否显示FPS。

window_manager_switch_to 函数

  • 函数功能：

切换到指定窗口。

window_manager_switch_to(wm, win, widget_child(wm, "home"), FALSE);
  • 函数原型：
ret_t window_manager_switch_to (widget_t* widget, widget_t* curr_win, widget_t* target_win, bool_t close);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | 窗口管理器对象。
curr_win | widget_t* | 当前窗口。
target_win | widget_t* | 目标窗口(必须存在，可以用widget_child函数到窗口管理器中查找)。
close | bool_t | 是否关闭当前窗口。

global_emitter 属性

全局事情分发器。

  • 类型：emitter_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


window_stage_t

概述

窗口的生命周期常量定义。

常量

名称 | 说明
WINDOW_STAGE_NONE | 初始状态。
WINDOW_STAGE_LOADED | 从UI资源加载完成。
WINDOW_STAGE_CREATED | 创建完成。
WINDOW_STAGE_OPENED | 窗口已经打开(窗口打开动画完成后)
WINDOW_STAGE_CLOSED | 窗口已关闭。
WINDOW_STAGE_SUSPEND | 窗口挂起状态。


window_t

概述

窗口。

缺省的应用程序窗口，占用除system_bar_t之外的整个区域，请不要修改它的位置和大小(除非你清楚后果)。

window_t是window_base_t的子类控件，window_base_t的函数均适用于window_t控件。

在xml中使用”window”标签创建窗口。无需指定坐标和大小，可以指定窗体样式和动画名称。如：

<window theme="basic" anim_hint="htranslate">
...
</window>

更多用法请参考：window.xml

在c代码中使用函数window_create创建窗口。如：

widget_t* window = window_create(NULL, 0, 0, 0, 0);

无需指定父控件、坐标和大小，使用0即可。

完整示例请参考：window demo

可用通过style来设置窗口的风格，如背景颜色或图片等。如：

<style name="bricks">
<normal bg_image="bricks"  bg_image_draw_type="repeat"/>
</style>

更多用法请参考：theme default

函数

函数名称 | 说明
image_blend | 把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放。
image_clear | 用颜色填充指定的区域。
image_copy | 把图片指定的区域拷贝到framebuffer中。
image_fill | 用颜色绘制指定的区域。
image_rotate | 把图片指定的区域进行旋转并拷贝到framebuffer相应的区域，本函数主要用于辅助实现横屏和竖屏的切换，一般支持90度旋转即可。
image_rotate_blend | 把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放以及旋转。
image_rotate_ex | 把图片指定的区域进行旋转。
window_cast | 转换为window对象(供脚本语言使用)。
window_close | 关闭窗口。
window_close_force | 立即无条件关闭窗口(无动画)。
window_create | 创建window对象
window_create_default | 以缺省的方式创建window对象。
window_get_widget_vtable | 获取 window 虚表。
window_open | 从资源文件中加载并创建window_base对象。本函数在ui_loader/ui_builder_default里实现。
window_open_and_close | 从资源文件中加载并创建window对象。本函数在ui_loader/ui_builder_default里实现。
window_set_auto_scale_children | 当设计分辨率和实际分辨率不一致时，自动调整子控件的位置和大小。
window_set_fullscreen | 设置为全屏窗口。

属性

属性名称 | 类型 | 说明
fullscreen | bool_t | 是否全屏。

image_blend 函数

  • 函数功能：

把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放。

  • 函数原型：
ret_t image_blend (bitmap_t* dst, bitmap_t* src, const rectf_t* dst_r, const rectf_t* src_r, uint8_t global_alpha);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
dst_r | const rectf_t* | 目的区域。
src_r | const rectf_t* | 源区域。
global_alpha | uint8_t | 全局alpha。

image_clear 函数

  • 函数功能：

用颜色填充指定的区域。

  • 函数原型：
ret_t image_clear (bitmap_t* dst, const rect_t* dst_r, color_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
dst_r | const rect_t* | 要填充的目标区域。
c | color_t | 颜色。

image_copy 函数

  • 函数功能：

把图片指定的区域拷贝到framebuffer中。

  • 函数原型：
ret_t image_copy (bitmap_t* dst, bitmap_t* src, const rect_t* src_r, xy_t dx, xy_t dy);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
src_r | const rect_t* | 要拷贝的区域。
dx | xy_t | 目标位置的x坐标。
dy | xy_t | 目标位置的y坐标。

image_fill 函数

  • 函数功能：

用颜色绘制指定的区域。

  • 函数原型：
ret_t image_fill (bitmap_t* dst, const rect_t* dst_r, color_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
dst_r | const rect_t* | 要填充的目标区域。
c | color_t | 颜色。

image_rotate 函数

  • 函数功能：

把图片指定的区域进行旋转并拷贝到framebuffer相应的区域，本函数主要用于辅助实现横屏和竖屏的切换，一般支持90度旋转即可。 备注：旋转方向为逆时针。

  • 函数原型：
ret_t image_rotate (bitmap_t* dst, bitmap_t* src, const rect_t* src_r, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
src_r | const rect_t* | 要旋转并拷贝的区域。
o | lcd_orientation_t | 旋转角度(一般支持90度即可)。

image_rotate_blend 函数

  • 函数功能：

把图片指定的区域渲染到framebuffer指定的区域，src的大小和dst的大小不一致则进行缩放以及旋转。

  • 函数原型：
ret_t image_rotate_blend (bitmap_t* dst, bitmap_t* src, const rectf_t* dst_r, const rectf_t* src_r, uint8_t global_alpha, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
dst_r | const rectf_t* | 目的区域。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
src_r | const rectf_t* | 源区域。
global_alpha | uint8_t | 全局alpha。
o | lcd_orientation_t | 旋转角度(一般支持90度即可，旋转方向为逆时针)。

image_rotate_ex 函数

  • 函数功能：

把图片指定的区域进行旋转。

  • 函数原型：
ret_t image_rotate_ex (bitmap_t* dst, bitmap_t* src, const rect_t* src_r, xy_t dx, xy_t dy, lcd_orientation_t o);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败，返回失败则上层用软件实现。
dst | bitmap_t* | 目标图片对象。
src | bitmap_t* | 源图片对象。
src_r | const rect_t* | 要旋转并拷贝的区域。
dx | xy_t | 目标位置的x坐标。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
dy | xy_t | 目标位置的y坐标。（坐标原点为旋转后的坐标系原点，并非是 dst 的左上角）
o | lcd_orientation_t | 旋转角度(一般支持90度即可，旋转方向为逆时针)。

window_cast 函数

  • 函数功能：

转换为window对象(供脚本语言使用)。

  • 函数原型：
widget_t* window_cast (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | window对象。
widget | widget_t* | window对象。

window_close 函数

  • 函数功能：

关闭窗口。

  • 函数原型：
ret_t window_close (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window对象。

window_close_force 函数

  • 函数功能：

立即无条件关闭窗口(无动画)。

  • 函数原型：
ret_t window_close_force (widget_t* widget);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window对象。

window_create 函数

  • 函数功能：

创建window对象

  • 函数原型：
widget_t* window_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
parent | widget_t* | 父控件
x | xy_t | x坐标
y | xy_t | y坐标
w | wh_t | 宽度
h | wh_t | 高度

window_create_default 函数

  • 函数功能：

以缺省的方式创建window对象。

  • 函数原型：
widget_t* window_create_default ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。

window_get_widget_vtable 函数

  • 函数功能：

获取 window 虚表。

  • 函数原型：
const widget_vtable_t* window_get_widget_vtable ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | const widget_vtable_t* | 成功返回 window 虚表。

window_open 函数

  • 函数功能：

从资源文件中加载并创建window_base对象。本函数在ui_loader/ui_builder_default里实现。

  • 函数原型：
widget_t* window_open (const char* name);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
name | const char* | window的名称。

window_open_and_close 函数

  • 函数功能：

从资源文件中加载并创建window对象。本函数在ui_loader/ui_builder_default里实现。

  • 函数原型：
widget_t* window_open_and_close (const char* name, widget_t* to_close);
  • 参数说明：
参数 | 类型 | 说明
返回值 | widget_t* | 对象。
name | const char* | window的名称。
to_close | widget_t* | 关闭该窗口。

window_set_auto_scale_children 函数

  • 函数功能：

当设计分辨率和实际分辨率不一致时，自动调整子控件的位置和大小。

当子控件有self_layout参数或者子控件的父控件有children_layout参数时，不会自动调整。

  • 函数原型：
ret_t window_set_auto_scale_children (widget_t* widget, uint32_t design_w, uint32_t design_h);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window对象。
design_w | uint32_t | 设计时宽度。
design_h | uint32_t | 设计时高度。

window_set_fullscreen 函数

  • 函数功能：

设置为全屏窗口。

如果app_type是SIMULATOR，全屏是指与LCD相同大小，而非让SDL窗口全屏。

  • 函数原型：
ret_t window_set_fullscreen (widget_t* widget, bool_t fullscreen);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
widget | widget_t* | window对象。
fullscreen | bool_t | 是否全屏。

fullscreen 属性

是否全屏。

对于模拟器，全屏是让窗口和LCD具有相同大小，而非让SDL窗口全屏。

  • 类型：bool_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否
可持久化 | 是
可脚本化 | 是
可在IDE中设置 | 是
可在XML中设置 | 是
可通过widget_get_prop读取 | 是
可通过widget_set_prop修改 | 是


wstr_t

概述

可变长度的宽字符字符串。

示例：

wstr_t s;
wstr_init(&s, 0);

wstr_append(&s, L"abc");
wstr_append(&s, L"123");

wstr_reset(&s);

> 先调wstr_init进行初始化，最后调用wstr_reset释放内存。

函数

函数名称 | 说明
wstr_add_float | 将字符串转成浮点数，加上delta，再转换回来。
wstr_append | 追加字符串。
wstr_append_int | 追加整数到字符串。
wstr_append_more | 追加多个字符串。以NULL结束。
wstr_append_with_len | 追加字符串。
wstr_attach | 通过附加到一个buff来初始化str。
wstr_clear | 清除字符串内容。
wstr_count_char | 统计指定字符的个数。
wstr_create | 创建str对象。
wstr_destroy | 销毁str对象。
wstr_eq | 判断两个字符串是否相等。
wstr_equal | 判断两个字符是否相同。
wstr_from_float | 用浮点数初始化字符串。
wstr_from_int | 用整数初始化字符串。
wstr_from_int64 | 用整数初始化字符串。
wstr_from_value | 用value初始化字符串。
wstr_get_utf8 | 获取UTF8字符串。
wstr_init | 初始化字符串对象。
wstr_insert | 在指定位置插入字符串。
wstr_normalize_newline | 规范化换行符。
wstr_pop | 删除尾部字符。
wstr_push | 追加一个字符。
wstr_push_int | 追加一个整数。
wstr_remove | 删除指定范围的字符。
wstr_reset | 重置字符串为空。
wstr_set | 设置字符串。
wstr_set_utf8 | 设置UTF8字符串。
wstr_set_utf8_with_len | 设置UTF8字符串。
wstr_set_with_len | 设置字符串。
wstr_to_float | 将字符串转成浮点数。
wstr_to_int | 将字符串转成整数。
wstr_to_int64 | 将字符串转成整数。
wstr_trim_float_zero | 去掉浮点数小数点尾部的零。

属性

属性名称 | 类型 | 说明
capacity | uint32_t | 容量。
size | uint32_t | 长度。
str | wchar_t* | 字符串。

wstr_add_float 函数

  • 函数功能：

将字符串转成浮点数，加上delta，再转换回来。

  • 函数原型：
ret_t wstr_add_float (wstr_t* str, double delta);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
delta | double | 要加上的值。

wstr_append 函数

  • 函数功能：

追加字符串。

  • 函数原型：
ret_t wstr_append (wstr_t* str, const wchar_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const wchar_t* | 要追加的字符串。

wstr_append_int 函数

  • 函数功能：

追加整数到字符串。

  • 函数原型：
ret_t wstr_append_int (wstr_t* str, int32_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | int32_t | 整数。

wstr_append_more 函数

  • 函数功能：

追加多个字符串。以NULL结束。

示例：

wstr_t s;
wstr_init(&s, 0);

wstr_append_more(&s, L"abc", L"123", NULL);
log_debug("%s\n", s.str);

wstr_reset(&s);
  • 函数原型：
ret_t wstr_append_more (wstr_t* str, const wchar_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const wchar_t* | 要追加的字符串。

wstr_append_with_len 函数

  • 函数功能：

追加字符串。

  • 函数原型：
ret_t wstr_append_with_len (wstr_t* str, const wchar_t* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const wchar_t* | 要追加的字符串。
len | uint32_t | 字符串长度。

wstr_attach 函数

  • 函数功能：

通过附加到一个buff来初始化str。 可以避免str动态分配内存，同时也不会自动扩展内存，使用完成后无需调用str_reset。

wstr_t s;
wchar_t buff[32];
wstr_attach(&s, buff, ARRAY_SIZE(buff));
wstr_set(&s, L"abc");
wstr_append(&s, L"123");
  • 函数原型：
wstr_t* wstr_attach (wstr_t* str, wchar_t* buff, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wstr_t* | str对象本身。
str | wstr_t* | str对象。
buff | wchar_t* | 缓冲区。
capacity | uint32_t | 初始容量。

wstr_clear 函数

  • 函数功能：

清除字符串内容。

  • 函数原型：
ret_t wstr_clear (wstr_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。

wstr_count_char 函数

  • 函数功能：

统计指定字符的个数。

  • 函数原型：
uint32_t wstr_count_char (wstr_t* str, wchar_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | uint32_t | 返回指定字符的个数。
str | wstr_t* | str对象。
c | wchar_t | 字符。

wstr_create 函数

  • 函数功能：

创建str对象。 备注：最后调用wstr_destroy释放内存

  • 函数原型：
wstr_t* wstr_create (uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wstr_t* | str对象。
capacity | uint32_t | 初始容量。

wstr_destroy 函数

  • 函数功能：

销毁str对象。

  • 函数原型：
ret_t wstr_destroy (wstr_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。

wstr_eq 函数

  • 函数功能：

判断两个字符串是否相等。

  • 函数原型：
bool_t wstr_eq (wstr_t* str, const wchar_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回是否相等。
str | wstr_t* | str对象。
text | const wchar_t* | 待比较的字符串。

wstr_equal 函数

  • 函数功能：

判断两个字符是否相同。

  • 函数原型：
bool_t wstr_equal (wstr_t* str, wstr_t* other);
  • 参数说明：
参数 | 类型 | 说明
返回值 | bool_t | 返回TRUE表示相同，否则表示不同。
str | wstr_t* | str对象。
other | wstr_t* | str对象。

wstr_from_float 函数

  • 函数功能：

用浮点数初始化字符串。

  • 函数原型：
ret_t wstr_from_float (wstr_t* str, double v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | double | 浮点数。

wstr_from_int 函数

  • 函数功能：

用整数初始化字符串。

  • 函数原型：
ret_t wstr_from_int (wstr_t* str, int32_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | int32_t | 整数。

wstr_from_int64 函数

  • 函数功能：

用整数初始化字符串。

  • 函数原型：
ret_t wstr_from_int64 (wstr_t* str, int64_t v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | int64_t | 整数。

wstr_from_value 函数

  • 函数功能：

用value初始化字符串。

  • 函数原型：
ret_t wstr_from_value (wstr_t* str, const value_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | const value_t* | value。

wstr_get_utf8 函数

  • 函数功能：

获取UTF8字符串。

  • 函数原型：
ret_t wstr_get_utf8 (wstr_t* str, char* text, uint32_t size);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | char* | 返回的字符串。
size | uint32_t | text最大长度。

wstr_init 函数

  • 函数功能：

初始化字符串对象。 备注：最后调用wstr_reset释放内存

  • 函数原型：
wstr_t* wstr_init (wstr_t* str, uint32_t capacity);
  • 参数说明：
参数 | 类型 | 说明
返回值 | wstr_t* | str对象本身。
str | wstr_t* | str对象。
capacity | uint32_t | 初始容量。

wstr_insert 函数

  • 函数功能：

在指定位置插入字符串。

  • 函数原型：
ret_t wstr_insert (wstr_t* str, uint32_t offset, const wchar_t* text, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
offset | uint32_t | 指定的位置。
text | const wchar_t* | 待插入的文本。
nr | uint32_t | 要插入的字符数。

wstr_normalize_newline 函数

  • 函数功能：

规范化换行符。

  • 函数原型：
ret_t wstr_normalize_newline (wstr_t* str, wchar_t newline);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
newline | wchar_t | 换行符。

wstr_pop 函数

  • 函数功能：

删除尾部字符。

  • 函数原型：
ret_t wstr_pop (wstr_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。

wstr_push 函数

  • 函数功能：

追加一个字符。

  • 函数原型：
ret_t wstr_push (wstr_t* str, const wchar_t c);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
c | const wchar_t | 字符。

wstr_push_int 函数

  • 函数功能：

追加一个整数。

  • 函数原型：
ret_t wstr_push_int (wstr_t* str, const char* format, int32_t value);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
format | const char* | 格式(用于snprintf格式化数值)
value | int32_t | 数值。

wstr_remove 函数

  • 函数功能：

删除指定范围的字符。

  • 函数原型：
ret_t wstr_remove (wstr_t* str, uint32_t offset, uint32_t nr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
offset | uint32_t | 指定的位置。
nr | uint32_t | 要删除的字符数。

wstr_reset 函数

  • 函数功能：

重置字符串为空。

  • 函数原型：
ret_t wstr_reset (wstr_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。

wstr_set 函数

  • 函数功能：

设置字符串。

  • 函数原型：
ret_t wstr_set (wstr_t* str, const wchar_t* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const wchar_t* | 要设置的字符串。

wstr_set_utf8 函数

  • 函数功能：

设置UTF8字符串。

  • 函数原型：
ret_t wstr_set_utf8 (wstr_t* str, const char* text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const char* | 要设置的字符串。

wstr_set_utf8_with_len 函数

  • 函数功能：

设置UTF8字符串。

  • 函数原型：
ret_t wstr_set_utf8_with_len (wstr_t* str, const char* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const char* | 要设置的字符串。
len | uint32_t | 长度。

wstr_set_with_len 函数

  • 函数功能：

设置字符串。

  • 函数原型：
ret_t wstr_set_with_len (wstr_t* str, const wchar_t* text, uint32_t len);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
text | const wchar_t* | 要设置的字符串。
len | uint32_t | 字符串长度。

wstr_to_float 函数

  • 函数功能：

将字符串转成浮点数。

  • 函数原型：
ret_t wstr_to_float (wstr_t* str, double* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | double* | 用于返回浮点数。

wstr_to_int 函数

  • 函数功能：

将字符串转成整数。

  • 函数原型：
ret_t wstr_to_int (wstr_t* str, int32_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | int32_t* | 用于返回整数。

wstr_to_int64 函数

  • 函数功能：

将字符串转成整数。

  • 函数原型：
ret_t wstr_to_int64 (wstr_t* str, int64_t* v);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。
v | int64_t* | 用于返回整数。

wstr_trim_float_zero 函数

  • 函数功能：

去掉浮点数小数点尾部的零。

  • 函数原型：
ret_t wstr_trim_float_zero (wstr_t* str);
  • 参数说明：
参数 | 类型 | 说明
返回值 | ret_t | 返回RET_OK表示成功，否则表示失败。
str | wstr_t* | str对象。

capacity 属性

容量。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

size 属性

长度。

  • 类型：uint32_t
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否

str 属性

字符串。

  • 类型：wchar_t*
特性 | 是否支持
可直接读取 | 是
可直接修改 | 否


XmlBuilder

概述

xml builder interface

函数

函数名称 | 说明
xml_builder_destroy | 销毁builder对象。
xml_builder_get_attr | 获取属性。
xml_builder_on_comment | 解析到注释时调用本函数。
xml_builder_on_end | 解析到tag结束时调用本函数。
xml_builder_on_error | 解析遇到错误时调用本函数。
xml_builder_on_pi | 解析到处理指令时调用本函数。
xml_builder_on_start | 解析到tag开始时调用本函数。
xml_builder_on_text | 解析到文本时调用本函数。

xml_builder_destroy 函数

  • 函数功能：

销毁builder对象。

  • 函数原型：
void xml_builder_destroy (XmlBuilder* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。

xml_builder_get_attr 函数

  • 函数功能：

获取属性。

  • 函数原型：
const char* xml_builder_get_attr (const char** attrs, const char* attr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回属性的值。
attrs | const char** | 属性列表。
attr | const char* | 属性名。

xml_builder_on_comment 函数

  • 函数功能：

解析到注释时调用本函数。

  • 函数原型：
void xml_builder_on_comment (XmlBuilder* builder, const char* text, size_t length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
text | const char* | 注释。
length | size_t | 注释长度。

xml_builder_on_end 函数

  • 函数功能：

解析到tag结束时调用本函数。

  • 函数原型：
void xml_builder_on_end (XmlBuilder* builder, const char* tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
tag | const char* | tag名称。

xml_builder_on_error 函数

  • 函数功能：

解析遇到错误时调用本函数。

  • 函数原型：
void xml_builder_on_error (XmlBuilder* builder, int line, int col, const char* message);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
line | int | 出现错误的行。
col | int | 出现错误的列。
message | const char* | 错误信息。

xml_builder_on_pi 函数

  • 函数功能：

解析到处理指令时调用本函数。

  • 函数原型：
void xml_builder_on_pi (XmlBuilder* builder, const char* tag, const char** attrs);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
tag | const char* | tag名称。
attrs | const char** | 属性列表。

xml_builder_on_start 函数

  • 函数功能：

解析到tag开始时调用本函数。

  • 函数原型：
void xml_builder_on_start (XmlBuilder* builder, const char* tag, const char** attrs);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
tag | const char* | tag名称。
attrs | const char** | 属性列表。

xml_builder_on_text 函数

  • 函数功能：

解析到文本时调用本函数。

  • 函数原型：
void xml_builder_on_text (XmlBuilder* builder, const char* text, size_t length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
text | const char* | 文本。
length | size_t | 文本长度。


XmlParser

概述

xml解析器

函数

函数名称 | 说明
xml_parser_create | 创建解析器。
xml_parser_destroy | 销毁parser对象。
xml_parser_parse | 解析数据。
xml_parser_parse_file | 解析文件。
xml_parser_set_builder | 设置builder。
xml_parser_set_trim_text | 设置是否去掉文本两端的空白字符。

xml_parser_create 函数

  • 函数功能：

创建解析器。

  • 函数原型：
XmlParser* xml_parser_create ();
  • 参数说明：
参数 | 类型 | 说明
返回值 | XmlParser* | 返回parser对象。

xml_parser_destroy 函数

  • 函数功能：

销毁parser对象。

  • 函数原型：
void xml_parser_destroy (XmlParser* parser);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
parser | XmlParser* | parser对象。

xml_parser_parse 函数

  • 函数功能：

解析数据。

  • 函数原型：
void xml_parser_parse (XmlParser* parser, const char* xml, int length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
parser | XmlParser* | parser对象。
xml | const char* | 数据。
length | int | 数据长度。

xml_parser_parse_file 函数

  • 函数功能：

解析文件。

  • 函数原型：
void xml_parser_parse_file (XmlParser* parser, const char* filename);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
parser | XmlParser* | parser对象。
filename | const char* | 文件名。

xml_parser_set_builder 函数

  • 函数功能：

设置builder。

  • 函数原型：
void xml_parser_set_builder (XmlParser* parser, XmlBuilder* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
parser | XmlParser* | parser对象。
builder | XmlBuilder* | builder对象。

xml_parser_set_trim_text 函数

  • 函数功能：

设置是否去掉文本两端的空白字符。

默认值为去掉文本两端的空白字符，如果不希望去掉，调用本函数设置为FALSE。

  • 函数原型：
void xml_parser_set_trim_text (XmlParser* parser, bool_t trim_text);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
parser | XmlParser* | parser对象。
trim_text | bool_t | 是否去掉文本两端的空白字符。


xml_builder_t

概述

xml builder interface

函数

函数名称 | 说明
xml_builder_destroy | 销毁builder对象。
xml_builder_get_attr | 获取属性。
xml_builder_on_comment | 解析到注释时调用本函数。
xml_builder_on_end | 解析到tag结束时调用本函数。
xml_builder_on_error | 解析遇到错误时调用本函数。
xml_builder_on_pi | 解析到处理指令时调用本函数。
xml_builder_on_start | 解析到tag开始时调用本函数。
xml_builder_on_text | 解析到文本时调用本函数。

xml_builder_destroy 函数

  • 函数功能：

销毁builder对象。

  • 函数原型：
void xml_builder_destroy (XmlBuilder* builder);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。

xml_builder_get_attr 函数

  • 函数功能：

获取属性。

  • 函数原型：
const char* xml_builder_get_attr (const char** attrs, const char* attr);
  • 参数说明：
参数 | 类型 | 说明
返回值 | const char* | 返回属性的值。
attrs | const char** | 属性列表。
attr | const char* | 属性名。

xml_builder_on_comment 函数

  • 函数功能：

解析到注释时调用本函数。

  • 函数原型：
void xml_builder_on_comment (XmlBuilder* builder, const char* text, size_t length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
text | const char* | 注释。
length | size_t | 注释长度。

xml_builder_on_end 函数

  • 函数功能：

解析到tag结束时调用本函数。

  • 函数原型：
void xml_builder_on_end (XmlBuilder* builder, const char* tag);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
tag | const char* | tag名称。

xml_builder_on_error 函数

  • 函数功能：

解析遇到错误时调用本函数。

  • 函数原型：
void xml_builder_on_error (XmlBuilder* builder, int line, int col, const char* message);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
line | int | 出现错误的行。
col | int | 出现错误的列。
message | const char* | 错误信息。

xml_builder_on_pi 函数

  • 函数功能：

解析到处理指令时调用本函数。

  • 函数原型：
void xml_builder_on_pi (XmlBuilder* builder, const char* tag, const char** attrs);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
tag | const char* | tag名称。
attrs | const char** | 属性列表。

xml_builder_on_start 函数

  • 函数功能：

解析到tag开始时调用本函数。

  • 函数原型：
void xml_builder_on_start (XmlBuilder* builder, const char* tag, const char** attrs);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
tag | const char* | tag名称。
attrs | const char** | 属性列表。

xml_builder_on_text 函数

  • 函数功能：

解析到文本时调用本函数。

  • 函数原型：
void xml_builder_on_text (XmlBuilder* builder, const char* text, size_t length);
  • 参数说明：
参数 | 类型 | 说明
返回值 | void | 返回无。
builder | XmlBuilder* | builder对象。
text | const char* | 文本。
length | size_t | 文本长度。


AWTK = Toolkit AnyWhere

中文用户请看这里

I. Introduction

AWTK , the abbreviation of Toolkit AnyWhere, is an open source GUI engine developed by ZLG. It is a cross-platform GUI engine for embedded systems, WEB, mini programs, mobile phones and PC. It is a powerful, efficient, reliable and easy-to-use GUI engine for users to design beautiful GUI applications.

Welcome developers to join us in our development:Joint Ecology Building Plan

AWTK has two implications as follows:

  • Toolkit AnyWhere.
  • As the built-in GUI of AWorksOS, which is the ZLG IoT operating system.

AWTK source code repositories:

  • Main source code repository: https://github.com/zlgopen/awtk
  • Mirrored source code repository：https://gitee.com/zlgopen/awtk
  • Stable version pack: https://pan.baidu.com/s/1_oRgj67M-I4kivk-YzwFWA Access code:1cmi

AWTK Designer - the UI design tool:

  • It is no longer necessary to write XML by yourself.
  • Design the UI by dragging and dropping. What you see is what you get.
  • Support quick preview and pack resources with one-click.
  • Registration and download: https://awtk.zlg.cn

Screenshots:

II. Ultimate Objectives

  • To support development of embedded applications.✔
  • To support development of Linux applications.✔
  • To support development of MacOS applications.✔
  • To support development of Windows applications.✔
  • To support development of Web applications.✔
  • To support development of Android applications.✔
  • To support development of iOS applications.✔
  • To support development of WeChat mini programs.
  • To support development of AliPay mini programs.
  • To support development of Baidu mini programs.
  • To support development of 2D mini games.

III. Main Features

1. Cross-platform

AWTK is a cross-platform GUI engine , which has two meanings as follows:

  • AWTK’s code is cross-platform. At present, it is compatible with platforms such as ZLG AWorksOS, Windows, Linux, MacOS, embedded Linux, Android, iOS, Web and embedded raw systems. It can be easily ported to variety of different RTOS. In the future, AWTK can be also run as mini programs.

  • In addition, AWTK has a cross-platform library of basic tools, which includes lists, arrays, strings (UTF8 and widechar), event emitters, values, objects, file system, mutex, threads, formulas and string analysis, in order that the applications you develop with AWTK can really run across platforms.

2. Efficient

AWTK ensure efficiency through the following operations:

  • Update changed parts using dirty rectangles algorithms.
  • Support 3 FrameBuffer to make the UI run at the highest frame rate (optional).
  • UI description files and theme files are stored in efficient binary formats, in order that they can be analyzed more fast.
  • Support different GPU acceleration interfaces, including OpenGL, DirectX, Vulkan and Metal and so on.
  • Support 2D acceleration interfaces of embedded platforms, such as NXP’s PXP interfaces and STM32’s DMA2D interfaces, user can easy to adapt to other acceleration interfaces.

3. Stable

AWTK makes codes as stable and reliable as possible in following ways:

  • Perform static checks using cppcheck and facebook infer.
  • Dynamically check memory with valgrind.
  • With approximately 20,000 lines of codes for unit testing.
  • With support from the powerful GUI team of ZLG.
  • Has been validated in multiple practical projects.
  • Has been validated by multiple platforms and compilers.
  • With excellent architecture design.
  • Code Review.
  • Manual test.

4. Powerful

  • Abundant widgets (being add more widgets).
  • Support multiple image formats (png/jpg/gif/svg).
  • Support multiple font formats (bitmap and vector fonts).
  • Support window animation function.
  • Support widget animation function.
  • Support HD screen.
  • Support UI layout description file.
  • Support UI theme file.
  • Support switch themes in runtime.
  • Support custom rule for widget layout.
  • Support custom rule for highlighting dialogs.
  • With many auxiliary tools.
  • Support different CPU from low-end (such as Cortex M3) to high-end.
  • Support no-filesystem platform and custom filesystem.
  • Support raw systems platform and RTOS.

5. Easy-to-use

  • With many demonstration codes.
  • With complete API document and user guide document.
  • With technical support from the powerful team of ZLG.
  • With the UI designer, which also developed with AWTK (https://awtk.zlg.cn).
  • Use declarative UI description language. user can enable widget animation, window animation, and image display (png/jpg/svg/gif) with one line code.

6. Customizable

  • Support extend custom widgets.
  • Support extend custom animations.
  • Support implement custom main loop.
  • Support extend custom soft keyboard.
  • Support extend custom image loader.
  • Support extend custom font loader.
  • Support extend custom input method engine.
  • Support extend custom layout algorithms for widgets.
  • Support extend custom rule for highlighting dialogs.
  • Support implement custom LCD interface.
  • Support extend custom vector engines (e.g.skia/cairo).
  • All extended and built-in widgets are treated the same.

7. Multiple Development Languages

AWTK is been developed in the C Program Language. Scripts in different languages can be generated by the IDL. The binding code generated not only simply mapping the C API to the target script language, but also with the native code styles of the target script language. At present, following languages are supported (More languages will be added):

  • C
  • Go
  • C++
  • lua
  • java
  • python
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. Internationalization

  • Support Unicode.
  • Support input methods.
  • Support translate strings.
  • Support translate images.
  • Support text bidirectional algorithms.

9. The MVVM framework for embedded software thoroughly separate user interfaces from business logic

  • High performances.
  • Low memory usage.
  • More thorough isolation.
  • Portable to other GUI.
  • Less codes (~5,000 lines).
  • No need for learning API of AWTK.
  • Support multiple programming languages (support C/JS at present).

For details, please see https://github.com/zlgopen/awtk-mvvm

10. Open source codes are freely available for commercial purposes (LGPL)

IV. Simulation Run

Code Downloading

  • Download with git

Git under Windows

Code Downloading

git clone https://github.com/zlgopen/awtk.git

Under Windows, codes can be downloaded by git with GUI tool.

Code Updating (in the awtk directory)

git pull

The advantage of using Git is that it is very convenient to update the code later.

  • Directly download the zip file.

Download the zip file. Once unzipped, the file shall be renamed awtk.

Mac

If nodejs, scons and sdl2 aren’t installed, please run the following command in the terminal (assuming that brew has been installed):

brew install scons sdl2 node

Compile and run (Enter the directory where awtk is and run the following command in the terminal):

scons
./bin/demoui

Ubuntu （version >=16)

If scons and the dependent software pack aren’t installed, please run the following command in the terminal:

sudo apt-get install gcc g++ scons libsndio-dev libgtk-3-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libasound2-dev libibus-1.0-dev fcitx-libs-dev git vim clang-format libharfbuzz-dev nodejs libreadline-dev

Compile and run (Enter the awtk directory and run the following command in the terminal):

scons
./bin/demoui

If it can’t be run in Ubuntu 14, please refer to FAQ.

Windows

Please install python (64-bit python shall be installed for a 64-bit system), scons and Visual Studio C++ (version>=2017) first.

If pywin32 isn’t installed, please use pip to install:

pip install pywin32

Compile and run (Enter the awtk directory and run the following command in the terminal):

Install nodejs

scons
bin\demoui

for all platforms

If PIL isn’t installed, please use pip to install:

pip install Pillow

If nodejs glob isn’t installed, please use npm to install:

npm install -g glob

V. Online Demonstration

  • Online Demonstration of Basic Widgets

  • Graphical Demonstration

  • Music Player Demonstration

  • Smart Watch Demonstration

VI. Platform Porting

  • For details, refer to the Joint Ecology Building Plan for AWTK

VII. Language Binding

  • AWTK Binding Code Generator

  • LUA Binding

  • Go Binding

  • C++ Binding

  • JAVA Binding

  • Python Binding

  • MiniJVM Binding

  • JS-Binding QuickJS

  • JS-Binding NodeJS

  • JS-Binding JerryScript

VIII. Related Projects

  • Template Project

  • MVVM Template Project

  • awtk-csv-file

  • awtk-database-repository

  • awtk-sqlite3

  • awtk-vscode-plugin

  • awtk-restful-httpd

  • Auto Test Engine

  • Regression Test

  • Demonstration Codes with C Program

  • Wonderful Examples

  • HTTP Client

  • AWTK-MVVM

  • MVC/MVVM Example Demonstration

  • Examples for Custom Widgets: Widget Generator

  • Examples for Custom Widgets: QR code

  • Examples for Custom Widgets: TinyGL

  • Examples for Custom Widgets: Number-label

  • Examples for Custom Widgets: Code Editor

  • Examples for Custom Widgets: Date Picker

  • Examples for Custom Widgets: Table View

  • Examples for Custom Widgets: Tree View

  • Examples for Custom Widgets: Shape

  • Examples for Custom Widgets: HTML View

  • Examples for Custom Widgets: ios/android like list item

  • Examples for Custom Widgets: VLabel

  • Examples for Custom Widgets: rlottie

  • Examples for Custom Widgets: rive

  • Examples for Custom Font Loader

  • Write AWTK App With ReactJS

The third party provides:

  • Examples for Custom Widgets: QR code

  • Examples for Custom Widgets: Circle Sliders

  • Examples for Custom Widgets: Gesture Lock

IX. Documentation

  • Development Docs

  • Change Logs

  • TODO

  • Beginners’ Guide and Handbook

X. Joint Ecology Building Plan

  • Joint Ecology Building Plan
  • In-depth Partners

XI. Developer Community

Welcome any interested developer to evaluate and try to use AWTK. If you have any suggestions or questions about AWTK, please add the WeChat account zlgmcu-888 to enter the AWTK communication group, and ZLG R&D team will answer them for you.


AWTK = Toolkit AnyWhere

一、介绍

AWTK 全称 Toolkit AnyWhere，是 ZLG 开发的开源 GUI 引擎，旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎，为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

欢迎广大开发者一起参与开发：生态共建计划。

AWTK 寓意有两个方面：

  • Toolkit AnyWhere。
  • ZLG 物联网操作系统 AWorksOS 内置 GUI。

AWTK 源码仓库：

  • 主源码仓库：https://github.com/zlgopen/awtk
  • 镜像源码仓库：https://gitee.com/zlgopen/awtk
  • 稳定版整合包：https://pan.baidu.com/s/1_oRgj67M-I4kivk-YzwFWA 提取码：1cmi

AWTK Designer 界面设计工具：

  • 不再需要手写 XML
  • 拖拽方式设计界面，所见即所得
  • 快速预览，一键打包资源
  • 注册及下载地址：https://awtk.zlg.cn

运行效果截图：

二、最终目标：

  • 支持开发嵌入式应用程序。✔
  • 支持开发 Linux 应用程序。✔
  • 支持开发 MacOS 应用程序。✔
  • 支持开发 Windows 应用程序。✔
  • 支持开发 Web APP。✔
  • 支持开发 Android 应用程序。✔
  • 支持开发 iOS 应用程序。✔
  • 支持开发微信小程序。
  • 支持开发支付宝小程序。
  • 支持开发百度小程序。
  • 支持开发 2D 小游戏。

三、主要特色

1. 跨平台

AWTK 是跨平台的，这有两个方面的意思：

  • AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、iOS、Web 和嵌入式裸系统，可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序平台上运行。

  • AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar)，事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等，让你用 AWTK 开发的应用程序可以真正跨平台运行。

2. 高效

AWTK 通过一系列的手段保证 AWTK 应用程序高效运行：

  • 通过脏矩算法只更新变化的部分。
  • 支持 3 FrameBuffer 让界面以最高帧率运行 （可选）。
  • UI 描述文件和窗体样式文件使用高效的二进制格式，解析在瞬间完成。
  • 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
  • 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口，厂家可以轻松扩展自己的加速接口。

3. 稳定

AWTK 通过下列方式极力让代码稳定可靠：

  • 使用 cppcheck 和 facebook infer 进行静态检查。
  • 使用 valgrind 进行动态内存检查。
  • 近两万行的单元测试代码。
  • ZLG 强大 GUI 团队的支持。
  • 经过多个实际项目验证。
  • 多平台 / 多编译器验证。
  • 优秀的架构设计。
  • Code Review。
  • 手工测试。

4. 强大

  • 丰富的控件 （持续增加中）。
  • 支持各种图片格式 (png/jpg/gif/svg)。
  • 支持各种字体格式 （点阵和矢量）。
  • 支持窗口动画。
  • 支持控件动画。
  • 支持高清屏。
  • 支持界面描述文件。
  • 支持窗体样式描述文件。
  • 主题切换实时生效。
  • 支持控件布局策略。
  • 支持对话框高亮策略。
  • 丰富的辅助工具。
  • 支持从低端的 Cortex M3 到各种高端 CPU。
  • 支持无文件系统和自定义的文件系统。
  • 支持裸系统和 RTOS。
  • 支持事件录制与重放进行压力测试。
  • 支持 Appium 进行全自动化 UI 测试。

5. 易用

  • 大量的示例代码。
  • 完善的 API 文档和使用文档。
  • ZLG 强大的技术支持团队。
  • 用 AWTK 本身开发的 界面编辑器。
  • 声明式的界面描述语言。一行代码启用控件动画，启用窗口动画，显示图片 (png/jpg/svg/gif)。

6. 高度扩展性

  • 可以扩展自己的控件。
  • 可以扩展自己的动画。
  • 可以实现自己的主循环。
  • 可以扩展自己的软键盘。
  • 可以扩展自己的图片加载器。
  • 可以扩展自己的字体加载器。
  • 可以扩展自己的输入法引擎。
  • 可以扩展自己的控件布局算法。
  • 可以扩展自己的对话框高亮策略。
  • 可以实现自己的 LCD 接口。
  • 可以扩展自己的矢量引擎 （如使用 skia/cairo)。
  • 所有扩展组件和内置组件具有相同的待遇。

7. 多种开发语言

AWTK 本身是用 C 语言开发的，可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言，而是生成脚本语言原生代码风格的 API。目前支持以下语言 （以后根据需要增加）：

  • C
  • Go
  • C++
  • lua
  • java
  • python
  • Javascript on jerryscript
  • Javascript on nodejs
  • Javascript on quickjs

8. 国际化

  • 支持 Unicode。
  • 支持输入法。
  • 支持字符串翻译 （实时生效）。
  • 支持图片翻译 （实时生效）。
  • 文字双向排版。

9. 为嵌入式软件定制的 MVVM 框架，彻底分离用户界面和业务逻辑。

  • 性能高。
  • 内存开销小。
  • 隔离更彻底。
  • 可移植到其它 GUI。
  • 代码小 (~5000 行）。
  • 无需学习 AWTK 控件本身的 API。
  • 支持多种编程语言（目前支持 C/JS)。

详情请参考：https://github.com/zlgopen/awtk-mvvm

10. 开放源码，免费商用 (LGPL)。

欢迎对照 《GUI 引擎评价指标》 进行评测。

四、模拟运行：

下载代码

  • 用 git 下载

Windows 下的 git

下载代码

git clone https://github.com/zlgopen/awtk.git

国内用户推荐使用：https://hub.fastgit.org/zlgopen/awtk.git

Windows 下可以用带 GUI 的 git 下载代码。

更新代码（在 awtk 目录下运行）

git pull

用 git 下载代码的好处是以后更新代码非常快。

  • 直接下载 zip 文件

下载 zip 文件。解压之后需要把文件夹改名为 awtk。

Mac

如果没有安装 nodejs, scons 和 sdl2，请在终端运行下面的命令 （假定已安装 brew)：

brew install scons sdl2 node

编译运行 （在终端下，进入 awtk 所在的目录，并运行下列命令）：

scons
./bin/demoui

Ubuntu （版本 >=16)

如果没有安装 scons 和依赖的软件包，请在终端运行下面的命令：

sudo apt-get install gcc g++ scons libsndio-dev libgtk-3-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libasound2-dev libibus-1.0-dev fcitx-libs-dev git vim clang-format libharfbuzz-dev nodejs libreadline-dev

编译运行 （在终端下，进入 awtk 所在的目录，并运行下列命令）：

scons
./bin/demoui

在 Ubuntu 14 上无法启动，请参考 FAQ 修改。

Windows

请先安装 python(64 位系统要安装 64 位版本的 python)，scons 和 Visual Studio C++（版本 >=2017)

如果没有安装 pywin32，请 pip 安装：

pip install pywin32

如果没有安装nodejs，请到 nodejs下载并安装。

编译运行 （在命令行模式下，进入 awtk 所在的目录，并运行下列命令）：

scons
bin\demoui

所有平台

  • 如果 PIL 没有安装，请用 pip 安装：
pip install Pillow
  • 如果 glob 没有安装，请用 npm 安装：
npm install -g glob

五、在线演示

  • 基本控件在线演示

  • 图表演示

  • 音乐播放器演示

  • 智能手表演示

六、各个平台的移植

  • 详见 AWTK 生态共建计划

七、各语言的绑定

  • AWTK 绑定代码生成器

  • LUA 绑定

  • Go 绑定

  • C++ 绑定

  • JAVA 绑定

  • Python 绑定

  • MiniJVM 绑定

  • JS 绑定之 QuickJS

  • JS 绑定之 NodeJS

  • JS 绑定之 JerryScript

八、相关工程

  • 模板工程

  • MVVM 模板工程

  • CSV文件操作

  • 数据库Repository

  • Sqlite 基于 AWTK 的移植

  • VSCode实时预览插件

  • 为嵌入式平台开发的RESTful的Web服务

  • 自动测试引擎

  • 回归测试

  • C 示例代码

  • 精彩示例

  • HTTP 客户端库

  • AWTK-MVVM

  • MVC/MVVM 演示示例

  • 扩展控件实例：控件代码生成器

  • 扩展控件实例：二维码

  • 扩展控件实例：TinyGL

  • 扩展控件实例：数值标签

  • 扩展控件实例：代码编辑器

  • 扩展控件实例：日期选择器

  • 扩展控件实例：表格视图

  • 扩展控件实例：树形视图

  • 扩展控件实例: Shape

  • 扩展控件实例：HTML 视图

  • 扩展控件实例：垂直文本

  • 扩展控件实例：仿微信列表项

  • 扩展控件实例：Lottie动画

  • 扩展控件实例：Rive动画

  • 自定义字体加载器：加载部分字体

  • 用reactjs开发AWTK应用程序

第三方提供：

  • 扩展控件实例：二维码

  • 扩展控件实例：圆形滑块

  • 扩展控件实例：手势密码控件

九、文档

  • 开发文档

  • 最新动态

  • 任务完成情况

  • 入门指南与手册

十、生态共建计划

  • 生态共建计划
  • 深度合作伙伴

十一、开发者交流群

欢迎感兴趣的工程师评估和尝试 AWTK，如果您对 AWTK 有相关建议或疑问，可以添加小Z微信（zlgmcu-888）进入 AWTK 开发者交流群，ZLG 研发技术团队亲自为您解答。


awtk+sha.c998e836f

Date: 2023-10-18 15:53:56 +0800