*******************************************************************************************************************************************************
作者:EasyWave 时间:2015.03.01
类别:开源GUI系统-嵌入式GUI系统Enlightenment Foundation Libraries图像库简介 声明:转载,请保留链接
注意:如有错误,欢迎指正。这些是我学习的日志文章......
*******************************************************************************************************************************************************
一:Enlightenment Foundation Libraries图像库简介
Enlightenment Foundation Libraries的简称为EFL,大名鼎鼎的Tizen平台就是采用EFL作为其基础图形库。EFL图形库是由:Eina、Evas、Eet,Ecore、Edje、Elementary等库构成的一个功能完善的GUI系统图形库。其官方网站为:http://www.enlightenment.org/
EFL起源于开源的窗口管理器项目Englightenment。Englightenment有两个重要的版本E16和E17。它能提供多种图形效果,包括窗口滑动,着色动画,波纹等。 Englightenment从一个窗口管理器发展到了类似GNOME,KDE的桌面环境。 E17的一个重要变化就是把系统中的所有图形界面相关的模块组合成一个独立的GUI系统Enlightenment Foundation Libraries(简称EFL)。从Englightenment桌面环境中独立出来了,并发展成为一个可移植的、性能优化的图形系统。
二:Enlightenment Foundation Libraries图形库的架构
Enlightenment Foundation Libraries图形库系统的框架如下图所示,其主要组成模块包括Eina、Evas、Ecore、Eet、Edje以及Elementary构成:
最主要的是EFL库已经直接支持FrameBuffer的操作,从上图的架构中就可以看到,并且也得到EFL官方的测试验证通过,可以在其官方网站上看到如下的信息,如下图所示:
看看红色圈中的部分,最低测试过的是200MHz的ARM9核,并且也能够工作的很好,当然取决于项目的需要和应用场合,至少我们看到了EFL官方的认真和努力。应该说EFL是一款优秀的开源GUI系统。详细的介绍可以到其官方网站上了解。
三:Evas图形库简介
Evas模块为整个EFL系统提供最基本的画布API。Evas画布所支持的图形基元包括常见的矩形、图像、单行文本、多行文本、线段、多边形以及渐变形状,包括直线渐变,辐射渐变和矩形渐变等。应用程序创建所需要的Evas图形对象,并可以在运行期间修改对象。Evas引擎负责应用程序中所有图形对象的绘制。在发生重绘现象时,应用程序不需要去处理具体的Evas对象的重绘,而是由Evas图形引擎负责。Evas支持的后端除了X11,还有OpenGL, Xrender,Framebuffer等。Evas图形库经过高度优化,内存消耗低,为EFL在嵌入式系统上的提供了性能保证。
四:Edje布局引擎简介
Edje布局引擎是EFL区别与其他嵌入式GUI系统的一个重要特性。Edje是基于Evas的一个复杂的图形设计和布局模块。通过在界面和程序代码之间提供一个抽象层,来实现灵活复杂的动态布局和动画。Edje把应用程序的图形界面设计与功能逻辑代码实现分离开来,实现真正的MVC设计模型。Edje的GUI界面用一种类C语法的文本EDC文件来描述。因此,基于Edje的应用程序由两部分构成,一部分是描述应用程序图形界面的EDC文件,另一部分是实现应用程序逻辑功能的C代码。这两部分相互独立,使得界面设计和代码实现都变得更加简单。需要更新应用程序的界面风格时,只需要修改EDC文件,而不需要改动C代码。
五:Ecore核心库简介
Ecore是一个非GUI模块。Ecore是EFL系统专门为嵌入式系统设计的一个底层库,实现了EFL系统中的任务处理,消息队列,基本数据结构,IPC机制,以及网络通讯和时钟等功能。同时,Ecore对常用的UNIX系统函数和窗口系统Xlib的API进行了封装。Ecore是完全模块化的,根据其功能,Ecore提供的抽象模块包括Ecore X, Ecore EVAS, Ecore FB, Ecore IPC, Ecore Config等。Ecore在EFL中充当的角色,就像GTK+之下的Glib一样。
六:Elementary控件库
Elementary库是EFL针对移动设备小屏幕触摸屏的特性所提供的一套基本控件库,包括窗口,文本标签,按钮,图标,文本输入框等。EFL各个组件库的详细地文档和介绍可以到官网去学习,如下图所示:
里面详细的介绍了各个组件库的详细用法以及API函数。
七:EFL的移植
我已经初步移植了EFL,但是还没有在实际的板子上测试过,不过既然EFL的官网都测试过了,应该问题不大的。下图是我移植过的项目中的EFL库,如下所示:
八:EFL库应用的展望
希望可以将EFL库应用到一个实际的项目,后续也会继续来详细的解读EFL库的架构。