On 14 March 2017 at 14:31, Rúben Rodrigues <ruben...@live.com.pt> wrote: > Just window can have background?
I was referring to GdkWindow, not GtkWindow. GtkBox draws background, for instance; GtkGrid does as well. > I don't know why is a violation, because in my case my > applicationdoesn't make sense without background image.. I think the issue, here, is that you're not aware that 15 years passed in the internals of GTK+. Changing the background pixmap of a GdkWindow is a layering violation because it assumes that you're essentially working on X11 and you control the X server as well; on X11, you're telling the X server to clear the contents of the native window used by GtkLayout using the bytes you're passing. This worked in 1997, but it's not how modern toolkits work — and it's not even how different windowing systems work. Widgets do not have their own native window for rendering any more, for instance. If your application window has a background image then use the background-image CSS property on your GtkWindow widget. Ciao, Emmanuele. > On 14-03-2017 14:01, Emmanuele Bassi wrote: >> You were not changing the background with your theme: you were >> programmatically replacing the base pixmap of the GdkWindow used by >> GtkLayout. It was essentially a layering violation, and would actually >> break your theme. >> >> The API reference for each GTK widget should tell you the CSS styling >> available; see the "CSS nodes" section, for instance, of GtkBox: >> https://developer.gnome.org/gtk3/stable/GtkBox.html >> >> Ciao, >> Emmanuele. >> >> >> On 14 March 2017 at 13:55, Rúben Rodrigues <ruben...@live.com.pt> wrote: >>> Thanks! >>> >>> But in GTK+2 we could change background in layout with this: >>> >>> // Set picture as background. >>> // gdk_pixbuf_render_pixmap_and_mask (pixbuf, &background, NULL, 0); >>> // style = gtk_style_new (); >>> // style->bg_pixmap[0] = background; >>> // homeWindow = GTK_WIDGET(gtk_builder_get_object(builder, >>> "layout_Home")); >>> // gtk_widget_set_style (GTK_WIDGET(homeWindow), GTK_STYLE(style)); >>> >>> How i know witch containers draw background? >>> >>> THanks >>> >>> >>> On 14-03-2017 12:55, Emmanuele Bassi wrote: >>>> Not all GTK containers draw a background, mostly for historical >>>> reasons. This has been true for GTK 1.x, 2.x, and 3.x. >>>> >>>> In particular, GtkLayout does not draw any background with CSS, so you >>>> will need to either subclass GtkLayout, override the GtkWidget::draw >>>> virtual function, and call gtk_render_* functions yourself; or you >>>> will need to put a GtkLayout into a parent container that does draw a >>>> background. You will, of course, need to style the parent container's >>>> background, not the GtkLayout itself. >>>> >>>> Ciao, >>>> Emmanuele. >>>> >>>> >>>> On 14 March 2017 at 12:43, Rúben Rodrigues <ruben...@live.com.pt> wrote: >>>>> I verify that i can't use css provider, don't works. >>>>> >>>>> My css file is : >>>>> >>>>> GtkLayout#layout_Home.background{ >>>>> background-image: url('background.png'); >>>>> } >>>>> >>>>> GtkLabel#Home_Cooling_Tunnel1_Cooler_label1{ >>>>> color: white; >>>>> } >>>>> >>>>> GtkLabel#Home_Sensors_MoistAvg_value{ >>>>> font-family: Segoe UI; >>>>> font-weight: lighter; >>>>> font-size: 25px; >>>>> } >>>>> >>>>> And this code: >>>>> >>>>> static void apply_css(GtkWidget *widget, GtkStyleProvider *provider) >>>>> { >>>>> gtk_style_context_add_provider(gtk_widget_get_style_context(widget), >>>>> GTK_STYLE_PROVIDER(provider),G_MAXUINT); >>>>> if(GTK_IS_CONTAINER(widget)) >>>>> gtk_container_forall(GTK_CONTAINER(widget),(GtkCallback) >>>>> apply_css,provider); >>>>> >>>>> } >>>>> >>>>> GFile *file= g_file_new_for_path("custom.css"); >>>>> GtkStyleProvider *css_provider = >>>>> GTK_STYLE_PROVIDER(gtk_css_provider_new()); >>>>> gtk_css_provider_load_from_file(GTK_CSS_PROVIDER(css_provider), file, >>>>> &error); >>>>> apply_css(gtk_builder_get_object(builder,"window_Main"),css_provider); >>>>> >>>>> This is the code used in gtk3-demo and don't works for me.. Why???? >>>>> >>>>> THanks >>>>> >>>>> On 14-03-2017 10:00, Rúben Rodrigues wrote: >>>>>> Hi guys, >>>>>> >>>>>> Finnaly i migrate my application to gtk+3. So, now i neet to change some >>>>>> things like image background. I used css provider like in this : >>>>>> >>>>>> custom.css file: >>>>>> >>>>>> GtkLayout:layout_Home{ >>>>>> background-color: black; >>>>>> } >>>>>> >>>>>> >>>>>> C Program: >>>>>> >>>>>> GFile *file= g_file_new_for_path("custom.css"); >>>>>> GtkCssProvider *css_provider = >>>>>> gtk_css_provider_get_default(); >>>>>> gtk_css_provider_load_from_file(css_provider, file, &error); >>>>>> GtkStyleContext *context = gtk_style_context_new(); >>>>>> gtk_style_context_add_provider(context, >>>>>> GTK_STYLE_PROVIDER(css_provider),GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); >>>>>> >>>>>> But nothing happens. I tried this too: >>>>>> >>>>>> http://stackoverflow.com/questions/7375624/gtk3-window-background-image >>>>>> >>>>>> >>>>>> Someone can help me? >>>>>> >>>>>> >>>>>> THanks >>>>>> >>>>>> _______________________________________________ >>>>>> gtk-app-devel-list mailing list >>>>>> gtk-app-devel-list@gnome.org >>>>>> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list >>>>> _______________________________________________ >>>>> gtk-app-devel-list mailing list >>>>> gtk-app-devel-list@gnome.org >>>>> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list >>>> >> >> > -- https://www.bassi.io [@] ebassi [@gmail.com] _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list