Débuter avec les Enlightenment Foundation Libraries (EFL)


précédentsommairesuivant

I. Introduction

I-A. Enlightenment et les EFL, qu'est-ce ?

Enlightenment, également connu sous le nom de E (actuellement E17), est un gestionnaire de fenêtrage pour Linux/X11 comprenant une suite complète de bibliothèques pour la réalisation d'interfaces utilisateur aussi fluides qu'esthétiques. Gestionnaire de fenêtrage rapide et léger en publication roulante (rolling release) depuis dix ans, E permet notamment d'effectuer un « thémage » complet.

Les EFL (Enlightenment Foundation Libraries) sont des bibliothèques graphiques C (des bindings sont également disponibles pour C++, Python, Perl, JavaScript et Ruby) développées à côté du projet Enlightenment lui-même. Elles ont été créées pour réaliser des IU (Interface Utilisateur) fluides, du fait de leur base asynchrone et peuvent être utilisées avec des systèmes de bureau tels que GNOME ou KDE. Jugeant que les plateformes fixes commencent à perdre de leur prestige, cédant peu à peu leur place aux plateformes mobiles, les EFL s'orientent vers un support de ces dernières, ayant pour objectif une meilleure portabilité des sources. Ainsi, elles s'orientent principalement vers une utilisation tactile, sans pour autant délaisser l'utilisation bureautique. Elles restent parfaitement adaptées au développement bureautique. Les EFL sont sponsorisées par un certain nombre d'entreprises, dont Samsung et Free. Pour finir, elles constituent le sujet de ce cours ; nous ne nous intéresserons pas au gestionnaire de fenêtrage lui-même.

image
Exemple « Buttons » d'Elementary_test


Note : les produits d'Enlightenment ne sont pas uniquement conçus pour les plateformes mobiles et pour Linux/X11. En effet, ils sont également portés sous Windows et sous Mac OS.

I-B. Les bibliothèques composants les EFL

Comme leur nom l'indique, les EFL sont constituées de plusieurs bibliothèques ayant chacune leurs spécificités :

  • Evas ;
  • Eina ;
  • Edje ;
  • Eet ;
  • Ecore ;
  • Efreet ;
  • E_Dbus ;
  • Embryo ;
  • Eeze ;
  • Elementary ;
  • et bien d'autres.

À la suite de ce tutoriel seront brièvement présentées certaines de ces bibliothèques.

I-B-1. Eina

La bibliothèque Eina correspond à la trousse à outils des EFL, permettant des opérations core, soit la manipulation de types de données tels que les strings buffers, les stringshares (optimisation sur les chaînes de caractères par un moyen de stockage et d'utilisation à travers toute l'application, réduisant considérablement les doublons de la chaîne en mémoire), listes, itérateurs, fichiers, etc.

Consulter la documentation d'Eina.

I-B-2. Eet

La bibliothèque Eet est un moyen simple et rapide de stockage et de chargement de tout type de données. C'est notamment un moyen de sérialisation. Un exemple d'utilisation peut être trouvé sur le SVN.

Consulter la documentation d'Eet.

I-B-3. Evas

La bibliothèque Evas est une bibliothèque de gestion d'objets graphiques simples (rectangles, images, textes, polygones et lignes) dont la particularité est d'optimiser le rendu en n'en effectuant un que lorsque des objets ont été modifiés, par souci de consommation de ressources. On n'a donc jamais de rendu partiel, ce qui correspond à un gain de temps et d'énergie important.

Attention à ne pas confondre cette bibliothèque avec la bibliothèque Elementary : Evas n'est pas conçue pour la création de widgets mais pour la création et gestion d'éléments simples dont la liste exhaustive a été donnée plus haut.

À noter qu'Evas est la base de tous les éléments graphiques fournis par les EFL.

Consulter la documentation d'Evas.

I-B-4. Ecore

La bibliothèque Ecore est une bibliothèque de boucles d'évènements permettant l'utilisation de timers, d'animations, de fonctionnalités réseaux (tcp, udp, http, ftp, etc.) et de bien d'autres choses. L'intérêt fondamental que cette bibliothèque fournit est que rien de ce qu'elle met à disposition n'est bloquant, ce qui simplifie la réalisation d'applications fluides. Par exemple, quand Ecore n'a plus aucune tâche à effectuer, il rentre en mode Idle, ce qui évite une consommation inutile de ressources.

Consulter la documentation d'Ecore.

I-B-5. Edje

