Salut! S'il vous plait, j'aimerais comment réaliser un splash screen avec GTK+. Je sais que ça se fait, mais je ne sais pas comment. Merci de ma répondre.
Eric
Version imprimable
Salut! S'il vous plait, j'aimerais comment réaliser un splash screen avec GTK+. Je sais que ça se fait, mais je ne sais pas comment. Merci de ma répondre.
Eric
Bonjour,
oui c'est possible, il suffit de créer une GtkWindow avec le type GTK_WINDOW_POPUP, ensuite tu colle une image dedans et voilà :P
ok! j'ai bien compris. comment faire attendre le splash screen durant quelques minutes?
Il existe surment plusieurs manières, voici celle que j'utilise :Citation:
Envoyé par doderic
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 static gboolean init_app (gpointer user_data) { /* Cree la fenetre principale de l'application */ /* ... */ /* destruction de l'ecran de demarrage */ gtk_widget_destroy (GTK_WIDGET (user_data)); return FALSE; } int main (int argc, char **argv) { /* Creation de l'ecran de demarrage */ GtkWidget *p_splash_screen = NULL; /* ... */ g_idle_add (init_app, &p_splash_screen); /* Boucle principale */ gtk_main (); return 0; }
:P On peut aussi garder le splash screen quelque temps devant l’interface principale, c’est plus joli.
Voilà un extrait d’un de mes programmes…
On devine que la structure de ihm contient des widgets.
Avec GTK on n'a pas le droit de faire des trucs moche ;) ...Code:
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 guint SplahScreenId=0; gboolean splahScreenOff(void *data) { if (SplahScreenId && ihm.SplahScreen && ihm.WindowMain) { gtk_widget_destroy(ihm.SplahScreen); ihm.SplahScreen = NULL; return FALSE; } } return TRUE; } void splahScreen() { int x, y, wM, hM, wS, hS; char file[]= "splahscreen.png"; GtkWidget *Image; GdkPixbuf *Pix; wM = hM = wS = hS = -1; Image = gtk_image_new_from_file(file); if (NULL == Image) return; Pix = gtk_image_get_pixbuf (GTK_IMAGE(Image)); wS = gdk_pixbuf_get_width (Pix); hS = gdk_pixbuf_get_height(Pix); ihm.SplahScreen = gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_resizable(GTK_WINDOW(ihm.SplahScreen), FALSE); gtk_window_set_policy (GTK_WINDOW(ihm.SplahScreen), FALSE, FALSE, FALSE); gtk_window_set_position (GTK_WINDOW(ihm.SplahScreen), GTK_WIN_POS_CENTER); gtk_window_has_toplevel_focus (GTK_WINDOW(ihm.SplahScreen)); gtk_container_add (GTK_CONTAINER(ihm.SplahScreen), Image); gtk_widget_realize(ihm.SplahScreen); gtk_widget_show_all(ihm.SplahScreen); SplahScreenId = gtk_timeout_add(3000, splahScreenOff, NULL); } GtkWidget *create_IHM(void) { // création de l'interface... // ihm.WindowMain = gtk_windo... // ... // on passe le Splash screen en avant... if (ihm.SplahScreen) { gtk_window_set_transient_for(GTK_WINDOW(ihm.SplahScreen), GTK_WINDOW(ihm.WindowMain)); } return ihm.WindowMain; } int main (int argc, char *argv[]) { gtk_init (&argc, &argv); gdk_rgb_init (); // ... splahScreen(); windowMain = create_IHM(); gtk_widget_show_all(windowMain); gtk_main(); gMosaic_quit(); close_log(); return 0; }