IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Cours GTK 2

Date de publication : 20 Février 2007



Les images

Nous allons cette fois, essayer de rendre nos fenêtres un peu moins austères. Pour cela, nous allons utiliser des images grâce au widget GtkImage. Nous allons voir comment afficher une image à partir d'un fichier ou d'un GtkStockItem.

1. Utilisation du widget GtkImage.

1.1 Création.

Pour ce widget, il y a toute une panoplie de fonction de création. Nous n'allons en étudier que quelques-unes, car certaines font appel à des notions par encore vues. Voici donc les fonctions étudiées :

GtkWidget* gtk_image_new (void);
GtkWidget* gtk_image_new_from_file (const gchar *filename);
GtkWidget* gtk_image_new_from_stock (const gchar *stock_id, GtkIconSize size);

La première crée une image mais complètement vide.

La deuxième crée l'image à partir du fichier filename. Gtk+ est capable d'utiliser les images qui sont au format PNG, JPEG, TIFF. Le chemin du fichier filename peut être relatif ou absolu. Si le chemin spécifié est incorrect ou que le format de l'image est invalide, l'image de retour sera celle-ci :

La troisième fonction, récupère l'image qui est associée à un objet GtkStockItem afin de l'afficher. Le paramètre size peut prendre sept valeurs différentes pour définir la taille de l'image à afficher :

Valeur Aperçu
GTK_ICON_SIZE_INVALID Ne peut être passé en paramètre. Ceci est uniquement une valeur de retour.
GTK_ICON_SIZE_MENU
GTK_ICON_SIZE_SMALL_TOOLBAR
GTK_ICON_SIZE_LARGE_TOOLBAR
GTK_ICON_SIZE_BUTTON
GTK_ICON_SIZE_DND
GTK_ICON_SIZE_DIALOG

1.2 Modification de l'image.

Cette étape intervient lorsque vous avez créé une image vide ou lorsque vous voulez changer d'image. Les deux fonctions étudiées ici sont :

void gtk_image_set_from_file (GtkImage *image, const gchar *filename);
void gtk_image_set_from_stock (GtkImage *image, const gchar *stock_id, GtkIconSize size);

Les paramètres sont les même que lors de la création d'un widget GtkImage, sauf qu'il faut préciser à quelle widget il faut appliquer l'image.

1.3 Exemple.

Notre exemple comprendra deux composant. Tout d'abord une zone ou est affichée l'image, puis un bouton contenant l'image du GtkStockItem GTK_STOCK_QUIT, pour quitter l'application.

1.4 Programme exemple.

#include <stdlib.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
    GtkWidget *pWindow;
    GtkWidget *pVBox;
    GtkWidget *pImage;
    GtkWidget *pQuitImage;
    GtkWidget *pQuitBtn;

    gtk_init(&argc, &argv);

    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
    gtk_window_set_title(GTK_WINDOW(pWindow), "GtkImage");
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    pVBox = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(pWindow), pVBox);

    /* Chargement d'une image a partir d'un fichier */
    pImage = gtk_image_new_from_file("./gtk.png");
    gtk_box_pack_start(GTK_BOX(pVBox), pImage, FALSE, FALSE, 5);

    pQuitBtn = gtk_button_new();
    gtk_box_pack_start(GTK_BOX(pVBox), pQuitBtn, TRUE, FALSE, 5);
    g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(gtk_main_quit), NULL);

    /* Chargement d'une image a partir d'un GtkStockItem */
    pQuitImage = gtk_image_new_from_stock(GTK_STOCK_QUIT, GTK_ICON_SIZE_LARGE_TOOLBAR);
    gtk_container_add(GTK_CONTAINER(pQuitBtn), pQuitImage);

    gtk_widget_show_all(pWindow);

    gtk_main();

    return EXIT_SUCCESS;
}

Résultat :

2. En savoir plus.

2.1 Fonction non documentées.

void gtk_image_get_icon_set (GtkImage *image, GtkIconSet **icon_set, GtkIconSize *size);
void gtk_image_get_image (GtkImage *image, GdkImage **gdk_image, GdkBitmap **mask);
GdkPixbuf* gtk_image_get_pixbuf (GtkImage *image);
void gtk_image_get_pixmap (GtkImage *image, GdkPixmap **pixmap, GdkBitmap **mask);
void gtk_image_get_stock (GtkImage *image, gchar **stock_id, GtkIconSize *size);
GdkPixbufAnimation* gtk_image_get_animation (GtkImage *image);
GtkImageType gtk_image_get_storage_type (GtkImage *image);
GtkWidget* gtk_image_new_from_icon_set (GtkIconSet *icon_set, GtkIconSize size);
GtkWidget* gtk_image_new_from_image (GdkImage *image, GdkBitmap *mask);
GtkWidget* gtk_image_new_from_pixbuf (GdkPixbuf *pixbuf);
GtkWidget* gtk_image_new_from_pixmap (GdkPixmap *pixmap, GdkBitmap *mask);
GtkWidget* gtk_image_new_from_animation (GdkPixbufAnimation *animation);
void gtk_image_set_from_icon_set (GtkImage *image, GtkIconSet *icon_set, GtkIconSize size);
void gtk_image_set_from_image (GtkImage *image, GdkImage *gdk_image, GdkBitmap *mask);
void gtk_image_set_from_pixbuf (GtkImage *image, GdkPixbuf *pixbuf);
void gtk_image_set_from_pixmap (GtkImage *image, GdkPixmap *pixmap, GdkBitmap *mask);
void gtk_image_set_from_animation (GtkImage *image, GdkPixbufAnimation *animation);
void gtk_image_set (GtkImage *image, GdkImage *val, GdkBitmap *mask);
void gtk_image_get (GtkImage *image, GdkImage **val, GdkBitmap **mask);

Date de mise à jour : 17 mai 2003