bonjour, je voudrais savoir s'il existe des signaux pour le redimensionnement d'une gtk_window (via le bouton redimensionner/restaurer ou via les bords de la fenêtre).
J'affiche un gdkpixbuf et j'aimerais le redimensionner automatiquement.
bonjour, je voudrais savoir s'il existe des signaux pour le redimensionnement d'une gtk_window (via le bouton redimensionner/restaurer ou via les bords de la fenêtre).
J'affiche un gdkpixbuf et j'aimerais le redimensionner automatiquement.
Bonjour,
Je dirais size-request ou size-allocate, à tester![]()
j'ai essayé sans succès...après j'ai certainement un problème dans mon code mais je ne le vois pas:
ma fenetre est difinit comme suit
et le callback est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 f->win=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(f->win),titre); gtk_window_set_position(GTK_WINDOW(f->win),GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(f->win),TRUE); gtk_widget_set_size_request(f->win,10,10); gtk_window_set_default_size(GTK_WINDOW(f->win),largeur,hauteur); gtk_container_set_border_width(GTK_CONTAINER(f->win),0); gtk_window_set_position(GTK_WINDOW(f->win),GTK_WIN_POS_CENTER_ON_PARENT); g_signal_connect(G_OBJECT(f->win),"size-request",G_CALLBACK(redim_int_fen),f); g_signal_connect(G_OBJECT(f->win),"destroy",G_CALLBACK(gtk_main_quit),NULL)
PS : je précise que le code marche sans le callback "redim_int_fen".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void redim_auto(int n,fenetre *f) { int largeur=0,hauteur=0; if (n>=0) { if (abs(gdk_pixbuf_get_width(f->pixbuf_aff[n])-((f->onglets)->allocation.width-largeur_onglets))>auto_min) { largeur=1+((f->onglets)->allocation.width)-largeur_onglets; hauteur=1+(int)(gdk_pixbuf_get_height(f->pixbuf_aff[n])*(((f->onglets)->allocation.width)-largeur_onglets)/gdk_pixbuf_get_width(f->pixbuf_aff[n])); f->pixbuf_aff[n]=gdk_pixbuf_scale_simple(f->pixbuf[n],largeur,hauteur,GDK_INTERP_HYPER); gtk_image_set_from_pixbuf(GTK_IMAGE(f->images[n]),f->pixbuf_aff[n]); } if ((gdk_pixbuf_get_height(f->pixbuf_aff[n])-(((f->onglets)->allocation.height)-hauteur_onglets))>auto_min) { largeur=1+(int)(gdk_pixbuf_get_width(f->pixbuf_aff[n])*(((f->onglets)->allocation.height)-hauteur_onglets)/gdk_pixbuf_get_height(f->pixbuf_aff[n])); hauteur=1+((f->onglets)->allocation.height)-hauteur_onglets; f->pixbuf_aff[n]=gdk_pixbuf_scale_simple(f->pixbuf[n],largeur,hauteur,GDK_INTERP_HYPER); gtk_image_set_from_pixbuf(GTK_IMAGE(f->images[n]),f->pixbuf_aff[n]); } } } void redim_int_fen(GtkWidget *widget,GtkAllocation *allocation,gpointer d) { fenetre *f=(fenetre *) d; redim_auto(gtk_notebook_get_current_page(GTK_NOTEBOOK(f->onglets)),f); }
Tu n'expliques même pas ce qui ne marche pas. C'est à nous de deviner si ça ne compile pas, si ça plante à l'exécution, si tout semble fonctionner mais que ton callback ne fait pas ce que tu aimerais qu'il fasse, ... ? Est-ce que ton callback est appelé quand ut le souhaites déjà ?
Je rajouterai aussi qu'il serait bien plus simple de t'aider en ayant un code complet et simple : tu crées une fenêtre avec une fonction callback qui affiche un message avec g_print et c'est tout. ça limitera déjà les causes d'erreur.Envoyé par teuf13
c'est vrai que je n'est pas était trés clair ; ce qu'il ne marche pas ? le programme se lance puis selon le signal utilisé soit le callback ne fait rien soit le programme bloque ("size-allocate").
je suis en train de reprendre mon code pour autre chose, c'est pour ça que je n'ai pas fait un "programme test" ni posté l'intégralité de mon code (qui commence à être un peu long d'ailleurs).
Partager