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 :

Dessiner un point sur un pixmap avec GTK2


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 24
    Points
    24
    Par défaut Dessiner un point sur un pixmap avec GTK2
    Bonjour

    Je souhaite dans un premier temps dessiner un point sur un pixmap, ce pixmap est inséré dans la fenêtre.

    VOici le code :

    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
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    #include <malloc.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <math.h>
    #include <locale.h>
     
    #include <gtk/gtk.h>
    #include <gdk/gdk.h>
    #include <glib/gprintf.h>
    //#include "vxctools/h/vxc_typ.h"
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
     
     
    int main (int argc, char *argv[])
    {
     GtkPixmap *dessin;
     GdkWindow *window1;
     
     gtk_init(&argc,&argv);
     
     window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     
     dessin = gdk_pixmap_new(window1,
                                800,
                                600,-1);
     
     gtk_window_set_default_size(GTK_WINDOW(window1),800,600);
     g_signal_connect(G_OBJECT(window1), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
     // Recuperation du contexte graphique
     GdkGCValues *gcV;
     GdkGC *gc;
     
     gtk_widget_set_size_request (GTK_WIDGET (dessin), 300, 300);
     
     gc = gdk_gc_new(dessin);
     
     // Pas sur du tout :
     gcV = malloc(sizeof(GdkGCValues));
     
     // Recuperation du contexte graphique
     gdk_gc_get_values(gc,gcV);
     
     // Dessin du point
     gdk_draw_point(dessin, gc, 20,20);
     
     // Ajout du dessin a la fenetre
     gtk_container_add (GTK_CONTAINER(window1), dessin);
     
     // Affichage de la fenetre et de son contenu
     gtk_widget_show_all(window1);
     gtk_main();
    }
    La fenêtre s'affiche bien mais sans le point.
    La console affiche ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (test_dessin:11452): Gdk-CRITICAL **: gdk_pixmap_new: assertion `drawable == NULL || GDK_IS_DRAWABLE (drawable)' failed
     
    (test_dessin:11452): Gtk-CRITICAL **: gtk_widget_set_size_request: assertion `GTK_IS_WIDGET (widget)' failed
     
    (test_dessin:11452): Gdk-CRITICAL **: gdk_gc_new: assertion `drawable != NULL' failed
     
    (test_dessin:11452): Gdk-CRITICAL **: gdk_gc_get_values: assertion `GDK_IS_GC (gc)' failed
     
    (test_dessin:11452): Gdk-CRITICAL **: gdk_draw_point: assertion `GDK_IS_DRAWABLE (drawable)' failed
     
    (test_dessin:11452): Gtk-CRITICAL **: gtk_container_add: assertion `GTK_IS_WIDGET (widget)' failed

    Est-ce que j'ommet de parametrer le "pinceau"?
    Je ne comprends pas pourquoi il me réponds que mon window n'est pas drawable alors que je vois dans "prog linux avec GTK+" : "GdkWindow est un drawable.


    Merci

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Je n'ai pas détaillé ton code mais ce que je peux déjà te dire c'est qu'un GtkWindow n'est vraiment initialisé qu'après un gtk_widget_show();. Donc lorsque tu crées un pixmap à partir de ton GtkWindow tel que tu le fais actuellement ca ne marche pas car le drawable n'est pas encore créé.
    Pour éviter ce genre de problème utilises la fonction gtk_widget_realize(); juste après la création du GtkWindow. Cette fonction va t'initialiser complètement le GtkWindow. Ensuite tout devrait rentrer dans l'ordre.

    En espérant t'aider un peu ...

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/02/2010, 01h59
  2. Dessiner un point sur l'écran
    Par Nicolas123 dans le forum OpenGL
    Réponses: 5
    Dernier message: 14/06/2009, 23h04
  3. dessiner des cercles sur une image avec java
    Par inès83 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/05/2008, 17h34
  4. dessiner un point sur un label
    Par gillesrun dans le forum Windows Forms
    Réponses: 46
    Dernier message: 03/07/2007, 08h04
  5. Réponses: 10
    Dernier message: 21/01/2007, 01h04

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