La bibliothèque Edje est sans doute la bibliothèque la plus importante des EFL, dans le sens où toute application utilisant les EFL va y recourir à un moment ou à un autre. Elle correspond à un moyen de concevoir des applications en séparant la partie design de la partie concernant la logique et le code. En effet, la création d'une interface graphique avec Edje ne nécessite pas la moindre ligne de code C, ce qui permet notamment aux développeurs et aux designers de travailler ensemble sur un projet. Le designer mettrait en place la partie Edje de l'application tandis que le développeur pourrait se concentrer exclusivement sur le code C, ce qui correspondrait à un gain non négligeable de temps. Quel développeur n'a jamais eu de problème avec son chef d'équipe comme quoi le design de l'application ne collerait pas avec le travail initial des designers ? Grâce à la bibliothèque Edje, c'en est fini de ce type de problèmes.

Le codage avec la bibliothèque Edje se fait un peu comme en CSS avec une association propriété: valeur. Exemple du traditionnel Hello world :

 
Sélectionnez
collections {
    group {
        name: "interface";
        parts {
            part {
                name: "text";
                type: TEXT;
                description {
                    state: "default" 0.0;
                    color: 255 255 255 255;
                    text {
                        font: "Sans-serif";
                        text: "Hello world !";
                        size: 18;
                    }
                }
            }
        }
    }
}

Et le rendu :

Image non disponible

La bibliothèque Edje utilise plusieurs bibliothèques fournies par les EFL :

  • Eet pour la partie concernant le stockage de données ;
  • Evas pour la partie graphique des thèmes écrits avec Edje ;
  • Ecore pour gérer la boucle d'évènements.

Cette bibliothèque sera bien plus amplement détaillée par la suite ; cette partie consiste uniquement en un aperçu de la chose.

Consulter la documentation d'Edje.

I-B-6. Elementary

La bibliothèque Elementary met à disposition un grand nombre de widgets hautement personnalisables. Certains widgets d'Elementary, nommés « widgets performants », ont initialement été conçus pour être utilisés sur des plateformes mobiles, nécessitant une grande fluidité.

Pour illustrer, on peut prendre un exemple qui a poussé les développeurs à mettre en place les genlists : on dispose d'une liste de plusieurs centaines d'éléments graphiques. Parmi ces éléments, on souhaite uniquement en afficher une vingtaine en même temps à l'écran. Dans ce cas de figure, n'est-ce pas être inconscient que de vouloir prendre de la mémoire pour un tel nombre ? Le principe est de stocker les items dans un arbre pour éviter d'avoir à parcourir trop d'éléments. Les widgets performants vont être créés lors de l'affichage, et détruits lorsqu'ils ne seront plus affichés (à noter que derrière cela, on a tout de même un principe de cache).

Voici une capture d'écran de l'exemple « Genlist Group » d'Elementary_test qui permet de visualiser une genlist ordinaire :

image

Consulter la documentation d'Elementary.

I-C. Différences avec des frameworks tels que Qt et GTK

Il est fort possible que vous vous interrogiez sur la différence qu'ont les EFL avec les gros frameworks d'aujourd'hui tels que Qt et GTK. Certes, ces trois frameworks permettent plus ou moins d'effectuer la même chose, mais EFL ne tente pas de suivre ces deux monstres. Il préfère se démarquer d'eux sur plusieurs points détaillés ci-dessous de manière non exhaustive.

Comme Qt et GTK, les EFL fournissent avec leur bibliothèque Elementary des widgets (comme des boutons, cases à cocher, etc.). Il faut voir les widgets des EFL comme des outils et non comme de simples éléments de fenêtre, à la différence de ce que proposent Qt et GTK. Avec Qt, on voit couramment des widgets conteneurs présents dans d'autres conteneurs (exemple : un QPushButton présent dans un QWidget, lui-même englobé dans un QMainWindow), soit des arbres de widgets s'englobant les uns les autres. Avec EFL, les widgets sont utilisés comme des « briques » combinées avec la bibliothèque Edje. Les widgets d'Elementary sont hautement personnalisables, donnant la possibilité de modifier l'échelle, de changer diverses propriétés. Une autre différence notable avec les frameworks concurrents est sans doute que les EFL présentent pour leurs widgets une zone tactile différenciée de la zone d'affichage, peu importe le fait que le tactile soit utilisé ou non dans l'application.

