AWTK系统控件篇

AWTK 系统控件篇

一,前序

  AWTK 本身提供了很丰富的控件,例如之前时候的 AWTK 开发 UI 简单入门 C 语言篇中介绍到的 label,edit 和 button 控件,AWTK本身还有更加复杂和效果炫酷的控件,这次我们就来简单的认识一下这些控件吧。

二,AWTK 的控件分析

  在 AWTK 中主要是分为两块控件,一块是基本控件,另外一块是扩展控件,那么会有人问这两个有什么区别呢?

1. AWTK 的基本控件

  基本控件主要是一些基本的 GUI 有的功能控件,例如输入框,按钮,数字时钟和显示图片等等简单的控件,这些控件的特点主要是消耗性能比较低,效果相对比较中庸一点,没有太多的特效,主要是为了让工业化的 GUI 使用的又或者是性能比较低的板子使用的,这些控件源码主要是存放在 awtk/src/widgets 的文件夹目录下。这里就拿数字时钟(digit_clock)这个控件来简单说明一下:

<!-- 在 UI 的 xml 可以这样子简单的定义,其中 format 是代表时间显示的格式  -->
<digit_clock x="10" y="10" w="240" h="30" format="YY/MM/DD h:mm:ss"/>
 widget_t* tc = digit_clock_create(win, 10, 10, 240, 30);
 digit_clock_set_format(tc, "YY/MM/DD h:mm:ss");

  上面的 xml 和 c 代码都是相同的功能,把一个数字时钟放在坐标为(10,10)上面,格式设置为 “YY/MM/DD h:mm:ss” (如果不知道时间格式是怎样一回事,可以去度娘一下,这里就不多解释了),这里提供一张常用的基本控件表格,都是我们常用的一些控件:

控件名字用途
button按钮界面上的按钮
button_group按钮容器用于容纳一组按钮控件
check_button勾选按钮控件界面上的勾选按钮
clip_view裁剪控件界面上限制子控件的显示区域
column普通容器垂直排列其子控件
row普通容器水平排列其子控件
combo_box下拉列表控件界面上的下拉列表
combo_box_item下拉列表选项主要是给 combo_box 内部配合使用
edit输入框控件界面上的输入框
grid普通容器网格排列一组控件容器
grid_item普通容器主要是给 grid 内部配合使用
group_box分组控件单选按钮在同一个父控件中是互斥的
image图片控件界面上的显示图片
label文本控件界面上的显示文本
progress_bar进度条控件界面上的显示直线进度条
slider滑块条控件界面上的显示滑块条控件
tab_button标签按钮控件界面上的显示标签
tab_button_group普通容器主要给 tab_button 内部配合使用
pages页面管理控件界面上显示页效果,一般也会配合 tab_button 使用
view通用的容器控件主要是用来供具有语义的标签

备注:

  1. dialog 的相关控件主要是模态对话框的相关控件。
  2. popup 控件是弹出菜单对话框。
  3. 如果想了解控件的用法和代码,可以查看 awtk/src/widgets 文件夹中的控件代码
2. AWTK 的特别控件

  上面说了 AWTK 的普通控件主要是给工业级的 GUI 使用的,那么这一节讲的 AWTK 的特别控件就应该可以定义给民用级的 GUI 使用,因为民用级的 GUI 主要是效果好看为主,毕竟大众用户买产品是需要享受效果的嘛,但是这一类的控件都是存在效果性能比较大的问题,甚至有一些低端的嵌入式平台可能跑不起来,所以 AWTK 就分为两个模块给开发者自己选择。
  这里稍微引入一个概念就是其中 AWTK 在普通的嵌入式的底层绘制方法主要是分为两个部分,一个部分是 canvas,另外一个是 vgcanvas,这两部分其实对应低消耗和高消耗,以及低效果和高效果的区别,canvas 主要是用于直接画点的方法,所以只能画比较简单的直线和填充纯色的效果,但是好处在于效率高,所以在低端平台就可以正常显示。而 vgcanvas 却是高消耗,为什么呢?因为 vgcanvas 是矢量画图来的(不知道什么是矢量画图去问度娘),支持画圆,画不规则图形,而且也支持抗锯齿等效果,所以画出来的效果可以很好看,但是用了很多消耗性的算法,所以速度就自然慢下来了,而 AWTK 的特别控件大部分都是使用了 vgcanvas 来做效果,举个例子,我们常见的圆形进度条(progress_circle),就是属于 AWTK 的特别控件。

<progress_circle x="10" y="10" w="200" h="200" max="360" show_text="true" start_angle="90" />
progress_circle = progress_circle_create(win, 10, 10, 200, 200);
progress_circle_set_max(progress_circle, 360);
widget_set_value(progress_circle, 128);

在这里插入图片描述

(上面的动图是 AWTK 的 demoui 上面的 progress_circle 效果)

这里提供一张常用的特别控件表格,都是我们常用的一些控件:

