mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-29 18:48:09 +08:00
update docs
This commit is contained in:
parent
b9916610a1
commit
308a753059
@ -66,7 +66,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持 3 FrameBuffer 让界面以最高帧率运行 (可选)。
|
||||
* UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI 描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
|
||||
* 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
* 支持控件动画。
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 主题切换实时生效。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
|
@ -13,7 +13,7 @@
|
||||
* [AWTK 中的矢量图绘图函数](vgcanvas.md)
|
||||
* [AWTK 中的事件处理函数](event_listener.md)
|
||||
* [AWTK 中的国际化之字符串翻译](locale.md)
|
||||
* [AWTK 中的主题](theme.md)
|
||||
* [AWTK 中的窗体样式](theme.md)
|
||||
* [AWTK 中的 system\_bar 使用方法](system_bar.md)
|
||||
* [AWTK 中的资源管理器](assets_manager.md)
|
||||
* [AWTK 中的窗口动画](window_animator.md)
|
||||
@ -65,7 +65,7 @@
|
||||
* [如何支持单色 LCD](how_to_support_mono_lcd.md)
|
||||
* [如何使用 mutable_image 控件](how_to_use_mutable_image.md)
|
||||
* [如何让文本滚动起来](how_to_scroll_you_text.md)
|
||||
* [如何在主题文件中写控件布局参数](how_to_write_layout_params_in_style.md)
|
||||
* [如何在窗体样式文件中写控件布局参数](how_to_write_layout_params_in_style.md)
|
||||
* [如何开启按键音](how_to_enable_key_touch_sound.md)
|
||||
* [如何更新拼音输入法数据](how_to_update_gpinyin_data.md)
|
||||
* [如何用 valgrind 查找内存相关问题](how_to_use_valgrind_detect_memory_bugs.md)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## 基本架构
|
||||
|
||||
这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、主题、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:
|
||||
这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、窗体样式、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:
|
||||
|
||||
* 让上层不需要了解存储的方式。在没有文件系统时或者内存紧缺时,把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时,资源放在文件系统中。在有网络时,资源也可以存放在服务器上(暂未实现)。资源管理器为上层提供统一的接口,让上层而不用关心底层的存储方式。
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
* 让上层不需要了解屏幕的密度。不同的屏幕密度下需要加载不同的图片,比如MacPro的Retina屏就需要用双倍解析度的图片,否则就出现界面模糊。AWTK以后会支持PC软件和手机软件的开发,所以资源管理器需要为此提供支持,让上层不需关心屏幕的密度。
|
||||
|
||||
* 对资源进行内存缓存。不同类型的资源使用方式是不一样的,比如字体和主题加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。
|
||||
* 对资源进行内存缓存。不同类型的资源使用方式是不一样的,比如字体和窗体样式加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。
|
||||
|
||||
负责资源管理器和资源管理相关的组件如下图所示:
|
||||
|
||||
@ -24,7 +24,7 @@ AWTK中的资源需要进行格式转换才能使用:
|
||||
|
||||
* 在没有文件系统时或者内存紧缺时,需要把资源转成常量数组直接编译到代码中。
|
||||
* XML格式的UI文件需要转换成二进制的格式。
|
||||
* XML格式的主题文件需要转换成二进制的格式。
|
||||
* XML格式的窗体样式文件需要转换成二进制的格式。
|
||||
* TTF可以根据需要转换成位图字体。
|
||||
* PNG可以根据需要转换成位图图片。
|
||||
|
||||
@ -33,7 +33,7 @@ AWTK中的资源需要进行格式转换才能使用:
|
||||
* bin/fontgen 位图字体生成工具
|
||||
* bin/imagegen 位图图片生成工具
|
||||
* bin/resgen 二进制文件生成资源常量数组
|
||||
* bin/themegen XML主题转换成二进制的主题
|
||||
* bin/themegen XML窗体样式转换成二进制的窗体样式
|
||||
* bin/xml\_to\_ui XML的界面描述格式转换二进制的界面描述格式
|
||||
* ./scripts/update\_res.py 批量转换整个项目的资源
|
||||
|
||||
@ -101,9 +101,9 @@ widget_t* win = window_open(name);
|
||||
|
||||
* 使用字体
|
||||
|
||||
一般在主题文件中指定字体即可。
|
||||
一般在窗体样式文件中指定字体即可。
|
||||
|
||||
* 使用主题
|
||||
* 使用窗体样式
|
||||
|
||||
一般在界面描述文件中指定style即可。
|
||||
|
||||
|
@ -97,7 +97,7 @@ type 是可选的,表示项目类型,缺省为“PROJECT_WIDGETS_APPLICATION
|
||||
|
||||
* PROJECT_CUSTOM_WIDGET 表示自定义控件库,可导入 Designer,安装到项目后可以像内置控件一样编辑并实时预览显示效果;
|
||||
|
||||
* ROJECT_THEME 表示应用程序主题,可导入 Designer 并应用到不同的项目;
|
||||
* PROJECT_THEME 表示应用程序主题,可导入 Designer 并应用到不同的项目;
|
||||
|
||||
* PROJECT_UI_SNIPPET 表示界面片段,可导入 Designer 并应用到不同的项目。
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
# 最新动态
|
||||
|
||||
2021/05/11
|
||||
* 增加widget\_back/widget\_back\_to\_home。
|
||||
* 完善WINDOW\_CLOSABLE\_CONFIRM的处理。
|
||||
* 完善dialog\_helper。
|
||||
* 完善WINDOW\_CLOSABLE\_CONFIRM的处理。
|
||||
* 增加widget\_back/widget\_back\_to\_home。
|
||||
* 为了避免歧义,将styles资源名称由“主题”改为“窗体样式”(感谢雨欣提供补丁)。
|
||||
|
||||
2021/05/08
|
||||
* 重构popup和相关测试。
|
||||
|
@ -30,9 +30,9 @@ imagegen.exe in_filename out_filename (bgra|bgr565|mono)
|
||||
|
||||
> 由于单色图片只有两种颜色,所以在设计图片上只能使用白色 (#ffffff) 和黑色 (#000000),否则转换出来的效果不是期望的。
|
||||
|
||||
## 主题配置
|
||||
## 窗体样式配置
|
||||
|
||||
主题中只能使用白色 (#ffffff) 和黑色 (#000000) 两种颜色。
|
||||
窗体样式中只能使用白色 (#ffffff) 和黑色 (#000000) 两种颜色。
|
||||
|
||||
## 资源生成
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# 如何在主题文件中写控件布局参数
|
||||
# 如何在窗体样式文件中写控件布局参数
|
||||
|
||||
一个控件在多个界面出现,而且它的布局参数是一样的,可以把它布局参数放到 style 中,这样可以提高可维护性。
|
||||
|
||||
|
@ -33,7 +33,7 @@ image_set_draw_type(img, IMAGE_DRAW_CENTER);
|
||||
</window>
|
||||
```
|
||||
|
||||
## 四、在主题中使用(适用于所有控件的背景)
|
||||
## 四、在窗体样式中使用(适用于所有控件的背景)
|
||||
|
||||
```
|
||||
<progress_bar>
|
||||
|
@ -13,7 +13,7 @@
|
||||
* [AWTK 中的矢量图绘图函数](vgcanvas.md)
|
||||
* [AWTK 中的事件处理函数](event_listener.md)
|
||||
* [AWTK 中的国际化之字符串翻译](locale.md)
|
||||
* [AWTK 中的主题](theme.md)
|
||||
* [AWTK 中的窗体样式](theme.md)
|
||||
* [AWTK 中的 system\_bar 使用方法](system_bar.md)
|
||||
* [AWTK 中的资源管理器](assets_manager.md)
|
||||
* [AWTK 中的窗口动画](window_animator.md)
|
||||
@ -48,7 +48,7 @@
|
||||
* [如何支持单色 LCD](how_to_support_mono_lcd.md)
|
||||
* [如何使用 mutable_image 控件](how_to_use_mutable_image.md)
|
||||
* [如何让文本滚动起来](how_to_scroll_you_text.md)
|
||||
* [如何在主题文件中写控件布局参数](how_to_write_layout_params_in_style.md)
|
||||
* [如何在窗体样式文件中写控件布局参数](how_to_write_layout_params_in_style.md)
|
||||
* [如何开启按键音](how_to_enable_key_touch_sound.md)
|
||||
* [如何更新拼音输入法数据](how_to_update_gpinyin_data.md)
|
||||
* [如何集成第三方库](https://github.com/zlgopen/awtk-hello/blob/master/docs/how_to_integrate_3rd_libs.md)
|
||||
|
@ -137,12 +137,12 @@
|
||||
|
||||
* [locale\_info](manual/locale_info_t.md) 本地化信息。
|
||||
|
||||
#### 4. 主题
|
||||
#### 4. 窗体样式
|
||||
|
||||
![style\_overview](images/style_overview.png)
|
||||
|
||||
* [style](manual/style_t.md) style 接口。
|
||||
* [theme](manual/theme_t.md) 常量主题数据。
|
||||
* [theme](manual/theme_t.md) 常量窗体样式数据。
|
||||
* [style\_factory](manual/style_factory_t.md) style 工厂。
|
||||
* [style\_const](manual/style_const_t.md) 只读的 style。
|
||||
* [style\_mutable](manual/style_mutable_t.md) 可修改的 style。
|
||||
|
@ -9,7 +9,7 @@
|
||||
| ASSET\_TYPE\_NONE | 无效资源。 |
|
||||
| ASSET\_TYPE\_FONT | 字体资源。 |
|
||||
| ASSET\_TYPE\_IMAGE | 图片资源。 |
|
||||
| ASSET\_TYPE\_STYLE | 主题资源。 |
|
||||
| ASSET\_TYPE\_STYLE | 窗体样式资源。 |
|
||||
| ASSET\_TYPE\_UI | UI数据资源。 |
|
||||
| ASSET\_TYPE\_XML | XML数据资源。 |
|
||||
| ASSET\_TYPE\_STRINGS | 字符串数据资源。 |
|
||||
|
@ -3,7 +3,7 @@
|
||||
![image](images/assets_manager_t_0.png)
|
||||
|
||||
资源管理器。
|
||||
这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、主题、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:
|
||||
这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、窗体样式、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:
|
||||
|
||||
* 让上层不需要了解存储的方式。
|
||||
在没有文件系统时或者内存紧缺时,把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时,资源放在文件系统中。在有网络时,资源也可以存放在服务器上(暂未实现)。资源管理器为上层提供统一的接口,让上层而不用关心底层的存储方式。
|
||||
@ -15,7 +15,7 @@
|
||||
不同的屏幕密度下需要加载不同的图片,比如MacPro的Retina屏就需要用双倍解析度的图片,否则就出现界面模糊。AWTK以后会支持PC软件和手机软件的开发,所以资源管理器需要为此提供支持,让上层不需关心屏幕的密度。
|
||||
|
||||
* 对资源进行内存缓存。
|
||||
不同类型的资源使用方式是不一样的,比如字体和主题加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。
|
||||
不同类型的资源使用方式是不一样的,比如字体和窗体样式加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。
|
||||
|
||||
当从文件系统加载资源时,目录结构要求如下:
|
||||
|
||||
@ -28,7 +28,7 @@ x2 2倍密度屏幕的图片。
|
||||
x3 3倍密度屏幕的图片。
|
||||
xx 密度无关的图片。
|
||||
strings 需要翻译的字符串。
|
||||
styles 主题数据。
|
||||
styles 窗体样式数据。
|
||||
ui UI描述数据。
|
||||
```
|
||||
----------------------------------
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
色块控件。
|
||||
|
||||
用来显示一个颜色块,它通过属性而不是主题来设置颜色,方便在运行时动态改变颜色。
|
||||
用来显示一个颜色块,它通过属性而不是窗体样式来设置颜色,方便在运行时动态改变颜色。
|
||||
|
||||
可以使用value属性访问背景颜色的颜色值。
|
||||
|
||||
|
@ -88,7 +88,7 @@ demo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/combo_box.c)
|
||||
</combo_box>
|
||||
```
|
||||
|
||||
* 1.combobox的下拉按钮的style名称为combobox_down,可以在主题文件中设置。
|
||||
* 1.combobox的下拉按钮的style名称为combobox_down,可以在窗体样式文件中设置。
|
||||
|
||||
```xml
|
||||
<button>
|
||||
@ -100,7 +100,7 @@ demo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/combo_box.c)
|
||||
</button>
|
||||
```
|
||||
|
||||
* 2.combobox的弹出popup窗口的style名称为combobox_popup,可以在主题文件中设置。
|
||||
* 2.combobox的弹出popup窗口的style名称为combobox_popup,可以在窗体样式文件中设置。
|
||||
|
||||
```xml
|
||||
<popup>
|
||||
|
@ -149,7 +149,7 @@ widget_t* dialog_cast (widget_t* widget);
|
||||
|
||||
> <p id="dialog_t_dialog_confirm">显示『确认』对话框。
|
||||
|
||||
主题由dialog_confirm.xml文件决定。
|
||||
窗体样式由dialog_confirm.xml文件决定。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -255,7 +255,7 @@ widget_t* dialog_get_title (widget_t* widget);
|
||||
|
||||
> <p id="dialog_t_dialog_info">显示『提示信息』对话框。
|
||||
|
||||
主题由dialog_info.xml文件决定。
|
||||
窗体样式由dialog_info.xml文件决定。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -399,7 +399,7 @@ ret_t dialog_set_title (widget_t* widget, char* title);
|
||||
|
||||
> <p id="dialog_t_dialog_toast">显示『短暂提示信息』对话框。
|
||||
|
||||
主题由dialog_toast.xml文件决定。
|
||||
窗体样式由dialog_toast.xml文件决定。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -421,7 +421,7 @@ ret_t dialog_toast (const char* text, uint32_t duration);
|
||||
|
||||
> <p id="dialog_t_dialog_warn">显示『警告』对话框。
|
||||
|
||||
主题由dialog_warn.xml文件决定。
|
||||
窗体样式由dialog_warn.xml文件决定。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
|
@ -10,7 +10,7 @@ overlay窗口有点类似于非模态的dialog,但是它位置和大小是完
|
||||
|
||||
overlay\_t是[window\_base\_t](window_base_t.md)的子类控件,window\_base\_t的函数均适用于overlay\_t控件。
|
||||
|
||||
在xml中使用"overlay"标签创建窗口。需要指定坐标和大小,可以指定主题和动画名称。如:
|
||||
在xml中使用"overlay"标签创建窗口。需要指定坐标和大小,可以指定窗体样式和动画名称。如:
|
||||
|
||||
```xml
|
||||
<overlay theme="basic" x="100" y="100" w="200" h="300">
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
只读的style,从theme\_t中获取数据。
|
||||
|
||||
tools/theme_gen用于把XML的主题数据转换成常量数据。
|
||||
tools/theme_gen用于把XML的窗体样式数据转换成常量数据。
|
||||
----------------------------------
|
||||
### 函数
|
||||
<p id="style_const_t_methods">
|
||||
|
@ -1,27 +1,27 @@
|
||||
## theme\_t
|
||||
### 概述
|
||||
主题。
|
||||
窗体样式。
|
||||
|
||||
负责管理缺省的主题数据,方便实现style\_const。
|
||||
负责管理缺省的窗体样式数据,方便实现style\_const。
|
||||
----------------------------------
|
||||
### 函数
|
||||
<p id="theme_t_methods">
|
||||
|
||||
| 函数名称 | 说明 |
|
||||
| -------- | ------------ |
|
||||
| <a href="#theme_t_theme">theme</a> | 获取缺省的主题对象。 |
|
||||
| <a href="#theme_t_theme_default_create">theme\_default\_create</a> | 创建主题对象。 |
|
||||
| <a href="#theme_t_theme_destroy">theme\_destroy</a> | 析构并释放主题对象。 |
|
||||
| <a href="#theme_t_theme">theme</a> | 获取缺省的窗体样式对象。 |
|
||||
| <a href="#theme_t_theme_default_create">theme\_default\_create</a> | 创建窗体样式对象。 |
|
||||
| <a href="#theme_t_theme_destroy">theme\_destroy</a> | 析构并释放窗体样式对象。 |
|
||||
| <a href="#theme_t_theme_find_style">theme\_find\_style</a> | 查找满足条件的style。 |
|
||||
| <a href="#theme_t_theme_get_style_type">theme\_get\_style\_type</a> | 获取主题的风格类型。 |
|
||||
| <a href="#theme_t_theme_set">theme\_set</a> | 设置缺省的主题对象。 |
|
||||
| <a href="#theme_t_theme_set_theme_data">theme\_set\_theme\_data</a> | 设置主题的数据。 |
|
||||
| <a href="#theme_t_theme_get_style_type">theme\_get\_style\_type</a> | 获取窗体样式的风格类型。 |
|
||||
| <a href="#theme_t_theme_set">theme\_set</a> | 设置缺省的窗体样式对象。 |
|
||||
| <a href="#theme_t_theme_set_theme_data">theme\_set\_theme\_data</a> | 设置窗体样式的数据。 |
|
||||
#### theme 函数
|
||||
-----------------------
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="theme_t_theme">获取缺省的主题对象。
|
||||
> <p id="theme_t_theme">获取缺省的窗体样式对象。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -33,13 +33,13 @@ theme_t* theme ();
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | theme\_t* | 返回主题对象。 |
|
||||
| 返回值 | theme\_t* | 返回窗体样式对象。 |
|
||||
#### theme\_default\_create 函数
|
||||
-----------------------
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="theme_t_theme_default_create">创建主题对象。
|
||||
> <p id="theme_t_theme_default_create">创建窗体样式对象。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -51,14 +51,14 @@ theme_t* theme_default_create (const uint8_t* data);
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | theme\_t* | 返回主题对象。 |
|
||||
| data | const uint8\_t* | 主题数据。 |
|
||||
| 返回值 | theme\_t* | 返回窗体样式对象。 |
|
||||
| data | const uint8\_t* | 窗体样式数据。 |
|
||||
#### theme\_destroy 函数
|
||||
-----------------------
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="theme_t_theme_destroy">析构并释放主题对象。
|
||||
> <p id="theme_t_theme_destroy">析构并释放窗体样式对象。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -71,7 +71,7 @@ ret_t theme_destroy (theme_t* theme);
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 |
|
||||
| theme | theme\_t* | 主题对象。 |
|
||||
| theme | theme\_t* | 窗体样式对象。 |
|
||||
#### theme\_find\_style 函数
|
||||
-----------------------
|
||||
|
||||
@ -90,7 +90,7 @@ const uint8_t* theme_find_style (theme_t* theme, const char* widget_type, const
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | const uint8\_t* | 返回风格对象数据。 |
|
||||
| theme | theme\_t* | 主题对象。 |
|
||||
| theme | theme\_t* | 窗体样式对象。 |
|
||||
| widget\_type | const char* | 控件的类型名。 |
|
||||
| name | const char* | style的名称。 |
|
||||
| widget\_state | const char* | 控件的状态。 |
|
||||
@ -99,7 +99,7 @@ const uint8_t* theme_find_style (theme_t* theme, const char* widget_type, const
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="theme_t_theme_get_style_type">获取主题的风格类型。
|
||||
> <p id="theme_t_theme_get_style_type">获取窗体样式的风格类型。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -112,13 +112,13 @@ const char* theme_get_style_type (theme_t* theme);
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | const char* | 返回风格类型。 |
|
||||
| theme | theme\_t* | 主题对象。 |
|
||||
| theme | theme\_t* | 窗体样式对象。 |
|
||||
#### theme\_set 函数
|
||||
-----------------------
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="theme_t_theme_set">设置缺省的主题对象。
|
||||
> <p id="theme_t_theme_set">设置缺省的窗体样式对象。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -131,13 +131,13 @@ ret_t theme_set (theme_t* theme);
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 |
|
||||
| theme | theme\_t* | 主题对象。 |
|
||||
| theme | theme\_t* | 窗体样式对象。 |
|
||||
#### theme\_set\_theme\_data 函数
|
||||
-----------------------
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="theme_t_theme_set_theme_data">设置主题的数据。
|
||||
> <p id="theme_t_theme_set_theme_data">设置窗体样式的数据。
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -150,5 +150,5 @@ 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 | theme\_t* | 窗体样式对象。 |
|
||||
| data | const uint8\_t* | 窗体样式数据。 |
|
||||
|
@ -103,14 +103,14 @@
|
||||
| WIDGET\_PROP\_GRAB\_KEYS | 让窗口管理器直接把按键发给自己。 |
|
||||
| WIDGET\_PROP\_ROW | 行数或每行的高度。 |
|
||||
| WIDGET\_PROP\_STATE\_FOR\_STYLE | 控件状态。 |
|
||||
| WIDGET\_PROP\_THEME | 窗口主题名称。 |
|
||||
| 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\_THEME\_OBJ | 窗口的窗体样式对象。 |
|
||||
| WIDGET\_PROP\_DEFAULT\_THEME\_OBJ | 缺省的窗体样式对象。 |
|
||||
| WIDGET\_PROP\_ITEM\_WIDTH | 项的宽度。 |
|
||||
| WIDGET\_PROP\_ITEM\_HEIGHT | 项的高度。 |
|
||||
| WIDGET\_PROP\_DEFAULT\_ITEM\_HEIGHT | 项的缺省高度。 |
|
||||
|
@ -108,7 +108,7 @@ widget_on(button, EVT_CLICK, on_click, NULL);
|
||||
| <a href="#widget_t_widget_get_value">widget\_get\_value</a> | 获取控件的值。只是对widget\_get\_prop的包装,值的意义由子类控件决定。 |
|
||||
| <a href="#widget_t_widget_get_window">widget\_get\_window</a> | 获取当前控件所在的窗口。 |
|
||||
| <a href="#widget_t_widget_get_window_manager">widget\_get\_window\_manager</a> | 获取当前的窗口管理器。 |
|
||||
| <a href="#widget_t_widget_get_window_theme">widget\_get\_window\_theme</a> | 获取控件的窗口主题 |
|
||||
| <a href="#widget_t_widget_get_window_theme">widget\_get\_window\_theme</a> | 获取控件的窗口窗体样式 |
|
||||
| <a href="#widget_t_widget_grab">widget\_grab</a> | 让指定子控件抓住事件。 |
|
||||
| <a href="#widget_t_widget_index_of">widget\_index\_of</a> | 获取控件在父控件中的索引编号。 |
|
||||
| <a href="#widget_t_widget_init">widget\_init</a> | 初始化控件。仅在子类控件构造函数中使用。 |
|
||||
@ -1524,7 +1524,7 @@ widget_t* widget_get_window_manager (widget_t* widget);
|
||||
|
||||
* 函数功能:
|
||||
|
||||
> <p id="widget_t_widget_get_window_theme">获取控件的窗口主题
|
||||
> <p id="widget_t_widget_get_window_theme">获取控件的窗口窗体样式
|
||||
|
||||
* 函数原型:
|
||||
|
||||
@ -1538,8 +1538,8 @@ ret_t widget_get_window_theme (widget_t* widget, theme_t** win_theme, theme_t**
|
||||
| -------- | ----- | --------- |
|
||||
| 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 |
|
||||
| widget | widget\_t* | 控件对象。 |
|
||||
| win\_theme | theme\_t** | 返回窗口主题。 |
|
||||
| default\_theme | theme\_t** | 返回全局默认主题。 |
|
||||
| win\_theme | theme\_t** | 返回窗口窗体样式。 |
|
||||
| default\_theme | theme\_t** | 返回全局默认窗体样式。 |
|
||||
#### widget\_grab 函数
|
||||
-----------------------
|
||||
|
||||
|
@ -52,8 +52,8 @@
|
||||
| <a href="#window_base_t_open_anim_hint">open\_anim\_hint</a> | char* | 打开窗口动画的名称。 |
|
||||
| <a href="#window_base_t_single_instance">single\_instance</a> | bool\_t | 单例。如果窗口存在,先关闭再打开。 |
|
||||
| <a href="#window_base_t_stage">stage</a> | char* | 窗口当前处于的状态。 |
|
||||
| <a href="#window_base_t_theme">theme</a> | char* | 主题资源的名称。 |
|
||||
| <a href="#window_base_t_theme_obj">theme\_obj</a> | theme\_t* | 窗口的常量主题数据。 |
|
||||
| <a href="#window_base_t_theme">theme</a> | char* | 窗体样式资源的名称。 |
|
||||
| <a href="#window_base_t_theme_obj">theme\_obj</a> | theme\_t* | 窗口的常量窗体样式数据。 |
|
||||
### 事件
|
||||
<p id="window_base_t_events">
|
||||
|
||||
@ -617,10 +617,10 @@ ret_t window_base_set_prop (widget_t* widget, const char* name, const value_t* v
|
||||
| 可通过widget\_get\_prop读取 | 是 |
|
||||
#### theme 属性
|
||||
-----------------------
|
||||
> <p id="window_base_t_theme">主题资源的名称。
|
||||
每个窗口都可以有独立的主题文件,如果没指定,则使用系统缺省的主题文件。
|
||||
主题是一个XML文件,放在assets/raw/styles目录下。
|
||||
请参考[主题](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)
|
||||
> <p id="window_base_t_theme">窗体样式资源的名称。
|
||||
每个窗口都可以有独立的窗体样式文件,如果没指定,则使用系统缺省的窗体样式文件。
|
||||
窗体样式是一个XML文件,放在assets/raw/styles目录下。
|
||||
请参考[窗体样式](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)
|
||||
|
||||
* 类型:char*
|
||||
|
||||
@ -636,10 +636,10 @@ ret_t window_base_set_prop (widget_t* widget, const char* name, const value_t* v
|
||||
| 可通过widget\_set\_prop修改 | 是 |
|
||||
#### theme\_obj 属性
|
||||
-----------------------
|
||||
> <p id="window_base_t_theme_obj">窗口的常量主题数据。
|
||||
> <p id="window_base_t_theme_obj">窗口的常量窗体样式数据。
|
||||
|
||||
>
|
||||
把主题管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载主题资源的问题。
|
||||
把窗体样式管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载窗体样式资源的问题。
|
||||
|
||||
* 类型:theme\_t*
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
window\_t是[window\_base\_t](window_base_t.md)的子类控件,window\_base\_t的函数均适用于window\_t控件。
|
||||
|
||||
在xml中使用"window"标签创建窗口。无需指定坐标和大小,可以指定主题和动画名称。如:
|
||||
在xml中使用"window"标签创建窗口。无需指定坐标和大小,可以指定窗体样式和动画名称。如:
|
||||
|
||||
```xml
|
||||
<window theme="basic" anim_hint="htranslate">
|
||||
|
@ -52,7 +52,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持3 FrameBuffer让界面以最高帧率运行(可选)。
|
||||
* UI描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种GPU加速接口。如OpenGL、DirectX、Vulkan和Metal等。
|
||||
* 支持嵌入式平台的各种2D加速接口。目前STM32的DMA2D和NXP的PXP接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
* 支持控件动画
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
* 丰富的辅助工具。
|
||||
|
@ -51,7 +51,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持 3 FrameBuffer 让界面以最高帧率运行(可选)。
|
||||
* UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI 描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
|
||||
* 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -78,7 +78,7 @@
|
||||
* 支持控件动画
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
* 丰富的辅助工具。
|
||||
@ -151,7 +151,7 @@
|
||||
* 将 ListView 的布局策略放到 children\_layouter\_list\_view 中,并支持边距和间距等参数。
|
||||
* children\_layouter\_list\_view 增加 keep\_disable 和 keep\_invisible 参数。
|
||||
* children\_layouter\_default 增加 keep\_disable 和 keep\_invisible 参数。
|
||||
* 缺省启用 style mutable,具体用法请参考主题文档。
|
||||
* 缺省启用 style mutable,具体用法请参考窗体样式文档。
|
||||
* 增加 style border\_width
|
||||
* 支持动态修改屏保时间。
|
||||
* 增加 app_root 自动检测。
|
||||
|
@ -52,7 +52,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持 3 FrameBuffer 让界面以最高帧率运行 (可选)。
|
||||
* UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI 描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
|
||||
* 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
* 支持控件动画
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
* 丰富的辅助工具。
|
||||
|
@ -65,7 +65,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持 3 FrameBuffer 让界面以最高帧率运行 (可选)。
|
||||
* UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI 描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
|
||||
* 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
* 支持控件动画
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 主题切换实时生效。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
|
@ -65,7 +65,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持 3 FrameBuffer 让界面以最高帧率运行 (可选)。
|
||||
* UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI 描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
|
||||
* 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
* 支持控件动画。
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 主题切换实时生效。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
|
@ -64,7 +64,7 @@
|
||||
|
||||
* 通过脏矩算法只更新变化的部分。
|
||||
* 支持 3 FrameBuffer 让界面以最高帧率运行 (可选)。
|
||||
* UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* UI 描述文件和窗体样式文件使用高效的二进制格式,解析在瞬间完成。
|
||||
* 支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
|
||||
* 支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
|
||||
|
||||
@ -91,7 +91,7 @@
|
||||
* 支持控件动画。
|
||||
* 支持高清屏。
|
||||
* 支持界面描述文件。
|
||||
* 支持主题描述文件。
|
||||
* 支持窗体样式描述文件。
|
||||
* 主题切换实时生效。
|
||||
* 支持控件布局策略。
|
||||
* 支持对话框高亮策略。
|
||||
|
@ -1,9 +1,9 @@
|
||||
## AWTK 中的主题
|
||||
## AWTK 中的窗体样式
|
||||
|
||||
设计漂亮的界面并非程序员的强项,AWTK 通过主题提供这样一种机制,让设计漂亮的界面变得非常容易。通过主题,可以改变控件的背景颜色、边框颜色、字体颜色、字体、字体大小、背景图片、背景图片的显示方式和图标等属性。同时 AWTK 也提供了一些主题重用的机制,让主题文件的开发和维护变得容易。
|
||||
设计漂亮的界面并非程序员的强项,AWTK 通过窗体样式提供这样一种机制,让设计漂亮的界面变得非常容易。通过窗体样式,可以改变控件的背景颜色、边框颜色、字体颜色、字体、字体大小、背景图片、背景图片的显示方式和图标等属性。同时 AWTK 也提供了一些窗体样式重用的机制,让窗体样式文件的开发和维护变得容易。
|
||||
|
||||
### 一、主题的结构
|
||||
AWTK 的主题按控件进行分类,每种控件可以有多种不同的风格,每种风格下又有不同状态下的配置。比如:
|
||||
### 一、窗体样式的结构
|
||||
AWTK 的窗体样式按控件进行分类,每种控件可以有多种不同的风格,每种风格下又有不同状态下的配置。比如:
|
||||
|
||||
```
|
||||
<button bg_image_draw_type="3patch_x" text_color="blue">
|
||||
@ -27,13 +27,13 @@ AWTK 的主题按控件进行分类,每种控件可以有多种不同的风格
|
||||
</button>
|
||||
```
|
||||
|
||||
上面是按钮的主题配置(你可以自由增加自己需要的),其中定义了三种不同的按钮风格:
|
||||
上面是按钮的样式配置(你可以自由增加自己需要的),其中定义了三种不同的按钮样式:
|
||||
|
||||
* default 为缺省的按钮风格。
|
||||
* default 为缺省的按钮样式。
|
||||
* green_btn 是用图片实现的绿色系按钮。
|
||||
* red_btn 是用图片实现的红色系按钮。
|
||||
|
||||
> 主题的各个属性,如果出现在控件中,则为该控件下各个 style 的缺省值。如果出现在 style 中,则为该 style 的下各种状态的缺省值。这样可以实现类似继承的重用机制。
|
||||
> 窗体样式的各个属性,如果出现在控件中,则为该控件下各个 style 的缺省值。如果出现在 style 中,则为该 style 的下各种状态的缺省值。这样可以实现类似继承的重用机制。
|
||||
>
|
||||
> 同一控件可以出现多次(如上面的 button 出现了两次),有利于实现配置共享,让维护工作更简单。
|
||||
|
||||
@ -43,7 +43,7 @@ AWTK 的主题按控件进行分类,每种控件可以有多种不同的风格
|
||||
|
||||
* [控件状态定义](manual/widget_state_t.md)
|
||||
|
||||
### 二、主题的属性
|
||||
### 二、窗体样式的属性
|
||||
|
||||
#### 基本属性
|
||||
|
||||
@ -87,7 +87,7 @@ AWTK 的主题按控件进行分类,每种控件可以有多种不同的风格
|
||||
参考:
|
||||
|
||||
* [AWTK 中图片的绘制方式](image_draw_type.md)
|
||||
* [如何在主题文件中写控件布局参数](how_to_write_layout_params_in_style.md)
|
||||
* [如何在窗体样式文件中写控件布局参数](how_to_write_layout_params_in_style.md)
|
||||
|
||||
#### 扩展属性
|
||||
|
||||
@ -98,9 +98,9 @@ AWTK 的主题按控件进行分类,每种控件可以有多种不同的风格
|
||||
* 名称带有 name/image 视为字符串格式的值。
|
||||
* 其它视为整数格式的值。
|
||||
|
||||
### 三、编译主题
|
||||
### 三、编译窗体样式
|
||||
|
||||
主题用 XML 文件编写,然后用 themegen 生成 C 常量数据,并加入资源管理器,才能在程序中使用。
|
||||
窗体样式用 XML 文件编写,然后用 themegen 生成 C 常量数据,并加入资源管理器,才能在程序中使用。
|
||||
|
||||
* 生成 C 常量数据
|
||||
|
||||
@ -141,21 +141,21 @@ resource_manager_add(theme_default);
|
||||
</dialog>
|
||||
```
|
||||
|
||||
### 五、每个窗口支持独立的主题
|
||||
### 五、每个窗口支持独立的窗体样式
|
||||
|
||||
像微信小程序那样,AWTK 中每个窗口(包括对话框和其它窗口)可以有自己的主题文件。
|
||||
像微信小程序那样,AWTK 中每个窗口(包括对话框和其它窗口)可以有自己的窗体样式文件。
|
||||
|
||||
* 通过窗口的 theme 属性来指定窗口的主题文件名(方便多个窗口共用一个主题文件)。
|
||||
* 通过窗口的 theme 属性来指定窗口的窗体样式文件名(方便多个窗口共用一个窗体样式文件)。
|
||||
|
||||
* 如果没有指定 theme 属性,以窗口的 name 属性作为窗口的主题文件名。
|
||||
* 如果没有指定 theme 属性,以窗口的 name 属性作为窗口的窗体样式文件名。
|
||||
|
||||
* 以窗口自己的主题文件优先,其次为缺省的主题文件。
|
||||
* 以窗口自己的窗体样式文件优先,其次为缺省的窗体样式文件。
|
||||
|
||||
> 参考:dialog1.xml
|
||||
|
||||
### 六、inline style
|
||||
|
||||
主题数据是只读的,它的好处是速度快,占用内存少。但在一些特殊情况下,我们希望通过函数直接修改控件的 style,或者在 UI 描述的 XML 文件中直接写 style。我们把这类 style 称为 inline style,具体用法如下:
|
||||
窗体样式数据是只读的,它的好处是速度快,占用内存少。但在一些特殊情况下,我们希望通过函数直接修改控件的 style,或者在 UI 描述的 XML 文件中直接写 style。我们把这类 style 称为 inline style,具体用法如下:
|
||||
|
||||
* 在 XML UI 描述文件中使用 inline style。
|
||||
|
||||
@ -246,7 +246,7 @@ ret_t widget_set_style_color(widget_t* widget, const char* state_and_name, uint3
|
||||
widget_set_style_color(label, "normal:bg_color", 0xFF00FF00);
|
||||
```
|
||||
|
||||
> inline style 会消耗更多内存,而且不方便切换主题,一般应该尽量避免使用。
|
||||
> inline style 会消耗更多内存,而且不方便切换窗体样式,一般应该尽量避免使用。
|
||||
|
||||
#### 注意:
|
||||
|
||||
|
@ -20,17 +20,17 @@
|
||||
|
||||
--------
|
||||
|
||||
#### 2. 修改了主题描述文件,但是预览时没有任何效果。
|
||||
#### 2. 修改了窗体样式描述文件,但是预览时没有任何效果。
|
||||
|
||||
**原因**
|
||||
|
||||
* 出于性能考虑,AWTK 使用的是二进制格式的主题数据,XML 格式的主题描述文件只是方便开发者编辑的。
|
||||
* 修改了 XML 格式的主题描述文件,还需要将它转成二进制格式,预览时才会生效。
|
||||
* 出于性能考虑,AWTK 使用的是二进制格式的窗体样式数据,XML 格式的窗体样式描述文件只是方便开发者编辑的。
|
||||
* 修改了 XML 格式的窗体样式描述文件,还需要将它转成二进制格式,预览时才会生效。
|
||||
|
||||
**绕坑**
|
||||
|
||||
* 使用脚本 update\_res.py 更新资源。
|
||||
* 或者用命令 bin/themegen 将 XML 格式的主题数据转成二进制的主题数据。
|
||||
* 或者用命令 bin/themegen 将 XML 格式的窗体样式数据转成二进制的窗体样式数据。
|
||||
|
||||
--------
|
||||
|
||||
|
@ -18,7 +18,7 @@ python ./scripts/update_res.py all x1 bgra+bgr565
|
||||
* font 仅生成有变化的字体资源。
|
||||
* image 仅生成有变化的图像资源。
|
||||
* ui 仅生成有变化的UI资源。
|
||||
* style 仅生成有变化的主题资源。
|
||||
* style 仅生成有变化的窗体样式资源。
|
||||
* string 仅生成有变化的字符串资源。
|
||||
|
||||
> 除非你清楚你在做什么,指定第一个参数就可以了。
|
||||
|
@ -42,7 +42,7 @@ typedef asset_info_t* (*assets_manager_load_asset_t)(assets_manager_t* am, asset
|
||||
* @parent emitter_t
|
||||
* @annotation ["scriptable"]
|
||||
* 资源管理器。
|
||||
* 这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、主题、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:
|
||||
* 这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、窗体样式、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:
|
||||
*
|
||||
* * 让上层不需要了解存储的方式。
|
||||
* 在没有文件系统时或者内存紧缺时,把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时,资源放在文件系统中。在有网络时,资源也可以存放在服务器上(暂未实现)。资源管理器为上层提供统一的接口,让上层而不用关心底层的存储方式。
|
||||
@ -54,7 +54,7 @@ typedef asset_info_t* (*assets_manager_load_asset_t)(assets_manager_t* am, asset
|
||||
* 不同的屏幕密度下需要加载不同的图片,比如MacPro的Retina屏就需要用双倍解析度的图片,否则就出现界面模糊。AWTK以后会支持PC软件和手机软件的开发,所以资源管理器需要为此提供支持,让上层不需关心屏幕的密度。
|
||||
*
|
||||
* * 对资源进行内存缓存。
|
||||
* 不同类型的资源使用方式是不一样的,比如字体和主题加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。
|
||||
* 不同类型的资源使用方式是不一样的,比如字体和窗体样式加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。
|
||||
*
|
||||
*当从文件系统加载资源时,目录结构要求如下:
|
||||
*
|
||||
@ -67,7 +67,7 @@ typedef asset_info_t* (*assets_manager_load_asset_t)(assets_manager_t* am, asset
|
||||
* x3 3倍密度屏幕的图片。
|
||||
* xx 密度无关的图片。
|
||||
* strings 需要翻译的字符串。
|
||||
* styles 主题数据。
|
||||
* styles 窗体样式数据。
|
||||
* ui UI描述数据。
|
||||
* ```
|
||||
*
|
||||
|
@ -330,7 +330,7 @@ bool_t dialog_is_modal(widget_t* widget);
|
||||
* @method dialog_toast
|
||||
* 显示『短暂提示信息』对话框。
|
||||
*
|
||||
* 主题由dialog_toast.xml文件决定。
|
||||
* 窗体样式由dialog_toast.xml文件决定。
|
||||
*
|
||||
* @annotation ["static", "scriptable"]
|
||||
* @param {const char*} text 文本内容。
|
||||
@ -344,7 +344,7 @@ ret_t dialog_toast(const char* text, uint32_t duration);
|
||||
* @method dialog_info
|
||||
* 显示『提示信息』对话框。
|
||||
*
|
||||
* 主题由dialog_info.xml文件决定。
|
||||
* 窗体样式由dialog_info.xml文件决定。
|
||||
*
|
||||
* @annotation ["static", "scriptable"]
|
||||
* @param {const char*} title 标题。
|
||||
@ -358,7 +358,7 @@ ret_t dialog_info(const char* title, const char* text);
|
||||
* @method dialog_warn
|
||||
* 显示『警告』对话框。
|
||||
*
|
||||
* 主题由dialog_warn.xml文件决定。
|
||||
* 窗体样式由dialog_warn.xml文件决定。
|
||||
*
|
||||
* @annotation ["static", "scriptable"]
|
||||
* @param {const char*} title 标题。
|
||||
@ -372,7 +372,7 @@ ret_t dialog_warn(const char* title, const char* text);
|
||||
* @method dialog_confirm
|
||||
* 显示『确认』对话框。
|
||||
*
|
||||
* 主题由dialog_confirm.xml文件决定。
|
||||
* 窗体样式由dialog_confirm.xml文件决定。
|
||||
*
|
||||
* @annotation ["static", "scriptable"]
|
||||
* @param {const char*} title 标题。
|
||||
|
@ -32,7 +32,7 @@ BEGIN_C_DECLS
|
||||
*
|
||||
* 只读的style,从theme\_t中获取数据。
|
||||
*
|
||||
* tools/theme_gen用于把XML的主题数据转换成常量数据。
|
||||
* tools/theme_gen用于把XML的窗体样式数据转换成常量数据。
|
||||
*
|
||||
*/
|
||||
typedef struct _style_const_t {
|
||||
|
@ -42,9 +42,9 @@ typedef const char* (*theme_get_style_type_t)(theme_t* theme);
|
||||
/**
|
||||
* @class theme_t
|
||||
* @annotation ["scriptable"]
|
||||
* 主题。
|
||||
* 窗体样式。
|
||||
*
|
||||
* 负责管理缺省的主题数据,方便实现style\_const。
|
||||
* 负责管理缺省的窗体样式数据,方便实现style\_const。
|
||||
*
|
||||
*/
|
||||
struct _theme_t {
|
||||
@ -59,17 +59,17 @@ struct _theme_t {
|
||||
|
||||
/**
|
||||
* @method theme
|
||||
* 获取缺省的主题对象。
|
||||
* 获取缺省的窗体样式对象。
|
||||
* @alias theme_instance
|
||||
* @annotation ["constructor", "scriptable"]
|
||||
* @return {theme_t*} 返回主题对象。
|
||||
* @return {theme_t*} 返回窗体样式对象。
|
||||
*/
|
||||
theme_t* theme(void);
|
||||
|
||||
/**
|
||||
* @method theme_set
|
||||
* 设置缺省的主题对象。
|
||||
* @param {theme_t*} theme 主题对象。
|
||||
* 设置缺省的窗体样式对象。
|
||||
* @param {theme_t*} theme 窗体样式对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
@ -77,18 +77,18 @@ ret_t theme_set(theme_t* theme);
|
||||
|
||||
/**
|
||||
* @method theme_default_create
|
||||
* 创建主题对象。
|
||||
* 创建窗体样式对象。
|
||||
* @annotation ["constructor"]
|
||||
* @param {const uint8_t*} data 主题数据。
|
||||
* @param {const uint8_t*} data 窗体样式数据。
|
||||
*
|
||||
* @return {theme_t*} 返回主题对象。
|
||||
* @return {theme_t*} 返回窗体样式对象。
|
||||
*/
|
||||
theme_t* theme_default_create(const uint8_t* data);
|
||||
|
||||
/**
|
||||
* @method theme_find_style
|
||||
* 查找满足条件的style。
|
||||
* @param {theme_t*} theme 主题对象。
|
||||
* @param {theme_t*} theme 窗体样式对象。
|
||||
* @param {const char*} widget_type 控件的类型名。
|
||||
* @param {const char*} name style的名称。
|
||||
* @param {const char*} widget_state 控件的状态。
|
||||
@ -100,8 +100,8 @@ const uint8_t* theme_find_style(theme_t* theme, const char* widget_type, const c
|
||||
|
||||
/**
|
||||
* @method theme_get_style_type
|
||||
* 获取主题的风格类型。
|
||||
* @param {theme_t*} theme 主题对象。
|
||||
* 获取窗体样式的风格类型。
|
||||
* @param {theme_t*} theme 窗体样式对象。
|
||||
*
|
||||
* @return {const char*} 返回风格类型。
|
||||
*/
|
||||
@ -109,9 +109,9 @@ const char* theme_get_style_type(theme_t* theme);
|
||||
|
||||
/**
|
||||
* @method theme_set_theme_data
|
||||
* 设置主题的数据。
|
||||
* @param {theme_t*} theme 主题对象。
|
||||
* @param {const uint8_t*} data 主题数据。
|
||||
* 设置窗体样式的数据。
|
||||
* @param {theme_t*} theme 窗体样式对象。
|
||||
* @param {const uint8_t*} data 窗体样式数据。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
@ -119,8 +119,8 @@ ret_t theme_set_theme_data(theme_t* theme, const uint8_t* data);
|
||||
|
||||
/**
|
||||
* @method theme_destroy
|
||||
* 析构并释放主题对象。
|
||||
* @param {theme_t*} theme 主题对象。
|
||||
* 析构并释放窗体样式对象。
|
||||
* @param {theme_t*} theme 窗体样式对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
|
@ -850,10 +850,10 @@ ret_t widget_set_text(widget_t* widget, const wchar_t* text);
|
||||
|
||||
/**
|
||||
* @method widget_get_window_theme
|
||||
* 获取控件的窗口主题
|
||||
* 获取控件的窗体样式。
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {theme_t**} win_theme 返回窗口主题。
|
||||
* @param {theme_t**} default_theme 返回全局默认主题。
|
||||
* @param {theme_t**} win_theme 返回窗体样式。
|
||||
* @param {theme_t**} default_theme 返回全局默认窗体样式。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
|
@ -625,7 +625,7 @@ BEGIN_C_DECLS
|
||||
|
||||
/**
|
||||
* @const WIDGET_PROP_THEME
|
||||
* 窗口主题名称。
|
||||
* 窗体样式名称。
|
||||
*/
|
||||
#define WIDGET_PROP_THEME "theme"
|
||||
|
||||
@ -661,13 +661,13 @@ BEGIN_C_DECLS
|
||||
|
||||
/**
|
||||
* @const WIDGET_PROP_THEME_OBJ
|
||||
* 窗口的主题对象。
|
||||
* 窗口的窗体样式对象。
|
||||
*/
|
||||
#define WIDGET_PROP_THEME_OBJ "theme_obj"
|
||||
|
||||
/**
|
||||
* @const WIDGET_PROP_DEFAULT_THEME_OBJ
|
||||
* 缺省的主题对象。
|
||||
* 缺省的窗体样式对象。
|
||||
*/
|
||||
#define WIDGET_PROP_DEFAULT_THEME_OBJ "default_theme_obj"
|
||||
|
||||
|
@ -36,7 +36,7 @@ BEGIN_C_DECLS
|
||||
*
|
||||
* window\_t是[window\_base\_t](window_base_t.md)的子类控件,window\_base\_t的函数均适用于window\_t控件。
|
||||
*
|
||||
* 在xml中使用"window"标签创建窗口。无需指定坐标和大小,可以指定主题和动画名称。如:
|
||||
* 在xml中使用"window"标签创建窗口。无需指定坐标和大小,可以指定窗体样式和动画名称。如:
|
||||
*
|
||||
* ```xml
|
||||
* <window theme="basic" anim_hint="htranslate">
|
||||
|
@ -53,10 +53,10 @@ typedef struct _window_base_t {
|
||||
/**
|
||||
* @property {char*} theme
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 主题资源的名称。
|
||||
* 每个窗口都可以有独立的主题文件,如果没指定,则使用系统缺省的主题文件。
|
||||
* 主题是一个XML文件,放在assets/raw/styles目录下。
|
||||
* 请参考[主题](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)
|
||||
* 窗体样式资源的名称。
|
||||
* 每个窗口都可以有独立的窗体样式文件,如果没指定,则使用系统缺省的窗体样式文件。
|
||||
* 窗体样式是一个XML文件,放在assets/raw/styles目录下。
|
||||
* 请参考[窗体样式](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)
|
||||
*/
|
||||
char* theme;
|
||||
|
||||
@ -145,10 +145,10 @@ typedef struct _window_base_t {
|
||||
/**
|
||||
* @property {theme_t*} theme_obj
|
||||
* @annotation ["get_prop"]
|
||||
* 窗口的常量主题数据。
|
||||
* 窗口的常量窗体样式数据。
|
||||
*
|
||||
*>
|
||||
*把主题管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载主题资源的问题。
|
||||
*把窗体样式管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载窗体样式资源的问题。
|
||||
*/
|
||||
theme_t* theme_obj;
|
||||
|
||||
|
@ -57,7 +57,7 @@ typedef enum _asset_type_t {
|
||||
|
||||
/**
|
||||
* @const ASSET_TYPE_STYLE
|
||||
* 主题资源。
|
||||
* 窗体样式资源。
|
||||
*/
|
||||
ASSET_TYPE_STYLE,
|
||||
|
||||
|
@ -32,7 +32,7 @@ BEGIN_C_DECLS
|
||||
* @annotation ["scriptable","design","widget"]
|
||||
* 色块控件。
|
||||
*
|
||||
* 用来显示一个颜色块,它通过属性而不是主题来设置颜色,方便在运行时动态改变颜色。
|
||||
* 用来显示一个颜色块,它通过属性而不是窗体样式来设置颜色,方便在运行时动态改变颜色。
|
||||
*
|
||||
* 可以使用value属性访问背景颜色的颜色值。
|
||||
*
|
||||
|
@ -125,7 +125,7 @@ typedef ret_t (*combo_box_custom_on_layout_combobox_popup_t)(widget_t* combobox)
|
||||
* </combo_box>
|
||||
* ```
|
||||
*
|
||||
* * 1.combobox的下拉按钮的style名称为combobox_down,可以在主题文件中设置。
|
||||
* * 1.combobox的下拉按钮的style名称为combobox_down,可以在窗体样式文件中设置。
|
||||
*
|
||||
* ```xml
|
||||
* <button>
|
||||
@ -137,7 +137,7 @@ typedef ret_t (*combo_box_custom_on_layout_combobox_popup_t)(widget_t* combobox)
|
||||
* </button>
|
||||
* ```
|
||||
*
|
||||
* * 2.combobox的弹出popup窗口的style名称为combobox_popup,可以在主题文件中设置。
|
||||
* * 2.combobox的弹出popup窗口的style名称为combobox_popup,可以在窗体样式文件中设置。
|
||||
*
|
||||
* ```xml
|
||||
* <popup>
|
||||
|
@ -38,7 +38,7 @@ BEGIN_C_DECLS
|
||||
*
|
||||
* overlay\_t是[window\_base\_t](window_base_t.md)的子类控件,window\_base\_t的函数均适用于overlay\_t控件。
|
||||
*
|
||||
* 在xml中使用"overlay"标签创建窗口。需要指定坐标和大小,可以指定主题和动画名称。如:
|
||||
* 在xml中使用"overlay"标签创建窗口。需要指定坐标和大小,可以指定窗体样式和动画名称。如:
|
||||
*
|
||||
* ```xml
|
||||
* <overlay theme="basic" x="100" y="100" w="200" h="300">
|
||||
|
@ -1395,7 +1395,7 @@
|
||||
"props": [
|
||||
{
|
||||
"name": "theme",
|
||||
"desc": "主题资源的名称。\n每个窗口都可以有独立的主题文件,如果没指定,则使用系统缺省的主题文件。\n主题是一个XML文件,放在assets/raw/styles目录下。\n请参考[主题](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)",
|
||||
"desc": "窗体样式资源的名称。\n每个窗口都可以有独立的窗体样式文件,如果没指定,则使用系统缺省的窗体样式文件。\n窗体样式是一个XML文件,放在assets/raw/styles目录下。\n请参考[窗体样式](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)",
|
||||
"type": "char*"
|
||||
},
|
||||
{
|
||||
|
@ -14081,12 +14081,12 @@
|
||||
"constructor": true,
|
||||
"scriptable": true
|
||||
},
|
||||
"desc": "获取缺省的主题对象。",
|
||||
"desc": "获取缺省的窗体样式对象。",
|
||||
"name": "theme",
|
||||
"alias": "theme_instance",
|
||||
"return": {
|
||||
"type": "theme_t*",
|
||||
"desc": "返回主题对象。"
|
||||
"desc": "返回窗体样式对象。"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -14094,11 +14094,11 @@
|
||||
{
|
||||
"type": "theme_t*",
|
||||
"name": "theme",
|
||||
"desc": "主题对象。"
|
||||
"desc": "窗体样式对象。"
|
||||
}
|
||||
],
|
||||
"annotation": {},
|
||||
"desc": "设置缺省的主题对象。",
|
||||
"desc": "设置缺省的窗体样式对象。",
|
||||
"name": "theme_set",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -14110,17 +14110,17 @@
|
||||
{
|
||||
"type": "const uint8_t*",
|
||||
"name": "data",
|
||||
"desc": "主题数据。"
|
||||
"desc": "窗体样式数据。"
|
||||
}
|
||||
],
|
||||
"annotation": {
|
||||
"constructor": true
|
||||
},
|
||||
"desc": "创建主题对象。",
|
||||
"desc": "创建窗体样式对象。",
|
||||
"name": "theme_create",
|
||||
"return": {
|
||||
"type": "theme_t*",
|
||||
"desc": "返回主题对象。"
|
||||
"desc": "返回窗体样式对象。"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -14128,22 +14128,22 @@
|
||||
{
|
||||
"type": "theme_t*",
|
||||
"name": "theme",
|
||||
"desc": "主题对象。"
|
||||
"desc": "窗体样式对象。"
|
||||
},
|
||||
{
|
||||
"type": "const uint8_t*",
|
||||
"name": "data",
|
||||
"desc": "主题数据。"
|
||||
"desc": "窗体样式数据。"
|
||||
}
|
||||
],
|
||||
"annotation": {
|
||||
"constructor": true
|
||||
},
|
||||
"desc": "初始化主题对象。",
|
||||
"desc": "初始化窗体样式对象。",
|
||||
"name": "theme_init",
|
||||
"return": {
|
||||
"type": "theme_t*",
|
||||
"desc": "返回主题对象。"
|
||||
"desc": "返回窗体样式对象。"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -14151,7 +14151,7 @@
|
||||
{
|
||||
"type": "theme_t*",
|
||||
"name": "data",
|
||||
"desc": "主题对象。"
|
||||
"desc": "窗体样式对象。"
|
||||
},
|
||||
{
|
||||
"type": "const char*",
|
||||
@ -14174,7 +14174,7 @@
|
||||
"name": "theme_find_style",
|
||||
"return": {
|
||||
"type": "theme_t*",
|
||||
"desc": "返回主题对象。"
|
||||
"desc": "返回窗体样式对象。"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -14182,11 +14182,11 @@
|
||||
{
|
||||
"type": "theme_t*",
|
||||
"name": "theme",
|
||||
"desc": "主题对象。"
|
||||
"desc": "窗体样式对象。"
|
||||
}
|
||||
],
|
||||
"annotation": {},
|
||||
"desc": "析构主题对象。",
|
||||
"desc": "析构窗体样式对象。",
|
||||
"name": "theme_deinit",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -14198,11 +14198,11 @@
|
||||
{
|
||||
"type": "theme_t*",
|
||||
"name": "theme",
|
||||
"desc": "主题对象。"
|
||||
"desc": "窗体样式对象。"
|
||||
}
|
||||
],
|
||||
"annotation": {},
|
||||
"desc": "析构并释放主题对象。",
|
||||
"desc": "析构并释放窗体样式对象。",
|
||||
"name": "theme_destroy",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -14213,7 +14213,7 @@
|
||||
"events": [],
|
||||
"properties": [],
|
||||
"header": "base/theme.h",
|
||||
"desc": "主题。\n\n负责管理缺省的主题数据,方便实现style\\_const。",
|
||||
"desc": "窗体样式。\n\n负责管理缺省的窗体样式数据,方便实现style\\_const。",
|
||||
"name": "theme_t",
|
||||
"annotation": {
|
||||
"scriptable": true
|
||||
@ -18216,7 +18216,7 @@
|
||||
"name": "WIDGET_PROP_STATE_FOR_STYLE"
|
||||
},
|
||||
{
|
||||
"desc": "窗口主题名称。",
|
||||
"desc": "窗口窗体样式名称。",
|
||||
"name": "WIDGET_PROP_THEME"
|
||||
},
|
||||
{
|
||||
@ -18240,11 +18240,11 @@
|
||||
"name": "WIDGET_PROP_FONT_MANAGER"
|
||||
},
|
||||
{
|
||||
"desc": "窗口的主题对象。",
|
||||
"desc": "窗口的窗体样式对象。",
|
||||
"name": "WIDGET_PROP_THEME_OBJ"
|
||||
},
|
||||
{
|
||||
"desc": "缺省的主题对象。",
|
||||
"desc": "缺省的窗体样式对象。",
|
||||
"name": "WIDGET_PROP_DEFAULT_THEME_OBJ"
|
||||
},
|
||||
{
|
||||
@ -26914,7 +26914,7 @@
|
||||
"name": "ASSET_TYPE_IMAGE"
|
||||
},
|
||||
{
|
||||
"desc": "主题资源。",
|
||||
"desc": "窗体样式资源。",
|
||||
"name": "ASSET_TYPE_STYLE"
|
||||
},
|
||||
{
|
||||
@ -41344,7 +41344,7 @@
|
||||
"events": [],
|
||||
"properties": [],
|
||||
"header": "base/assets_manager.h",
|
||||
"desc": "资源管理器。\n这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、主题、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:\n\n* 让上层不需要了解存储的方式。\n在没有文件系统时或者内存紧缺时,把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时,资源放在文件系统中。在有网络时,资源也可以存放在服务器上(暂未实现)。资源管理器为上层提供统一的接口,让上层而不用关心底层的存储方式。\n\n* 让上层不需要了解资源的具体格式。\n比如一个名为earth的图片,没有文件系统或内存紧缺,图片直接用位图数据格式存在ROM中,而有文件系统时,则用PNG格式存放在文件系统中。资源管理器让上层不需要关心图片的格式,访问时指定图片的名称即可(不用指定扩展名)。\n\n* 让上层不需要了解屏幕的密度。\n不同的屏幕密度下需要加载不同的图片,比如MacPro的Retina屏就需要用双倍解析度的图片,否则就出现界面模糊。AWTK以后会支持PC软件和手机软件的开发,所以资源管理器需要为此提供支持,让上层不需关心屏幕的密度。\n\n* 对资源进行内存缓存。\n不同类型的资源使用方式是不一样的,比如字体和主题加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。\n\n当从文件系统加载资源时,目录结构要求如下:\n\n```\nassets/{theme}/raw/\nfonts 字体\nimages 图片\nx1 普通密度屏幕的图片。\nx2 2倍密度屏幕的图片。\nx3 3倍密度屏幕的图片。\nxx 密度无关的图片。\nstrings 需要翻译的字符串。\nstyles 主题数据。\nui UI描述数据。\n```",
|
||||
"desc": "资源管理器。\n这里的资源管理器并非Windows下的文件浏览器,而是负责对各种资源,比如字体、窗体样式、图片、界面数据、字符串和其它数据的进行集中管理的组件。引入资源管理器的目的有以下几个:\n\n* 让上层不需要了解存储的方式。\n在没有文件系统时或者内存紧缺时,把资源转成常量数组直接编译到代码中。在有文件系统而且内存充足时,资源放在文件系统中。在有网络时,资源也可以存放在服务器上(暂未实现)。资源管理器为上层提供统一的接口,让上层而不用关心底层的存储方式。\n\n* 让上层不需要了解资源的具体格式。\n比如一个名为earth的图片,没有文件系统或内存紧缺,图片直接用位图数据格式存在ROM中,而有文件系统时,则用PNG格式存放在文件系统中。资源管理器让上层不需要关心图片的格式,访问时指定图片的名称即可(不用指定扩展名)。\n\n* 让上层不需要了解屏幕的密度。\n不同的屏幕密度下需要加载不同的图片,比如MacPro的Retina屏就需要用双倍解析度的图片,否则就出现界面模糊。AWTK以后会支持PC软件和手机软件的开发,所以资源管理器需要为此提供支持,让上层不需关心屏幕的密度。\n\n* 对资源进行内存缓存。\n不同类型的资源使用方式是不一样的,比如字体和窗体样式加载之后会一直使用,UI文件在生成界面之后就暂时不需要了,PNG文件解码之后就只需要保留解码的位图数据即可。资源管理器配合图片管理器等其它组件实现资源的自动缓存。\n\n当从文件系统加载资源时,目录结构要求如下:\n\n```\nassets/{theme}/raw/\nfonts 字体\nimages 图片\nx1 普通密度屏幕的图片。\nx2 2倍密度屏幕的图片。\nx3 3倍密度屏幕的图片。\nxx 密度无关的图片。\nstrings 需要翻译的字符串。\nstyles 窗体样式数据。\nui UI描述数据。\n```",
|
||||
"name": "assets_manager_t",
|
||||
"parent": "emitter_t",
|
||||
"annotation": {
|
||||
@ -42791,7 +42791,7 @@
|
||||
"events": [],
|
||||
"properties": [],
|
||||
"header": "base/style_const.h",
|
||||
"desc": "只读的style,从theme\\_t中获取数据。\n\ntools/theme_gen用于把XML的主题数据转换成常量数据。",
|
||||
"desc": "只读的style,从theme\\_t中获取数据。\n\ntools/theme_gen用于把XML的窗体样式数据转换成常量数据。",
|
||||
"name": "style_const_t",
|
||||
"parent": "style_t",
|
||||
"level": 2
|
||||
@ -43546,7 +43546,7 @@
|
||||
"properties": [
|
||||
{
|
||||
"name": "theme",
|
||||
"desc": "主题资源的名称。\n每个窗口都可以有独立的主题文件,如果没指定,则使用系统缺省的主题文件。\n主题是一个XML文件,放在assets/raw/styles目录下。\n请参考[主题](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)",
|
||||
"desc": "窗体样式资源的名称。\n每个窗口都可以有独立的窗体样式文件,如果没指定,则使用系统缺省的窗体样式文件。\n窗体样式是一个XML文件,放在assets/raw/styles目录下。\n请参考[窗体样式](https://github.com/zlgopen/awtk/blob/master/docs/theme.md)",
|
||||
"type": "char*",
|
||||
"annotation": {
|
||||
"set_prop": true,
|
||||
@ -43620,7 +43620,7 @@
|
||||
},
|
||||
{
|
||||
"name": "theme_obj",
|
||||
"desc": "窗口的常量主题数据。\n\n>\n把主题管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载主题资源的问题。",
|
||||
"desc": "窗口的常量窗体样式数据。\n\n>\n把窗体样式管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载窗体样式资源的问题。",
|
||||
"type": "theme_t*",
|
||||
"annotation": {
|
||||
"get_prop": true
|
||||
@ -55721,7 +55721,7 @@
|
||||
}
|
||||
],
|
||||
"header": "widgets/color_tile.h",
|
||||
"desc": "色块控件。\n\n用来显示一个颜色块,它通过属性而不是主题来设置颜色,方便在运行时动态改变颜色。\n\n可以使用value属性访问背景颜色的颜色值。\n\ncolor\\_tile\\_t是[widget\\_t](widget_t.md)的子类控件,widget\\_t的函数均适用于color\\_tile\\_t控件。\n\n在xml中使用\"color_tile\"标签创建色块控件。如:\n\n```xml\n<color_tile x=\"c\" y=\"m\" w=\"80\" h=\"30\" bg_color=\"green\" />\n```\n\n> 更多用法请参考:\n[color_tile](https://github.com/zlgopen/awtk/blob/master/design/default/ui/color_picker_rgb.xml)\n\n在c代码中使用函数color_tile\\_create创建色块控件。如:\n\n```c\nwidget_t* color_tile = color_tile_create(win, 10, 10, 128, 30);\ncolor_tile_set_bg_color(color_tile, \"red\");\n```\n> 创建之后,用color\\_tile\\_set\\_bg\\_color设置背景颜色。",
|
||||
"desc": "色块控件。\n\n用来显示一个颜色块,它通过属性而不是窗体样式来设置颜色,方便在运行时动态改变颜色。\n\n可以使用value属性访问背景颜色的颜色值。\n\ncolor\\_tile\\_t是[widget\\_t](widget_t.md)的子类控件,widget\\_t的函数均适用于color\\_tile\\_t控件。\n\n在xml中使用\"color_tile\"标签创建色块控件。如:\n\n```xml\n<color_tile x=\"c\" y=\"m\" w=\"80\" h=\"30\" bg_color=\"green\" />\n```\n\n> 更多用法请参考:\n[color_tile](https://github.com/zlgopen/awtk/blob/master/design/default/ui/color_picker_rgb.xml)\n\n在c代码中使用函数color_tile\\_create创建色块控件。如:\n\n```c\nwidget_t* color_tile = color_tile_create(win, 10, 10, 128, 30);\ncolor_tile_set_bg_color(color_tile, \"red\");\n```\n> 创建之后,用color\\_tile\\_set\\_bg\\_color设置背景颜色。",
|
||||
"name": "color_tile_t",
|
||||
"parent": "widget_t",
|
||||
"annotation": {
|
||||
@ -59520,7 +59520,7 @@
|
||||
"static": true,
|
||||
"scriptable": true
|
||||
},
|
||||
"desc": "显示『短暂提示信息』对话框。\n\n主题由dialog_toast.xml文件决定。",
|
||||
"desc": "显示『短暂提示信息』对话框。\n\n窗体样式由dialog_toast.xml文件决定。",
|
||||
"name": "dialog_toast",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -59544,7 +59544,7 @@
|
||||
"static": true,
|
||||
"scriptable": true
|
||||
},
|
||||
"desc": "显示『提示信息』对话框。\n\n主题由dialog_info.xml文件决定。",
|
||||
"desc": "显示『提示信息』对话框。\n\n窗体样式由dialog_info.xml文件决定。",
|
||||
"name": "dialog_info",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -59568,7 +59568,7 @@
|
||||
"static": true,
|
||||
"scriptable": true
|
||||
},
|
||||
"desc": "显示『警告』对话框。\n\n主题由dialog_warn.xml文件决定。",
|
||||
"desc": "显示『警告』对话框。\n\n窗体样式由dialog_warn.xml文件决定。",
|
||||
"name": "dialog_warn",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -59592,7 +59592,7 @@
|
||||
"static": true,
|
||||
"scriptable": true
|
||||
},
|
||||
"desc": "显示『确认』对话框。\n\n主题由dialog_confirm.xml文件决定。",
|
||||
"desc": "显示『确认』对话框。\n\n窗体样式由dialog_confirm.xml文件决定。",
|
||||
"name": "dialog_confirm",
|
||||
"return": {
|
||||
"type": "ret_t",
|
||||
@ -60645,7 +60645,7 @@
|
||||
}
|
||||
],
|
||||
"header": "base/window.h",
|
||||
"desc": "窗口。\n\n缺省的应用程序窗口,占用除system\\_bar\\_t之外的整个区域,请不要修改它的位置和大小(除非你清楚后果)。\n\nwindow\\_t是[window\\_base\\_t](window_base_t.md)的子类控件,window\\_base\\_t的函数均适用于window\\_t控件。\n\n在xml中使用\"window\"标签创建窗口。无需指定坐标和大小,可以指定主题和动画名称。如:\n\n```xml\n<window theme=\"basic\" anim_hint=\"htranslate\">\n...\n</window>\n```\n\n>\n更多用法请参考:[window.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/)\n\n在c代码中使用函数window\\_create创建窗口。如:\n\n```c\nwidget_t* window = window_create(NULL, 0, 0, 0, 0);\n```\n\n> 无需指定父控件、坐标和大小,使用0即可。\n\n> 完整示例请参考:[window\ndemo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/)\n\n可用通过style来设置窗口的风格,如背景颜色或图片等。如:\n\n```xml\n<style name=\"bricks\">\n<normal bg_image=\"bricks\" bg_image_draw_type=\"repeat\"/>\n</style>\n```\n\n> 更多用法请参考:[theme\ndefault](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L0)",
|
||||
"desc": "窗口。\n\n缺省的应用程序窗口,占用除system\\_bar\\_t之外的整个区域,请不要修改它的位置和大小(除非你清楚后果)。\n\nwindow\\_t是[window\\_base\\_t](window_base_t.md)的子类控件,window\\_base\\_t的函数均适用于window\\_t控件。\n\n在xml中使用\"window\"标签创建窗口。无需指定坐标和大小,可以指定窗体样式和动画名称。如:\n\n```xml\n<window theme=\"basic\" anim_hint=\"htranslate\">\n...\n</window>\n```\n\n>\n更多用法请参考:[window.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/)\n\n在c代码中使用函数window\\_create创建窗口。如:\n\n```c\nwidget_t* window = window_create(NULL, 0, 0, 0, 0);\n```\n\n> 无需指定父控件、坐标和大小,使用0即可。\n\n> 完整示例请参考:[window\ndemo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/)\n\n可用通过style来设置窗口的风格,如背景颜色或图片等。如:\n\n```xml\n<style name=\"bricks\">\n<normal bg_image=\"bricks\" bg_image_draw_type=\"repeat\"/>\n</style>\n```\n\n> 更多用法请参考:[theme\ndefault](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L0)",
|
||||
"name": "window_t",
|
||||
"parent": "window_base_t",
|
||||
"annotation": {
|
||||
@ -63182,7 +63182,7 @@
|
||||
}
|
||||
],
|
||||
"header": "widgets/combo_box.h",
|
||||
"desc": "下拉列表控件。\n\n点击右边的按钮,可弹出一个下拉列表,从中选择一项作为当前的值。\n\ncombo\\_box\\_t是[edit\\_t](edit_t.md)的子类控件,edit\\_t的函数均适用于combo\\_box\\_t控件。\n\n在xml中使用\"combo_box\"标签创建下拉列表控件。\n\n列表选项可以直接写在\"options\"属性中。如:\n\n```xml\n<combo_box readonly=\"true\" x=\"10\" y=\"bottom:5\" w=\"200\" h=\"30\" tr_text=\"ok\"\noptions=\"1:ok;2:cancel;\"/>\n```\n\n列表选项也可以放在独立的窗口中,用属性\"open_window\"指定窗口的名称。如:\n\n```xml\n<combo_box open_window=\"language\" readonly=\"true\" x=\"10\" y=\"bottom:50\" w=\"200\" h=\"30\"\ntr_text=\"english\"/>\n```\n\nlanguage.xml:\n\n```xml\n<popup close_when_click_outside=\"true\" h=\"80\" >\n<list_view x=\"0\" y=\"0\" w=\"100%\" h=\"100%\" item_height=\"30\">\n<scroll_view name=\"view\" x=\"0\" y=\"0\" w=\"-12\" h=\"100%\">\n<combo_box_item tr_text=\"english\"/>\n<combo_box_item tr_text=\"chinese\" />\n</scroll_view>\n<scroll_bar_d name=\"bar\" x=\"right\" y=\"0\" w=\"12\" h=\"100%\" value=\"0\"/>\n</list_view>\n</popup>\n```\n\n> 更多用法请参考:[combo_box.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/combo_box.xml)\n\n\n\n如果在文本比较长时,希望在获得焦点时文本自动滚动,可以放入一个hscroll_label为子控件,并命名为\"value\"。如:\n\n```xml\n<combo_box left_margin=\"6\" readonly=\"true\" x=\"10\" y=\"50\" w=\"80\" h=\"30\" options=\"leftttttttttt;centerrrrrrrrrrrrrrrr;rightttttttttt;\"\nselected_index=\"1\">\n<hscroll_label x=\"0\" y=\"0\" w=\"-30\" h=\"100%\"\nname=\"value\"\nlull=\"1000\"\nloop=\"true\"\nyoyo=\"true\"\nellipses=\"true\"\nonly_parent_focus=\"true\"/>\n<button style=\"combobox_down\" x=\"right:5\" y=\"middle\" w=\"20\" h=\"20\"/>\n</combo_box>\n```\n\n在c代码中使用函数combo\\_box\\_create创建下拉列表控件。如:\n\n```c\nwidget_t* combo_box = combo_box_create(win, 10, 10, 128, 30);\n\ncombo_box_set_options(combo_box, \"left;center;right;\");\ncombo_box_set_selected_index(combo_box, 1);\n\n```\n\n创建之后:\n\n* 用combo\\_box\\_set\\_options设置可选项目。\n* 用combo\\_box\\_set\\_selected\\_index设置缺省项。\n\n> 完整示例请参考:[combo_box\ndemo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/combo_box.c)\n\n可用通过style来设置控件的显示风格,如字体的大小和颜色等等。如:\n\n```xml\n<combo_box>\n<style name=\"default\" border_color=\"#a0a0a0\" text_color=\"black\" text_align_h=\"left\">\n<normal bg_color=\"#f0f0f0\" />\n<focused bg_color=\"#f0f0f0\" border_color=\"black\"/>\n<empty bg_color=\"#f0f0f0\" text_color=\"#a0a0a0\" />\n</style>\n</combo_box>\n```\n\n* 1.combobox的下拉按钮的style名称为combobox_down,可以在主题文件中设置。\n\n```xml\n<button>\n<style name=\"combobox_down\" border_color=\"#a0a0a0\">\n<normal bg_color=\"#f0f0f0\" icon=\"arrow_down_n\"/>\n<pressed bg_color=\"#c0c0c0\" icon=\"arrow_down_p\"/>\n<over bg_color=\"#e0e0e0\" icon=\"arrow_down_o\"/>\n</style>\n</button>\n```\n\n* 2.combobox的弹出popup窗口的style名称为combobox_popup,可以在主题文件中设置。\n\n```xml\n<popup>\n<style name=\"combobox_popup\" border_color=\"red\">\n<normal bg_color=\"#808080\"/>\n</style>\n</popup>\n```\n\n> 更多用法请参考:[theme\ndefault](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L422)",
|
||||
"desc": "下拉列表控件。\n\n点击右边的按钮,可弹出一个下拉列表,从中选择一项作为当前的值。\n\ncombo\\_box\\_t是[edit\\_t](edit_t.md)的子类控件,edit\\_t的函数均适用于combo\\_box\\_t控件。\n\n在xml中使用\"combo_box\"标签创建下拉列表控件。\n\n列表选项可以直接写在\"options\"属性中。如:\n\n```xml\n<combo_box readonly=\"true\" x=\"10\" y=\"bottom:5\" w=\"200\" h=\"30\" tr_text=\"ok\"\noptions=\"1:ok;2:cancel;\"/>\n```\n\n列表选项也可以放在独立的窗口中,用属性\"open_window\"指定窗口的名称。如:\n\n```xml\n<combo_box open_window=\"language\" readonly=\"true\" x=\"10\" y=\"bottom:50\" w=\"200\" h=\"30\"\ntr_text=\"english\"/>\n```\n\nlanguage.xml:\n\n```xml\n<popup close_when_click_outside=\"true\" h=\"80\" >\n<list_view x=\"0\" y=\"0\" w=\"100%\" h=\"100%\" item_height=\"30\">\n<scroll_view name=\"view\" x=\"0\" y=\"0\" w=\"-12\" h=\"100%\">\n<combo_box_item tr_text=\"english\"/>\n<combo_box_item tr_text=\"chinese\" />\n</scroll_view>\n<scroll_bar_d name=\"bar\" x=\"right\" y=\"0\" w=\"12\" h=\"100%\" value=\"0\"/>\n</list_view>\n</popup>\n```\n\n> 更多用法请参考:[combo_box.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/combo_box.xml)\n\n\n\n如果在文本比较长时,希望在获得焦点时文本自动滚动,可以放入一个hscroll_label为子控件,并命名为\"value\"。如:\n\n```xml\n<combo_box left_margin=\"6\" readonly=\"true\" x=\"10\" y=\"50\" w=\"80\" h=\"30\" options=\"leftttttttttt;centerrrrrrrrrrrrrrrr;rightttttttttt;\"\nselected_index=\"1\">\n<hscroll_label x=\"0\" y=\"0\" w=\"-30\" h=\"100%\"\nname=\"value\"\nlull=\"1000\"\nloop=\"true\"\nyoyo=\"true\"\nellipses=\"true\"\nonly_parent_focus=\"true\"/>\n<button style=\"combobox_down\" x=\"right:5\" y=\"middle\" w=\"20\" h=\"20\"/>\n</combo_box>\n```\n\n在c代码中使用函数combo\\_box\\_create创建下拉列表控件。如:\n\n```c\nwidget_t* combo_box = combo_box_create(win, 10, 10, 128, 30);\n\ncombo_box_set_options(combo_box, \"left;center;right;\");\ncombo_box_set_selected_index(combo_box, 1);\n\n```\n\n创建之后:\n\n* 用combo\\_box\\_set\\_options设置可选项目。\n* 用combo\\_box\\_set\\_selected\\_index设置缺省项。\n\n> 完整示例请参考:[combo_box\ndemo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/combo_box.c)\n\n可用通过style来设置控件的显示风格,如字体的大小和颜色等等。如:\n\n```xml\n<combo_box>\n<style name=\"default\" border_color=\"#a0a0a0\" text_color=\"black\" text_align_h=\"left\">\n<normal bg_color=\"#f0f0f0\" />\n<focused bg_color=\"#f0f0f0\" border_color=\"black\"/>\n<empty bg_color=\"#f0f0f0\" text_color=\"#a0a0a0\" />\n</style>\n</combo_box>\n```\n\n* 1.combobox的下拉按钮的style名称为combobox_down,可以在窗体样式文件中设置。\n\n```xml\n<button>\n<style name=\"combobox_down\" border_color=\"#a0a0a0\">\n<normal bg_color=\"#f0f0f0\" icon=\"arrow_down_n\"/>\n<pressed bg_color=\"#c0c0c0\" icon=\"arrow_down_p\"/>\n<over bg_color=\"#e0e0e0\" icon=\"arrow_down_o\"/>\n</style>\n</button>\n```\n\n* 2.combobox的弹出popup窗口的style名称为combobox_popup,可以在窗体样式文件中设置。\n\n```xml\n<popup>\n<style name=\"combobox_popup\" border_color=\"red\">\n<normal bg_color=\"#808080\"/>\n</style>\n</popup>\n```\n\n> 更多用法请参考:[theme\ndefault](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L422)",
|
||||
"name": "combo_box_t",
|
||||
"parent": "edit_t",
|
||||
"annotation": {
|
||||
@ -63442,7 +63442,7 @@
|
||||
}
|
||||
],
|
||||
"header": "widgets/overlay.h",
|
||||
"desc": "overlay窗口。\n\noverlay窗口有点类似于非模态的dialog,但是它位置和大小是完全自由的,窗口管理器不会对它做任何限制。\n\n如果overlay窗口有透明或半透效果,则不支持窗口动画,但可以通过移动窗口位置来实现类似动画的效果。\n\noverlay\\_t是[window\\_base\\_t](window_base_t.md)的子类控件,window\\_base\\_t的函数均适用于overlay\\_t控件。\n\n在xml中使用\"overlay\"标签创建窗口。需要指定坐标和大小,可以指定主题和动画名称。如:\n\n```xml\n<overlay theme=\"basic\" x=\"100\" y=\"100\" w=\"200\" h=\"300\">\n...\n</overlay>\n```\n\n>\n更多用法请参考:[overlay.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/)\n\n在c代码中使用函数overlay\\_create创建窗口。如:\n\n```c\nwidget_t* overlay = overlay_create(NULL, 100, 100, 200, 300);\n```\n\n> 完整示例请参考:[overlay\ndemo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/)\n\n可用通过style来设置窗口的风格,如背景颜色或图片等。如:\n\n```xml\n<style name=\"bricks\">\n<normal bg_image=\"bricks\" bg_image_draw_type=\"repeat\"/>\n</style>\n```\n\n> 更多用法请参考:[theme\ndefault](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L0)",
|
||||
"desc": "overlay窗口。\n\noverlay窗口有点类似于非模态的dialog,但是它位置和大小是完全自由的,窗口管理器不会对它做任何限制。\n\n如果overlay窗口有透明或半透效果,则不支持窗口动画,但可以通过移动窗口位置来实现类似动画的效果。\n\noverlay\\_t是[window\\_base\\_t](window_base_t.md)的子类控件,window\\_base\\_t的函数均适用于overlay\\_t控件。\n\n在xml中使用\"overlay\"标签创建窗口。需要指定坐标和大小,可以指定窗体样式和动画名称。如:\n\n```xml\n<overlay theme=\"basic\" x=\"100\" y=\"100\" w=\"200\" h=\"300\">\n...\n</overlay>\n```\n\n>\n更多用法请参考:[overlay.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/)\n\n在c代码中使用函数overlay\\_create创建窗口。如:\n\n```c\nwidget_t* overlay = overlay_create(NULL, 100, 100, 200, 300);\n```\n\n> 完整示例请参考:[overlay\ndemo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/)\n\n可用通过style来设置窗口的风格,如背景颜色或图片等。如:\n\n```xml\n<style name=\"bricks\">\n<normal bg_image=\"bricks\" bg_image_draw_type=\"repeat\"/>\n</style>\n```\n\n> 更多用法请参考:[theme\ndefault](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L0)",
|
||||
"name": "overlay_t",
|
||||
"parent": "window_base_t",
|
||||
"annotation": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
## 主题生成工具
|
||||
## 窗体样式生成工具
|
||||
|
||||
负责把XML格式的主题数据转换成二进制的主题数据。
|
||||
负责把XML格式的窗体样式数据转换成二进制的窗体样式数据。
|
||||
|
||||
### 用法说明:
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
./bin/themegen input output [bin]
|
||||
```
|
||||
|
||||
* input XML格式的主题数据文件名。
|
||||
* input XML格式的窗体样式数据文件名。
|
||||
* output 输出文件名。
|
||||
* bin 是否生成二进制格式(目标平台有文件系统时使用),缺省生成C语言常量数组。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user