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

Reply via email to