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 :

deplacer un cercle dessiné avec cairo


Sujet :

GTK+ avec C & C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut deplacer un cercle dessiné avec cairo
    Bonjour,
    je cherche un moyen pour deplacer un pion dessiné avec cairo sans des traces .
    ps : je suis arriver à deplacer un pion mais celui d'avant reste !Je peux pas utiliser gtk_widget_queue_draw_area() parce que j'ai 6 pions à tracer et à deplacer par role :s
    merci d'avance .

  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
    Le dessin du pion se fait-il dans le Callback appelé par le signal "expose-event" attaché au GtkDrawingArea ou bien dans une autre fonction?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    non , j'ai pas utiliser un callback pour dessiner le pion .
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    //ici j'ai essayé de visualiser le deplacement elementaire d'un pion 
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include "regles.h"
     
    GtkWidget *pImage;
     
    gboolean on_button_press_event(GtkWidget *widget,GdkEventButton *event,PionP *pion1);
    gboolean circle_expose_cb(GtkWidget *wi, GdkEventExpose *ev, PionP *pion1);
     
     
    gboolean circle_expose_cb(GtkWidget *wi, GdkEventExpose *ev, PionP *pion1)
    {
      cairo_t *cr;
     
       /* Create a cairo context */
       cr = gdk_cairo_create(wi->window);
     
       /* Set it to a medium green */
       cairo_set_source_rgb(cr, 0, 0.7, 0);
       /* Draw a circle in the center */
       cairo_arc(cr,pion1->x ,pion1->y ,pion1->rayon, 0, 2*G_PI);
       g_print("Cairo: x/y/r %f%f%f", pion1->x, pion1->y, pion1->rayon);
     /* Fill the circle */
       cairo_fill(cr);
     
       /* Free the context */
       cairo_destroy(cr);
     
       return FALSE;
    }
    gboolean on_button_press_event(GtkWidget *widget,GdkEventButton *event,PionP *pionp)
    {
      double nouveautheta;
      //PionP pion1;
      Click click;
      //cairo_t *cr;
      //GtkWidget *pImage;
      //gtk_widget_queue_draw_area(widget,0,0,320,400);
      if(event->type == GDK_BUTTON_PRESS)
    	{
    	  click.x=event->x;
    	  click.y=event->y;
    		g_print("x:%d y:%d\n",(int)event->x,(int)event->y);
    		//gtk_widget_queue_draw_area(pImage,(pionp->x)-(pionp->rayon),(pionp->y)-(pionp->rayon),(pionp->x)+(pionp->rayon),(pionp->y)+(pionp->rayon));
    		nouveautheta=calculthetaP(pionp,click);
    		deplacementPionP(pionp, nouveautheta);
    		circle_expose_cb(pImage,NULL,pionp);
                    return TRUE; 
    	}
    	else
    	{
    		g_print("what else ?");
    		return FALSE;
    	}
    }
     
     
    int main(int argc,char **argv){
      GtkWidget *pWindow;
      //  GtkWidget *pImage;
      GtkWidget *pVBox;
      GtkWidget *window;
      GtkWidget *event_box;
      double nouveautheta;
      PionP *pionp;
      PionF *pion1;
      PionF *pion2;
      PionF *pion3;
      PionF *pion4;
      PionF *pion5;
    /*creation de la fenetre principale*/  
      pionp=malloc(sizeof(PionP));
      pion1=malloc(sizeof(PionF));
      pion2=malloc(sizeof(PionF));
      pion3=malloc(sizeof(PionF));
      pion4=malloc(sizeof(PionF));
      pion5=malloc(sizeof(PionF));
      initialisation(pion1,pion2,pion3,pion4,pion5,pionp);//en attente ..
    	gtk_init(&argc,&argv);
     	pWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
      	gtk_widget_set_size_request(GTK_WIDGET(pWindow),320,400);
      	gtk_window_set_position(GTK_WINDOW(pWindow),GTK_WIN_POS_CENTER);
      	gtk_window_set_title(GTK_WINDOW(pWindow),"JIPTO");
    	pVBox = gtk_vbox_new(FALSE,0);
    	event_box=gtk_event_box_new();
    	gtk_container_add(GTK_CONTAINER(pWindow),pVBox);
      	pImage = gtk_image_new_from_file("./plateau.png");
    	gtk_box_pack_end(GTK_BOX(pVBox), event_box, FALSE, FALSE, 5);
    	gtk_container_add(GTK_CONTAINER(event_box), pImage);
    	gtk_widget_add_events(event_box,GDK_BUTTON_PRESS_MASK);
    	g_signal_connect(G_OBJECT(event_box), "button_press_event", G_CALLBACK(on_button_press_event),pion1);
    	printf("x=%f,y=%f",pion1->x,pion1->y);
    	/*affichage de tout*/
    	gtk_widget_show_all(pWindow);
      	/*fermeture de gtk*/
        	gtk_main();
    	return EXIT_SUCCESS;
    }
    c'est un code pour realiser un deplacement d'un seul pion

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    c'est bon j'ai trouver la resultat !
    il faut utiliser un callback avec un update de la fenetre
    merci gerald3d !

Discussions similaires

  1. Dessiner un cercle plein avec Xlib
    Par Guillaume1701 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/04/2014, 16h40
  2. Dessiner une droite avec Cairo
    Par Gamall dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 31/10/2009, 09h23
  3. Dessiner avec wxWidgets
    Par SuperPat dans le forum wxWidgets
    Réponses: 5
    Dernier message: 24/02/2009, 00h06
  4. Réponses: 1
    Dernier message: 26/02/2005, 12h55

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