在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概述,这在这里毫无帮助。
答案 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
对象属性的原型代码,但是我为每个滚动条连接起来很痛苦。