使用黑色主题,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)
作为后备功能也不起作用。
阅读此属性的正确方法是什么,以便我可以在我的主题中设置它并让它被拾取?
答案 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
的位置。一旦获得“插入字体颜色”,就不需要进行这种转换了,我想这可能已经改变了您所期望的颜色。