How to use Enlightenment Foundation Libraries
| Language: | English |
|---|
The Enlightenment Foundation Libraries, or EFL, is a set of open source graphical software libraries that grew out of the Enlightenment window manager project and is developed by Enlightenment.org with some sponsorship from Samsung, ProFUSION and Free.
The project's focus is to make the EFL a flexible yet powerful and easy to use set of tools to extend the capabilities of both the Enlightenment window manager and other software projects based on the EFL. The libraries were created for version 0.17 of the window manager.
The libraries are meant to be portable and optimized to be functional even on devices such as PDAs.
Contents |
How to install the EFL
First thing to do is have these libraries installed :
autopoint libglib2.0-dev libltdl-dev libcurl4-openssl-dev liblua5.1-0-dev libfontconfig1-dev libx11-dev libdbus-1-dev libbz2-dev libid3tag0-dev libpng12-dev libtiff4-dev libungif4-dev libjpeg62-dev libfreetype6-dev libpam0g-dev libxcursor-dev libxml2-dev libssl-dev autoconf pkg-config libpng3-dev libxkbfile-dev libsqlite3-dev libimlib2-dev libtagc0-dev libtag1-dev libxmu-dev libxdamage-dev libxcomposite-dev libasound2-dev cmake
You can run :
sudo apt-get install autopoint libglib2.0-dev libltdl-dev libcurl4-openssl-dev liblua5.1-0-dev libfontconfig1-dev libx11-dev libdbus-1-dev libbz2-dev libid3tag0-dev libpng12-dev libtiff4-dev libungif4-dev libjpeg62-dev libfreetype6-dev libpam0g-dev libxcursor-dev libxml2-dev libssl-dev autoconf pkg-config libpng3-dev libxkbfile-dev libsqlite3-dev libimlib2-dev libtagc0-dev libtag1-dev libxmu-dev libxdamage-dev libxcomposite-dev libasound2-dev cmake
to install them if you are on Debian-based distribution.
Then clone this git repository :
git clone git://github.com/wargio/EFL-PS3.git
Once cloned, open a terminal and launch download_essential.sh :
./download_essential.sh
Once finished, launch download_ps3efl.sh and then build_ps3efl.sh :
./download_ps3efl.sh && ./build_ps3efl.sh
If everything goes right, you will have the EFL installed.
if you have trouble, add this line into the build_ps3efl.sh
LC_ALL="C"
How to use it
to use this libs you will need to learn how to use Ecore (you can see it as "core" of the app), Evas, a canvas API.
Ecore
Ecore is a clean and tiny event loop library with many modules to do lots of convenient things for a programmer, to save time and effort. It's small and lean, designed to work from embedded systems all the way up to large and powerful multi-cpu workstations. The main loop has a number of primitives to be used with its main loop. It serializes all the primitives and allows for great responsiveness without the need for threads(or any other concurrency).
(Description taken from EFL Doc)
to use this, you will need to include:
#include <Ecore.h> #include <Ecore_Evas.h> //This will include also Evas.h
then you will need to initialize the Ecore. to do that, you can just simply call this function:
ecore_evas_init();
then create a pointer of this Ecore_Evas type, that you will use to create object. once done, you can initialize it by giving the resolution of the screen:
uint16_t width = 1280; uint16_t height = 720; Ecore_Evas *ee_core = ecore_evas_new(NULL, 0, 0, width, height, NULL);
now it's time to generate the window (if on PC) or to initialize the RSX (if on the PS3).
ecore_evas_title_set(ee_core, "Name of the window"); ecore_evas_show(ee_core);
ok. now you have fully setup the core and you only need to set what to draw. to do that, you need to get the canvas (an Evas pointer) from the Ecore, so you will need to call this function:
Evas* canvas = ecore_evas_get(ee_core);
after that, you can use that Evas pointer, to add object like rectangles, images, text, etc (you will see how to do that on the Evas paragraph).
now it's time to start the Ecore loop; what does this means? well it will read all the object that you created and draw them on the screen.
ecore_main_loop_begin();
you can stop it by calling this:
ecore_main_loop_quit();
let's say that our homebrew has finished to do all the thing, now we only need to stop and free everything. to do that you need to free the Ecore_Evas pointer that we have created initially and shutdown the Ecore.
ecore_evas_free(ee_core); ecore_evas_shutdown();
Compile and linking Ecore
Add these flag to the makefile
PKG_CONFIG_LIBDIR="$PSL1GHT/ppu/lib/pkgconfig" PKG_CONFIG_PATH="$PS3DEV/portlibs/ppu/lib/pkgconfig" LIBS = `pkg-config ecore ecore-evas --libs` CFLAGS = `pkg-config ecore ecore-evas --cflags`
Evas
Evas is a clean display canvas API for several target display systems that can draw anti-aliased text, smooth super and sub-sampled scaled images, alpha-blend objects and much more. (Description taken from EFL Doc)
This lib has a lot of functions. i will explain how to use it. you can find a good example at the and of the page.
first at all, you need to include the lib. (if you are going to use Ecore + Evas, you will not need to include the lib, since it's already in the Evas_Ecore.h header)
#include <Evas.h>you need to create a Evas pointer that point to an engine. if you use Ecore, you can get it with the ecore_evas_get() function (give a look to the Ecore tutorial above).
now you will need to create an Evas_Object pointer that you will use to setup what you will draw (an image, a text or simply a background).
Evas* canvas = ecore_evas_get(ee_core); Evas_Object *obj = NULL;
now you need to say what object it will be, for example an image.
this will create an object for image rendering.
obj = evas_object_image_add(canvas);
now you need to fill the object with the image
evas_object_image_file_set(obj, "my_image.png", NULL);
you only need now to say where to draw it, fill the image with the pixel that you want to see, resize it and draw.
int x = 0, y = 0; int img_width = 300, img_height = 300; evas_object_move(obj, x, y); // this will say where to draw evas_object_image_fill_set(obj, 0, 0, img_width, img_height); //this will set from what pixel to what pixel to draw // from the pixel (0,0) to the (img_width, img_height) pixel evas_object_resize(obj, 500, 500); // this will resize the object. the image size is 300x300px, now is 500x500px. evas_object_show(obj); //this will draw the object on the screen. you just need to call it once.
Compile and linking Evas
Add these flag to the makefile
PKG_CONFIG_LIBDIR="$PSL1GHT/ppu/lib/pkgconfig" PKG_CONFIG_PATH="$PS3DEV/portlibs/ppu/lib/pkgconfig" LIBS = `pkg-config ecore-evas evas --libs` CFLAGS = `pkg-config ecore-evas evas --cflags`
Example of Code
Simple EFL Example by Deroad (it has Ecore, Evas, Edje example in it)
Eleganz homebrew by KaKaRoTo (it has Ecore, Evas, Edje example in it)
Authors/Sources/References
EFL Team; KaKaRoTo; Deroad/Wargio; Wikipedia;