【问题标题】:gtk3 TreeView has a different default background colorgtk3 TreeView 有不同的默认背景颜色
【发布时间】:2021-05-25 14:39:47
【问题描述】:

问题

这是我的 gtk3 应用目前在 Ubuntu 20.04 上的样子:

左侧的树视图的背景颜色比其他的稍微亮一些。我通过以下方式创建了树视图:

tree_view = gtk_tree_view_new();
gtk_widget_set_margin_bottom(tree_view, 12);
gtk_widget_set_margin_top(tree_view, 12);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), FALSE);

我的所有其他小部件都是通过修改任何样式来创建的。

期望的行为

我希望所有明亮的背景相互匹配。我不介意它们都变成更亮的白色还是更深的白色。一个例子是gtk3-demo,所有的背景都变成了更亮的白色,就像在树视图中一样:

(它的堆栈头仍然是深白色,但我不介意,只要主要区域匹配即可。)

尝试的解决方案

用 CSS 设置它并使其匹配是很诱人的。但我意识到这些背景可以随着不同的主题而改变。我仍然希望我的应用能够响应主题更改。也就是说,如果用户使用深色主题,我仍然希望我的应用变暗(相同的深色)。

有没有办法做到这一点?谢谢!

编辑:

我注意到gtk3-demo 具有明亮的背景颜色,因为它使用了GtkNotebook。我试过了,但是GtkNotebook 只在启用了它的标签时才给出浅色,这是我不想要的。一旦禁用show-tabs,它的背景就会恢复为深白色。

【问题讨论】:

    标签: c gtk3


    【解决方案1】:

    我手动查询了GtkTreeView 的背景并将其应用于其他小部件。这个解决方案比我想要的要丑得多,但我想它有效。

      context = gtk_widget_get_style_context(GTK_WIDGET(tree_view));
      GdkRGBA *c;
      gtk_style_context_get(context, GTK_STATE_FLAG_NORMAL, "background-color", &c,
                            NULL);
    
      GdkDisplay *display;
      GdkScreen *screen;
      display = gdk_display_get_default();
      screen = gdk_display_get_default_screen(display);
      GtkCssProvider *provider;
      provider = gtk_css_provider_new();
      gtk_style_context_add_provider_for_screen(
          screen, GTK_STYLE_PROVIDER(provider),
          GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
    
      char css[128];
      snprintf(css, 128, ".custom_bg { background-color: rgba(%d, %d, %d, 1) }",
               (int)(c->red * 255), (int)(c->green * 255), (int)(c->blue * 255));
      gtk_css_provider_load_from_data(provider, css, -1, NULL);
    
      g_object_unref(provider);
      gdk_rgba_free(c);
    
    

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2023-03-30
      • 2013-11-19
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多