IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Ajuster la taille d'une zone de dessin


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Points : 116
    Points
    116
    Par défaut Ajuster la taille d'une zone de dessin
    Bonjour,

    j'ai une application toute simple qui contient une zone de dessin (gnome_canvas) imbriquée dans une frame, elle-même imbriquée dans la fenêtre principale.

    Je trace des fonctions dans mon canevas et j'aimerai que lorsque la fenêtre est redimensionnée, la taille des dessins dans le canevas s'ajuste automatiquement.

    Voilà ce que j'ai fait sommairement :

    - je récupère le moment où l'application est redimensionnée grace au signal " expose-event "
    - je relie ce signal à la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void redim(GtkWidget *pWindow, GdkEventExpose *event, gpointer data)
    {
      gint w,h;
     
      gtk_window_get_size(GTK_WINDOW(pWindow),&w,&h);
     
      gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(data),500.0/w);
    }
    Si mon canevas est vide, pas de problème.
    Cependant, le moindre dessin dedans consomme toutes les ressources de mon pc et le programme devient inutilisable...

    Dois-je utiliser un autre signal que expose-event ou alors changer complétement de méthode ?

    Merci !

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Salut.

    Je ne connais pas les GnomeCanvas mais si ca ressemble au GtkDRawingArea il est tout à fait normal que ton processeur pédale lorsque tu re-dimensionnes.

    Dans ton cas il faut éviter le calcul de l'image dans le CallBack du "expose-event". Dans cette fonction il ne doit y avoir que l'affichage de l'image finalisée.

    Il faudra donc créer l'image autrement que le dessin direct.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 32
    Points : 35
    Points
    35
    Par défaut
    Salut,

    Tu peux aussi ne redessiner que la partie qui en a besoin (dans le cas d'une redimention il faut tout redessiner donc bon... La partie en question est enseignée par envent->area (voir la doc de GdkRectangle).

    Mais en effet puisque l'expose-event est généré dès le changement de taille de la fenêtre, tu en reçois un paquet pendant le redimetionnement, et tu redessine autant de fois... Pour peu que le dessin soit un peu complexe, ça va ramer, c'est normal.

    Je ne sais pas si c'est intelligent, mais tu peux limite mettre un timer pour ne dessiner qu'après n secondes après l'appel de la fonction, et le réinitialiser à chaque appel pour ne pas redessiner plus de x fois en une seconde ou un truc du genre.

    PS :
    expose-event n'a pas lieu "quand le widget est redimmentionné", mais dès qu'il y a une partie du widget à redessiner, ce qui peut arriver si un menu ou une autre fenêtre passe devant

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Points : 116
    Points
    116
    Par défaut
    D'accord merci pour vos réponses !

    Donc il faut éviter le surplus d'opérations inutiles, en particulier pour le dessin.

    Mettre un timer me semble une bonne idée.

    Mais comme tu le dit, expose-event intervient pour d'autres raisons que le redimensionnement... Il n'existerait pas un signal "resize" ou autre ?

    Merci à vous.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Peut être les signaux "size-allocate" ou "size-request". Je ne les ai jamais utilisés. A voir donc...

Discussions similaires

  1. Ajuster la taille d'une image à la zone image
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/08/2006, 19h41
  2. Taille d'une zone de texte dans un état sous Access 2003
    Par Petite grenouille dans le forum Contribuez
    Réponses: 4
    Dernier message: 15/05/2006, 19h39
  3. taille d'une zone de saisie
    Par somatino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 05/04/2006, 17h40
  4. [débutant] Une zone de dessin et des boutons
    Par mavina dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/02/2006, 12h51
  5. [JTable] ajuster la taille d'une colonne à la taille du texte
    Par GETah dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/02/2005, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo