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 :

Sauvegarder coordonnées image


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37

    Informations forums :
    Inscription : Juin 2010
    Messages : 241
    Par défaut Sauvegarder coordonnées image
    Bonjour,
    Lors d'un cliquer glisser, j'aimerais sauvegarder les coordonnées du point d'arrivé de ma sourie. Je les affiche avec la fonction :

    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
     
     
    void drag_data_received (GtkWidget        *widget,  GdkDragContext   *context,
                        gint              x,
                        gint              y,
               GtkSelectionData *selection_data,  guint    info,   guint32   time, gpointer data)
    {
     
      if (selection_data->length > 0)
        {
            GdkPixbuf *pixbuf;
          pixbuf = gtk_selection_data_get_pixbuf (selection_data);
          fprintf(stderr,"\n coordonnees : %d %d ",x,y);
          g_object_unref (pixbuf);
        }
    }
    Mais je n'arrive pas à les sauvegarder dans un gint* par exemple. Peut-être en utilisant une structure de 2 gint sur le "gpointer data" mais où peut on le récupérer en dehors de la fonction ?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    Par défaut
    Ta question est d'ordre générale. Si tu affectes une valeur à un pointeur d'une donnée allouée dans le tas tu retrouveras cette valeur à l'extérieur de la fonction.

    Donc si tu utilises g_object_set_data(); sur un GtkWidget* assigné à ta fenêtre principale ca va fonctionner.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37

    Informations forums :
    Inscription : Juin 2010
    Messages : 241
    Par défaut
    Bon, finalement avec une structure en entrée, ca marche aussi.
    Mais voilà, un autre problème : les coordonnées affichées ne sont pas celles de l'image chargée, mais plutôt celles de l'eventbox ( il y a donc un décalage). J'ai vu sur un topic qu'on pouvait utiliser allocation.x et allocation.y du widget pour palier à ce problème. Néanmoins, j'obtiens -1 en x et y avec la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     GtkWidget *ebox;
      ebox = gtk_event_box_new ();
     
    gtk_container_add (GTK_CONTAINER (ebox), image);
      gtk_box_pack_start(GTK_BOX(box), ebox, TRUE, TRUE, 0);
           GtkWidget * widget=ebox;
         fprintf(stderr,"Allocation : %i, %i, %i, %i", widget->allocation.x , widget->allocation.y,
         widget->allocation.width, widget->allocation.height) ;
    Que faire ? Y-a-t-il plus simple pour que les coordonnées de mon image colle à l'eventbox ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Le GtkAllocation ne sera pas initialisé avant que ton widget ne soit affiché à l'écran. Tu ne peux donc pas afficher son contenu juste après la création d'un widget.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37

    Informations forums :
    Inscription : Juin 2010
    Messages : 241
    Par défaut
    Je pensais à une alternative : utiliser une scrollbar pour forcer l'image à avoir la même dimension que l'eventbox. Cependant, je n'arrive pas à ajouter un eventbox sur un scrollbar.
    Voici comment je procède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     gtk_drag_dest_set (image_st->pBox, GTK_DEST_DEFAULT_ALL,NULL, 0, GDK_ACTION_COPY);// défini comme source
          gtk_drag_dest_add_image_targets (image_st->pBox); //définit comme destination pour image
         g_signal_connect (image_st->pBox, "drag-data-received",  G_CALLBACK (drag_data_received), image_st->image_loaded);// 
                            }
    Mais j'obtiens :
    gtk_scrolled_window_add_with_viewport: assertion `child->parent == NULL' failed

    Comment faire ?

Discussions similaires

  1. [Débutant] Sauvegarde d'image
    Par castaka dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2006, 20h27
  2. Réponses: 4
    Dernier message: 08/07/2006, 06h36
  3. [API WIN] SAuvegarder l'image du pointeur
    Par eyghon dans le forum Windows
    Réponses: 10
    Dernier message: 19/04/2006, 13h10
  4. Sauvegarder une image (.GIF/.JPG) avec CppWebBrowser
    Par Argol_Medusa dans le forum C++Builder
    Réponses: 12
    Dernier message: 12/12/2005, 11h27
  5. [VisualC++] Copie et sauvegarde d'images
    Par dananchet dans le forum MFC
    Réponses: 2
    Dernier message: 03/05/2005, 13h30

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