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. #1
    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 Menu coloriés ?
    Bonjour

    J'aimerais bien générer de tels menu avec gtk3 :
    Le but étant de différencier certains item par la couleur. Est-ce possible ?
    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. #2
    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
    A priori je dirais non. Du moins pas de manière simple.

    Une idée qui me vient serait de créer une image que tu pourrais ensuite intégrer comme un GtkImageMenuItem. Mais bon, c'est peut être un peut tiré par les cheveux...

  3. #3
    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
    Il faudrait que je calcule la hauteur de chaque entrée ?
    Pas génial !
    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. #4
    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
    Je peux toujours essayer de construire une petite fonction adéquate pour voir si c'est faisable de manière relativement simple.

  5. #5
    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
    A force de chercher il y a peut être un début de solution avec la fonction gtk_widget_override_background_color();.

  6. #6
    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
    Le widget ? C'est quoi ? Un élément du menu ou tout le menu ?
    Je ne pense pas qu'un élément du menu puisse être considéré comme un widget. Si ?
    Dans ce cas favorable, comment l'atteindre ?
    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...

  7. #7
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Citation Envoyé par troumad Voir le message
    Je ne pense pas qu'un élément du menu puisse être considéré comme un widget. Si ?
    Un GtkMenuItem est bien un widget...

  8. #8
    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
    Apparemment si l'entrée du menu est un GtkRadioMenuItem* seul le bouton sera affecté par la fonction gtk_widget_override_background_color();. Le label aura toujours le fond gris (ou de la couleur du gestionnaire de fenêtre choisi).

  9. #9
    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
    Ca y est. Je le tiens .

    Il faut ajouter une fonction callback associée au signal "draw" pour chaque GtkMenuItem*. Je te la fournis :
    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
    gboolean
    callback_background_color_menuitem (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;
    }
    Il faut transmettre à cette fonction un pointeur sur un GdkRGBA* qui contiendra la couleur de fond que tu veux associer au GtkMenuItem*.
    Par exemple on pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GdkRGBA color;
      color.red = 1.0;
      color.green = 1.0;
      color.blue = 51.0/255;
      color.alpha=1.0;
    Il nous suffira de passer le pointeur de cette variable au callback associé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     radioitem = gtk_radio_menu_item_new_with_label  (group, name);
          g_signal_connect (G_OBJECT(radioitem), "draw", G_CALLBACK(callback_background_color_menuitem), &color);
    Il est important de bien penser à ce que la variable color soit toujours "vivante" le temps de l'exécution du code. C'est pour cela que je pense qu'elle doit être initialisée dans la fonction main(); et propagée au callback à partir de là.

    Histoire de te montrer ce que ca donne j'ai modifié ton code perso. Les menus interactifs construits à partir du contenu des répertoires ont maintenant un fond jaune .
    Images attachées Images attachées  

  10. #10
    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 ne pense pas avoir le temps de tester avant Jeudi après midi. Mais, là, c'est pour les barres de menus uniquement...
    Je me suis mal exprimé peut-être !
    Ma copie d'écran représentait une ComboBox... Et c'est une ComboBox que je voudrais colorier !
    Ceci-dit, je vais sûrement profiter de cet exemple pour tester avec les menus
    Et peut-être rajouter quelques lignes dans mon articles sur les menus avec 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...

  11. #11
    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
    Bon, ben, je te fais ca pour les combobox alors .

  12. #12
    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 suis arrivé à faire marcher ton système avec mes menu

    Cependant, je tombe sur un bug de code::blocks... J'aurais voulu étudier le paramètre widget de ta fonction, je mets un stoppeur à la ligne 171 du fichier callback_menu (dans ta fonction), lorsque le mode pas à pas arrive sur cette fonction, je n'ai plus que la souris qui marche dans l'interface graphique !
    C'est la seconde fois que j'arrive sur un tel problème ! Voir : http://www.mageialinux-online.org/fo...t=&idm=&quote=

    En plus, bien avant d'arriver sur ta fonction, j'ai plein de warning qui arrivent en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk-WARNING **: Theme parsing error: gtk.css:132:30: Not using units is deprecated. Assuming 'px'.
    Peut-être une histoire de mise à jour inachevées...
    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. #13
    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
    Un petit problème lié au thème de ton bureau peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...Theme parsing error: gtk.css
    Pour ce qui est de colorier un GtkCombox je suis toujours dessus. Je suis en train de me casser les dents dessus . Je n'arrive toujours pas à accéder au popup qui s'ouvre lorsque tu cliques sur le bouton du GtkCombox. Je continue mes recherches...

  14. #14
    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
    Citation Envoyé par gerald3d Voir le message
    Par exemple on pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GdkRGBA color;
      color.red = 1;
      color.green = 1;
      color.blue = 51/255;
      color.alpha=1;
    Attention, ce code cache un peu la ralité des choses...
    Il faut des float et on ne voit que des entiers

    Tu peux mettre à la limite :
    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...

  15. #15
    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
    Mon but étant de colorier l'entrée du menu en fonction de sa configuration, j'ai besoin de savoir quelle est l'entrée : ce qu'elle affiche ou son rang dans les entrées. Est-ce possible à partir de l'entrée widget ?

    J'ai un autre problème, pour certaines entrées, c'est bon, et pas pur d'autres. Dans certains cas, toute la case est coloriée, même ce qui est affiché !
    En enlevant la ligne qui colorie c'est bon :Tu peux voir ceci aux lignes 296 et 184 de mon fichier callback_menu.c de mon projet http://troumad.org/Mes_regles/perso3.zip
    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...

  16. #16
    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
    Citation Envoyé par troumad Voir le message
    Mon but étant de colorier l'entrée du menu en fonction de sa configuration, j'ai besoin de savoir quelle est l'entrée : ce qu'elle affiche ou son rang dans les entrées. Est-ce possible à partir de l'entrée widget ?
    Je ne comprends pas. Quelle entrée du menu? Du GtkComboBox? Quelle configuration? Désolée, là je suis perdu!

  17. #17
    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
    Citation Envoyé par troumad Voir le message
    ...
    Tu peux voir ceci aux lignes 296 et 184 de mon fichier callback_menu.c de mon projet http://troumad.Mes_regles/perso3.zip
    Heuuu marche pas ton lien!

  18. #18
    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
    Oups... J'ai encore bouffé une partie du lien... Je corige...
    Voici le menu que je voudrais colorier et le version colorié à côté :

    Celui qui marche est créé avec gtk_menu_item_new_with_mnemonic, ceux qui ne marchent pas sont créés avec gtk_check_menu_item_new_with_mnemonic ou gtk_radio_menu_item_new_with_mnemonic
    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. #19
    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
    À partir de quelle fonction appelles-tu callback_background_color_menu_classe();. Je ne trouve pas...

  20. #20
    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
    Bon, même si je n'ai pas trouvé l'origine de l'appel ce n'est pas grave.

    La fonction que je t'ai donné est un Callback éxécuté sur l'appel du signal "draw". Donc le prototype de ce callback doit être respecté.

    Si tu veux que tes menus soient affichés correctement il faut ces prototypes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gboolean callback_background_color_menu_race (GtkWidget *widget, cairo_t *cr, gpointer param);
    gboolean callback_background_color_menu_classe (GtkWidget *widget, cairo_t *cr, gpointer param);
    Et dans chacune de ces fonctions il faut finir par un return FALSE; sous peine d'interdire la propagation du signal "draw" au reste de la construction du menu. Ce pour quoi actuellement tu n'as aucun texte.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 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