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 ?
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...
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...
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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...
Je peux toujours essayer de construire une petite fonction adéquate pour voir si c'est faisable de manière relativement simple.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
A force de chercher il y a peut être un début de solution avec la fonction gtk_widget_override_background_color();.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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...
Un GtkMenuItem est bien un widget...
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).
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Ca y est. Je le tiens.
Il faut ajouter une fonction callback associée au signal "draw" pour chaque GtkMenuItem*. Je te la fournis :Il faut transmettre à cette fonction un pointeur sur un GdkRGBA* qui contiendra la couleur de fond que tu veux associer au GtkMenuItem*.
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; }
Par exemple on pourrait écrire: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
3
4
5 GdkRGBA color; color.red = 1.0; color.green = 1.0; color.blue = 51.0/255; color.alpha=1.0;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à.
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);
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.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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...
Bon, ben, je te fais ca pour les combobox alors.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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="e=
En plus, bien avant d'arriver sur ta fonction, j'ai plein de warning qui arrivent en ligne de commande :Peut-être une histoire de mise à jour inachevées...
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'.
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...
Un petit problème lié au thème de ton bureau peut êtrePour ce qui est de colorier un GtkCombox je suis toujours dessus. Je suis en train de me casser les dents dessus
Code : Sélectionner tout - Visualiser dans une fenêtre à part ...Theme parsing error: gtk.css. Je n'arrive toujours pas à accéder au popup qui s'ouvre lorsque tu cliques sur le bouton du GtkCombox. Je continue mes recherches...
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part color.blue = 51./255;
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...
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part cairo_fill(cr);
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...
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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...
À partir de quelle fonction appelles-tu callback_background_color_menu_classe();. Je ne trouve pas...
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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 :
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.
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);
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Partager