Programmation GTK2 en Pascal/GtkImage

Programmation GTK2 en Pascal

Présentation

modifier

Le contrôle GtkImage va nous permettre d'afficher des images à l'intérieur de nos fenêtres.

Hiérarchie

modifier
Hiérarchie
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkMisc
              └─GtkImage

Utilisation de base

modifier

Création

modifier

Pour ce contrôle, 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 plus complexes. Voici donc les fonctions étudiées :

function gtk_image_new : PGtkWidget;
function gtk_image_new_from_file(filename : Pgchar) : PGtkWidget;
function gtk_image_new_from_stock(stock_id : Pgchar; size : TGtkIconSize) : PGtkWidget;

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 présentera une croix rouge sur fond blanc.

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 :

  • GTK_ICON_SIZE_INVALID
  • 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

Modification de l'image.

modifier

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

procedure gtk_image_set_from_file(image : PGtkImage; filename : Pgchar);
procedure gtk_image_set_from_stock(image : PGtkImage; stock_id : Pgchar; size : TGtkIconSize);

Les paramètres sont les mêmes que lors de la création d'un contrôle GtkImage, sauf qu'il faut préciser à quel contrôle il faut appliquer l'image.

Programme exemple

modifier

Voilà le fichier gtk015.pas :

program gtk015;

uses glib2, gtk2;

var
  pFenetre    : PGtkWidget;
  pVBox       : PGtkWidget;
  pImage      : PGtkWidget;
  pImageQuitter : PGtkWidget;
  pBtnQuitter : PGtkWidget;
begin
  gtk_init(@argc, @argv);
  pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200);
  gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk015 : Images');
  gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);

  pVBox := gtk_vbox_new(FALSE, 0);
  gtk_container_add(GTK_CONTAINER(pFenetre), 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);

  pBtnQuitter := gtk_button_new;
  gtk_box_pack_start(GTK_BOX(pVBox), pBtnQuitter, TRUE, FALSE, 5);
  g_signal_connect(pGTKOBJECT(pBtnQuitter), 'clicked', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);

  // Chargement d'une image a partir d'un GtkStockItem 
  pImageQuitter := gtk_image_new_from_stock(GTK_STOCK_QUIT, GTK_ICON_SIZE_LARGE_TOOLBAR);
  gtk_container_add(GTK_CONTAINER(pBtnQuitter), pImageQuitter);

  gtk_widget_show_all(pFenetre);
  gtk_main;
end.

Voilà ce que donne l'exécution du programme gtk015 :

 

Visuels : GtkLabel ~ GtkImage ~ GtkStatusBar ~ GtkProgressBar ~ GtkDrawingArea