OpenGL avec GtkGLArea Par Xavier Michelon |
La création de l’interface graphique de notre programme est faite par creeInterface(). Nous ne nous intéresserons qu’à la partie concernant le widget GTKGLArea :
if(gdk_gl_query() == FALSE) {
fprintf(stderr,"Impossible d'utiliser OpenGL\n");
exit(1);
}
glarea = gtk_gl_area_new(listeAttributs);
gtk_widget_set_events(GTK_WIDGET(glarea),
GDK_EXPOSURE_MASK|
GDK_BUTTON_PRESS_MASK|
GDK_BUTTON_RELEASE_MASK|
GDK_POINTER_MOTION_MASK|
GDK_POINTER_MOTION_HINT_MASK);
gtk_widget_set_usize(GTK_WIDGET(glarea),300,300);
gtk_box_pack_start(GTK_BOX(boiteh),glarea,TRUE,TRUE,0);
gtk_signal_connect (GTK_OBJECT(glarea), "realize",
GTK_SIGNAL_FUNC(initGlarea), NULL);
gtk_signal_connect (GTK_OBJECT(glarea), "expose_event",
GTK_SIGNAL_FUNC(affichage), NULL);
gtk_signal_connect (GTK_OBJECT(glarea), "configure_event",
GTK_SIGNAL_FUNC(redimGlarea), NULL);
gtk_signal_connect (GTK_OBJECT(glarea), "motion_notify_event",
GTK_SIGNAL_FUNC(mouvementSouris), NULL);
gtk_signal_connect (GTK_OBJECT(glarea), "map_event",
GTK_SIGNAL_FUNC(rappelMap), NULL);
Le premier appel, gdk_gl-query(), permet de tester la possibilité d’utiliser OpenGL. Ensuite, le widget GTKGLArea se crée par un simple appel à :
gtk_gl_area_new(int ListeAttrib);
Avec gtk_gl_area_set_events(), on définit les signaux auxquels doit réagir notre widget, à savoir l’exposition (nécessité de redessiner le widget), l’appui et le relâchement d’un bouton de souris, les mouvements du pointeur. On définit ensuite la taille désirée pour notre widget avec gtk_widget_set_usize(), on insère judicieusement le widget dans l’interface avec gtk_box_pack_start, et enfin, on connecte les différents événements aux fonctions de rappel adéquates par des appels successifs à gtk_signal_connect().
|