Il est logique de constater une grande similitude entre Qt Quick (de Qt) et du code de thèmes avec Edje (à noter qu'Edje existait avant que Qt Quick ne fasse son entrée - c'est par ignorance que bien des gens ont annoncé avoir attendu le concept utilisé par QML). Il existe toutefois de nombreux points les dissociant. Tout d'abord, les fichiers de description d'Edje sont compilés avant de pouvoir être observés, à la différence des fichiers QML. Avec Edje, il est possible de modifier entièrement le thème d'une application sans avoir besoin de modifier le code C. On peut passer d'une architecture en liste à une architecture tout autre d'une simple modification du fichier Edje. Quant à lui, Qt Quick va plutôt se baser sur un moteur JavaScript. Glade, l'équivalent de Qt Designer, écrit ses fichiers en XML. Sur ce point, Edje et QML sont donc plus avancés dans le sens où un fichier Edje permet de réaliser le thème de l'application en plus de disposer les éléments dans l'interface utilisateur.

Tel que vous avez dû l'avoir compris, les EFL s'associent au mot « optimisation » par les moyens dont sont réalisés leurs composants et par leur base asynchrone. Même si certaines optimisations peuvent vous paraître peu intéressantes, voire même complètement inutiles, les EFL ont prouvé par cela leur fluidité. Généralement, une application développée avec les EFL, sauf problème de conception de son coeur, ne devrait jamais geler. C'est une grande différence par rapport aux frameworks du type de Qt et de GTK.

II. Installation

II-A. Windows

Si vous souhaitez utiliser les EFL sous Windows, téléchargez cet installeur, lancez-le et laissez-vous guider. Vous pouvez également vous référer à cette page pour choisir l'installeur adapté à vos besoins.

II-B. Mac OS

Si vous préférez utiliser les EFL sous Mac OS, vous devez être en possession des programmes Fink et XCode2. L'installation des EFL sous Mac OS nécessite des dépendances, ce qui explique l'intérêt de Fink :

 
Sélectionnez
fink install xorg
fink install m4
fink install autoconf2.5
fink install automake1.9
fink install libtool14
fink install gettext-tools
fink install pkgconfig
fink install libjpeg
fink install libpng3
fink install dbus-dev

Liste en provenance de http://trac.enlightenment.org/e/wiki/Installation_MacOSX. Vous pouvez alors télécharger les sources :

 
Sélectionnez
svn co http://svn.enlightenment.org/svn/e/trunk/eina eina-svn
svn co http://svn.enlightenment.org/svn/e/trunk/eet eet-svn
svn co http://svn.enlightenment.org/svn/e/trunk/evas evas-svn
svn co http://svn.enlightenment.org/svn/e/trunk/ecore ecore-svn
svn co http://svn.enlightenment.org/svn/e/trunk/efreet efreet-svn
svn co http://svn.enlightenment.org/svn/e/trunk/embryo embryo-svn
svn co http://svn.enlightenment.org/svn/e/trunk/edje edje-svn
svn co http://svn.enlightenment.org/svn/e/trunk/e_dbus e_dbus-svn
svn co http://svn.enlightenment.org/svn/e/trunk/elementary elementary-svn

Cela peut prendre un certain temps. La dernière étape est la compilation et l'installation. Pour cela, il s'agit d'entrer dans chaque répertoire (dans l'ordre donné ci-dessus) et d'exécuter les commandes :

 
Sélectionnez
./autogen.sh
make
make install && ldconfig

Par exemple, pour eina :

 
Sélectionnez
cd /chemin/vers/eina/
./autogen.sh
make
make install && ldconfig

Note : la page mentionnée ci-dessus parle de la nécessité d'un hack dans e17/libs/eet/src/lib/eet_lib.c pour les versions de Max OS X précédant la version Leopard (10.5), donc les versions Tiger (10.4) et précédentes. Ce hack correspond à ajouter les deux lignes suivantes aux alentours de la ligne 21.

 
Sélectionnez
typedef unsigned int uint8_t;
typedef unsigned char uint32_t;

II-C. Linux

Pour les distributions telles qu'Ubuntu, une solution est d'utiliser le script easy_e17.sh pour récupérer les sources depuis le SVN puis les compiler. La méthode ne marche pas toujours du fait que des changements dans l'organisation du dépôt cassent de temps en temps le script. Quelques modifications sont donc parfois requises.

 
Sélectionnez
sudo apt-get install xterm make gcc bison flex subversion automake autoconf autotools-dev autoconf-archive libtool \
gettext libpam0g-dev libfreetype6-dev libpng12-dev zlib1g-dev libjpeg62-dev libtiff4-dev libungif4-dev librsvg2-dev \
libx11-dev libxcursor-dev libxrender-dev libxrandr-dev libxfixes-dev libxdamage-dev libxcomposite-dev libxss-dev \
libxp-dev libxext-dev libxinerama-dev libxft-dev libxfont-dev libxi-dev libxv-dev libxkbfile-dev libxres-dev \
libxtst-dev libltdl7-dev libglu1-xorg-dev libglut3-dev xserver-xephyr libdbus-1-dev cvs subversion mercurial \
liblua5.1-dev libavformat-dev mplayer libxine-dev libxml2-dev libcurl4-openssl-dev wget libexif-dev libsqlite3-dev \
libxine1-all-plugins libxine1-ffmpeg libudev-dev liblua5.1-dev doxygen

