上一篇文章主流嵌入式开源GUI比较,对比了MicroWindows、MiniGui、QT、GTK+、OpenGUI和FLTK等GUI框架,其实还有一些框架没有列出来,或者网上资料比较少,搜索不到。这篇文章再介绍一些,有EFL(Enlightenment Foundation Libraries),AWTK(Toolkit AnyWhere),Wayland/Weston,SDL(Simple DirectMedia Layer),DirectFB,LittlevGL,Nuklear
Enlightenment Foundation Libraries (EFL) 驱动 Enlightenment,它们也可以独立使用或者构建在其他库之上,提供有用的功能并创建强大的应用程序,核心库EFL在速度和大小方面都比其GTK+和Qt等效率更高,并且具有更小的内存占用量,EFL大部分的模块开源协议都是BSD和LGPL v2.1
Enlightenment始于1996年,作为构建X11窗口管理器的项目。从那时起,已经发展了很多,Enlightenment仍然产生了Window Manager,该项目目前正在从X11过渡到Wayland。官方努力开发,最终转向Wayland,因为它是Linux上图形显示层的未来
在开发Window Manager时,还开发了一组库。这些库统称为EFL。 它们涵盖了从主循环到图形,场景图,网络,小部件,数据存储,IPC等一系列功能
EFL是用C语言编写的,默认情况下支持在C中所有公共API。绑定支持存在多种语言,包括Python,C++和Lua。随着基于对象的Unified API的完成,将提供更多语言绑定
官方仍主要支持Linux for Enlightenment,但也有一些努力(基于用户和一些开发人员的帮助和支持)来支持BSD,以及macOS和Windows
稳定的EFL API组件模块,核心EFL组件包括:
组件 | 说明 |
---|---|
Evas | Core scene graph and rendering |
Eina | Data structures and low level helpers |
Edje | UI layout & animation data files for themes |
Eet | Data (de)serialization and storage |
Ecore | Core loop and system abstractions like X11 |
Efreet | Freedesktop.org standards handling |
Eldbus | D-Bus glue and handling |
Embryo | Tiny VM and compiler based on Pawn |
Emotion | Video decode wrapping, glue and abstraction |
Ethumb | Thumbnailing handler |
Ephysics | Physics (bullet) wrapper and Evas glue |
EIO | Asynchronous I/O handling |
Evas Generic Loaders | Extra image loaders for complex image types |
Emotion Generic Players | Extra video decoders (for VLC) |
Elementary | Widgets and high level abstractions |
更多详细信息,可以访问EFL官网,先看一下官方DEMO
Rage是一个使用Enlightenment Foundation Libraries(EFL)编写的视频和音频播放器,几乎所有用于视频播放和UI的部件都是由EFL本身或EFL库提供的,如GStreamer,Xine,VLC等。 由于它使用EFL,Rage将在X11,Wayland,甚至是带有Framebuffer控制台(fbcon)或Direct Rendering Manager(DMS)子系统的原始帧缓冲区中工作
Ephoto是使用Enlightenment Foundation Libraries(EFL)编写的图像查看器和编辑器,Ephoto支持:
立即模式是图形工具包库中最常用的模式,例如GTK+,GDI和GDI+。 应用程序负责重新绘制无效的客户区部分
应用程序根据需要处理任何绘图问题,并且显示系统绘制一些GUI。 绘图完成后,它将显示在目标中。 此模式允许用户精确控制渲染周期。 但是,如果绘图命令被误用,则可能执行不必要的绘制或根本不绘制
采用保留模式的图形系统基本上负责响应渲染应用程序对象的所有重绘请求。 客户端不会直接导致实际渲染,但是当更新部分对象时会重新绘制对象
Evas是EFL中绘图模块,由于Evas使用保留模式,因此无需命令任何绘图。只需要将新图像文件设置为图像对象并移动矩形对象。 Evas计算无效区域,并在渲染时重绘应用程序后面的图像和矩形
EFL和/或基本应用程序在ecore主循环上工作,循环在每个帧上进行几步。 当主循环进入空闲的enterer步骤时,Evas重绘对象中的一些更改。 如果没有更改,则跳过Evas渲染。 否则,Evas会计算所有显示对象的任何更改部分并重绘它们
为了最小化渲染,Evas会跟踪所有显示对象的状态,例如位置,大小,可见性和颜色。 即使其中一些状态已更改但对象被其他模糊对象隐藏,也不会重绘。 换句话说,Evas仅在屏幕中绘制必要的更改
下图说明了Evas如何重绘更改的区域:
AWTK全称Toolkit AnyWhere,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用 GUI引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的GUI引擎
AWTK寓意有两个方面:
AWTK源码仓库:
AWTK 是跨平台的,这有两个方面的意思:
AWTK通过一系列的手段保证AWTK应用程序高效运行
AWTK 通过下列方式极力让代码稳定可靠:
AWTK 本身是用C语言开发的,可以通过IDL生成各种脚本语言的绑定。生成的绑定代码不是简单的把C语言的API映射到脚本语言,而是生成脚本语言原生代码风格的API。目前支持以下语言 (以后根据需要增加):
Demo均可在Web端在线体验:http://zlgawtk.bceapp.com
名称 | 在线演示 | 说明 | 源码 |
---|---|---|---|
hello | awtk/demos/hello/index.html | hello awtk演示 | https://github.com/zlgopen/awtk-hello |
demoui | awtk/demos/demoui/index.html | 基本控件演示 | https://github.com/zlgopen/awtk |
demouijs | awtk/demos/demouijs/index.html | 基本控件演示(JS) | https://github.com/zlgopen/awtk |
名称 | 在线演示 | 说明 | 源码 |
---|---|---|---|
HelloWorld-Demo | awtk/demos/HelloWorld-Demo/index.html | 最简单的入门 Demo,包含基本的文本和按钮控件使用方法 | https://github.com/zlgopen/awtk-examples |
HelloWorld.Xml-Demo | awtk/demos/HelloWorld.Xml-Demo/index.html | 最简单的入门 Demo,演示如何使用 XML 方式设计界面 | https://github.com/zlgopen/awtk-examples |
CleanAir-Demo | awtk/demos/CleanAir-Demo/index.html | 新风系统演示 Demo | https://github.com/zlgopen/awtk-examples |
Meter-Demo | awtk/demos/Meter-Demo/index.html | 普通工业仪表演示 Demo | https://github.com/zlgopen/awtk-examples |
Chart-Demo | awtk/demos/Chart-Demo/index.html | 图表演示 Demo,包含仪表、饼图、曲线图、柱状图 | https://github.com/zlgopen/awtk-examples |
MusicPlayer-Demo | awtk/demos/MusicPlayer-Demo/index.html | 音乐播放器演示 Demo | https://github.com/zlgopen/awtk-examples |
SmartWatch-Demo | awtk/demos/SmartWatch-Demo/index.html | 智能手表演示 Demo | https://github.com/zlgopen/awtk-examples |
Wayland旨在作为X的简单替代品,更易于开发和维护。GNOME和KDE预计将被移植到它
Wayland是一个合成器与其客户交谈的协议,以及该协议的C库实现。 合成器可以是在Linux内核模式设置和evdev输入设备,X应用程序或Wayland客户端本身上运行的独立显示服务器。客户端可以是传统应用程序,X服务器(无根或全屏)或其他显示服务器
Wayland项目的一部分也是Wayland合成器的Weston参考实现。Weston可以作为X客户端运行,也可以在Linux KMS下运行,并附带一些演示客户端。 Weston合成器是一个简单快速的合成器,适用于许多嵌入式和移动用例
Wayland严格意义上来说,并不能说是GUI,它更像是一个桌面,简单来说它只是提供一个Buffer,来供其他GUI,比如Qt,Gtk,EFL绘制,然后把所有Buffer当做图层,再渲染输出到显示器上,当然能力强悍的人,可以直接调用Wayland透出来的接口,绘制自己想要的窗口
想要了解更多信息,可以访问Wayland官网和国内写的比较好的一篇文章Wayland与Weston简介
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,旨在通过OpenGL和Direct3D提供对音频,键盘,鼠标,操纵杆和图形硬件的低级访问,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域,用下面这张图可以很明确地说明SDL的用途
SDL正式支持Windows,Mac OS X,Linux,iOS和Android。可以在源代码中找到对其他平台的支持
SDL是用C语言编写的,与C++本身一起工作,并且有几种其他语言可用的绑定,包括C#和Python
SDL 2.0在zlib许可下分发。此许可证允许您在任何软件中自由使用SDL
SDL被广泛的用于许多著名的游戏。最著名的游戏是赢得Linux组游戏开发大奖的 文明:权利的召唤(Civilization: Call To Power)
可以访问SDL官网,和WIKI获取更多资料
DirectFB是一个轻量级的提供硬件图形加速,输入设备处理特性和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能
简而言之,DirectFB(直接帧缓冲区)是在Linux帧缓冲区(fbdev)抽象层之上实现的一组图形API,DirectFB处于QT,GTK+这样的高级GUI框架的下面,Linux系统驱动的上面。如下图
DirectFB运行在帧缓冲设备(/dev/fb)之上,并利用其芯片组驱动程序实现硬件加速
DirectFB只通过/dev/fb执行以下任务?
DirectFB使用自己的芯片组驱动程序通过内存映射的I/O端口利用硬件加速
想了解更多信息,可以访问DirectFB
图片格式支持
视频格式支持
OpenQuicktime
)字体格式支持
TrueType
(FreeType2
)directfb-exmaple中有一些测试Demo,比如df_andi,df_dok
LittlevGL是一个免费的开源图形库,提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美观的视觉效果和低内存占用,采用MIT许可协议,可以访问LittlevGL获取更多资料
支持的设备:基本上,每个现代控制器 - 能够驱动显示器 - 都适合运行LittlevGL。最低要求如下
Nuklear是一个使用ANSI C编写并在开源社区许可的小型立即模式的图形用户接口工具包。它被设计成为简单可嵌入式用户应用界面,也没有任何的依赖关系,默认渲染后端或者操作系统窗口和输入处理,而是通过使用简单的输入状态去输入和绘制命令描述原始形状,提供一个非常模块化的库方法输出。所以不是尝试在多个平台上进行抽象并提供呈现的封层库,而是仅仅关注实际的UI,采用MIT许可协议