liblapin Documentation

Transcription

liblapin Documentation
liblapin Documentation
Version 1.5
The liblapin Hackers
27 November 2015
Table des matières
1
Introduction
1.1 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
2
Installation
2.1 Téléchargement . . . . . . . . . . . . . . . .
2.2 Installation avec fake_install.sh (recommandé)
2.3 Installation avec real_install.sh . . . . . . . . .
2.4 Sources . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
3
3
3
3
3
3
Compilation
3.1 En cas de problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5
4
Fenêtres
4.1 Ouvrir une fenêtre . . . . . . . . . . . . .
4.2 Fermer une fenêtre . . . . . . . . . . . . .
4.3 Afficher le contenu d’une fenêtre . . . . .
4.4 Exemples . . . . . . . . . . . . . . . . . .
4.5 Ouvrir une fenêtre avec plus de paramètres
4.6 Buffer . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
7
7
8
8
Dessin
5.1 Couleurs . . . . . . . . . . . . . . . . . . . . . .
5.2 Généralités . . . . . . . . . . . . . . . . . . . . .
5.3 Créer un t_bunny_pixelarray . . . . . . . . . . . .
5.4 Détruire un t_bunny_pixelarray . . . . . . . . . .
5.5 Dessiner sur un t_bunny_pixelarray . . . . . . . .
5.6 Transférer un t_bunny_pixelarray vers une fenêtre
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
12
12
12
12
6
Rafraîchissement
6.1 Signaler la fonction rafraîchissante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Lancer le rafraîchissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
15
15
7
Fichiers INI
7.1 Format des fichiers INI
7.2 Lire un fichier INI . .
7.3 Lire un champ . . . .
7.4 Exemple . . . . . . .
17
17
17
18
18
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
8
Améliorer
8.1 Signaler des problèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
21
9
Table des matières
23
ii
CHAPITRE 1
Introduction
Ce tutoriel non-officiel sur la liblapin est en cours d’écriture. Toute collaboration est la bienvenue - voir la page
Améliorer.
Le manuel « officiel » de la liblapin est disponible ici. Il est également possible de le consulter en plein écran.
1.1 Exemples
Les exemples de ce tutoriel sont regroupés dans le dossier examples du dépot sur GitHub.
Vous pouvez cloner tout le dépot et compiler les exemples à l’aide des commandes suivantes :
$ git clone https://github.com/motet-a/liblapin-tutorial.git
$ cd liblapin-tutorial
$ make examples
Vous trouverez les fichiers exécutables des exemples dans les sous-dossiers du dossier examples/.
1
liblapin Documentation, Version 1.5
2
Chapitre 1. Introduction
CHAPITRE 2
Installation
2.1 Téléchargement
La version 1.5.1 de la liblapin est disponible sur l’intranet d’Epitech.
2.2 Installation avec fake_install.sh (recommandé)
Si vous utilisez le script fake_install.sh, vous devrez normalement ajouter les lignes suivantes à la fin du script
d’initialisation de votre shell (.bashrc, .zshrc ou autre) :
export LD_LIBRARY_PATH=''/home/${USER}/.froot/lib/''
export C_INCLUDE_PATH=''/home/${USER}/.froot/include/''
export CPLUS_INCLUDE_PATH=''/home/${USER}/.froot/include/''
2.3 Installation avec real_install.sh
Si vous utilisez le script real_install.sh, vous devez connaître le mot de pase root. Il faudra exécuter
real_install.sh en tant que root afin d’avoir les droits d’écriture.
2.4 Sources
Mystère...
3
liblapin Documentation, Version 1.5
4
Chapitre 2. Installation
CHAPITRE 3
Compilation
Les exemples fonctionnent si la liblapin est installée correctement.
3.1 En cas de problème
Avez-vous installé correctement la bibliothèque ?
5
liblapin Documentation, Version 1.5
6
Chapitre 3. Compilation
CHAPITRE 4
Fenêtres
4.1 Ouvrir une fenêtre
t_bunny_window
*bunny_start(unsigned int
unsigned int
bool
const char
width,
height,
fullscreen,
*name);
La fonction bunny_start() ouvre une fenêtre dont le nom est spécifié par name. width et height indiquent la
taille de la fenêtre, fullscreen doit être égal à 0 pour que la fenêtre ne soit pas en plein écran.
Cette fonction retourne soit la nouvelle fenêtre, soit NULL en cas d’erreur.
Noter qu’il n’y a aucun moyen de redimensionner ou de renommer une fenêtre une fois qu’elle à été créée. Seul
l’utilisateur peut changer sa taille manuellement.
4.2 Fermer une fenêtre
void
bunny_stop(t_bunny_window
*window);
La fonction bunny_stop() ferme une fenêtre. Après un appel à bunny_start(), bunny_stop() doit toujours
être appellée avant la fin du programme pour libérer les ressources allouées par bunny_start().
4.3 Afficher le contenu d’une fenêtre
void
bunny_display(const t_bunny_window
*window);
Cette fonction affiche le contenu d’une fenêtre à l’écran. Il est nécéssaire de l’appeller après bunny_start() pour
être sûr que la fenêtre soit visible.
4.4 Exemples
#include <unistd.h>
#include <lapin.h>
int
{
main()
7
liblapin Documentation, Version 1.5
t_bunny_window
*window;
window = bunny_start(800, 600, 0, ``Ma fenêtre'');
if (!window)
{
return (1);
}
bunny_display(window);
sleep(2);
bunny_stop(window);
return (0);
}
Voir le fichier
Cet exemple ouvre une fenêtre nommée « Ma fenêtre » pendant 2 secondes.
Il est possible d’ouvrir plusieurs fenêtres, comme l’illustre cet exemple.
4.5 Ouvrir une fenêtre avec plus de paramètres
t_bunny_window
*bunny_start_style(unsigned int
unsigned int
t_bunny_window_style
const char
width,
height,
winstyle,
*name);
Voir le fichier
Avertissement : Cette fonction n’est pas décrite dans la documentation officielle.
Cette fonction retourne soit la nouvelle fenêtre, soit NULL en cas d’erreur.
Pour les utilisateurs du gestionnaire de fenêtres i3, vous aurez remarqué que les fenêtres ne sont pas affichées en mode
flottant directement. Pour cela, il faut que la valeur de winstyle soit TITLEBAR | CLOSE_BUTTON.
4.6 Buffer
La structure t_bunny_window représentant une fenêtre contient un membre buffer, de type
t_bunny_buffer.
4.6.1 Dimensions
Le buffer d’une fenêtre contient :
— un membre width représentant la largeur interne de la fenêtre ;
— un membre height représentant la hauteur.
Ces membres sont accessibles en lecture seule, les modifier ne permettera pas de redimensionner la fenêtre.
Curieusement, ces membres contiennent toujours la taille de la fenêtre lors de sa création, et ne sont pas mis à jours
lors de son redimensionnement :
static void
{
t_bunny_buffer
8
print_size(t_bunny_window *window)
*buffer;
Chapitre 4. Fenêtres
liblapin Documentation, Version 1.5
buffer = &window->buffer;
printf(``Window size: %dx%d\n'', buffer->width, buffer->height);
}
Voir le fichier
4.6. Buffer
9
liblapin Documentation, Version 1.5
10
Chapitre 4. Fenêtres
CHAPITRE 5
Dessin
5.1 Couleurs
Les couleurs de la liblapin sont représentées grâce à des entiers de 32 bits, autrement dit des int sur la plupart des
architectures.
Une couleur (et donc un pixel) est encodée au format RGBA, c’est à dire que chaque couleur est constituée de quatre
composantes de 8 bits :
— Une composante pour le rouge ;
— Une composante pour le vert ;
— Une composante pour le bleu ;
— Une composante pour la transparence, le « canal alpha » ;
La macro GET_COLOR(rgb) permet de convertir une couleur rgb au format RGB vers le format RGBA en mettant
la nouvelle composante alpha à 255, de façon à ce que la couleur résultante soit totalement opaque.
La macro ALPHA(a, rgb) permet de convertir une couleur rgb au format RGB vers le format RGBA, dont la
nouvelle composante alpha sera donnée par a.
Les macros suivantes sont également disponibles :
Noter que la liblapin ne pourra pas être utilisée sur n’importe quelle architecture, et qu’une bonne compréhension de
l’endianness est nécéssaire pour se faire une bonne idée du fonctionnement de la gestion des couleurs.
5.2 Généralités
Il n’est pas possible de dessiner directement dans le buffer d’une fenêtre sans appeller une fonction interdite de la liblapin. Nous allons donc dessiner dans un tableau de pixels représenté par le type t_bunny_pixelarray, transférer
ce tableau de pixels sur le buffer de la fenêtre, puis mettre à jour la fenêtre.
Le type t_bunny_pixelarray est défini ainsi :
typedef struct
{
t_bunny_clipable
void * const
}
clipable;
*pixels;
t_bunny_pixelarray;
Le membre pixels contient le tableau de pixels interne, et le membre clipable contient diverses informations
dont la taille du t_bunny_pixelarray.
11
liblapin Documentation, Version 1.5
5.3 Créer un t_bunny_pixelarray
t_bunny_pixelarray
*bunny_new_pixelarray(unsigned int
unsigned int
width,
height);
La fonction bunny_new_pixelarray() crée un nouveau t_bunny_pixelarray de taille donnée.
5.4 Détruire un t_bunny_pixelarray
void
bunny_delete_clipable(t_bunny_clipable
*clipable);
Cette fonction peut servir à détruire un t_bunny_pixelarray dont le clipable lui est passé en paramètre.
Il est nécessaire de détruire un t_bunny_pixelarray après avoir fini de l’utiliser, pour les mêmes raisons que
tout appel à malloc() doit correspondre à un appel à free().
5.5 Dessiner sur un t_bunny_pixelarray
Le membre pixels d’un t_bunny_pixelarray peut être converti en un tableau d’entiers non signés de 32 bits,
représentant la liste des pixels.
Cela signifie que chaque case du tableau représente un pixel, respectivement dans l’ordre de gauche à droite.
Si un t_bunny_pixelarray fait 3 pixels de haut sur 4 pixels de large, ses 12 pixels seront disposés ainsi :
largeur
0
1
2
3
4
5
6
7
8
9
10
11
hauteur
Ainsi, la case 0 du tableau correspond au pixel en haut à gauche de l’écran, la case 1 au pixel juste à sa droite, et ainsi
de suite.
5.6 Transférer un t_bunny_pixelarray vers une fenêtre
void
bunny_blit(t_bunny_buffer
const t_bunny_clipable
const t_bunny_position
*buffer,
*picture,
*position);
Cette fonction peut servir à transférer un t_bunny_pixelarray vers une fenêtre. Il suffit de l’appeller avec le
buffer de la fenêtre et le clipable du t_bunny_pixelarray :
void
blit_to_window(t_bunny_window *window,
const t_bunny_pixelarray *pixelarray)
{
t_bunny_position
position;
position.x = 0;
position.y = 0;
bunny_blit(&window->buffer, &pixelarray->clipable, &position);
12
Chapitre 5. Dessin
liblapin Documentation, Version 1.5
}
Voir le fichier
N’oubliez pas d’appeler ensuite la fonction bunny_display() pour afficher ce que vous venez de transférer.
5.6. Transférer un t_bunny_pixelarray vers une fenêtre
13
liblapin Documentation, Version 1.5
14
Chapitre 5. Dessin
CHAPITRE 6
Rafraîchissement
Il est très souvent nécéssaire de rafraîchir une fenêtre à une fréquence donnée. La liblapin permet de faire cela en
rappellant automatiquement une de vos fonctions, qui sera chargée de rafraîchir votre fenêtre.
Vous devez procéder en trois étapes :
— Écrire la fonction « rafraîchissante » qui sera rappellée régulièrement par la liblapin ;
— Indiquer à la liblapin votre fonction « rafraîchissante » - en lui passant un pointeur vers votre fonction ;
— Indiquer à la liblapin votre fenêtre à rafraîchir et la fréquence de rafraîchissement.
6.1 Signaler la fonction rafraîchissante
void
bunny_set_loop_main_function(t_bunny_loop loop);
6.2 Lancer le rafraîchissement
t_bunny_response
bunny_loop(t_bunny_window *window,
unsigned char frequency,
void *your_data);
6.3 Exemple
À écrire
15
liblapin Documentation, Version 1.5
16
Chapitre 6. Rafraîchissement
CHAPITRE 7
Fichiers INI
7.1 Format des fichiers INI
Concernant le format INI, voir l’article sur Wikipedia.
[forme1]
type=fdf1
width=6
height=6
data=6,5,3,2,3,4,
4,2,1,1,1,2,
3,1,1,1,1,2,
2,1,1,0,0,1,
0,0,0,0,0,0,
0,0,0,0,0,0
[forme2]
type=fdf1
width=6
height=6
data=6,5,3,2,3,4,
4,2,1,1,1,2,
3,1,1,1,1,2,
2,1,1,0,0,1,
0,0,0,0,0,0,
0,0,0,0,0,0
Dans le fichier ci-dessus, on voit deux sections :
— forme1, qui contient les champs type, width, height et data ;
— forme2, qui contient les même champs.
Les champs data sont particuliers : Ils contiennent une liste de données, séparées par des virgules. Notez que cette
liste peut s’étendre sur plusieurs lignes, comme dans l’exemple ci-dessus.
7.2 Lire un fichier INI
Tout d’abord, il faut charger le fichier INI avec la fonction bunny_load_ini(). Elle prend en paramètre l’adresse
du fichier INI et retourne un pointeur sur un nouveau t_bunny_ini. N’oubliez pas de supprimer le t_bunny_ini
avec la fonction bunny_delete_ini().
17
liblapin Documentation, Version 1.5
Exemple :
t_bunny_ini *ini;
ini = bunny_load_file(``test.ini'');
if (ini == NULL)
my_putstr(``Fichier introuvable\n'');
else
my_putstr(``Fichier chargé !\n'');
bunny_delete_ini(ini);
7.3 Lire un champ
const char
*bunny_ini_get_field(const t_bunny_ini
const char
const char
unsigned int
*ini,
*scope,
*field,
index);
La fonction bunny_ini_get_field() permet de lire un champ. Elle prend quatre paramètres :
— le pointeur sur notre t_bunny_ini
— le nom de la section
— le nom du champ
— l’index de la donnée qui nous intéresse lorsque le champ est une liste séparée par des virgules (ou 0 si le champ
n’est pas une liste)
Elle retourne soit une chaîne contenant la valeur, soit NULL.
Le dernier paramètre de la fonction bunny_ini_get_field() prend son importance lorsque le champ est une
liste de valeur. Exemple :
[forme1]
data=-12,24,36
Sur ce fichier, bunny_ini_get_field(ini, "forme1", "data", 0), retournera sera une chaîne de caractères contenant "-12". En mettant en dernier paramètre le nombre 1, la chaîne de caractères correspondra alors à
"24", et "36" si le dernier paramètre est égal à 2.
7.4 Exemple
Prenons ce fichier INI contenant des informations sur un agriculteur :
[farmer]
first_name=pierre-emmanuel
Voir le fichier
Cette fonction permet de récupérer le prénom de l’agriculteur :
static void print_first_name(t_bunny_ini *ini)
{
const char
*first_name;
first_name = bunny_ini_get_field(ini, ``farmer'', ``first_name'', 0);
if (!first_name)
{
printf(``Le champ \''first_name\'' dans la section''
18
Chapitre 7. Fichiers INI
liblapin Documentation, Version 1.5
'' \''farmer\'' est introuvable\n'');
return ;
}
printf(``First name: %s\n'', first_name);
}
Voir le fichier
7.4. Exemple
19
liblapin Documentation, Version 1.5
20
Chapitre 7. Fichiers INI
CHAPITRE 8
Améliorer
Ce tutoriel est rédigé en CommonMark (spécification) et est hébergé sur GitHub. Toute collaboration est la bienvenue :)
8.1 Signaler des problèmes
Si vous ne vous sentez pas capable de corriger le tutoriel vous-même, n’hésitez pas à signaler le problème sur GitHub
- sauf si il a déjà été signalé, évidemment. Nous essayerons de le corriger au plus vite.
21
liblapin Documentation, Version 1.5
22
Chapitre 8. Améliorer
CHAPITRE 9
Table des matières
— genindex
— modindex
— search
23

Documents pareils