1 <?xml version="1.0" encoding="utf-8"?>
2 <html xmlns="http://www.w3.org/1999/xhtml">
4 <title>Maemo port of EFL (Enlightenment Foundation Libraries)</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6 <link rel="stylesheet" type="text/css" href="style.css"/>
7 <link rel="icon" href="favicon.ico" type="image/x-icon"/>
8 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
9 <link rel="icon" href="favicon.ico" type="image/ico"/>
10 <link rel="shortcut icon" href="favicon.ico" type="image/ico"/>
13 <div class="header"></div>
14 <h1 style="text-align: center">
15 Maemo port of Enlightenment Foundation Libraries - EFL
18 <div class="left_box">
19 <h2>What are EFL?</h2>
21 The Enlightenment Foundation Libraries (EFL) are a collection
22 of libraries so powerful, flexible, and easy to use that they
23 present a strong platform on which to develop nearly any
24 graphical application you could think of.
27 The EFL begins with <a
28 href="http://www.enlightenment.org/p.php?p=about/libs/imlib2">Imlib2</a>,
29 a general image manipulation and rendering library, and
30 <a href="http://www.enlightenment.org/p.php?p=about/libs/evas">Evas</a>,
31 our canvas library. Because Evas is built on several different
32 selectable engines (Linux FrameBuffer, DirectFB, X11, OpenGL,
33 QTopia, etc) the platform is extremely portable, which
34 translates thru to all of the libraries built on top of it.
35 <a href="http://www.enlightenment.org/p.php?p=about/libs/ecore">Ecore</a>
36 is a modular convience library that in its base provides
37 timers, callback functionality, and loop management for event
38 handling. Ecore's various modules can simplify the setup of an
39 X11 drawable for general use (Ecore_X11), an X11 drawable for
40 use with Evas (Ecore_Evas), manage IPC (Ecore_IPC), manage BSD
41 Sockets (Ecore_Con), management of the FrameBuffer (Ecore_FB),
42 and more. Because Ecore can simplify so many tasks that are
43 used in conjuction with Evas it has lived up to its name as
44 the core componant of nearly any EFL application.
47 <a href="http://www.enlightenment.org/p.php?p=about/libs/edje">Edje</a>
48 provides a revolutionary method of abstracting every aspect of
49 your interface from the application itself. By passing signals
50 between the interface and the application all communication is
51 done in an interface neutral way. No longer are "themes"
52 simple changes of pixmaps over a fixed area. Using <a
53 href="http://www.enlightenment.org/p.php?p=about/libs/embryo">Embryo</a>
54 we can provide scripting ability to the interface componant
55 itself to harness even more power and flexibility.
58 Below is a diagram of how the various componants of the EFL
59 fit together. Because of complexity of the libraries and the
60 fact that so many libraries can be used independant of other
61 EFL libraries we have a diagram alittle more complex than your
62 standard block diagram.
64 href="http://enlightenment.sourceforge.net/Libraries/images/_images/efl.png"><img
65 src="images/efl_diagram_banner.png" alt="EFL Diagram banner"
66 class="center" style="margin-top: 5px;"/></a>
69 Want to learn more? Check the <a
70 href="http://www.enlightenment.org/p.php?p=about/libs">official website</a>.
73 <div class="center_box">
74 <a href="http://www.enlightenment.org/"
75 title="Enlightenment Project"><img
76 src="images/e_logo.png" alt="enlightenment logo"
80 <table class="download">
84 href="http://www.gustavobarbieri.com.br/e17-n800/python-efl.install"><img src="images/install_button.png" alt="One click install" class="center" style="margin-top: 10px;"/></a></td>
88 Python bindings, includes basic libraries.
94 href="http://www.gustavobarbieri.com.br/e17-n800/python-efl-demo.install"><img src="images/install_button.png" alt="One click install" class="center" style="margin-top: 10px;"/></a></td>
96 <b>Python-EFL-Demo</b>
98 Python bindings demonstration applications, includes
105 href="http://www.gustavobarbieri.com.br/e17-n800/expedite.install"><img src="images/install_button.png" alt="One click install" class="center" style="margin-top: 10px;"/></a></td>
109 Benchmark suite, includes basic libraries.
116 <p>Port Resources:</p>
119 href="https://garage.maemo.org/projects/maemo-efl/">Project</a></li>
121 href="https://garage.maemo.org/tracker/?group_id=262">Bug Tracker</a></li>
122 <li><a href="https://garage.maemo.org/forum/?group_id=262">Forum</a></li>
125 <p>Official Resources:</p>
127 <li><a href="http://www.enlightenment.org">Website</a></li>
128 <li><a href="http://wiki.enlightenment.org">Wiki</a></li>
130 href="http://www.enlightenment.org/p.php?p=docs">Docs</a></li>
131 <li><a href="http://bugs.enlightenment.org">Bug Tracker</a></li>
134 <p>Related Blogs:</p>
136 <li><a href="http://blog.gustavobarbieri.com.br/">Gustavo
137 Sverzut Barbieri</a></li>
138 <li><a href="http://codeposts.blogspot.com/">Kenneth Christiansen</a></li>
141 <div class="right_box">
142 <h2>About Maemo Port</h2>
144 As said in "What are EFL?", the code is very portable. Since
145 their developers are receptive to contributions, so all the
146 code was developed and integrated upstream, at the official
147 project. What remains here is just the package system, which
148 is specific to maemo.
151 The most significant contribution to EFL were made by Gustavo
152 Sverzut Barbieri and are:
157 href="http://blog.gustavobarbieri.com.br/2007/06/03/evas-now-using-rectangle-split-and-merge/">Rewrote
158 of <code>evas_tiler.c</code></a> to operate on dirty
159 rectangles instead of segmented screen regions. Before this
160 change, dirty areas were marked in a bitmap array that
161 represented tiles of the screen (screen was segmented in 8x8
162 tiles). To add a new dirty area, mark the bitmap array, to
163 check for dirty areas, walk it. For maemo devices it
164 resulted in <code>(800*480)/(8*8) = 6000</code> operations
165 to check we have nothing to do. Although this looks bad,
166 it's not because we have a maximum cost of 12000 operations,
167 independently of the number of dirty areas, and this
168 algorithm is stupidly fast on desktops. The new algorithm,
169 instead, keep the dirty areas as non-overlapping rectangles,
170 the tricky part was to minimize number of rectangles because
171 problem has quadratic <code>O(n²)</code> worst case, this
172 was done by some heuristics and merge of nearby rectangles
173 when possible. This removed the major profiled bottleneck.
177 href="http://blog.gustavobarbieri.com.br/2007/06/21/evas-on-n800-blazing-fast/">16bpp (bits-per-pixel)
178 engine</a> (<code>software_16</code>). So far
179 every Evas engine were 32bpp, with 8 bits per color
180 component, with conversion to required bit-depth on the fly
181 with use of dither-mask to make it look good. Although this
182 conversion is fast, it's still more to do on a limited power
183 device. And that's not the worse part: we have to operate on
184 much more data (usually 1 byte per pixel)! Working with
185 16bpp from the beginning we could reduce memory usage and
186 pack some operations into one arithmetic operation (it's
187 possibe to work with 16bits data inside a 32bits word). This
188 brought us major performance gains.
193 <div class="center" style="width: 280px">
194 <img src="images/maemo_logo.jpg" alt="Built for Maemo(tm)"/>
195 <img src="images/indt_logo.jpg" alt="Sponsored by INdT"
196 style="margin-left: 20px"/>