Evince

时间:2016-04-22 16:36:13

标签: css c gtk gtk3 gnome-3

使用黑色主题,Evince中的插入符号(按F7键进入插入模式)是一种非常浅的颜色,因此不能很好地反映文档的白色背景。

我想解决这个问题,我想破解一个主题来实现它,但是在挖掘时,似乎是使用了一个弃用的属性:cursor-color(在ev-view.c:4260):

gtk_style_context_get_style (context,
                 "cursor-color",
                 &style_color,
                 NULL);

后备是:

gtk_style_context_save (context);                                   
gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, color);
gtk_style_context_restore (context);                                

弃用已完成here。所以我想尝试更新evince以使用CSS属性,然后更新我的主题以设置EvView个对象,以将其应用于evince的主文档视图:

我在~/.config/gtk-3.0/gtk.css中设置了以下CSS作为测试:

* {
     caret-color: rgba(0,255,0,1.0);
}

这适用于gedit,例如 - 主编辑器中的插入符号和对话框都是绿色的。

然后我尝试使用与GTK内部使用的插入颜色类似的逻辑(c.f。gtk/gtkstylecontext.c @ 9b86d6da2

gtk_style_context_get (context,
                gtk_style_context_get_state (context),
                "caret-color", color,
                NULL);

然而,这不起作用,我的颜色是透明的黑色,而不是预期的不透明的绿色。但是,对gtk_style_context_get()的调用实际上是将颜色设置为透明黑色,而不仅仅是单独使用。

仅使用GTK_STATE_FLAG_NORMAL代替gtk_style_context_get_state (context)作为后备功能也不起作用。

阅读此属性的正确方法是什么,以便我可以在我的主题中设置它并让它被拾取?

1 个答案:

答案 0 :(得分:0)

要获得插入符号的颜色,您应该执行以下操作:

GdkRGBA *caret_color;

gtk_style_context_get (context,
                       gtk_style_context_get_state (context),
                       "caret-color",
                       &caret_color,
                       NULL);

稍后在代码中,在Evince中您可以:

if (style_color) {
    color->red = style_color->red / 65535.0;
    color->green = style_color->green / 65535.0;
    color->blue = style_color->blue / 65535.0;
    color->alpha = 1;

颜色值从GdkColor转换为GdkRGBA的位置。一旦获得“插入字体颜色”,就不需要进行这种转换了,我想这可能已经改变了您所期望的颜色。