mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-29 18:48:09 +08:00
improve docs
This commit is contained in:
parent
9a6795fcaa
commit
50b8b3732a
@ -5,7 +5,7 @@
|
||||
> 本文前提:
|
||||
|
||||
* 安装 node.js
|
||||
* 安装 python
|
||||
* 安装 python 3.x
|
||||
* awtk 编译环境
|
||||
* 在 bash 中运行
|
||||
|
||||
@ -37,23 +37,7 @@ qr_register();
|
||||
}
|
||||
```
|
||||
|
||||
## 4. 更新 idl
|
||||
|
||||
```
|
||||
cd awtk/tools/idl_gen
|
||||
node index.js
|
||||
cd -
|
||||
```
|
||||
|
||||
## 5. 更新 def
|
||||
|
||||
```
|
||||
cd awtk/tools/dll_def_gen
|
||||
node index.js
|
||||
cd -
|
||||
```
|
||||
|
||||
## 6. 编译 awtk
|
||||
## 4. 编译 awtk
|
||||
|
||||
```
|
||||
cd awtk
|
||||
@ -61,7 +45,7 @@ scons -j2
|
||||
cd -
|
||||
```
|
||||
|
||||
### 7. 更新绑定代码
|
||||
### 5. 更新绑定代码
|
||||
|
||||
```
|
||||
git clone https://github.com/zlgopen/awtk-binding
|
||||
@ -70,7 +54,7 @@ cd awtk-binding
|
||||
cd -
|
||||
```
|
||||
|
||||
### 8. 同步绑定代码到需要的语言
|
||||
### 6. 同步绑定代码到需要的语言
|
||||
|
||||
```
|
||||
git clone https://github.com/zlgopen/awtk-jerryscript
|
||||
@ -79,7 +63,7 @@ cd awtk-jerryscript
|
||||
scons
|
||||
```
|
||||
|
||||
### 9. 注意
|
||||
### 7. 注意
|
||||
|
||||
* 开发应用程序时记得拷贝自定义控件的 style 到资源中。
|
||||
* 如果代码下载太慢,可以从fastgit下载。
|
||||
* 如果代码下载太慢,可以从 fastgit 下载。
|
||||
|
@ -61,4 +61,3 @@ widget_set_children_layout(w, "list_view(m=10,s=15)");
|
||||
<scroll_view name="view" x="0" y="0" w="100%" h="100%" children_layout="list_view(m=10,s=15)">
|
||||
```
|
||||
|
||||
> 在不同平台下,命令运行方式有细微差别,请自行调整。
|
||||
|
@ -1,10 +1,9 @@
|
||||
# 如何加入中文输入法
|
||||
|
||||
在示例项目中,没有加入输入法,主要是开发板的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里才有,所以需要切换字体,否则输入的字符无法显示)。
|
||||
在示例项目中,没有加入输入法,主要是开发板的 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 里才有,所以需要切换字体,否则输入的字符无法显示)。
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Code Style
|
||||
|
||||
每个人都有自己喜欢的代码风格,AWTK采用的代码风格不可能让所有人喜欢,所以AWTK提供了一个配置文件.clang-format,借助clang-format工具可以瞬间将AWTK的代码风格变成你喜欢的代码风格。
|
||||
每个人都有自己喜欢的代码风格,AWTK 采用的代码风格不可能让所有人喜欢,所以 AWTK 提供了一个配置文件。clang-format,借助 clang-format 工具可以瞬间将 AWTK 的代码风格变成你喜欢的代码风格。
|
||||
|
||||
具体做法如下:
|
||||
|
||||
## 安装clang-format工具
|
||||
## 安装 clang-format 工具
|
||||
|
||||
请参考:http://releases.llvm.org/download.html#7.0.0
|
||||
|
||||
@ -14,5 +14,4 @@
|
||||
|
||||
## 更新
|
||||
|
||||
> 支持bash的平台运行./format.sh即可。Windows平台可以在git bash里运行。
|
||||
|
||||
> 支持 bash 的平台运行。/format.sh 即可。Windows 平台可以在 git bash 里运行。
|
||||
|
@ -1,31 +1,31 @@
|
||||
# 颜色格式
|
||||
|
||||
AWTK目前支持以下颜色格式:
|
||||
AWTK 目前支持以下颜色格式:
|
||||
|
||||
* 十六机制格式。
|
||||
|
||||
RGB三个通道分别用两个十六进制的字符表示,alpha通道为0xff(即不透明)。如:
|
||||
RGB 三个通道分别用两个十六进制的字符表示,alpha 通道为 0xff(即不透明)。如:
|
||||
|
||||
```
|
||||
#ffeedd 表示R、G、B分别为0xff、0xee、0xdd
|
||||
#ffeedd 表示 R、G、B 分别为 0xff、0xee、0xdd
|
||||
```
|
||||
|
||||
* rgb(R,G,B) 格式。
|
||||
|
||||
括号中的R、G、B为0到255之间的十进制数,alpha通道为0xff(即不透明)。如:
|
||||
括号中的 R、G、B 为 0 到 255 之间的十进制数,alpha 通道为 0xff(即不透明)。如:
|
||||
|
||||
```
|
||||
rgb(100, 150, 200) 表示R、G、B分别为100、150、200
|
||||
rgb(100, 150, 200) 表示 R、G、B 分别为 100、150、200
|
||||
```
|
||||
|
||||
* rgba(R,G,B,A) 格式。
|
||||
|
||||
这是唯一支持半透明颜色的方式。
|
||||
|
||||
括号中的R、G、B为0到255之间的十进制数, A的为0到1之间的小数。如:
|
||||
括号中的 R、G、B 为 0 到 255 之间的十进制数,A 的为 0 到 1 之间的小数。如:
|
||||
|
||||
```
|
||||
rgba(100, 150, 200, 0.5) 表示R、G、B, A分别为100、150、200、0.5
|
||||
rgba(100, 150, 200, 0.5) 表示 R、G、B, A 分别为 100、150、200、0.5
|
||||
```
|
||||
|
||||
> 注意:半透明颜色填充相对于不透明颜色填充,要慢很多,请谨慎使用。
|
||||
|
@ -1,29 +1,29 @@
|
||||
# AWTK 中的一些惯例
|
||||
|
||||
#### 1.pixel格式:以各个通道在内存中存放的顺序,从低地址到高地址递增的方式命名。
|
||||
#### 1.pixel 格式:以各个通道在内存中存放的顺序,从低地址到高地址递增的方式命名。
|
||||
|
||||
>如:
|
||||
>
|
||||
>RGBA8888:表示内存地址从低到高依次为RGBA,每个通道各占一字节(8位)。
|
||||
>RGBA8888:表示内存地址从低到高依次为 RGBA,每个通道各占一字节 (8 位)。
|
||||
>
|
||||
>BGR565:表示内存地址从低到高依次为BGR,BGR三个通道分别占5位,6位和5位。
|
||||
>BGR565:表示内存地址从低到高依次为 BGR,BGR 三个通道分别占 5 位,6 位和 5 位。
|
||||
|
||||
---
|
||||
|
||||
#### 2.所有类的公开属性都是只读的,不要直接去修改它们。
|
||||
#### 2. 所有类的公开属性都是只读的,不要直接去修改它们。
|
||||
|
||||
---
|
||||
|
||||
#### 3.所有类的公开属性都可以直接读取,不提供get函数。
|
||||
#### 3. 所有类的公开属性都可以直接读取,不提供 get 函数。
|
||||
|
||||
---
|
||||
|
||||
#### 4.widget及其子类的公开属性,如果在annotation中标明支持set\_prop,那么可以在界面描述文件中,用同名属性为其指定的初始值。
|
||||
#### 4.widget 及其子类的公开属性,如果在 annotation 中标明支持 set\_prop,那么可以在界面描述文件中,用同名属性为其指定的初始值。
|
||||
|
||||
---
|
||||
|
||||
#### 5.除非特别说明,时间单位为毫秒。
|
||||
#### 5. 除非特别说明,时间单位为毫秒。
|
||||
|
||||
---
|
||||
|
||||
#### 6.除非特别说明,控件都是容器。你可以在按钮中放图片,也可以在图片中放按钮,通过组合形成更强大控件。
|
||||
#### 6. 除非特别说明,控件都是容器。你可以在按钮中放图片,也可以在图片中放按钮,通过组合形成更强大控件。
|
||||
|
@ -1,40 +1,38 @@
|
||||
# AWTK 调试技巧
|
||||
|
||||
这里收集一些调试技巧,各种疑难杂症的解决方案。请大家把遇到的问题(包括已经解决的)发到issues上,我来收集整理。谢谢
|
||||
|
||||
这里收集一些调试技巧,各种疑难杂症的解决方案。请大家把遇到的问题(包括已经解决的)发到 issues 上,我来收集整理。谢谢
|
||||
|
||||
## 一、输入设备相关问题
|
||||
|
||||
### 1.指针设备问题的检查列表:
|
||||
### 1. 指针设备问题的检查列表:
|
||||
|
||||
* 设备名称是否正确。
|
||||
* 电阻屏是否校准。
|
||||
* x/y是否需要对调或其它变换。
|
||||
* x/y 是否需要对调或其它变换。
|
||||
|
||||
## 二、显示相关问题
|
||||
|
||||
### 1.图片颜色不正常的检查列表:
|
||||
### 1. 图片颜色不正常的检查列表:
|
||||
|
||||
* LCD的格式是否正确。
|
||||
* LCD 的格式是否正确。
|
||||
* 图片格式是否正确。
|
||||
|
||||
## 三、资源相关问题
|
||||
|
||||
## 四、内存问题
|
||||
|
||||
* 1.内存出现莫名其妙的错误
|
||||
* 1. 内存出现莫名其妙的错误
|
||||
|
||||
> 通常是堆栈溢出,把栈空间修改大点试试。如果支持jpg/png,栈至少32K,如果支持gif栈至少48K。
|
||||
> 通常是堆栈溢出,把栈空间修改大点试试。如果支持 jpg/png,栈至少 32K,如果支持 gif 栈至少 48K。
|
||||
|
||||
* 2.内存泄露
|
||||
|
||||
> 如果定义宏了ENABLE\_MEM\_LEAK\_CHECK,每次内存分配都会记录分配的位置、大小和时间,并在窗口打开和关闭时,通过log\_debug显示当前未释放的内存块。根据块数的变化可以看出是否有内存泄露,并根据分配的位置可以定位泄露的位置。
|
||||
* 2. 内存泄露
|
||||
|
||||
> 如果定义宏了 ENABLE\_MEM\_LEAK\_CHECK,每次内存分配都会记录分配的位置、大小和时间,并在窗口打开和关闭时,通过 log\_debug 显示当前未释放的内存块。根据块数的变化可以看出是否有内存泄露,并根据分配的位置可以定位泄露的位置。
|
||||
|
||||
## 五、性能问题
|
||||
|
||||
性能问题的检查列表:
|
||||
性能问题的检查列表:
|
||||
|
||||
* 1.硬件加速是否启用。
|
||||
* 2.memcpy的速度是否正常。
|
||||
* 3.在window\_manager\_paint\_normal函数中查看last\_paint\_cost是否在合理的范围。
|
||||
* 1. 硬件加速是否启用。
|
||||
* 2.memcpy 的速度是否正常。
|
||||
* 3. 在 window\_manager\_paint\_normal 函数中查看 last\_paint\_cost 是否在合理的范围。
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
在弹出除对话框时,通常希望让背景窗口变暗或者变模糊,以突显当前的对话框的重要性。我们把让背景窗口变暗或者变模糊的方法称为对话框高亮策略。并把对话框高亮策略抽象成接口,开发者可以自己实现特殊效果的高亮策略,也可以使用缺省的高亮策略。
|
||||
|
||||
缺省的对话框高亮策略是让背景窗口变暗,可以是静态的(固定alpha),也可以是动态的。动态的高亮策略在对话框打开的动画过程中,背景窗口逐渐变暗,这有更好的视觉效果,但也需要更多的计算开销,开发者可以根据实际情况选用静态还是动态效果。
|
||||
缺省的对话框高亮策略是让背景窗口变暗,可以是静态的(固定 alpha),也可以是动态的。动态的高亮策略在对话框打开的动画过程中,背景窗口逐渐变暗,这有更好的视觉效果,但也需要更多的计算开销,开发者可以根据实际情况选用静态还是动态效果。
|
||||
|
||||
## 二、使用方法
|
||||
|
||||
通过对话框的hightlight属性来指定对话框的高亮策略,"default"表示缺省的对话框的高亮策略。如:
|
||||
通过对话框的 hightlight 属性来指定对话框的高亮策略,"default"表示缺省的对话框的高亮策略。如:
|
||||
|
||||
使用静态效果:
|
||||
|
||||
@ -24,24 +24,21 @@
|
||||
x="0" y="bottom" w="100%" h="160">
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 三、参数说明
|
||||
|
||||
参数其格式为[类似函数调用的参数格式](func_call_params_format.md)。 缺省的对话框高亮策略支持以下几个参数:
|
||||
参数其格式为 [类似函数调用的参数格式](func_call_params_format.md)。 缺省的对话框高亮策略支持以下几个参数:
|
||||
|
||||
* start_alpha 起始alpha值(0-255)。
|
||||
* end_alpha 结束alpha值(0-255)。
|
||||
* alpha 相当于将start\_alpha和end\_alpha设置为同一个值。
|
||||
* start_alpha 起始 alpha 值 (0-255)。
|
||||
* end_alpha 结束 alpha 值 (0-255)。
|
||||
* alpha 相当于将 start\_alpha 和 end\_alpha 设置为同一个值。
|
||||
|
||||
> 当alpha=0时,显示效果没有变化,但相当于了缓存背景窗口的绘制到图片中,从而提高显示效率,在特殊情况下可以酌情使用。
|
||||
> 当 alpha=0 时,显示效果没有变化,但相当于了缓存背景窗口的绘制到图片中,从而提高显示效率,在特殊情况下可以酌情使用。
|
||||
|
||||
## 四、自定义对话框高亮策略
|
||||
|
||||
开发者可以自定义高亮策略,自定义的高亮策略可以像内置高亮策略一样,可以用以上方法在XML文件中启用。
|
||||
开发者可以自定义高亮策略,自定义的高亮策略可以像内置高亮策略一样,可以用以上方法在 XML 文件中启用。
|
||||
|
||||
|
||||
1.实现dialog\_highlighter\_t接口。如:
|
||||
1. 实现 dialog\_highlighter\_t 接口。如:
|
||||
|
||||
```
|
||||
static const dialog_highlighter_vtable_t s_dialog_highlighter_default_vt = {
|
||||
@ -66,7 +63,7 @@ dialog_highlighter_t* dialog_highlighter_default_create(object_t* args) {
|
||||
}
|
||||
```
|
||||
|
||||
2.注册到dialog\_highlighter\_factory工厂。如:
|
||||
2. 注册到 dialog\_highlighter\_factory 工厂。如:
|
||||
|
||||
```
|
||||
dialog_highlighter_factory_register(f, DIALOG_HIGHLIGHTER_DEFAULT,
|
||||
|
@ -1,10 +1,10 @@
|
||||
# AWTK中的事件处理函数
|
||||
# AWTK 中的事件处理函数
|
||||
|
||||
emitter实现了通用的事件注册、注销和分发功能,widget对此做了进一步包装,使用起来非常方便。
|
||||
emitter 实现了通用的事件注册、注销和分发功能,widget 对此做了进一步包装,使用起来非常方便。
|
||||
|
||||
## 一、注册控件事件的处理函数
|
||||
|
||||
使用widget_on来注册事件处理函数:
|
||||
使用 widget_on 来注册事件处理函数:
|
||||
|
||||
```
|
||||
/**
|
||||
@ -16,7 +16,7 @@ emitter实现了通用的事件注册、注销和分发功能,widget对此做
|
||||
* @param {event_func_t} on_event 事件处理函数。
|
||||
* @param {void*} ctx 事件处理函数上下文。
|
||||
*
|
||||
* @return {uint32_t} 返回id,用于widget_off。
|
||||
* @return {uint32_t} 返回 id,用于 widget_off。
|
||||
*/
|
||||
uint32_t widget_on(widget_t* widget, event_type_t type, event_func_t on_event, void* ctx);
|
||||
```
|
||||
@ -48,7 +48,7 @@ widget_on(ok, EVT_CLICK, on_inc, progress_bar);
|
||||
|
||||
## 二、注销控件事件的处理函数
|
||||
|
||||
由于窗口关闭时会销毁其中所有控件,所以一般不需要手工去注销。如果确实需要,可以使用widget_off:
|
||||
由于窗口关闭时会销毁其中所有控件,所以一般不需要手工去注销。如果确实需要,可以使用 widget_off:
|
||||
|
||||
```
|
||||
/**
|
||||
@ -56,16 +56,16 @@ widget_on(ok, EVT_CLICK, on_inc, progress_bar);
|
||||
* 注销指定事件的处理函数。
|
||||
* @scriptable custom
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {uint32_t} id widget_on返回的ID。
|
||||
* @param {uint32_t} id widget_on 返回的 ID。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t widget_off(widget_t* widget, uint32_t id);
|
||||
```
|
||||
|
||||
## 三、控件分发事件
|
||||
|
||||
一般只有在控件内部实现中,或者需要向控件注入事件时,才需要调用事件分发函数。如果需要分发事件,可以调用widget_dispatch:
|
||||
一般只有在控件内部实现中,或者需要向控件注入事件时,才需要调用事件分发函数。如果需要分发事件,可以调用 widget_dispatch:
|
||||
|
||||
```
|
||||
/**
|
||||
@ -75,10 +75,7 @@ ret_t widget_off(widget_t* widget, uint32_t id);
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {event_t*} e 事件。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t widget_dispatch(widget_t* widget, event_t* e);
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
@ -55,7 +55,7 @@ ret_t event_recorder_player_stop_play(void);
|
||||
|
||||
一般有两种方式启用输入事件记录与重放:
|
||||
|
||||
* 通过命令行参数启动记录或重放功能(目前没有提供示例)。
|
||||
* 通过命令行参数启动记录或重放功能(目前没有提供示例)。
|
||||
|
||||
* 通过快捷键启动记录和重放功能。这种方法更为灵活,可以随时启用和停止,可以随时记录和播放。
|
||||
|
||||
@ -102,7 +102,7 @@ widget_on(wm, EVT_KEY_UP, on_key_record_play_events, wm);
|
||||
* F7 键开始播放。
|
||||
* F8 键停止播放。
|
||||
|
||||
## 4.已知问题
|
||||
## 4. 已知问题
|
||||
|
||||
* 如果想重复播放记录的事件,确保记录事件时,回到初始界面后才停止记录。
|
||||
* 目前平台原生输入法的输入事件没有记录。
|
||||
|
15
docs/faq.md
15
docs/faq.md
@ -274,7 +274,7 @@ ret_t locale_info_change(locale_info_t* locale_info, const char* language, const
|
||||
design/default/styles/keyboard.xml
|
||||
```
|
||||
|
||||
#### 21.如何处理:Cannot find module 'glob'
|
||||
#### 21. 如何处理:Cannot find module 'glob'
|
||||
|
||||
一般来说,执行下面的命令即可:
|
||||
|
||||
@ -282,33 +282,30 @@ design/default/styles/keyboard.xml
|
||||
npm install -g glob
|
||||
```
|
||||
|
||||
|
||||
在Linux/MacOS上,有时仍然出现错误,可以通过下面的命令,设置NODE_PATH环境变量:
|
||||
|
||||
在 Linux/MacOS 上,有时仍然出现错误,可以通过下面的命令,设置 NODE_PATH 环境变量:
|
||||
|
||||
```
|
||||
export NODE_PATH="$(npm root -g)"
|
||||
```
|
||||
|
||||
#### 22.如何处理 ImportError: No module named PIL
|
||||
#### 22. 如何处理 ImportError: No module named PIL
|
||||
|
||||
这个需要安装Pillow模块(python),运行下面的命令可以安装:
|
||||
这个需要安装 Pillow 模块 (python),运行下面的命令可以安装:
|
||||
|
||||
```
|
||||
pip3 install Pillow
|
||||
```
|
||||
|
||||
如果系统同时安装了python2,可以加个alias。
|
||||
如果系统同时安装了 python2,可以加个 alias。
|
||||
|
||||
```
|
||||
alias python=python3
|
||||
```
|
||||
|
||||
#### 23. 如何让用户不可以调整desktop应用程序的窗口大小。
|
||||
#### 23. 如何让用户不可以调整 desktop 应用程序的窗口大小。
|
||||
|
||||
在 awtk\_config.py 中定义宏 NATIVE\_WINDOW\_NOT\_RESIZABLE,重新编译即可:
|
||||
|
||||
```python
|
||||
COMMON_CCFLAGS=COMMON_CCFLAGS+' -DNATIVE_WINDOW_NOT_RESIZABLE=1 '
|
||||
```
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user