使用深色主题时,Evince 中的插入符号(按 F7 进入插入符号模式)是一种非常浅的颜色,因此在文档通常的白色背景下显示效果不佳。
我想解决这个问题,我打算破解一个主题来做到这一点,但在挖掘时,似乎 evince 正在使用一个不推荐使用的属性: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);
弃用已在此处完成。所以我想尝试更新 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)
,因为过去的回退也不起作用。
读取此属性的正确方法是什么,以便我可以将其设置为我的主题并选取它?
要获取插入符号颜色,您应该执行以下操作:
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
。一旦您获得"插入符号颜色",就不需要这种转换,我想这可能已经如您所料地改变了颜色。