The Enlightenment Foundation Libraries (EFL) are a collection of libraries so powerful, flexible, and easy to use that they present a strong platform on which to develop nearly any graphical application you could think of.
The EFL begins with Imlib2, a general image manipulation and rendering library, and Evas, our canvas library. Because Evas is built on several different selectable engines (Linux FrameBuffer, DirectFB, X11, OpenGL, QTopia, etc) the platform is extremely portable, which translates thru to all of the libraries built on top of it.
Ecore is a modular convience library that in its base provides timers, callback functionality, and loop management for event handling. Ecore's various modules can simplify the setup of an X11 drawable for general use (Ecore_X11), an X11 drawable for use with Evas (Ecore_Evas), manage IPC (Ecore_IPC), manage BSD Sockets (Ecore_Con), management of the FrameBuffer (Ecore_FB), and more. Because Ecore can simplify so many tasks that are used in conjuction with Evas it has lived up to its name as the core componant of nearly any EFL application.
Edje provides a revolutionary method of abstracting every aspect of your interface from the application itself. By passing signals between the interface and the application all communication is done in an interface neutral way. No longer are "themes" simple changes of pixmaps over a fixed area. Using Embryo we can provide scripting ability to the interface componant itself to harness even more power and flexibility.
Below is a diagram of how the various componants of the EFL
fit together. Because of complexity of the libraries and the
fact that so many libraries can be used independant of other
EFL libraries we have a diagram alittle more complex than your
standard block diagram.
Want to learn more? Check the official website.
![]() |
Python-EFL Python bindings, includes basic libraries. |
![]() |
Python-EFL-Demo Python bindings demonstration applications, includes basic libraries. |
![]() |
Expedite Benchmark suite, includes basic libraries. |
Port Resources:
Official Resources:
Related Blogs:
As said in "What are EFL?", the code is very portable. Since their developers are receptive to contributions, so all the code was developed and integrated upstream, at the official project. What remains here is just the package system, which is specific to maemo.
The most significant contribution to EFL were made by Gustavo Sverzut Barbieri and are:
evas_tiler.c
to operate on dirty
rectangles instead of segmented screen regions. Before this
change, dirty areas were marked in a bitmap array that
represented tiles of the screen (screen was segmented in 8x8
tiles). To add a new dirty area, mark the bitmap array, to
check for dirty areas, walk it. For maemo devices it
resulted in (800*480)/(8*8) = 6000
operations
to check we have nothing to do. Although this looks bad,
it's not because we have a maximum cost of 12000 operations,
independently of the number of dirty areas, and this
algorithm is stupidly fast on desktops. The new algorithm,
instead, keep the dirty areas as non-overlapping rectangles,
the tricky part was to minimize number of rectangles because
problem has quadratic O(n²)
worst case, this
was done by some heuristics and merge of nearby rectangles
when possible. This removed the major profiled bottleneck.
software_16
). So far
every Evas engine were 32bpp, with 8 bits per color
component, with conversion to required bit-depth on the fly
with use of dither-mask to make it look good. Although this
conversion is fast, it's still more to do on a limited power
device. And that's not the worse part: we have to operate on
much more data (usually 1 byte per pixel)! Working with
16bpp from the beginning we could reduce memory usage and
pack some operations into one arithmetic operation (it's
possible to work with 16bits data inside a 32bits word). This
brought us major performance gains.