Forum Linux.gui GTK+: Connaitre la taille effective d'une fenêtre

Posté par  (site web personnel) .
Étiquettes : aucune
0
18
mai
2006
Hello,
J'ai plusieurs problèmes en fait:

1. je n'arrive pas à obtenir la taile *réelle* de la fenêtre principale de mon application. J'utilise actuellement get_allocation mais la valeur renvoyée ne me semble pas réaliste. J'ai l'impression que c'est la taille minimale requise par les widgets, et pas la taille actuelle de la fenêtre...

2. Je voudrais réaliser une IHM avec des zones de ce type:

+-----------------------+
| 1 |        2          |
+---+-------------------+
|            3          |
+-----------------------+


Les zones 1 et 2 doivent avoir une hauteur de 20% de la hauteur totale de la fenêtre (d'où mon problème 1). J'ai pour l'instant imbriqué 1, 2 dans une hbox, puis le tout avec 3 dans une vbox, mais j'ai l'impression que ce n'est pas la bonne solution.

Je voudrais que 1 et 2 aient une hauteur fixe (20% de la fenêtre principale, au démarrage de l'appli - pas besoin de redimensionner en continu)

Merci pour vos conseils !
  • # utilise le signal "size-allocate"

    Posté par  (site web personnel) . Évalué à 2.

    Pour ce genre de choses, j'utilise le signal "size-allocate" avec un callback de signature :

    void size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gpointer data)
    {
    ...
    }
    • [^] # Re: utilise le signal "size-allocate"

      Posté par  (site web personnel) . Évalué à 2.

      merci, ça a effectivement résolu mon problème :-)
      Par contre, tu n'aurais pas une idée sur le widget à utiliser pour garder un bandeau supérieur (qui contient les zones 1 et 2) avec une hauteur fixe ?

      Comme ça je fixerai la hauteur à 20% de la hauteur totale de la fenêtre au démarrage (c'est une appli qui ne s'exécutera qu'en plein écran)
      • [^] # Re: utilise le signal "size-allocate"

        Posté par  (site web personnel) . Évalué à 1.

        Je pense que tu dois utiliser une GtkHBox avec une hauteur fixe que tu mets dans une GtkVBox.
        Le code ci-dessous a été généré par glade et tu dois pouvoir t'en inspirer :

        window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW (window1), _("window1"));

        vbox1 = gtk_vbox_new (FALSE, 0);
        gtk_widget_show (vbox1);
        gtk_container_add (GTK_CONTAINER (window1), vbox1);

        hbox1 = gtk_hbox_new (FALSE, 0);
        gtk_widget_show (hbox1);
        gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
        gtk_widget_set_size_request (hbox1, -1, 73);
        • [^] # Re: utilise le signal "size-allocate"

          Posté par  (site web personnel) . Évalué à 2.

          Ah oui, bien pensé la génération de code avec glade, j'avais pensé à utiliser glade, mais l'IHM étant tellement simple, je trouvais ça dommage d'utiliser libglade... Comme la génération de code par glade est déconseillée, j'ai pas pensé à cette astuce... Merci encore :-)
  • # meuh

    Posté par  (site web personnel) . Évalué à 2.

    1. je n'arrive pas à obtenir la taile *réelle* de la fenêtre principale de mon application. J'utilise actuellement get_allocation mais la valeur renvoyée ne me semble pas réaliste. J'ai l'impression que c'est la taille minimale requise par les widgets, et pas la taille actuelle de la fenêtre...

    Voilà ce que j'utilise pour sauvegarder et restorer la taille et la position de la fenêtre de mon application en ruby/gtk[1] :

    Restoration :

    if $config['pos-x'] && $config['pos-y']
    $main_window.move($config['pos-x'].to_i, $config['pos-y'].to_i)
    else
    $main_window.window_position = Gtk::Window::POS_CENTER
    end
    $main_window.set_default_size(($config['width'] || 600).to_i, ($config['height'] || 400).to_i)

    Sauvegarde :

    $main_window.signal_connect('configure-event') {
    x, y = $main_window.window.root_origin
    width, height = $main_window.window.size
    $config['pos-x'] = x
    $config['pos-y'] = y
    $config['width'] = width
    $config['height'] = height
    false
    }

    Je suggèrerais donc plutôt configure-event à size-allocate suggéré précédemment.

    [1] http://www.booh.org/
    • [^] # Re: meuh

      Posté par  (site web personnel) . Évalué à 2.

      non, non, apparemment c'est bien le size-allocate qu'il faut utiliser...
      le configure event a l'air d'être déclenché avant que la taille ne soit fixée, donc c'est bien pour avertir qu'il faut changer la taille...
      • [^] # Re: meuh

        Posté par  (site web personnel) . Évalué à 2.

        comment tu expliques que ce code fonctionne[1], alors ?

        [1] au démarrage de l'application, la taille et position au dernier quit sont conservés
        • [^] # Re: meuh

          Posté par  (site web personnel) . Évalué à 2.

          hum... j'ai utilisé les deux callback et affiché la taille au démarrage. Le configure-event me donne la taille allouée de base à la fenêtre, et n'est appelé que si je resize la fenêtre. Le size-allocate me donne tout de suite la taille *affichée*, sans avoi besoin de redimensionner la fenêtre. Une fois que tu as redimensionné ta fenêtre, ta méthode marche, et si tu ne redimensionnes pas, tu auras de toute façon la même taille au prochain démarrage (ce sera la taille par défaut à nouveau, mais toi tu ne l'auras pas sauvegardée).

          Crée une callback pour les deux évènements, tu verras.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.