Bonjour je recherche une methode me permettant de mettre en surbrillance un bouton après lui avoir donné le focus par le biais de gtk_widget_grab_focus () dans le même style que si l'on avait le pointeur de la souris dessus.
Merci
Version imprimable
Bonjour je recherche une methode me permettant de mettre en surbrillance un bouton après lui avoir donné le focus par le biais de gtk_widget_grab_focus () dans le même style que si l'on avait le pointeur de la souris dessus.
Merci
Bon malheureusement pour moi, ce sujet ne semble pas inspirer beaucoup de monde.
Ne me laissant pas abattre dans mon malheur :D, j'ai avancé: J'arrive à mettre un petit liseré de couleur sur mes boutons lorsque ces derniers sont sélectionnés (= focus).
Par contre j'aimerais aller plus loin en augmentant l'espaisseur de ce liseré et sa couleur.
J'ai vu qu'il fallait passer par le fichier gtkrc mais cela ne semble pas fonctionner dans mon cas. Si quelqu'un peut m'indiquer où se trouve mon erreur:
// Fichier gtkrc
Code:
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 gtk-icon-sizes = "gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32" gtk-toolbar-icon-size = small-toolbar # disable images in buttons. i've only seen ugly delphi apps use this feature. gtk-button-images = 0 # enable/disable images in menus. most "stock" microsoft apps don't use these, except sparingly. # the office apps use them heavily, though. gtk-menu-images = 1 # use the win32 button ordering instead of the GNOME HIG one, where applicable gtk-alternative-button-order = 1 style "msw-test" { GtkRange::slider_width = 30 } class "GtkScrollbar" style "msw-test" style "msw-button"="msw-test" { fg[PRELIGHT] = { 0.0, 0.0, 0.0 } bg[PRELIGHT] = { 0.0, 0.0, 0.0 } text[PRELIGHT]= "#e56225" } widget_class "*.GtkButton.*" style "msw-button" style "msw-button"="msw-test" { fg[PRELIGHT] = { 0.0, 0.0, 0.0 } bg[PRELIGHT] = { 0.0, 0.0, 0.0 } text[PRELIGHT]= "#e56225" } class "GtkButton" style "msw-button" style "msw-button"="msw-test" { fg[PRELIGHT] = "#333366" bg[PRELIGHT] = "#333366" text[PRELIGHT]= "#333366" } class "GtkWidget" style "msw-widget"
// Fichier main (on passe le fichier gtkrc au programme)
Code:
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 ................ #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, package_locale_dir); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif gtk_rc_add_default_file ("../style/gtkrc"); gtk_set_locale (); gtk_init (&argc, &argv); pixmap_dir = g_build_filename (package_data_dir, PACKAGE, "pixmaps", NULL); add_pixmap_directory (pixmap_dir); g_free (pixmap_dir); /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ window1 = create_window1 (); g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show (window1); gtk_main (); ..........
quelques callbacks
Code:
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 void on_button_clicked (GtkButton *button, gpointer user_data) { // Declaration const gchar * sText=""; GtkWidget * bouton1 = lookup_widget(GTK_WIDGET(button),"button4"); sText=gtk_button_get_label(button); //sText=gtk_widget_get_name(GTK_WIDGET(button)); if (strcmp(sText,"button1")==0 || strcmp(sText,"button2")==0 ||strcmp(sText,"button3")==0){ gtk_widget_grab_focus (bouton1); } } gboolean on_btn_focus_in_event (GtkWidget *widget, GdkEventFocus *event, gpointer user_data) { /*GdkColor color; color.pixel = 32; color.red = 65535; color.green = 0; color.blue = 0; gtk_widget_modify_bg (widget, GTK_STATE_PRELIGHT, &color); */ gtk_widget_set_state(widget,GTK_STATE_PRELIGHT); return FALSE; } gboolean on_btn_focus_out_event (GtkWidget *widget, GdkEventFocus *event, gpointer user_data) { /*GdkColor color; color.pixel = 32; color.red = 65535; color.green = 0; color.blue = 0; gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color);*/ gtk_widget_set_state(widget,GTK_STATE_NORMAL); return FALSE; }
J'ai trouvé !
Pour afficher un bouton comme si la souris était dessus, il faut changer l'état de ce dernier à l'aide de la fonction gtk_widget_set_state(...).
La couleur qui s'affiche n'est par contre pas paramétrable par défaut. Elle dépend de l'engine que l'on a choisi d'utiliser (par défaut c'est windows qui gère l'affichage des boutons donc un petit liseré orange apparait)
Voilà