GTK + 3.0 - Treeview / ScrolledWindow上的滚动条 - 用于控制滚动条的CSS属性

时间:2018-05-18 15:44:02

标签: gtk3

在X11,Ubuntu 18.04服务器上开发GTK + 3.0(3.22.30),openbox。

我一直在努力找出CSS模型来控制GtkTreeView ScrolledWindow上滚动条的外观。我的成功非常有限。我唯一能够控制的是滑块在点击/移动时的颜色以及槽的背景颜色。其他属性似乎没有任何影响。我发现槽的颜色属性不受支持,似乎导致解析错误。

应用程序使用触摸屏,因此我需要滚动条始终显示,而不仅仅是当光标指针悬停在控件上时。触摸应用程序中没有光标指针。

我在下面尝试过这些CSS定义。其中一些只是试图让某些东西起作用的实验。我试过移动宽度,最小宽度和'has-xx-stepper',但它们似乎没有任何效果。我仍然坚持使用相同的简单默认滑块,但有一些基本的颜色控制。我无法解释如何引用滚动条的CSS节点模型,因为我找不到示例。

scrollbar {
  has-backwards-stepper: true;
  has-forward-stepper: true;
  has-secondary-backward-stepper: true;
  has-secondary-forward-stepper: true;
  min-width: 80;
}

trough {
 background-color: #00ee00;
}

slider {
 color: #00FF00;
 slider-width: 80;
 min-width: 80;
 has-backwards-stepper: true;
 has-forward-stepper: true;
}

使用GTK CSS资源管理器我找不到GTK3 GtkScrollbar文档中引用的'has-backwards-stepper'和其他属性。这是测试CSS语法的方便之处,但我无法弄清楚如何根据需要控制外观。

我应该使用什么语法来获取步进按钮,修复宽度并始终显示?指向解释此文档的文档的指针将很有帮助。我已经详尽地阅读了GTK 3 CSS概述,这在这里毫无帮助。

1 个答案:

答案 0 :(得分:1)

我能够确定has-xxxx-stepper属性似乎只读,但实际上并没有连接到任何内容,因为我可以更改。

我能够通过'overlay-scrolling'属性让滚动条显示在滚动窗口的右侧。

sw = gtk_scrolled_window_new(NULL, NULL);
gtk_container_set_border_width( GTK_CONTAINER(sw), 0 );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(sw), TK_POLICY_NEVER, GTK_POLICY_ALWAYS ); //scroll bars
//Set scrollbar to ALWAYS be displayed and not as temporary overlay
g_object_set( sw , "overlay-scrolling", FALSE , NULL);

我能够通过以下方式进一步控制滚动条槽的宽度:

GtkWidget * ptrVscrollBar = gtk_scrolled_window_get_vscrollbar ( TK_SCROLLED_WINDOW(sw) );    
g_object_set( ptrVscrollBar ,
                "width-request", 30 ,
                "margin-bottom", 30 ,
                "margin-top", 30 ,
                NULL);

更新:我发现滑块的CSS语法略有不同。通过一些实验,我能够覆盖滑块组件的宽度和高度。这些属性值需要px个单位,没有它们会被忽略。

slider {
  min-width: 28px;
  min-height: 80px;
}

我还没想出如何启用步进按钮。现在必须使用GTK3手动/单独创建这些吗?我有一些使用滚动窗口的vadjustment对象属性的原型代码,但是我为每个滚动条连接起来很痛苦。