2

我有以下代码可以很好地为 GtkTextview 设置背景和前景色:

static void
setColor(GtkWidget * widget) {
    auto style_context = gtk_widget_get_style_context (widget);
    gtk_style_context_add_class(style_context, GTK_STYLE_CLASS_VIEW );
    auto css_provider = gtk_css_provider_new();
    GError *error=NULL;
    auto data = g_strdup_printf("\
    * {\
      background-color: black;\
      color: white;\
    }\
    *:selected {\
      background-color: blue;\
      color: yellow;\
    }\
    ");
    gtk_css_provider_load_from_data (css_provider, data, -1, &error);
    g_free(data);
    if (error){
        ERROR("gtk_css_provider_load_from_data: %s\n", error->message);
        g_error_free(error);
        return;
    }
    gtk_style_context_add_provider (style_context, 
            GTK_STYLE_PROVIDER(css_provider),
            GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

}

结果是正常和选定的文本颜色都具有黑色背景和白色前景。

为什么所选文本不显示为黄色/蓝色?

任何指向示例文件的指针都将不胜感激。

4

1 回答 1

4

弄清楚了。由于缺乏任何教程或示例,我在 gtk 源代码中搜索答案。Adwaita 主题 (gtk-contained.css) 中有一个非常完整的 css 文件。通过查看并进行一些实验,以下代码将按照指定设置正常和选定文本的前景色和背景色。

auto data = g_strdup_printf("\
  textview text {\
  background-color: black;\
  color: white;\
}\
  .view text selection {\
  background-color: blue;\
  color: yellow;\
}\
");

主要问题是使用“*”。在同一个文件中,有一条评论写道:“通配符不好而且麻烦,将它们与汽车一起使用,或者更好,只是不要。每次使用通配符时,小猫都会痛苦地死去。”

于 2018-09-25T15:22:17.397 回答