AWTK全称Toolkit AnyWhere,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的GUI引擎。
AWTK寓意有两个方面:
Toolkit AnyWhere。
ZLG物联网操作系统AWorks内置GUI。
AWTK源码仓库:
运行效果截图:
支持开发嵌入式应用程序。
支持开发Linux应用程序。
支持开发MacOS应用程序。
支持开发Windows应用程序。
支持开发Web APP。
支持开发微信小程序。
支持开发支付宝小程序。
支持开发百度小程序。
支持开发Android应用程序。
支持开发iOS应用程序。
支持开发2D小游戏。
1.跨平台
AWTK是跨平台的,这有两个方面的意思:
AWTK本身是跨平台的。目前支持的平台有ZLG AWorks、Windows、Linux、MacOS、嵌入式Linux和嵌入式裸系统,可以轻松的移植到各种RTOS上。AWTK以后也可以运行在浏览器(即将公测)、各种小程序、Android和iOS等平台上运行。
AWTK同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串(UTF8和widechar),事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等,让你用AWTK开发的应用程序可以真正跨平台运行。
2.高效
AWTK通过一系列的手段保证AWTK应用程序高效运行:
通过脏矩算法只更新变化的部分。
支持3 FrameBuffer让界面以最高帧率运行(可选)。
UI描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
支持各种GPU加速接口。如OpenGL、DirectX、Vulman和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.稳定性增强
多个实际项目验证。
新增数百个测试用例。
增加控件运行时类型检查。
使用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上留言,我们会优先安排。
离线
关注这个GUI 很久了, 找机会试一试。
请问楼主是开发awtk 开发团队的吗?
离线
真的很不错
离线
这不是FTK的作者嘛?久仰!
离线
这不是FTK的作者嘛?久仰!
哈哈,遇到熟人了。
离线
关注这个GUI 很久了, 找机会试一试。
请问楼主是开发awtk 开发团队的吗?
是的。谢谢关注。
离线
紧紧跟着大佬的步伐
离线
试了一下demo,效果非常的好。
离线
看过视频,效果很好。李工,这个GUI有没有交流群?
离线
看过视频,效果很好。李工,这个GUI有没有交流群?
谢谢关注。我在README的最下面加了一个微信群的二维码:https://github.com/zlgopen/awtk
离线
duckduckgo 说:看过视频,效果很好。李工,这个GUI有没有交流群?
谢谢关注。我在README的最下面加了一个微信群的二维码:https://github.com/zlgopen/awtk
没找到微信群二维码呢,另外主页上这么漂亮的界面 不知道是否有demo,不知道该如何实现时钟界面。
表盘是个图片吗? 我想实现百分比式的表盘,不知道如何实现
离线
强大得很,跨平台是很大的优势, 以后有项目可以试试
最近编辑记录 dbskcnc (2019-05-29 17:29:46)
离线
商业使用收费吗?
离线
商业使用收费吗?
看授权是LGPL,但是嵌入式环境都是静态编译居多,那么按理说就不能商业使用了,除非跑Linux然后动态加载
离线
介绍上面写着开放源码,免费商用,也不知道后期会不会改变策略
离线
我在全志V3s上,直接运行 demoui, 插入USB鼠标就能点击,这个确实很人性化,不需要任何设置。
但是问题来了,按下鼠标不能左右滑动,而电容触摸屏可以,请教楼主, 是我的操作姿势有问题,还是本来就不行呢?
Windows/Ubuntu 模拟器鼠标操作是可以的.
离线
请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
离线
我在全志V3s上,直接运行 demoui, 插入USB鼠标就能点击,这个确实很人性化,不需要任何设置。
但是问题来了,按下鼠标不能左右滑动,而电容触摸屏可以,请教楼主, 是我的操作姿势有问题,还是本来就不行呢?
Windows/Ubuntu 模拟器鼠标操作是可以的.
可能是移植层的问题,貌似没收到鼠标移动的事件,把它打印出来看看。
离线
请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
scons没这个功能。scons + VSCode挺好用的,你可试试。
离线
rf 说:商业使用收费吗?
看授权是LGPL,但是嵌入式环境都是静态编译居多,那么按理说就不能商业使用了,除非跑Linux然后动态加载
使用LGPL,我的本意是修改了AWTK本身,希望能分享出来。这样大家一起来完善AWTK,做出最好的GUI。
如果你不放心,可以联系我们,我们可以提供免费的商业授权。
离线
jimmy 说:我在全志V3s上,直接运行 demoui, 插入USB鼠标就能点击,这个确实很人性化,不需要任何设置。
但是问题来了,按下鼠标不能左右滑动,而电容触摸屏可以,请教楼主, 是我的操作姿势有问题,还是本来就不行呢?
Windows/Ubuntu 模拟器鼠标操作是可以的.
可能是移植层的问题,貌似没收到鼠标移动的事件,把它打印出来看看。
可是鼠标指针会随着手势移动,应该说收到了移动事件才对,晚点我去看下 log 记录。
离线
ffplay 说:请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
scons没这个功能。scons + VSCode挺好用的,你可试试。
VSCode是导入一个文件夹编辑对吧?可以单步调试吗?
离线
scons 后出现下面问题
scons: Reading SConscript files ...
KeyError: 'NATIVE_WINDOW':
File "/home/gust/F1c200s/ATWK/awtk-linux-fb/SConstruct", line 45:
SConscript(SConscriptFiles)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:
return method(*args, **kw)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:
return _SConscript(self.fs, *files, **subst_kw)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 260:
exec _file_ in call_stack[-1].globals
File "/home/gust/F1c200s/ATWK/awtk-linux-fb/build/var/awtk/src/SConscript", line 8:
NATIVE_WINDOW = os.environ['NATIVE_WINDOW'];
File "/usr/lib/python2.7/UserDict.py", line 40:
raise KeyError(key)
离线
准备新项目上使用这个AWTK...
离线
@k455619
KeyError: 'NATIVE_WINDOW':
NATIVE_WINDOW = os.environ['NATIVE_WINDOW'];
说明字典(???) os.environ 中, 键值(???) NATIVE_WINDOW 不存在,
是不是awtk_config.py 中这行没有执行:
os.environ['NATIVE_WINDOW'] = NATIVE_WINDOW;
离线
我这里没问题啊。你用的最新代码吗?难道是 python2.7的问题?
@k455619
离线
lixianjing 说:ffplay 说:请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
scons没这个功能。scons + VSCode挺好用的,你可试试。
VSCode是导入一个文件夹编辑对吧?可以单步调试吗?
在AWTK目录,右键打开“Open With Code”。
在launch.json加入:
{
"name": "(Windows) demoui.exe",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/demoui.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
},
离线
我这里没问题啊。你用的最新代码吗?难道是 python2.7的问题?
@k455619
并不是最新的,下周试试最新的看下
离线
@k455619
KeyError: 'NATIVE_WINDOW':
NATIVE_WINDOW = os.environ['NATIVE_WINDOW'];说明字典(???) os.environ 中, 键值(???) NATIVE_WINDOW 不存在,
是不是awtk_config.py 中这行没有执行:
os.environ['NATIVE_WINDOW'] = NATIVE_WINDOW;
好像就是python找不到这个NATIVE_WINDOW key 报错了,但是其实是有这个key的吧,下周我试试最新的ATWK
离线
V3s使用这个
屏幕白一下之后就黑了 啥也不显示 是怎么回事呢
# ./release/bin/demoui
app_root_is_valid:43 app_root != NULL
try /mnt/awtk
try /mnt/awtk/release/bin
app_root=/mnt/awtk/release
!!!Asset [name=en_US type=strings] not exist!!!
!!!Asset [name=en type=strings] not exist!!!
fb_info_t: /dev/fb0
fb_info_t: xres=480 yres=272 bits_per_pixel=32 mem_size=522240
fb_info_t: red(16 8) green(8 8) blue(0 8)
line_length=1920 mem_size=522240 smem_len=522240
xres_virtual =480 yres_virtual=272 xpanstep=0 ywrapstep=0
ratio=1.000000 480 272
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
Build at: Oct 21 2019 12:14:02
assets_manager_preload:626 info != NULL
assets_manager_preload:626 info != NULL
!!!Asset [name=preload type=ui] not exist!!!
ui_loader_load_widget:38 ui != NULL
!!!Asset [name=cursor type=image] not exist!!!
window_manager_default_set_cursor:997 image_manager_get_bitmap(image_manager(), cursor, &bitmap) == RET_OK
theme_find_style:89 t != NULL && t->data != NULL
!!!Asset [name=cursor type=image] not exist!!!
window_manager_paint_cursor:531 image_manager_get_bitmap(image_manager(), wm->cursor, &bitmap) == RET_OK
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=0, fd=-1, filename=/dev/input/mice)
Print mouse: : Success
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=earth type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=dialog_title type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=rgb type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=rgba type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=system_bar type=ui] not exist!!!
ui_loader_load_widget:38 ui != NULL
!!!Asset [name=main type=ui] not exist!!!
ui_loader_load_widget:38 ui != NULL
widget_on:936 widget != NULL && on_event != NULL
widget_on:936 widget != NULL && on_event != NULL
widget_foreach:2154 widget != NULL && visit != NULL
widget_get_type:2809 widget != NULL && widget->vt != NULL
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
离线
点击触摸屏是有log输出的
就是屏幕一片黑 啥也不显示
从 log 上面看, 没有相关的日志输出.
我在 S3 上面跑过, 一切正常。
还直接支持USB鼠标。
离线
点击触摸屏是有log输出的
就是屏幕一片黑 啥也不显示晕哥 说:从 log 上面看, 没有相关的日志输出.
我在 S3 上面跑过, 一切正常。
还直接支持USB鼠标。
貌似资源文件没找到。是用release.sh生成的zip包吗?
离线
是的 我是按照这个步骤来的
==============================================
使用方法
1.获取源码
git clone https://github.com/zlgopen/awtk.git
git clone https://github.com/zlgopen/awtk-examples.git
git clone https://github.com/zlgopen/awtk-linux-fb.git
cd awtk-linux-fb
2.编辑 awtk_config.py 设置工具链的路径
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
3.编辑 awtk-port/main_loop_linux.c 修改输入设备的文件名
#define FB_DEVICE_FILENAME "/dev/fb0"
#define TS_DEVICE_FILENAME "/dev/input/event0"
#define KB_DEVICE_FILENAME "/dev/input/event1"
4.编译(请先安装scons)
生成内置 demoui 例子,生成结果在 build/bin 文件夹下的 demoui 文件
scons
5.生成发布包
对于内置的 demoui 例子
./release.sh
6.运行
把 release.tar.gz 上传到开发板,并解压,然后运行:
./release/bin/demoui
a32425262 说:点击触摸屏是有log输出的
就是屏幕一片黑 啥也不显示晕哥 说:从 log 上面看, 没有相关的日志输出.
我在 S3 上面跑过, 一切正常。
还直接支持USB鼠标。
貌似资源文件没找到。是用release.sh生成的zip包吗?
离线
我现在有个问题
/dev/root 11.5M 5.1M 6.4M 44% /
ATWK有没有小点的DEMO?
离线
是哦 这么大的话 感觉和QT差不多了
是有点大, arm-linux-strip 处理一下, 删除调试符号,看还能不能变小一点。
离线
2019-10-24早8:26
删除全部,重新下载后,无法编译了,函数声明和定义不一样的,此处我的修改的是
build/var/awtk/src/base/widget.c文件的
ret_t widget_off_by_tag(widget_t* widget, int32_t tag)
为
ret_t widget_off_by_tag(widget_t* widget, uint32_t tag)
然后编译通过
# scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
/opt/gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -o build/var/awtk/src/base/widget.o -c -std=gnu99 -g -Wall -Os -DHAS_STD_MALLOC -DWITH_FS_RES -DHAS_STDIO -DWITH_VGCANVAS -DWITH_UNICODE_BREAK -DLINUX -DSTBTT_STATIC -DSTB_IMAGE_STATIC -DWITH_STB_IMAGE -DWITH_STB_FONT -DWITH_NANOVG_AGGE -DWITH_WIDGET_TYPE_CHECK -DLINUX -DHAS_PTHREAD -DENABLE_CURSOR -DHAS_TSLIB -I/opt/tslib/include -I/workdir/awtk/awtk -I/workdir/awtk/awtk/src -I/workdir/awtk/awtk/3rd -I/workdir/awtk/awtk/src/ext_widgets -I/workdir/awtk/awtk/tools -I/workdir/awtk/awtk/3rd/agge -I/workdir/awtk/awtk/3rd/agg/include -I/workdir/awtk/awtk/3rd/nanovg -I/workdir/awtk/awtk/3rd/nanovg/base -I/workdir/awtk/awtk/3rd/libunibreak -I/workdir/awtk/awtk/3rd/gpinyin/include build/var/awtk/src/base/widget.c
build/var/awtk/src/base/widget.c: In function 'widget_set_theme':
build/var/awtk/src/base/widget.c:392:15: warning: unused variable 'vgcanvas' [-Wunused-variable]
vgcanvas_t* vgcanvas = canvas_get_vgcanvas(canvas);
^~~~~~~~
build/var/awtk/src/base/widget.c: At top level:
build/var/awtk/src/base/widget.c:961:7: error: conflicting types for 'widget_off_by_tag'
ret_t widget_off_by_tag(widget_t* widget, int32_t tag) {
^~~~~~~~~~~~~~~~~
In file included from build/var/awtk/src/base/widget.c:33:0:
/workdir/awtk/awtk/src/base/widget.h:1210:7: note: previous declaration of 'widget_off_by_tag' was here
ret_t widget_off_by_tag(widget_t* widget, uint32_t tag);
^~~~~~~~~~~~~~~~~
scons: *** [build/var/awtk/src/base/widget.o] Error 1
scons: building terminated because of errors.
解压后还是啥都不显示,看来是作者说的对。没有资源文件,以下是打包时候的日志
# ./release.sh
APP_ROOT = ../awtk/demos
‘build/bin/demo1’ -> ‘release/bin/demo1’
‘build/bin/demo_animator’ -> ‘release/bin/demo_animator’
‘build/bin/demo_desktop’ -> ‘release/bin/demo_desktop’
‘build/bin/demo_thread’ -> ‘release/bin/demo_thread’
‘build/bin/demotr’ -> ‘release/bin/demotr’
‘build/bin/demoui’ -> ‘release/bin/demoui’
‘build/bin/demovg’ -> ‘release/bin/demovg’
‘build/bin/input_test’ -> ‘release/bin/input_test’
‘build/bin/mouse_test’ -> ‘release/bin/mouse_test’
‘build/bin/preview_ui’ -> ‘release/bin/preview_ui’
‘build/bin/tslib_test’ -> ‘release/bin/tslib_test’
‘build/bin/xml_to_ui’ -> ‘release/bin/xml_to_ui’
removed ‘release/bin/input_test’
removed ‘release/bin/mouse_test’
removed ‘release/bin/tslib_test’
removed ‘release/bin/demo1’
removed ‘release/bin/demovg’
removed ‘release/bin/demotr’
removed ‘release/bin/demo_animator’
removed ‘release/bin/demo_thread’
removed ‘release/bin/demo_desktop’
cp: cannot stat ‘../awtk/demos/assets/raw/data/*’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/fonts/*’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/images/x1’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/images/xx’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/images/svg/*.bsvg’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/scripts/*’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/strings/*.bin’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/styles/*.bin’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/ui/*.bin’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/xml/*’: No such file or directory
release/
release/bin/
release/bin/preview_ui
release/bin/demoui
release/bin/xml_to_ui
release/assets/
release/assets/raw/
release/assets/raw/strings/
release/assets/raw/styles/
release/assets/raw/xml/
release/assets/raw/data/
release/assets/raw/images/
release/assets/raw/images/svg/
release/assets/raw/scripts/
release/assets/raw/fonts/
release/assets/raw/ui/
那么问题来了,我从哪里拷贝这些资源文件呢
以下是v3s上面的错误日志
# ./release/bin/demo
try /mnt/awtk
try /mnt/awtk/release/bin
app_root=/mnt/awtk/release
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=en_US type=strings] not exist!!!
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=en type=strings] not exist!!!
fb_info_t: /dev/fb0
fb_info_t: xres=480 yres=272 bits_per_pixel=32 mem_size=522240
fb_info_t: red(16 8) green(8 8) blue(0 8)
line_length=1920 mem_size=522240 smem_len=522240
xres_virtual =480 yres_virtual=272 xpanstep=0 ywrapstep=0
ratio=1.000000 480 272
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
assets_manager_preload:681 info != NULL
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
assets_manager_preload:681 info != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=default type=font] not exist!!!
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=default type=font] not exist!!!
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=0, fd=-1, filename=/dev/input/mice)
Print mouse: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
最近编辑记录 a32425262 (2019-10-24 10:23:52)
离线
不好意思,麻烦更新一下AWTK和awtk-linux-fb。
前几天加了多主题实时切换功能,资源加了一级目录,release.sh忘记更新了。
离线
终于可以了,差点从入门到放弃
不好意思,麻烦更新一下AWTK和awtk-linux-fb。
前几天加了多主题实时切换功能,资源加了一级目录,release.sh忘记更新了。
离线
辛苦了,是我的疏忽。
离线
@lixianjing楼主大神,正在学习,想用自定义的数字图片,要用哪个控制来显示呢,我用image image_value label都试过了, 用了个timer,定义刷,或者2个按键+ 或-,在cb函数里面改变显示的图片,但没实现,求指点
代码类似这样
//widget_t* image_temper11 = image_value_create(win, 43, 74, 63, 80);
//image_value_set_image(image_temper11, "dig_");
//image_value_set_value(image_temper11, 3);
widget_t* image_temper11 = image_create(win, 43, 74, 63, 80);
image_set_image(image_temper11, "btn_1_manual");
image_set_draw_type(image_temper11, IMAGE_DRAW_DEFAULT); //IMAGE_DRAW_ICON
timer_add(on_systime_update, win, 2000);
static ret_t on_systime_update(const timer_info_t* timer) {
...
widget_t* image = widget_lookup(win, "image_temper11", TRUE);
if(++level>9)
level=9;
image_set_image(image_temper11, "dig_6");
//image_value_set_value(image_temper11, level);
...
return RET_REPEAT;
}
离线
image_value应该可以啊。遇到什么问题?
最近编辑记录 lixianjing (2019-10-31 14:12:24)
离线
定时刷,图片不会更新,只会显示初始化时候的那张图,后面定时动态更新图片,不会变化,但我猎取系统时间显示是ok的
最近编辑记录 zhenfanhei (2019-10-31 14:49:24)
离线
我测试没问题啊,你参考一下:https://github.com/zlgopen/awtk-c-demos/blob/master/demos/image_value.c
你设置控件的名称了吗?上面的代码没看到。设置名称之后才能用widget_lookup查找:
```
widget_set_name(image_value, "image_temper11");
```
离线
谢谢大神,参照demo已经弄好了,label, image_value都行了
离线
好的,谢谢支持。
离线
编译出来的demo怎么都很大,7M左右
离线
strip是必备技能:
ls -l build/bin/demoui
-rwxr-xr-x 1 l 6870909 Nov 5 01:35 build/bin/demoui
arm-linux-strip build/bin/demoui
ls -l build/bin/demoui
-rwxr-xr-x 1 2063712 Nov 5 01:36 build/bin/demoui
离线
STM32F103用keil编译的代码约170K。
Program Size: Code=173094 RO-data=228930 RW-data=1040 ZI-data=24808
离线
不错,2M还是挺优秀的
离线
arm-linux-gnueabi-strip build/bin/demoui
arm-linux-gnueabi-strip:build/bin/demoui: 不可识别的文件格式
不可识别怎么解决
最近编辑记录 cris8259 (2019-11-05 19:50:42)
离线
arm-linux-gnueabi-strip build/bin/demoui
arm-linux-gnueabi-strip:build/bin/demoui: 不可识别的文件格式不可识别怎么解决
要用工具链配套的strip,如果你编译的PC版本,直接用strip即可。
离线
2.编辑 awtk_config.py 设置工具链的路径
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
按照步骤2改成
#for prebuild tslib
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-'
#TOOLS_PREFIX='/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-'
#for pc build
TOOLS_PREFIX=''
TSLIB_LIB_DIR=''
OS_FLAGS='-g -Wall '
发现TOOLS_PREFIX有两次赋值
离线
有没有简单浅显的入门教程。clone awtk.git awtk-examples.git awtk-linux-fb.git ,这三个文件夹之间有个什么样的关系,文件之间是怎么关联起来的?自己的代码文件应该放在哪里,什么样的文件组织形式比较合适?
离线
https://github.com/zlgopen/awtk-linux-fb 的README里有写啊,三者并列放到同一个目录。
离线
让开发者自己写文档着实难为了。
离线
谢谢支持。我们会持续完善文档。
离线
谢谢支持。我们会持续完善文档。
想问一下大神,串口收到的数据想显示到ATWK界面中,如何操作比较好呢?
能否直接修改win_main.c文件,但是这样感觉软件架构就乱了。。
有没有其他好的方法?
离线
楼主,有个新问题请教, 想把中文字符传到strings.xml里面的%s, 要用什么办法呢?
locale设置的中文,
<string name="Mlti_load1 %s">
<language name="en_US">Mlti_load1 %s</language>
<language name="zh_CN">多功能负载1 %s</language>
代码里面这样:
tk_snprintf(str, sizeof(str), format, "Open"); //可以
widget_set_tr_text(btn, str);
但传中文字符串就不行了, 传strings.xml里面定义过的英文串也不行,还是显示的英文,若传中文串过去则不会显示出来
离线
楼主,有个新问题请教, 想把中文字符传到strings.xml里面的%s, 要用什么办法呢?
locale设置的中文,但传中文字符串就不行了, 传strings.xml里面定义过的英文串也不行,还是显示的英文,若传中文串过去则不会显示出来
中文需要用UTF8编码。
离线
lixianjing 说:谢谢支持。我们会持续完善文档。
想问一下大神,串口收到的数据想显示到ATWK界面中,如何操作比较好呢?
能否直接修改win_main.c文件,但是这样感觉软件架构就乱了。。
有没有其他好的方法?
这个话题很有意思。有空可以玩玩AWTK-MVVM: https://github.com/zlgopen/awtk-mvvm
离线
楼主大神, widget_set_text_utf8 (btn, "打开"); 显示不出来,
widget_set_text_utf8 (btn, "Open"); 能显示,这个可能是什么情况?
可以了,结贴,xx为strings.xml中定义过的串就行了,
widget_set_tr_text(btn, "xx");
最近编辑记录 zhenfanhei (2019-11-07 12:04:38)
离线
楼主大神, widget_set_text_utf8 (btn, "打开"); 显示不出来,
widget_set_text_utf8 (btn, "Open"); 能显示,这个可能是什么情况?可以了,结贴,xx为strings.xml中定义过的串就行了,
widget_set_tr_text(btn, "xx");
1. 用vscode把源文件转换程UTF8-BOM格式。
2. 确认字体中包含中文字库。
离线
折腾几个晚上没有编译过去遇见各种各样的问题,什么编码问题改成utf-8,后来编译还是有错,最后可能是Ubuntu16.4自动的python2.2版本太低了,还没有到上测试。
离线
各路大神,这是什么错误啊?
root@osboxes:/work/EmbedSky/AWTK/awtk-linux-fb# scons
Traceback (most recent call last):
File "/usr/local/bin/scons", line 195, in <module>
import SCons.Script
File "/usr/local/lib/scons/SCons/Script/__init__.py", line 94, in <module>
from . import Main
File "/usr/local/lib/scons/SCons/Script/Main.py", line 1016
except SCons.Errors.StopError as e:
^
SyntaxError: invalid syntax
root@osboxes:/work/EmbedSky/AWTK/awtk-linux-fb#
最近编辑记录 大帅 (2019-12-05 21:16:09)
离线
你好,使用atwk 请指导下,我移植到板子上,出现闪屏的现象。
我使用基于framebuffer实现的 LCD接口 ,目前使用如下,出现闪屏。
platform_create_lcd {
return lcd_mem_bgr565_create_three_fb(w, h, (rt_uint8_t *)frame_buffer0, (rt_uint8_t *)frame_buffer1, (rt_uint8_t *)frame_buffer2);
}
我大致推断是把还没有绘制完的framebuffer,直接刷了。或者在刷的同时,有在更新framebuffer。 求助在哪个位置 获取已经绘制完成的 offline_framebuffer。
离线
学习了。
离线
你好,使用atwk 请指导下,我移植到板子上,出现闪屏的现象。
我使用基于framebuffer实现的 LCD接口 ,目前使用如下,出现闪屏。
platform_create_lcd {
return lcd_mem_bgr565_create_three_fb(w, h, (rt_uint8_t *)frame_buffer0, (rt_uint8_t *)frame_buffer1, (rt_uint8_t *)frame_buffer2);
}我大致推断是把还没有绘制完的framebuffer,直接刷了。或者在刷的同时,有在更新framebuffer。 求助在哪个位置 获取已经绘制完成的 offline_framebuffer。
请问解决了嘛?我使用s3c2440出现问题,倒不是闪屏,刷了一次就完全黑掉了
离线
@lixianjing
刚刚安装了 AWTK Designer,看到许可到期是 2020/5/13
请问到期之后是收费的吗?
还有后期的模式是否为 AWTK Designer软件收费,GUI代码免费呢?
请说明,谢谢了
离线
我的目标板是荔枝zero那么交叉编译的时候awtk-linux-fb里面的中awtk_config.py文件里面的
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
该怎么更改?
离线
这是AWTK在linux平台下的说明文档
# AWTK针对arm-linux平台的移植。
[AWTK](https://github.com/zlgopen/awtk)是为嵌入式系统开发的GUI引擎库。
[awtk-linux-fb](https://github.com/zlgopen/awtk-linux-fb)是AWTK在arm-linux上的移植。
本项目以[ZLG周立功 linux开发套件 AWork平台iMX287A 入门级ARM9开发板](https://item.taobao.com/item.htm?spm=a230r.1.14.1.29c8b3f8qxjYf7&id=536334628394&ns=1&abbucket=17#detail) 为载体移植,其它开发板可能要做些修改,有问题请请创建issue。
## 使用方法
* 1.获取源码
> 以下三者并列放在同一个目录。
```
git clone https://github.com/zlgopen/awtk.git
git clone https://github.com/zlgopen/awtk-examples.git
git clone https://github.com/zlgopen/awtk-linux-fb.git
cd awtk-linux-fb
```
* 2.编辑 awtk_config.py 设置工具链的路径
```
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
```
* 3.编辑 awtk-port/main\_loop\_linux.c 修改输入设备的文件名
```
#define FB_DEVICE_FILENAME "/dev/fb0"
#define TS_DEVICE_FILENAME "/dev/input/event0"
#define KB_DEVICE_FILENAME "/dev/input/event1"
```
* 4.编译(请先安装scons)
生成内置 demoui 例子,生成结果在 build/bin 文件夹下的 demoui 文件
```
scons
```
也可以指定生成其他 Demo,生成结果在 build/bin 文件夹下的 demo 文件
```
scons APP=../awtk-examples/HelloWorld-Demo
```
* 5.生成发布包
对于内置的 demoui 例子
```
sh ./release.sh
```
对于其他 Demo,需要加入资源文件夹参数,指向应用程序 assets 的父目录
```
sh ./release.sh ../awtk-examples/HelloWorld-Demo/res demo
sh ./release.sh ../awtk-examples/Chart-Demo/res_800_480 demo
```
* 6.运行
把 release.tar.gz 上传到开发板,并解压,然后运行:
```
./release/bin/demoui
./release/bin/demo
```
## 其他问题
#### 修改项目路径
默认情况下,scons 脚本假设以下文件夹在同一个目录
```
zlgopen
|-- awtk
|-- awtk-examples
|-- awtk-linux-fb
```
如果实际存放的路径与默认不同,则需要修改以下 awtk-linux-fb/SConstruct 代码,例如:
```
TK_ROOT = joinPath(os.getcwd(), '../awtk')
APP_ROOT=joinPath(os.getcwd(), '../awtk-examples/HelloWorld-Demo')
```
所以按照文档来说我看应该需要改步骤2的三句话
* 2.编辑 awtk_config.py 设置工具链的路径
```
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
```
最近编辑记录 泽被苍生 (2020-03-01 17:08:01)
离线
而tslib我是用buildroot编译的所以问题是buildroot编译的tslib结果输出在什么目录下。
离线
这个如果能支持OPWRT系统应用开发就太好了
离线
商用,到底是不是免费呢?
最近编辑记录 apollo800 (2021-09-23 19:30:26)
离线
商用,到底是不是免费呢?
LGPL协议,要求如果你是开发app,你的awtk部分必须动态链接。如果你开发嵌入式系统,那你的rootfs必须可供下载,而且awtk必须动态链接,而且so文件可替换。
离线
枕边书《系统程序员:成长计划》真是嵌入式方面的精华,值得广告一波
离线