Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSS styling in GTKSharp

Tags:

c#

css

gtk3

gtk#

I'm converting a C/GTK+ GUI application to C# using GTKSharp in VS2017. I've installed this package https://www.nuget.org/packages/GtkSharp/3.1.3 via NuGet.

Here's how I load up the CSS (the application uses a Glade file to define the interface):

    static void Main(string[] args)
    {
        new Program(args);
    }

    public Program(string[] args)
    {
        Application.Init();

        builder = new Builder();
        Gtk.CssProvider provider = new CssProvider();
        builder.AddFromFile("interface.glade");
        provider.LoadFromPath("style.css");
        builder.Autoconnect(this);

        Gtk.Window window = (Gtk.Window)builder.GetObject("start"); 
        Gtk.StyleContext.AddProviderForScreen(Gdk.Screen.Default, provider, 800); // couldn't find the equivalent to GTK_STYLE_PROVIDER_PRIORITY_USER so I set the priority to a random number
        window.Show();

        Application.Run();
    }

The selector names seem to be different from GTK+. For example,

    window {
     ...
    }

works in C/GTK+ but not in C#, whereas

    GtkWindow {
     ...
    }

works in C# but not in C/GTK+. Then there are a few widgets I can't seem to style at all. For example,

    button {
     ...
    }

works in GTK+ but

    GtkButton {
     ...
    }

does not work in C#. I couldn't find any documentation regarding how GTK# handles CSS styling so I thought it'd be the same as GTK+. Any pointers?

like image 872
DvD Avatar asked Mar 16 '26 13:03

DvD


1 Answers

The GTKSharp seems more like an expected GTK3 behavior.

Here is the reference manual from docs.gtk.org

Especially useful should be the Table 1. Selector syntax section.

In short the elements are named after the GTK class name: GtkButton, GtkLabel and so on.

For a class list of default GTK3 widgets check out the docs table of content..

The GTK button is a container widget that doesn't render background so without seeing the actual CSS properties you try to apply using that selector I can't tell you why it doesn't work but you might need to style its content separately e.g.

GtkButton GtkLabel {
    color: lime;
}

The selector itself GtkButton should be correct.

like image 83
morningbird Avatar answered Mar 20 '26 01:03

morningbird