1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #include <gtk/gtk.h>
void fond_ecran_set(GtkWidget *pWindow, gpointer user_data)
{
GdkPixmap *pixmap_fond=(GdkPixmap*) user_data;
if (pixmap_fond)
{
gdk_window_set_back_pixmap (pWindow->window, pixmap_fond, FALSE);
}
}
gboolean fond_ecran_expose(GtkWidget *pWindow, GdkEventExpose *event, gpointer user_data)
{
GdkPixmap *pixmap_fond=(GdkPixmap*) user_data;
if (pixmap_fond)
{
gdk_window_set_back_pixmap (pWindow->window, pixmap_fond, FALSE);
return TRUE;
}
return FALSE;
}
gint main(int argc, char **argv)
{
GtkWidget *pWindow;
GdkPixbuf *pixbuf_fond=NULL;
GdkPixmap *pixmap_fond=NULL;
// Initialisation des librairies GTK+
gtk_init(&argc, &argv);
// Création d'une fenêtre principale.
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "Fenêtre principale");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 800, 600);
// Chargement de l'image dans un pixbuf à la taille de la fenêtre (pensez à changer le nom et le chemin)
pixbuf_fond=gdk_pixbuf_new_from_file_at_size("./08_1280x1024.jpg", 800,600, NULL);
/* Si le chargement a réussi on crée le pixmap qui sera utilisé pour le fond.
Dans le cas contraire pixmap_fond=NULL. Cette valeur étant transmise aux fcts
d'affichage, on peut a tout moment savoir si on peut afficher ou non.*/
if (pixbuf_fond)
{
// Création d'un GdkPixmap vierge
pixmap_fond=gdk_pixmap_new(pWindow->window,
gdk_pixbuf_get_width(pixbuf_fond),
gdk_pixbuf_get_height(pixbuf_fond),
gdk_visual_get_system()->depth);
// insertion du GdkPixbuf (image chargée) dans le GdkPixmap.
gdk_draw_pixbuf(pixmap_fond, pWindow->style-> fg_gc[GTK_WIDGET_STATE (pWindow)], pixbuf_fond,0,0,0,0,
gdk_pixbuf_get_width(pixbuf_fond), gdk_pixbuf_get_height(pixbuf_fond),
gdk_visual_get_system()->depth,0,0);
// Supression du GdkPixbuf devenu inutile
g_object_unref(pixbuf_fond);
}
/* Signaux associés pour l'affichage de l'image de fond.
Vous pourrez y ajouter le signal "size-allocate" pour modifier la taille de
l'image de fond en fonction de la taille de la fenêtre.*/
g_signal_connect(G_OBJECT(pWindow), "realize", G_CALLBACK(fond_ecran_set), pixmap_fond);
g_signal_connect(G_OBJECT(pWindow), "expose-event", G_CALLBACK(fond_ecran_expose), pixmap_fond);
// Signaux associés à la fenêtre principale pour quitter.
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(pWindow), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
// Boucle principale GTK+
gtk_widget_show_all(pWindow);
gtk_main();
return 0;
} |
Partager