使用GtkStyleProviders自定义小部件字体,颜色和背景的正确方法

Ind*_*oad 5 css gtk fonts colors styling

在试图清理约弃用一些警告Gtk.Widget.modify_base,Gtk.Widget.modify_font我发现了建议的替代物,override_background_color(和其等同为字体和颜色)已过时.我现在正在尝试研究如何为小部件提供这些样式.

字体,颜色和背景用于自定义TextView窗口小部件,并且这些值的值作为某些首选项的一部分存储在某些字符串中,以便用户可以自定义几种不同的颜色.

对于字体和文本颜色,似乎最好的方法是Gtk.TextTag使用适当的样式创建s,并将insert()文本缓冲区的任何实例更改为insert_with_tags().TextBuffers和TextTags似乎没有"默认样式"概念.

但是,文本标签不会处理整个文本视图的背景.

建议的方法似乎是GtkStyleProvider,但我应该如何将这些用户指定的颜色提供给提供者?

很多例子像这样加载字符串常量:

string style = """
    GtkButton {color:#ff00ea; font:Serif 12;}
    GtkButton:hover {background-color:#3085a9;}
    GtkLabel {background-color:#898989;}
    GtkEntry {background-color:green; color:red;}
""";
CssProvider provider = new CssProvider();
provider.load_from_data(style,-1);
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,每次配置更改时我都必须手动格式化并插入字符串到一大块CSS中,并将其反馈到样式中,这看起来非常混乱.我也不确定这些是否可以在加载后更改,因为似乎没有改变信号.

我想另一种方式是以某种方式继承GtkStyleProvider和实现我自己的,但这对于设置一些颜色似乎有些过分,并且似乎很少有文档.

大多数GTK +程序(甚至是GNOME的)似乎只是做它的"旧"的方式与modify_*override_*而忽略了弃用,这是我不明白,如果那些使用CSS加载后可以改变它的少数.

这些只是两个选择吗?哪一个是"正确的"?