控件名字用途
canvas_widget画布控件给用户自定义画任何东西,可以使用 vgcanvas 或者 canvas 画东西
color_picker颜色选择器控件像 ps 上面选择颜色的控件
combo_box_ex可滚动的combo_box控件功能为 combox 的高级版
draggable滑块控件让目标控件或当前窗口可以被拖动
gif_imageGIF图片控件界面上显示 GIF 控件
guage表盘控件界面上显示表盘(例如汽车仪表等)
image_animation图片动画控件界面上显示连续播放图片(构成动画效果)
image_value图片值控件界面上用图片代表各种数值的值(图片表示电池电量等)
keyboard软键盘界面上弹出手机输入法的软键盘(一般开启输入法宏后,焦点选中 edit 控件后自动弹出软键盘)
mledit多行编辑器控件界面显示类似 Notepad 等文字编辑软件效果
progress_circle进度圆环控件界面显示圆形进度条效果
rich_text图文混排控件界面显示简单的图文混排
hscroll_label可水平滚动的文本控件界面显示长文本滚动
scroll_view滚动视图控件界面显示页面翻动视图效果
slide_menu左右滑动菜单控件界面显示左右滑动页面效果
slide_view滑动视图控件界面显示左右滑动页面效果(可以自动切换和循环切换等效果)
svg_imageSVG图片控件界面显示 svg 矢量位图(但是有些矢量位图效果无法实现)
switch开关控件界面显示类似手机左右滑动的开关效果控件
text_selector文本选择器控件界面显示选择国家省份的上下滑动选择控件
time_clock模拟时钟控件界面显示时钟效果(非数字时钟,而是现实中真实钟表效果)

备注:

  1. 如果需要使用 AWTK 特别控件的话,需要调用 tk_ext_widgets_init 函数和取消定义 WITHOUT_EXT_WIDGETS 宏才可以使用 AWTK 特别控件。
  2. mutable_image 控件比较复杂,主要是用于播放视频和播放摄像头的控件基类,具体可以查考 awtk/docs/how_to_use_mutable_image.md 文件。

三,总结

  本章节主要是简单介绍一下 AWTK 的控件,就算我上面表述的再好也不如自己去看一下实际的效果来直观,AWTK 提供了一个 demoui 的项目,可以让大家直观的看到每个控件实际的效果,从而让大家更加容易明白控件的用法。
  demoui 的项目的源码是 awtk/demos/demo_ui_app.c,大家主要是在编译的时候开启 awkt/SConstruct 中的 ‘demos/SConscript’ 既可以,如果编译好了 AWTK,打开在 awtk/bin/demoui.exe 查看各种控件的效果,如下图:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AWTK开发手册-AWTK开发实践指南-中文手册.pdf AWTK = Toolkit AnyWhere 随着手机、智能手表等便携式设备的普及,用户对 GUI 的要求越来越高,嵌入式系统对高性能、高可靠性、低功耗、美观炫酷的 GUI 的需求也越来越迫切,ZLG开源 GUI 引擎 AWTK 应运而生。AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎,并支持跨平台同步开发,一次编程,终生使用。 最终目标: 支持开发嵌入式软件。 支持开发Linux应用程序。 支持开发MacOS应用程序。 支持开发Windows应用程序。 支持开发Android应用程序。 支持开发iOS应用程序。 支持开发2D游戏。 其主要特色有: 小巧。在精简配置下,不依赖第三方软件包,仅需要32K RAM + 256K FLASH即可开发一些简单的图形应用程序。 高效。采用脏矩形裁剪算法,每次只绘制和更新变化的部分,极大提高运行效率和能源利用率。 稳定。通过良好的架构设计和编程风格、单元测试、动态(valgrind)检查和Code Review保证其运行的稳定性。 丰富的GUI组件。提供窗口、对话框和各种常用的组件(用户可以配置自己需要的组件,降低对运行环境的要求)。 支持多种字体格式。内置位图字体(并提供转换工具),也可以使用stb_truetype或freetype加载ttf字体。 支持多种图片格式。内置位图图片(并提供转换工具),也可以使用stb_image加载png/jpg等格式的图片。 紧凑的二进制界面描述格式。可以手工编辑的XML格式的界面描述文件,也可以使用Qt Designer设计界面,然后转换成紧凑的二进制界面描述格式,提高运行效率,减小内存开销。 支持主题并采用紧凑的二进制格式。开发时使用XML格式描述主题,然后转换成紧凑的二进制格式,提高运行效率,减小内存开销。 支持裸系统,无需OS和文件系统。字体、图片、主题和界面描述数据都编译到代码中,以常量数据的形式存放,运行时无需加载到内存。 内置nanovg实现高质量的矢量动画,并支持SVG矢量图。 支持窗口动画、控件动画、滑动动画和高清LCD等现代GUI常见特性。 支持国际化(Unicode、字符串翻译和输入法等)。 可移植。支持移植到各种RTOS和嵌入式Linux系统,并通过SDL在各种流行的PC/手机系统上运行。 脚本化。从API注释中提取API的描述信息,通过这些信息可以自动生成各种脚本的绑定代码。 支持硬件2D加速(目前支持STM32的DMA2D和NXP的PXP)和GPU加速(OpenGL/OpenGLES/DirectX/Metal),充分挖掘硬件潜能。 丰富的文档和示例代码。 采用LGPL协议开源发布,在商业软件中使用时无需付费。 目前核心功能已经完成,内部开始在实际项目中使用了,欢迎有兴趣的朋友评估和尝试,期待您的反馈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值