Liste initialement en provenance du site http://dev.enlightenment.fr/~captainigloo/ ; doxygen est optionnel. Une fois ces paquets installés, on récupère easy_e17.sh :

 
Sélectionnez
wget http://omicron.homeip.net/projects/easy_e17/easy_e17.sh

À l'heure actuelle, Elementary n'est pas sortie en version stable. Ainsi, cette bibliothèque n'est pas installée par défaut. Remédions-y : éditez le fichier easy_e17.sh et ajoutez en dernière position « elementary » dans efl_basic :

 
Sélectionnez
efl_basic="eina eet evas ecore efreet eio eeze e_dbus embryo edje elementary"

Une fois cela fait, on peut lancer le script :

 
Sélectionnez
chmod +x easy_e17.sh
./easy_e17.sh -i

Cela peut prendre un certain temps. L'installation du module exchange est susceptible de bloquer easy_e17.sh. Si c'est le cas chez vous, retirez-le de la liste des modules à installer puis relancez le script. Vous pourrez toujours l'ajouter manuellement par la suite.

Par défaut, le script va récupérer les sources depuis le SVN et installer les EFL dans /opt/e17. Les sources seront disponibles dans $HOME/e17_src (par exemple, /home/username/e17_src).

Une fois l'exécution du script terminée, le script va suggérer l'ajout de plusieurs variables d'environnement. Pour une installation par défaut, les variables suivantes sont nécessaires :

 
Sélectionnez
export PATH=/opt/e17/bin:$PATH
export LD_LIBRARY_PATH=/opt/e17/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/opt/e17/lib/pkgconfig:$PKG_CONFIG_PATH

Les utilisateurs d'Archlinux, la commande suivante suffit à faire l'installation :

 
Sélectionnez
pacman -S e-svn

Toutefois, il faudra également installer Elementary qui n'est pas inclus par défaut.

Pour les distributions ne permettant pas ce type d'installation, se référer à cette page du site officiel.

III. Les forces et les problèmes des EFL

III-A. Les forces

Les EFL sont extrêmement pratiques pour le développement d'applications fluides et esthétiques. Le tactile est très bien géré, d'où le moyen de faire tourner des logiciels faits avec les EFL sous de multiples types de plateformes, fixes ou mobiles. Un logiciel, peu importe la plateforme sur laquelle il doit s'exécuter, n'aura généralement jamais de souci de ralentissement, sauf souci de conception. En effet, les solutions d'optimisation mises à disposition sont nombreuses car initialement non négligées.

Comme autre force, on peut noter que le thémage entièrement personnalisable d'une application développée avec les EFL est extrêmement simple et offre de nombreuses possibilités, comme la réalisation d'animations et d'effets sans avoir besoin de toucher à une seule ligne de C, ce qui permet aux développeurs et aux designers de travailler ensemble.

Enfin, les EFL disposent de bien des modules conçus pour la réalisation de tout type d'application, ce qui permet à leurs utilisateurs de ne pas avoir besoin d'utiliser des bibliothèques externes pour combler des manques. Multimédia, réseau, bureautique et bien d'autres choses sont déjà englobés par les EFL, et la liste ne fait que s'agrandir !

III-B. Les faiblesses

D'un point de vue de la communication, Enlightenment souffre de quelques problèmes. La documentation est assez limitée, les moteurs de recherche ne trouvent pas grand-chose sur les EFL (il faut souvent passer par le mot-clé Enlightenment pour avoir des résultats pertinents). Ces problèmes de communication engendrent le fait qu'il y ait un manque de tutoriels et par exemple que l'installation des EFL ne soit pas toujours évidente.

La bibliothèque Elementary, bien que « bien garnie », manque de widgets, et le non tactile n'est pas tellement une priorité dans le développement.

Pour finir, on peut ajouter qu'il arrive que les développeurs réécrivent des éléments afin de les améliorer, mais retirent occasionnellement des possibilités pour les remplacer par d'autres. L'adaptation n'est pas toujours évidente. Quoi qu'il en soit, il faut noter que les changements majeurs prévus pour E17 ont été repoussés à E18. Ce problème d'adaptation ne devrait ainsi pas se poser avant un certain temps.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2011 Louis du Verdier. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.