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 :

Menu coloriés ?


Sujet :

GTK+ avec C & C++

  1. #21
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    En fait, ce sont les fonctions suivantes :

    gboolean callback_background_color_menu_hist (GtkWidget *widget, cairo_t *cr, gpointer param_nb)
    void callback_background_color_menu_race (GtkWidget *widget, cairo_t *cr, gpointer param)
    void callback_background_color_menu_classe (GtkWidget *widget, cairo_t *cr, gpointer param)

    qui sont les trois dernières du fichier callback_menu . J'ai du un peu modifié car avant, je teste l'entrée du menu pour savoir de quelle couleur la mettre.

    nb : je pense que ton essai de coloriage mériterait ca place dans une aide gtk.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #22
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Nos réponses se sont croisées. J'ai répondu au problème sur la page précédente

  3. #23
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je comprends mieux le pourquoi du prototype ! Il fait parti intégrante du tout...

    Merci.

    Sinon, je ne vois pas comment cette méthode pourrait marcher avec les combo-box. La question à se poser est : "les item des combo-box sont-ils des widgets ?".
    Et, là je n'en suis pas sûr
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #24
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    J'en suis effectivement là. Le seul moyen que j'ai trouvé jusqu'à présent pour accéder à chaque élément d'un GtkComboBox est de passé par les AtkObject. Autant te dire que ca se complique un tentiné .

    J'obtiens le nombre d'élément contenu ainsi que chaque pointeur AtkObject de chacun d'eux. Mais maintenant je n'arrive pas à convertir tout ce petit monde en GtkWidget. Pourtant la souris à bien une action dessus. Ils sont donc des GtkWidgets. La preuve en est qu'en essayer de transtyper j'obtiens une erreur me disant qu'ils sont du type GtkMenuItemAccessible. Malheureusement je ne trouve rien dans la documentation officielle par rapport à ce type de pointeur. Je fouille encore...

  5. #25
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #26
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Tu as tout à fait raison. C'était devant moi tout ce temps

    Je te donne donc la méthode pour modifier ton GtkComboBox :
    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
    gboolean
    callback_background_color (GtkWidget *widget, cairo_t *cr, gpointer user_data)
    {
      GdkRGBA *color  = (GdkRGBA*) user_data;
      GtkAllocation allocation;
     
      /* Récupération de la taille du widget */
      gtk_widget_get_allocation (widget, &allocation);
     
      /* Affectation de la couleur de fond */
      cairo_set_source_rgba (cr, color->red, color->green, color->blue, color->alpha);
     
      /* Remplissage de la surface du widget */
      cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
      cairo_fill(cr);
     
      return FALSE;
    }
     
    void
    callback_color_cellrender (GtkComboBox *combobox,  gpointer user_data)
    {
      gint i;
      AtkObject *atk;
      GdkRGBA *color  = (GdkRGBA*) user_data;
      GtkWidget *widget = NULL;
     
      for (i=0; i < atk_object_get_n_accessible_children (gtk_combo_box_get_popup_accessible (combobox)); i++)
        {
          atk =  atk_object_ref_accessible_child (gtk_combo_box_get_popup_accessible (combobox), i);
          widget = gtk_accessible_get_widget ((GtkAccessible*)atk);
     
          g_signal_connect(G_OBJECT(widget), "draw", G_CALLBACK(callback_background_color), color);
        }
    }
    la fonction callback_color_cellrender (); est à appeler directement lors de la création de ton combobox.
    Images attachées Images attachées  

  7. #27
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je testerai dès que j'aurai un peu de temps devant moi... J'aurai eu un si gros coup de bol ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #28
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Ben ouais

  9. #29
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Ceci dit, il va peut-être réfléchir sur ton code : quand et comment utiliser callback_color_cellrender ?
    Il va falloir que g_signal_connect ne soit présent qu'une fois par item du menu. Sinon, j'aurais peur de multiples appels et de ralentissement du programme.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  10. #30
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Non. Pas d'inquiètude. Tout widget au sens général du terme passe par le signal "draw". Tu ne vas pas sentir de ralentissement.

  11. #31
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Oui, mais le choix de la couleur passe par le parcours comparatifs de plusieurs listes !
    Je n'avais pas vu :
    la fonction callback_color_cellrender (); est à appeler directement lors de la création de ton combobox.
    OK !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  12. #32
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    C'est la seconde fois que je tombe sur ce problème ici...
    Comment vais l'éviter cette fois ? À moins que j'arrive à le résoudre !

    Soit je monte une nouvelle structure pour le passage de paramètre afin de dire à l'item lequel il est car sa couleur dépend de l'environnement lors de l'ouverture du menu. C'est à dire, qu'en fonction des paramètres des autres boites de dialogues, un item d'un menu peut changer de couleur.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  13. #33
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    J'ai encore contourné le problème...

    Mais

    1) Je vois apparaître la couleur la première fois que j'ouvre le menu et disparaître aussitôt
    C'est un combobox.
    2) J'ai du me planter dans les tests de couleurs, je n'ai pas ce que je cherche (là, c'est mon problème uniquement => je viens de tester, mon coloriage est bon).
    À moins que ce ne soit un problème de la récupération de la taille :
    allocation fait toujours :
    x=2
    y=2
    width=112
    height=402
    Mes tests viennent de montrer que le problème est bien là, si je divise la taille par le nombre d'éléments, j'ai bien juste la hauteur d'une case de coloriée.
    3) Si je place un TRUE à la place du FALSE en fin de callback, la couleur est là, unie sur tout le menu, mais sans le texte => où trouver les signaux afin de voir si je peux en choisir un autre ?
    4) J'ai un menu avec 27 entrées et atk_object_get_n_accessible_children trouve 28 fils... Toutes les entrées passent bien par le callback, saut celle pour i=0.

    La fonction callback est à la fin du fichier param.c et la première est appelé à la ligne 279 du fichier modif_caract.c .
    On peut voir que :
    le menu est créé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p_combo_classe[i]=gtk_combo_box_new_with_model (GTK_TREE_MODEL (p_model_classe));
    J'ai modifié le premier appel car ce n'est pas une fonction callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void callback_color_classe_cellrender (GtkComboBox *combobox,  struct_param_nb * user_data)
    nb : je suis bien arrivé après moult réflexions à faire le fond du menu comme je le souhaitais. Mais, il n'y a pas de texte. Cette fois, je ne comprends pas pourquoi... Il n'y a pas de return TRUE !

    Si tu veux, c'est au alentour de la ligne 2800 du fichier caract.c . Je me suis arrangé pour que les item de la fin soit appelé en premier et j'ai fait des rectangles de plus en plus petit pour aller jusqu'au premier.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  14. #34
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    "nb : je suis bien arrivé après moult réflexions à faire le fond du menu comme je le souhaitais. Mais, il n'y a pas de texte. Cette fois, je ne comprends pas pourquoi... Il n'y a pas de return TRUE !"

    Normal. Comme je te l'ai déjà dit si tu renvoies TRUE tu annules les autres appels attachés à ce signal. Seule ta fonction sera exécutée. Le texte n'apparaît plus.

  15. #35
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Il faut avouer qu'il est très difficile de lire ton code. Trop de pointeurs imbriqués les uns dans les autres.

    Mais pour essayer de répondre de manière plus générale, si tu veux que ton combobox évolue en fonction de certains choix dans d'autres menus tu peux le faire directement depuis le callback appelé par le signal "draw".

    Ainsi, lorsque tu ouvres le combobox tu effectues les tests nécessaires et choisi la couleur adéquate en fonction du résultat du test. Tu n'as qu'un callback attaché. Donc pas de risque de ralentissement.

  16. #36
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Certes mon code est difficile à lire, mais c'est juste les points du choix de la couleur.

    Il y a des essais de couleur que j'ai mis dans le callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      color.alpha=0;
      color.red=0;
      color.green=0;
      color.blue=0;
      gtk_widget_override_background_color(GTK_WIDGET(widget),65,&color);
      color.alpha=1;
      color.red=0;
      color.green=0;
      color.blue=0;
      gtk_widget_override_color (GTK_WIDGET(widget),63,&color);
    Si je les commente, mon fond disparaît et les noms des entrées du menu apparaissent.
    Si je les laiise, j'ai mon travail sur le fond qui reste.
    Pourquoi ?

    Il y a après un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       gtk_widget_get_allocation (widget, &allocation);
      allocation.height*=(((struct_param_nb*)tparam)->nb);
      allocation.height/=((unsigned short ****)(param))[M_MEMO][MENU][MAIN_NB_CLASSE][0];
    Pour faire la taille du rectangle=taille de l'item*numéro de l'entrée du menu / nombre d'entrée dans le menu.

    Là, je vois que la taille est la taille de l'affichage : donc plus petite s'il y a apparition d'ascenseur => mon idée n'est pas bonne.

    Je ne comprends pas pourquoi chez toi la couleur marche et pas chez moi J'ai comme l'impression que le draw n'est pas sur l'élément que je souhaite car la taille n'est pas la bonne => c'est la taille du menu complet.

    Ton dessin est pour une GtkComboBoxText, non ? Pour ma part, ce sont des GtkComboBox régit avec des GtkCellRendererText. Le problème viendrait-il des GtkCellRendererText ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  17. #37
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Si tu passes par des GtkCellRenderer tu peux directement modifier leurs propriétés avec la fonction g_object_set_data();.

  18. #38
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    J'ai déjà testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      g_object_set(p_cell,"cell-background-set",1,"cell-background","#00FF00",NULL);
    Mais, ça transforme tout le menu.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  19. #39
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Ha, ok! Au temps pour moi.

  20. #40
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je compte essayer de changer a structure de mon menu. Mais, j'ai passé le WE avec femme et enfants sans trop programmer
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  3. Menu d'installation
    Par Le Yannos dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2002, 22h15
  4. Inserer Un Menu dans un autre en execution
    Par apt dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 11h22
  5. Menu en GL
    Par Kaïn dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/05/2002, 11h58

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