Re: Gtk RC file - How to set bagkground pixmap to only one window?
- From: zentara <zentara1 sbcglobal net>
- To: gtk-list gnome org
- Subject: Re: Gtk RC file - How to set bagkground pixmap to only one window?
- Date: Mon, 8 Dec 2008 14:24:00 -0500
On Mon, 8 Dec 2008 12:32:55 -0500
zentara <zentara1 sbcglobal net> wrote:
>On Mon, 8 Dec 2008 12:13:41 +0530
>"Harinandan S" <harinandans gmail com> wrote:
>
>>I want to set a background pixmap of only one window. I tried example rc
>>file but that sets background of all windows to the same image. I also tried
>>calling
>>gtk_widget_set_name (ui_home_window,"home window");
>
>>in my rc file. I also loaded the rc file but I'm not seeing any changes. I
>>was able to set the same pixmap to all windows but how to set it only for
>>one window?
>>
>>Regards,
>>Harinandan S
>
>See Tadej Borovšak's response to a similar question a few days ago,
>for a c example.
>
>I'm only good at Perl, and this is how you would do it in Perl.
>The mainwindow has the default pixmap theme, but the toplevel
>has a custom background image.
Time to try some c. :-) Here is a c version of my Perl example.
----------------------- cut ------------------------------------------
#include <gtk/gtk.h>
/* exit callback */
gint delete_event( )
{
gtk_main_quit ();
return FALSE;
}
void callback( )
{
GtkWidget *window1;
GtkWidget *button1;
GtkStyle *style;
GdkPixbuf *buf;
GdkPixmap *map = NULL;
/* Create a new toplevel window */
window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (window1, 350, 350);
gtk_container_set_border_width (GTK_CONTAINER (window1), 100);
gtk_window_set_title (GTK_WINDOW (window1), "Custom Pixmap");
g_signal_connect (G_OBJECT (window1), "delete_event",
G_CALLBACK (delete_event), NULL);
buf = gdk_pixbuf_new_from_file( "test.png", NULL );
/*gdk_pixbuf_render_pixmap_and_mask( buf, &map, &mask, 10 ); */
/*gdk_window_shape_combine_mask( window->window, mask, 0, 0 );*/
gtk_widget_set_app_paintable( window1, TRUE );
gdk_pixbuf_render_pixmap_and_mask(buf, &map, NULL, 255);
style = gtk_style_copy(gtk_widget_get_style(window1));
style->bg_pixmap[GTK_STATE_NORMAL] = map;
gtk_widget_set_style(window1, style);
/* add a button */
button1 = gtk_button_new_with_label ("Just for Looks");
gtk_widget_set_size_request (button1, 50, 50);
gtk_container_add (GTK_CONTAINER (window1), button1);
gtk_widget_show (button1);
gtk_widget_show (window1);
}
int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *box1;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Pixmap themes overrides");
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
box1 = gtk_hbox_new (FALSE, 0);
/* Put the box into the main window. */
gtk_container_add (GTK_CONTAINER (window), box1);
/* Creates a new button */
button = gtk_button_new_with_label ("Launch Toplevel");
/* Now when the button is clicked, we call the "callback" function
* with a pointer to "button 1" as its argument */
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (callback), (gpointer) NULL);
/* Instead of gtk_container_add, we pack this button into the invisible
* box, which has been packed into the window. */
gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
gtk_widget_show (button);
gtk_widget_show (box1);
gtk_widget_show (window);
gtk_main ();
return 0;
}
------------------- cut ---------------------------------------------
zentara
--
I'm not really a human, but I play one on earth.
http://zentara.net/Remember_How_Lucky_You_Are.html
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]