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+ Discussion :

rendre un pixmap sensible au evenement (clic de souris,deplacement de souri) dans une drawing area.


Sujet :

GTK+

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Points : 3
    Points
    3
    Par défaut rendre un pixmap sensible au evenement (clic de souris,deplacement de souri) dans une drawing area.
    bonjour tous le monde ...
    Voila je suis en train de réaliser une application avec GTK.
    Cette application permet de créer des schemas electrique c'est a dire qu'on dispose d'un ensemble de circuits électriques dans la barre d'outils, et à partir de cette barre on clic sur un bouton (circuit) et puis avec un clic de souris on insère le circuit (c'est un pixmap) dans la drawing area....
    J'ai réalisé tous ça!! Mais mon problème c'est de pouvoir manipuler le pixmap dans la drawing area c'est a dire le déplacer avec clic enfoncé de souris.
    Alors existe t-il une fonction qui permet de rendre le pixmap dans la drawing area sensible aux évènements GDK ?

    Voila mon code les callbacks de mon application
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    GdkPixmap *pixmap = NULL;
    void
    destroy (GtkWidget *widget, gpointer data)
    {
        gtk_main_quit ();
    }
    gboolean configure_event( GtkWidget         *widget,
    GdkEventConfigure *event )
    {
        if (pixmap)
        g_object_unref (pixmap);
     
        pixmap = gdk_pixmap_new (widget->window,
        widget->allocation.width,
        widget->allocation.height,
        -1);
        gdk_draw_rectangle (pixmap,
        widget->style->white_gc,
        TRUE,
        0, 0,
        widget->allocation.width,
        widget->allocation.height);
     
        return TRUE;
    }
    gboolean expose_event( GtkWidget      *widget,
    GdkEventExpose *event )
    {
        gdk_draw_drawable (widget->window,
        widget->style->fg_gc[gtk_widget_get_state (widget)],
        pixmap,
        event->area.x, event->area.y,
        event->area.x, event->area.y,
        event->area.width, event->area.height);
     
        return FALSE;
    }
    GdkPixmap *pix = NULL ;
    GdkBitmap *mask;
    GtkStyle *style;
    gboolean button_press_event( GtkWidget      *widget,
    GdkEventButton *event )
    {
     
        if (event->button == 1 && pixmap != NULL)
        draw_image (widget, event->x, event->y);
     
        return TRUE;
    }
     
    gboolean motion_notify_event( GtkWidget *widget,
    GdkEventMotion *event )
    {
        int a, b;
        GdkModifierType state;
     
     
        gdk_window_get_pointer (event->window, &a, &b, &state);
     
     
     
     
        return TRUE;
    }
     
    void draw_image( GtkWidget *widget,
    gdouble    a,
    gdouble    b)
    {
        gdouble f,g;
        f=a-10;
        g=b-10;
     
        style = gtk_widget_get_default_style();
     
     
        pix = gdk_pixmap_create_from_xpm( pixmap,&mask,&style->bg[GTK_STATE_NORMAL],"./circuit.xpm" );
     
        gdk_draw_drawable (pixmap,
        widget->style->fg_gc[gtk_widget_get_state (widget)],
        pix,
        0,0 ,
        f, g,
        -1, -1);
        gtk_widget_queue_draw_area (widget,
        f, g,20, 20);
        gtk_widget_set_sensitive (GTK_WIDGET (pix), TRUE);
    }

  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
    Je réponds un peu sur le tard mais non ce n'est pas possible directement. Un GtkDrawingArea n'est qu'une surface sur laquelle on place des images les unes sur les autres. Une fois fait on ne dispose plus que d'une image de pixels.
    Je viens d'écrire un petit programme exemple pour un autre post qui justement permet ce que tu cherches. Voila le lien.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/08/2012, 13h37
  2. calculatrice windows sur evenement clic d'un bouton
    Par froutloops62 dans le forum IHM
    Réponses: 1
    Dernier message: 16/07/2007, 03h10
  3. Dissocier les evenements clic et onDragStart
    Par gelko dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/11/2006, 12h36
  4. [C#] evenement clic souris
    Par vince3320 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/04/2006, 10h07
  5. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 10h51

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