RE: Button background colors



A coworker came to my rescue on this one.  I am a Linux developer and this application had to work under Windows.  It turns out that if your Windows desktop theme is set to “Windows XP” then you cannot change the background color of your buttons.  If you change your desktop theme to “Windows Classic” then the gtk_widget_modify_style approach works.  The gtk_widget_set_style  and other approaches may also work, but I haven’t tested them.  We have a short deadline on this app – I’ll test it later.

 

Thanks to everyone who gave it a look.  What a surprise it turned out to be a Windows problem, not a GTK problem.

 

  Michael Kahn

 


From: Michael Kahn
Sent: Tuesday, June 13, 2006 8:49 PM
To: 'gtk-list gnome org'
Subject: Button background colors

 

I am using Gtk 2.8.18.

I would like to know how to set the background color in a GtkButton.

I cannot set the background in a style, theme, or resource file because I am programming to requirements that specify different background colors for different buttons.

I have tried using gtk_widget_modify_bg on the button, using all combinations of creating the button with and without a label.

I also tried gtk_widget_modify_base.

 

I have tried using gtk_widget_set_style:

 

GtkStyle  *BtnStyle;

BtnStyle = gtk_style_new();

BtnStyle->bg[0] = BGColor;  /* BG Color is a GdkColor that works nicely setting colors in TextViews */

BtnStyle->bg[1] = BGColor;

gtk_widget_set_style ( Button, BtnStyle );

 

 

I have tried using gtk_widget_modify_style:

 

GtkRcStyle  *ModStyle

ModStyle = gtk_rc_style_new();

ModStyle->bg[0] = BGColor;

ModStyle->bg[1] = BGColor;

ModStyle->color_flags[0] |= GTK_RC_BG; 

ModStyle->color_flags[1] |= GTK_RC_BG;

gtk_widget_modify_style ( Button, ModStyle );

 

I repeated the above process using foreground colors and then tried it setting both foreground and background.

 

I repeated both the gtk_widget_set_style and gtk_widget_modify_style processes just before calling gtk_main.

I used gtk_widget_get_parent to get the parent container of the button (once again just before calling gtk_main since gtk_widget_get_parent returns NULL prior to calling gtk_widget_show on the Main Window) and tried using all of the above processes (gtk_widget_modify_bg, gtk_widget_modify_base, gtk_widget_set_style, and gtk_widget_modify_style).

 

I have put an EventBox around my button, yielding an idiotic-looking colored border around the button.

I have put an EventBox inside my button, and it fills the center of the button with color but leaves a wide non-colored margin around it.

 

It is utterly inconceivable that this process should be so difficult.  To change the color of buttons in Motif is trivial – I use the XtSetArg process before creating the widget and simply have to set XmNbackground to the RGB value that I want.  Motif then takes this basic background color and automatically figures out the colors needed for top, bottom, and activate shadows.  The concept of a big green green button to start a process and a big red button to abort/stop/terminate a process is so universal that it can be found on everything from 1920s machine tools to the latest military and commercial aircraft control panels.  Thus I am expected to be able to emulate this with the buttons on my GUI.  So far, I have failed utterly with GTK.

 

My web searches led me to try some of these processes – in particular, Havoc Pennington’s “GTK colors mini-FAQ” is what led me to try using the gtk_widget_get_parent to get the container widget for the button.

 

I have even tried traversing the entire ancestor tree by using a loop to continue calling gtk_widget_get_parent until it returned NULL.  Only the MainWindow returned TRUE to GTK_WIDGET_NO_WINDOW( ), which means I managed to set the background of the Main Window but nothing else, despite trying gtk_widget_modify_bg on the entire ancestor tree.

 

Please tell me how I can set the background color of my GtkButtons to different colors.

 

Thanks,

  Michael Kahn

 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]