代码之家  ›  专栏  ›  技术社区  ›  Nathan Smith

GTK+3.0-Treeview/ScrolledWindow上的Scrollbar-控制Scrollbar的CSS属性

  •  2
  • Nathan Smith  · 技术社区  · 8 年前

    在GTK+3.0(3.22.30)上开发,openbox在X11上,ubuntu18.04服务器上开发。

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

    我试过下面这些CSS定义。其中有些仅仅是试验性的,试图让某些东西发挥作用。我试过移动宽度,最小宽度和'有xx步进'但他们似乎没有任何效果。我仍然停留在同一个简单的默认滑块,但一些基本的颜色控制。我无法解释如何引用滚动条的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+检查器(它允许对GTK应用程序的CSS属性进行一些检查),我找不到GTK3 GtkScrollbar文档中引用的“has backwards stepper”和其他属性。这是测试CSS语法的方便地方,但我无法根据需要找出如何控制外观。

    我应该使用什么语法来获取步进按钮,固定宽度并使其始终出现?指向说明这一点的文档的指针将很有帮助。我已经详尽地浏览了gtk3css概述,这在这里没有帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nathan Smith    8 年前

    我能确定 has-xxxx-stepper

    我可以让滚动条显示在滚动窗口的右侧,并具有“覆盖滚动”属性。

    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);
    

    px 这些属性值需要单位,如果没有单位,它们将被忽略。

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

    vadjustment 对象属性的滚动窗口,但这是一个多么痛苦的钩子为每个滚动条我有。

    推荐文章