diff --git a/docs/applet.md b/docs/applet.md
index fd3a2a9a2..89eb3644c 100644
--- a/docs/applet.md
+++ b/docs/applet.md
@@ -6,7 +6,9 @@ AWTK 应用程序通常是一个单体的应用程序,里面所有的窗口都
## 1. 使用方法
-### 1.1 设置小应用程序 (applet) 资源所在的根目录(所有的小应用程序 (applet) 的资源都安装到该目录下)。
+### 1.1 设置小应用程序 (applet) 资源所在的根目录
+
+**所有的小应用程序 (applet) 的资源都安装到该目录下。**
```c
/**
diff --git a/docs/awtk_project_description_file.md b/docs/awtk_project_description_file.md
index e81a78df7..7ee16ef27 100644
--- a/docs/awtk_project_description_file.md
+++ b/docs/awtk_project_description_file.md
@@ -235,8 +235,6 @@ usesSdk 是可选的,表示项目依赖的SDK的信息。
> 使用 scons 进行编译时,可以通过 AWTK_ROOT 参数手动设置 AWTK 的路径,比如:
-```cmd
+```bash
scons AWTK_ROOT=c:/AWTK/SDK/awtk
```
-
-
diff --git a/docs/binding_custom_widget.md b/docs/binding_custom_widget.md
index a8a2f8c55..3e44f4291 100644
--- a/docs/binding_custom_widget.md
+++ b/docs/binding_custom_widget.md
@@ -45,7 +45,7 @@ scons -j2
cd -
```
-### 5. 更新绑定代码
+## 5. 更新绑定代码
```
git clone https://github.com/zlgopen/awtk-binding
@@ -54,7 +54,7 @@ cd awtk-binding
cd -
```
-### 6. 同步绑定代码到需要的语言
+## 6. 同步绑定代码到需要的语言
```
git clone https://github.com/zlgopen/awtk-jerryscript
@@ -63,7 +63,7 @@ cd awtk-jerryscript
scons
```
-### 7. 注意
+## 7. 注意
* 开发应用程序时记得拷贝自定义控件的 style 到资源中。
* 如果代码下载太慢,可以从 fastgit 下载。
diff --git a/docs/changes.md b/docs/changes.md
index 85977416e..83b83b8b6 100644
--- a/docs/changes.md
+++ b/docs/changes.md
@@ -1,6 +1,7 @@
# 最新动态
2022/07/05
+ * 完善文档(感谢雨欣提供补丁)
* 支持独立可以安装的applet,让它们具有独立的资源目录。
* 增加文档[支持可独立安装的小应用程序 (applet)](applet.md)
diff --git a/docs/conf_doc.md b/docs/conf_doc.md
index 71e73c8a8..a628742a1 100644
--- a/docs/conf_doc.md
+++ b/docs/conf_doc.md
@@ -245,7 +245,7 @@ tk_object_t* conf_xml_load(const char* url, bool_t create_if_not_exist);
ret_t conf_xml_save_as(tk_object_t* obj, const char* url);
```
-## 3.3 INI 格式
+### 3.3 INI 格式
* 打开
diff --git a/docs/debug_tips.md b/docs/debug_tips.md
index 8d0e1d890..51570762e 100644
--- a/docs/debug_tips.md
+++ b/docs/debug_tips.md
@@ -4,7 +4,7 @@
## 一、输入设备相关问题
-### 1. 指针设备问题的检查列表:
+### 1.1 指针设备问题的检查列表:
* 设备名称是否正确。
* 电阻屏是否校准。
@@ -12,7 +12,7 @@
## 二、显示相关问题
-### 1. 图片颜色不正常的检查列表:
+### 2.1 图片颜色不正常的检查列表:
* LCD 的格式是否正确。
* 图片格式是否正确。
diff --git a/docs/event_recorder_player.md b/docs/event_recorder_player.md
index 050f34a9b..fbd6e8631 100644
--- a/docs/event_recorder_player.md
+++ b/docs/event_recorder_player.md
@@ -8,7 +8,7 @@
* 长时间运行进行压力测试。
* 辅助手工测试。有时出现崩溃的 BUG 时,往往忘记之前是如何操作的了,输入事件记录与重放可以精确重现问题。同时也可以减轻手工测试的工作量。
-## 2.API
+## 2. API
```c
/**
diff --git a/docs/framebuffer.md b/docs/framebuffer.md
index 95d7011fd..fa99056b6 100644
--- a/docs/framebuffer.md
+++ b/docs/framebuffer.md
@@ -1,6 +1,6 @@
## FrameBuffer 的几种使用方式
-### 一、单 framebuffer。
+### 一、单 framebuffer
系统中只有一个 framebuffer,LCD 使用该 framebuffer 进行显示,GUI 使用该 framebuffer 进行绘制。
@@ -16,7 +16,9 @@
> 如果硬件能够解决动画颜色不正常的问题或者不需要动画,这种方式是最好的选择。
-### 二、双 framebuffer,一个 online 一个 offline,轮流切换显示。
+### 二、双 framebuffer(Swap)
+
+系统有两个 framebuffer,一个 online 一个 offline,轮流切换显示
* 1.GUI 在 offline 的 framebuffer 上绘制。
* 2.LCD 显示 online 的 framebuffer。
@@ -32,7 +34,9 @@
* GUI 每次都需要进行完整的绘制,不能只绘制变化的部分。
-### 三、双 framebuffer,一个固定 online 供 LCD 显示,一个固定 offline 供 GUI 绘制。
+### 三、双 framebuffer(Flush)
+
+系统有两个 framebuffer,一个固定 online 供 LCD 显示,一个固定 offline 供 GUI 绘制。

@@ -44,7 +48,9 @@
* 窗口动画时,可能整个屏幕都在变化,所以拷贝的量比较大。优化方法:对于平移的动画,可以让 GUI 直接往 online 的 framebuffer 上绘制,减少一次内存拷贝,而且不会出现闪烁。
-### 四、三个 framebuffer,一个 online 供 LCD 显示,一个 offline 供 GUI 绘制,一个为下一个要显示的 framebuffer。
+### 四、三个 framebuffer
+
+系统有三个 framebuffer,一个 online 供 LCD 显示,一个 offline 供 GUI 绘制,一个为下一个要显示的 framebuffer。

diff --git a/docs/fscript.md b/docs/fscript.md
index ef90bcccf..929bcb735 100644
--- a/docs/fscript.md
+++ b/docs/fscript.md
@@ -1451,9 +1451,9 @@ clamp(2, 1, 3)
### 4.5 时间函数
> 已经移动到扩展模块。
-### 5. 自定义函数
+## 5. 自定义函数
-#### 5.1 定义函数
+### 5.1 定义函数
```c
static ret_t func_foo(object_t* obj, fscript_args_t* args, value_t* v) {
@@ -1463,7 +1463,7 @@ static ret_t func_foo(object_t* obj, fscript_args_t* args, value_t* v) {
}
```
-#### 5.2 注册和使用私有函数
+### 5.2 注册和使用私有函数
```c
value_t v;
@@ -1476,7 +1476,7 @@ static ret_t func_foo(object_t* obj, fscript_args_t* args, value_t* v) {
OBJECT_UNREF(obj);
```
-#### 5.3 注册全局函数
+### 5.3 注册全局函数
* 初始化时调用
@@ -1485,7 +1485,7 @@ fscript_register_func("foo", func_foo);
```
-#### 5.4 定义脚本函数
+### 5.4 定义脚本函数
* 函数定义
@@ -1535,7 +1535,7 @@ assert(foo4(10, 20) == 'awtk')
assert(foo4(100, 200) == 'react-awtk')
```
-### 6. 性能测量与优化
+## 6. 性能测量与优化
runFScript 的第二个参数可以指定运行次数,方便测量某个函数的运行时间。
@@ -1553,7 +1553,7 @@ runFScript 的第二个参数可以指定运行次数,方便测量某个函数
./bin/runFScript 'set(a, 2); set(b, 3); print(a+b)'
```
-### 7. 扩展模块
+## 7. 扩展模块
* [字符串扩展模块](fscript_str.md)
* [位操作扩展模块](fscript_bits.md)
@@ -1579,6 +1579,6 @@ runFScript 的第二个参数可以指定运行次数,方便测量某个函数
* [读缓冲区扩展模块](fscript_rbuffer.md)
* [module扩展模块](fscript_module.md)
-### 8. 更多示例
+## 8. 更多示例
请参考 tests/fscripts 目录。
diff --git a/docs/fscript_crc.md b/docs/fscript_crc.md
index f0412028b..5b45485e3 100644
--- a/docs/fscript_crc.md
+++ b/docs/fscript_crc.md
@@ -59,7 +59,7 @@ cksum(binary) => uint16_t
cksum("hello")
```
-### 4. 更多示例
+### 更多示例
```js
//test string
diff --git a/docs/fscript_ram_req.md b/docs/fscript_ram_req.md
index 4df26f8c1..4d50ed8c2 100644
--- a/docs/fscript_ram_req.md
+++ b/docs/fscript_ram_req.md
@@ -1,6 +1,6 @@
# fscript 内存需求评估
-## 一、测试环境
+## 1. 测试环境
测试使用的 AWTK 版本:AWTKv1.7,SHA-1: 5f570df4fc42a5a0050bae1d2fe8f99d6aa42532。
@@ -20,7 +20,7 @@
> 备注:以下测试均为无 GUI 界面的结果,即只跑 fscript 脚本。
-## 二、推荐的栈堆大小
+## 2. 推荐的栈堆大小
fscript **最低的栈(Stack)需求为 1.5 KB,最低的堆需求为 4 KB**,以上内存仅够初始化 fscript 基础模块和扩展模块,脚本代码只能做简单的运算以及打印信息。
@@ -67,7 +67,7 @@ fscript **最低的栈(Stack)需求为 1.5 KB,最低的堆需求为 4 KB**
3. 使用 if else 条件判断或 while 循环时,堆栈大小请根据条件分支数量以及循环次数适当调整;
4. 函数嵌套调用时,会消耗较多的堆栈空间,请尽量避免使用。
-## 三、堆空间的计算
+## 3. 堆空间的计算
### 3.1 fscript 本身所需的 Heap
@@ -104,7 +104,7 @@ fscript 初始化所需的 Heap 详见下表:
在 fscript 脚本中自定义函数(无参数、无返回值、无执行代码)内存(Heap)峰值会增加 350 字节左右。如果有传入参数以及返回值,请参考 3.2 章节计算内存。调用自定义函数与嵌套调用时消耗的内存与 fscript 内置函数一样。
-## 四、堆栈计算示例
+## 4. 堆栈计算示例
比如,我们需要计算以下 fscript 脚本所需的堆栈空间,步骤如下:
diff --git a/docs/how_set_app_icon.md b/docs/how_set_app_icon.md
index 6e4a4ecd2..440feefca 100644
--- a/docs/how_set_app_icon.md
+++ b/docs/how_set_app_icon.md
@@ -1,16 +1,17 @@
# 如何设置应用程序的图标
-## Windows
+## 1. Windows
-### 将应用程序的资源放到应用程序目录下的下列位置:
+### 1.1 将应用程序的资源放到应用程序目录下的下列位置:
```
win32_res/awtk.res
```
-### 资源的生成方法
+### 1.2 资源的生成方法
可以在awtk/win32\_res基础之上修改,也可以完全自己制作。
-### 参考
+### 1.3 参考
+
* [如何修改 Windows 下应用程序的图标](https://github.com/zlgopen/awtk/blob/master/win32_res/README.md)
diff --git a/docs/how_to_enable_bidi.md b/docs/how_to_enable_bidi.md
index b45c618fd..1eea7007d 100644
--- a/docs/how_to_enable_bidi.md
+++ b/docs/how_to_enable_bidi.md
@@ -15,7 +15,7 @@
>PC 版本默认已经定义。
- ### 2. 加入相关文件
+ ## 2. 加入相关文件
```
3rd/fribidi/fribidi-arabic.c
@@ -34,13 +34,13 @@ src/base/bidi.c
>PC 版本默认已经加。
- ### 3. 控件的 bidi 属性
+## 3. 控件的 bidi 属性
- 默认情况下,文字的方向自动确定,如果在某些情况下,需要自己指定,可以通过 bidi 属性来实现。
+默认情况下,文字的方向自动确定,如果在某些情况下,需要自己指定,可以通过 bidi 属性来实现。
- 示例:
+示例:
- ```xml
+```xml
```
diff --git a/docs/how_to_set_style_of_combo_box_item.md b/docs/how_to_set_style_of_combo_box_item.md
index fd654c2b0..f5f20d309 100644
--- a/docs/how_to_set_style_of_combo_box_item.md
+++ b/docs/how_to_set_style_of_combo_box_item.md
@@ -49,7 +49,7 @@
2. styles/default
-### 3. 高级用法
+## 3. 高级用法
在上面的用法中,所有的下拉选择框,使用相同的样式。在特殊情况下,可能需要为不同的下拉选择框指定不同的样式。此时可以使用下拉选择框的 theme\_of\_popup 属性,为其指定特别样式文件。如:
diff --git a/docs/how_to_use_fast_lcd_portrait.md b/docs/how_to_use_fast_lcd_portrait.md
index 5dc956730..7a6b1dc7d 100644
--- a/docs/how_to_use_fast_lcd_portrait.md
+++ b/docs/how_to_use_fast_lcd_portrait.md
@@ -1,19 +1,19 @@
# 如何使用高效的屏幕旋转
- 在实际的开发中,屏幕的选择会受到成本,供应商以及效果而影响,会导致横屏的应用无法使用横屏的屏幕,所以就需要高效的屏幕旋转功能来解决该问题。
+在实际的开发中,屏幕的选择会受到成本,供应商以及效果而影响,会导致横屏的应用无法使用横屏的屏幕,所以就需要高效的屏幕旋转功能来解决该问题。
- AWTK 默认提供了一种基于图像旋转的屏幕旋转功能,这一套逻辑优点是兼容性好,但是缺点就是效率比较低和吃内存。
+AWTK 默认提供了一种基于图像旋转的屏幕旋转功能,这一套逻辑优点是兼容性好,但是缺点就是效率比较低和吃内存。
- 现在提供一种全新的高效旋转机制来解决上面说的所有问题,同时保持高效(和没有旋转的运行效率几乎一样),但是由于这套机制兼容性比较差一点,对 lcd 层,vgcanvas 层和 g2d 的适配层的都有所要求,所以使用的时候需要注意一下。
+现在提供一种全新的高效旋转机制来解决上面说的所有问题,同时保持高效(和没有旋转的运行效率几乎一样),但是由于这套机制兼容性比较差一点,对 lcd 层,vgcanvas 层和 g2d 的适配层的都有所要求,所以使用的时候需要注意一下。
->新的旋转机制是一套矢量计算的旋转机制,所以在底层绘图之前需要把相关的数据通过矢量计算转换,所以对 lcd 层,vgcanvas 层和 g2d 的适配层有要求。
+> 新的旋转机制是一套矢量计算的旋转机制,所以在底层绘图之前需要把相关的数据通过矢量计算转换,所以对 lcd 层,vgcanvas 层和 g2d 的适配层有要求。
## 一、基本用法
- 由于该机制需要 lcd 层和 vgcanvas 层配合,所以如果用户是使用 AWTK 提供了的 lcd 适配层(lcd_mem_XXX_create 的函数创建的 lcd )和 vgcanvas 适配层(定义 WITH_NANOVG_AGGE 宏),则只需要定义 **WITH_FAST_LCD_PORTRAIT 宏**,以及在程序运行前调用 tk_enable_fast_lcd_portrait 函数设置开启高效屏幕旋转模式,然后在代码中调用 tk_set_lcd_orientation 函数就可以使用了。
+由于该机制需要 lcd 层和 vgcanvas 层配合,所以如果用户是使用 AWTK 提供了的 lcd 适配层(lcd_mem_XXX_create 的函数创建的 lcd )和 vgcanvas 适配层(定义 WITH_NANOVG_AGGE 宏),则只需要定义 **WITH_FAST_LCD_PORTRAIT 宏**,以及在程序运行前调用 tk_enable_fast_lcd_portrait 函数设置开启高效屏幕旋转模式,然后在代码中调用 tk_set_lcd_orientation 函数就可以使用了。
-~~~c
+```c
/* awtk_global.h */
/**
@@ -34,13 +34,13 @@ ret_t tk_set_lcd_orientation(lcd_orientation_t orientation);
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
*/
ret_t tk_enable_fast_lcd_portrait(bool_t enable);
-~~~
+```
- 但是如果用户重载 lcd 的 flush 的函数的话(主要是高效 lcd 旋转的话,在做 flush 的时候,不需要 image_rotate 调用旋转 fb 了,只需要调用 image_copy 函数直接拷贝就可以了),同时由于脏矩形的计算有所不同, 需要调用需要特殊处理一下,所以需要看一下的下面的代码说明。
+但是如果用户重载 lcd 的 flush 的函数的话(主要是高效 lcd 旋转的话,在做 flush 的时候,不需要 image_rotate 调用旋转 fb 了,只需要调用 image_copy 函数直接拷贝就可以了),同时由于脏矩形的计算有所不同, 需要调用需要特殊处理一下,所以需要看一下的下面的代码说明。
- 这里用 awtk-linux-fb 的代码来说明,如果修改用户重载的 flush 代码。
+这里用 awtk-linux-fb 的代码来说明,如果修改用户重载的 flush 代码。
-~~~c
+```c
/* awtk-linux-fb/lcd_linux/lcd_linux_fb.c */
static ret_t lcd_linux_flush(lcd_t* base, int fbid) {
@@ -69,38 +69,37 @@ static ret_t lcd_linux_flush(lcd_t* base, int fbid) {
}
/*...省略无关代码...*/
}
-~~~
+```
-#### 注意实现:
+### 1.1 注意实现
- 1. 为了可以高效贴图,所以贴图在加载到内存前就会被旋转到指定的角度了,所以使用 data 格式的位图时候需要提前调用脚本命令来生成资源。(最后一个参数为旋转角度,单位为角度,支持 0 度,90 度,180 度和 270 度)
+1. 为了可以高效贴图,所以贴图在加载到内存前就会被旋转到指定的角度了,所以使用 data 格式的位图时候需要提前调用脚本命令来生成资源。(最后一个参数为旋转角度,单位为角度,支持 0 度,90 度,180 度和 270 度)
- ~~~shell
- python .\scripts\update_res.py all x1 bgra+bgr565 0
- ~~~
+```bash
+python .\scripts\update_res.py all x1 bgra+bgr565 0
+```
- 2. 如果 data 格式的位图的旋转角度为 0 度的话,可以支持动态 lcd 旋转,但是效率会下降,而使用文件系统或者 res 格式的位图数据则不会降低效率。
+2. 如果 data 格式的位图的旋转角度为 0 度的话,可以支持动态 lcd 旋转,但是效率会下降,而使用文件系统或者 res 格式的位图数据则不会降低效率。
- 3. 在没有定义 WITH_STB_IMAGE 宏(使用 data 格式的位图数据)的情况下,并且是位图旋转角度不为 0 度的话,是**不支持程序动态旋转**,需要在程序开始前就需要设置好旋转的角度,同时旋转角度应该和资源保持一致。
+3. 在没有定义 WITH_STB_IMAGE 宏(使用 data 格式的位图数据)的情况下,并且是位图旋转角度不为 0 度的话,是**不支持程序动态旋转**,需要在程序开始前就需要设置好旋转的角度,同时旋转角度应该和资源保持一致。
- 4. 在使用的时候,需要特别注意 bitmap_t,lcd_t 和 graphic_buffer_t 类型是分为有**逻辑数据**和**真实的物理数据**的,所有的真实的物理数据只能通过接口获取,一般名称都会带有 **“physical”** 的字眼。
+4. 在使用的时候,需要特别注意 bitmap_t,lcd_t 和 graphic_buffer_t 类型是分为有**逻辑数据**和**真实的物理数据**的,所有的真实的物理数据只能通过接口获取,一般名称都会带有 **“physical”** 的字眼。
- 5. WITH_FAST_LCD_PORTRAIT 宏只是把功能增加到工程中,还需要用户自行调用 tk_enable_fast_lcd_portrait 来开启,如果没有调用 tk_enable_fast_lcd_portrait 函数的话,默认不启用,退化为以前就的 lcd 旋转方案。
+5. WITH_FAST_LCD_PORTRAIT 宏只是把功能增加到工程中,还需要用户自行调用 tk_enable_fast_lcd_portrait 来开启,如果没有调用 tk_enable_fast_lcd_portrait 函数的话,默认不启用,退化为以前就的 lcd 旋转方案。
> 如果是使用 Desiger 工具的话,第 1 点和第 3 点都以及相关函数的调用都会处理好的,用户只要注意代码中动态 lcd 旋转的问题。
-
## 二、功能移植
- 由于在某些情况下,用户会自行适配 lcd, vgcanvas 或者 g2d,所以用户需要在自行适配的层中加入相关的代码既可。
+由于在某些情况下,用户会自行适配 lcd, vgcanvas 或者 g2d,所以用户需要在自行适配的层中加入相关的代码既可。
- 在贴图的时候,需要注意的是为了高效的贴图,所以贴图在加载到内存前就会被旋转到指定的角度了(又名为已旋转的贴图),如果 vgcanvas 层不支持显示旋转后的图片的话,需要定义 **WITHOUT_FAST_LCD_PORTRAIT_FOR_IMAGE宏**,来让贴图不要旋转,如果贴图为 data 格式的位图数据话,这生成位图数据时候把 LCD_ORIENTATION 设置为 0 度。
+在贴图的时候,需要注意的是为了高效的贴图,所以贴图在加载到内存前就会被旋转到指定的角度了(又名为已旋转的贴图),如果 vgcanvas 层不支持显示旋转后的图片的话,需要定义**WITHOUT_FAST_LCD_PORTRAIT_FOR_IMAGE宏**,来让贴图不要旋转,如果贴图为 data 格式的位图数据话,这生成位图数据时候把 LCD_ORIENTATION 设置为 0 度。
> 如果使用 data 格式的位图数据的话,屏幕的旋转角度一定要和图片旋转角度一致否则会出现断言。
- 已旋转的贴图的旋转角度一般和 lcd 旋转的角度一致,为了高效贴图而不需要旋转贴图,以及以前的 bitmap->w,bitmap->h 和 bitmap->line_length 都为逻辑数据,逻辑数据则为图片原来未旋转时的数据,下列是获取位图的真实物理数据的接口:
+已旋转的贴图的旋转角度一般和 lcd 旋转的角度一致,为了高效贴图而不需要旋转贴图,以及以前的 bitmap->w,bitmap->h 和 bitmap->line_length 都为逻辑数据,逻辑数据则为图片原来未旋转时的数据,下列是获取位图的真实物理数据的接口:
-~~~c
+```c
/* awtk/base/bitmap.h */
/**
@@ -130,15 +129,15 @@ uint32_t bitmap_get_physical_width(bitmap_t* bitmap);
* @return {uint32_t} 返回图片高度。
*/
uint32_t bitmap_get_physical_height(bitmap_t* bitmap);
-~~~
+```
> 除了上述的接口,其他接口获取出来都是逻辑数据。
-### 1. LCD 层适配
+### 2.1 LCD 层适配
需要在各个的 lcd 层的绘图函数中加入坐标数据转化的机制,例如:
-~~~c
+```c
/* awtk/lcd/lcd_mem.inc */
/* 填充矩形 */
@@ -158,19 +157,18 @@ static ret_t lcd_mem_fill_rect_with_color(lcd_t* lcd, xy_t x, xy_t y, wh_t w, wh
lcd_mem_init_drawing_fb(lcd, &fb);
return image_fill(&fb, &rr, c);
}
+```
-~~~
+在 WITH_FAST_LCD_PORTRAIT 宏中,我们可以看到把填充的矩形坐标数据通过 lcd_orientation_rect_rotate_by_anticlockwise 函数转化为新的一个矩形坐标,然后再调用相关的填充函数来填充颜色。
- 在 WITH_FAST_LCD_PORTRAIT 宏中,我们可以看到把填充的矩形坐标数据通过 lcd_orientation_rect_rotate_by_anticlockwise 函数转化为新的一个矩形坐标,然后再调用相关的填充函数来填充颜色。
-
-~~~c
+```c
/* 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 中的代码)
+lcd 适配层一共需要适配下面的函数:(适配的思路可以查看 lcd_mem.inc 中的代码)
| 函数 | 作用 |
| ------------------- | ---------------- |
@@ -183,17 +181,17 @@ rect_t lcd_orientation_rect_rotate_by_anticlockwise(const rect_t* rect, lcd_orie
| get_physical_width | 获取真实物理宽度 |
| get_physical_height | 获取真实物理高度 |
- 上面的基本的适配函数,可能在实际运行的时候,还需要适配其他的函数(例如:set_orientation 函数)。
+上面的基本的适配函数,可能在实际运行的时候,还需要适配其他的函数(例如:set_orientation 函数)。
-### 2. VGCANVAS 层适配
+### 2.2 VGCANVAS 层适配
- 而 vgcanvas 层的适配和 lcd 层的适配基本是大同小异的都是适配绘图的函数就好了,但是**需要特别注意的就是贴图的旋转的问题**,因为有一些矢量画布库是不支持使用以及旋转的贴图。
+而 vgcanvas 层的适配和 lcd 层的适配基本是大同小异的都是适配绘图的函数就好了,但是**需要特别注意的就是贴图的旋转的问题**,因为有一些矢量画布库是不支持使用以及旋转的贴图。
-### 3. G2D 层适配
+### 2.3 G2D 层适配
- 而 g2d 层的适配其实主要是增加了两个适配函数:
+而 g2d 层的适配其实主要是增加了两个适配函数:
-~~~c
+```c
/* awtk/base/g2d.h */
/**
@@ -227,9 +225,8 @@ ret_t g2d_rotate_image_ex(bitmap_t* dst, bitmap_t* src, const rect_t* src_r, xy_
*/
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 旋转角度一样的话,这两个函数可以不实现。
\ No newline at end of file
+> 备注:
+> 1. 如果不实现这两个函数的话,则会调用 soft_rotate_image_ex 和 soft_blend_image_rotate 进行软件旋转绘制图片。
+> 2. g2d 层的这两个函数主要是用来处理图片旋转角度为 0 的 lcd 旋转的情况,如果可以保证图片旋转角度和 lcd 旋转角度一样的话,这两个函数可以不实现。
diff --git a/docs/how_to_use_multi_gesture.md b/docs/how_to_use_multi_gesture.md
index 403c06154..6f083a89b 100644
--- a/docs/how_to_use_multi_gesture.md
+++ b/docs/how_to_use_multi_gesture.md
@@ -20,7 +20,7 @@
#### 1.可识别手指类型
-```h
+```c
/**
* @method multi_gesture_gesture_touch_fingers_destroy
* 释放可识别手指类型的对象
@@ -54,7 +54,7 @@ ret_t multi_gesture_post_event_from_fingers(main_loop_t* loop, multi_gesture_tou
#### 2.不可识别手指类型
-```h
+```c
/**
* @method multi_gesture_gesture_touch_points_destroy
* 释放不可识别手指类型的对象
diff --git a/docs/how_to_use_packed_image.md b/docs/how_to_use_packed_image.md
index ad360ca2e..26372aed5 100644
--- a/docs/how_to_use_packed_image.md
+++ b/docs/how_to_use_packed_image.md
@@ -63,7 +63,7 @@
### 3.1 UI 文件
-```xml
+```xml
diff --git a/docs/how_to_use_stb_hyuv_to_rgb.md b/docs/how_to_use_stb_hyuv_to_rgb.md
index 4d9c26874..6a8d04446 100644
--- a/docs/how_to_use_stb_hyuv_to_rgb.md
+++ b/docs/how_to_use_stb_hyuv_to_rgb.md
@@ -7,7 +7,7 @@
开启该功能,需要定义 HAS_STB_YUV_TO_RGB_G2D 宏,然后需要实现 stbi__YCbCr_to_RGB_g2d 函数,该函数是给用户在外部写硬件转换的代码,可选定义的宏是 STB_YUV_DATA_PIXEL_BTYE,该宏是用于定义 yuv 的数据流的字节数,默认为 4 字节(32 位对齐)。
-~~~c
+```c
/**
* @method stbi__YCbCr_to_RGB_g2d
* stb 外部的硬件 YUV 转换 RGB
@@ -24,5 +24,4 @@
* @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);
-~~~
-
+```
diff --git a/docs/how_toto_use_dialog.md b/docs/how_toto_use_dialog.md
index 349c69dcf..1ac67cc91 100644
--- a/docs/how_toto_use_dialog.md
+++ b/docs/how_toto_use_dialog.md
@@ -3,7 +3,7 @@
对话框有模态和非模态两种,具体用法如下:
-## 非模态对话框
+## 一、非模态对话框
非模态对话框的使用方法与普通窗口完全一样,只是对话框的大小和位置可以改变。通常情况下,尽量使用非模态对话框。
@@ -33,7 +33,7 @@ static ret_t on_open_dialog(void* ctx, event_t* e) {
}
```
-## 模态对话框
+## 二、模态对话框
对于模态对话框,需要调用函数 dialog\_modal 等待对话框退出,dialog\_modal 函数会阻塞直到 dialog\_quit 被调用。
diff --git a/docs/lcd.md b/docs/lcd.md
index 28233688a..6a25b0fe0 100644
--- a/docs/lcd.md
+++ b/docs/lcd.md
@@ -110,7 +110,7 @@ static ret_t lcd_mem_fragment_flush(lcd_t* lcd) {
}
```
-### 3 基于 framebuffer 实现的 LCD
+### 3. 基于 framebuffer 实现的 LCD
#### 3.1 介绍
@@ -179,12 +179,12 @@ lcd_t* stm32f767_create_lcd(wh_t w, wh_t h) {
此时可以使用 lcd\_mem\_special。在 flush 函数中把数据转成目标格式,或者提交到 SPI 屏。具体实现可以参考:https://github.com/zlgopen/awtk-linux-fb/blob/master/awtk-port/lcd_mem_others.c
-### 四、基于 vgcanvas 实现的 LCD
+### 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 接口上费多少功夫。
diff --git a/docs/optimation_freetype_gray_font.md b/docs/optimation_freetype_gray_font.md
index bed7f656c..43272f577 100644
--- a/docs/optimation_freetype_gray_font.md
+++ b/docs/optimation_freetype_gray_font.md
@@ -14,7 +14,7 @@ freetype 解析矢量字体的过程是将字形关键点按照规则连线变
## 二、针对 freetype 缺陷所做优化
-### 3.1 提高 freetype 解析字体的精度
+### 2.1 提高 freetype 解析字体的精度
虽然 freetype 解析字体时精度丢失无法避免,但提高运算精度依然可以优化显示效果。
@@ -27,7 +27,7 @@ uint32_t flags = FT_LOAD_DEFAULT | FT_LOAD_RENDER | FT_LOAD_NO_AUTOHINT | FT_OUT
...
```
-### 3.2 关闭 auto\_hint
+### 2.2 关闭 auto\_hint
要了解 auto\_hint 首先需要知道什么是 hinting 。
@@ -45,4 +45,3 @@ hinting 用来优化字体显示的方法。由于屏幕像素有限,矢量字
uint32_t flags = FT_LOAD_DEFAULT | FT_LOAD_RENDER | FT_LOAD_NO_AUTOHINT | FT_OUTLINE_HIGH_PRECISION;
...
```
-
diff --git a/src/base/widget.h b/src/base/widget.h
index 0051a5f33..e77cc88be 100644
--- a/src/base/widget.h
+++ b/src/base/widget.h
@@ -429,7 +429,7 @@ struct _widget_t {
char* state;
/**
* @property {uint8_t} opacity
- * @annotation ["readable"]
+ * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* 不透明度(0-255),0完全透明,255完全不透明。
*/
uint8_t opacity;
diff --git a/win32_res/README.md b/win32_res/README.md
index 22b315db4..205847ff9 100644
--- a/win32_res/README.md
+++ b/win32_res/README.md
@@ -2,9 +2,8 @@
如果需要修改应用程序的图标,有两种方法:
-* 1. 用 VC 创建的 .res 文件代替 awtk.res,
-
-* 2. 用 [ResEdit](http://rsdt.free.fr/ResEdit-x64.7z) 直接编辑 awtk.res 文件。
+1. 用 VC 创建的 .res 文件代替 awtk.res,
+2. 用 [ResEdit](http://rsdt.free.fr/ResEdit-x64.7z) 直接编辑 awtk.res 文件。
兼容 mingw 的话:
@@ -12,9 +11,6 @@
2. 注释 rc 文件中的 #include "targetver.h" 代码
3. windres 工具重新导出 res 文件。(windres 是 mingw 提供的 exe)
-~~~cmd
+```bash
windres awtk.rc -O coff awtk.res
-~~~
-
-
-
+```