Programmation GTK/Détails sur les boîtes


À cause de cette liberté, le placement des boîtes avec GTK peut paraître déroutant au premier abord. Il existe beaucoup d'options et il n'est pas tout de suite évident de comprendre comment elles s'accordent toutes ensemble. En fait, il y a 5 styles de base différents.


Chaque ligne contient une boîte horizontale (hbox) contenant plusieurs boutons. L'appel à gtk_box_pack indique la façon dont sont placés tous les boutons dans la hbox. Chaque bouton est placé dans la hbox de la même façon (mêmes paramètres que la fonction gtk_box_pack_start()).

Voici la déclaration de la fonction gtk_box_pack_start.

 void gtk_box_pack_start (GtkBox    *box,
                          GtkWidget *child,
                          gint       expand,
                          gint       fill,
                          gint       padding);

Le premier paramètre est la boîte dans laquelle on place l'objet, le second est cet objet. Tous les objets sont tous des boutons jusqu'à maintenant, on place donc des boutons dans des boîtes.

Le paramètre expand de gtk_box_pack_start() ou gtk_box_pack_end() contrôle la façon dont le widget est placé dans la boîte. S'il vaut TRUE, les widgets sont disposés dans la boîte de façon à en occuper tout l'espace. S'il vaut FALSE, la boîte est rétrécie pour correspondre à la taille du widget. Mettre expand à FALSE vous permettra d'aligner à droite et à gauche vos widgets. Sinon, ils s'élargiront pour occuper toute la boîte. Le même effet pourrait être obtenu en utilisant uniquement une des deux fonctions gtk_box_pack_start ou pack_end.

Le paramètre fill des fonctions gtk_box_pack contrôle si de l'espace supplémentaire doit être alloué aux objets eux-mêmes (TRUE), ou si on doit rajouter de l'espace (padding) dans la boîte autour des objets (FALSE). Il n'a de sens que si le paramètre expand vaut TRUE.

Lorsque l'on crée une nouvelle boîte, on utilise une fonction comme :

 GtkWidget * gtk_hbox_new (gint homogeneous,
                           gint spacing);

Le paramètre homogeneous de gtk_hbox_new (et c'est la même chose pour gtk_vbox_new) vérifie que chaque objet de la boîte ait la même taille (i.e. la même largeur dans une hbox, la même hauteur dans une vbox). S'il vaut TRUE, le paramètre expand des fonctions gtk_box_pack sera toujours mis à TRUE.

Quelle est alors la différence entre les paramètres spacing (configuré lorsque la boîte est créée) et padding (configuré lorsque les éléments sont placés) ? spacing ajoute de l'espace entre les objets, et padding en ajoute de chaque côté d'un objet. La figure suivante devrait éclairer tout cela&nbsp:


Voici le code utilisé pour créer les images ci-dessus. J'y ai mis beaucoup de commentaires en espérant que vous n'aurez pas de problème pour le relire. Compilez-le et jouez avec les différents paramètres.