我正在创建一个使用默认主题的符号图标的应用程序。
但是,我需要的一些图标无法通过默认主题中的图标来表示,因此我需要创建自己的图标。
我所做的只是简单地转到/usr/share/icons/gnome/scalable/actions/
,将一些内容本地复制到我的应用程序源树中作为基础,然后开始编辑它们。
到目前为止一切顺利。但我注意到以下情况:查看原始 .svg 文件时,所有符号图标都是浅灰色,但将它们放到小部件上时,它们会变暗。
这是一个示例,使用/usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svg
默认主题的图标:
- 使用 Inkscape 打开原始文件时的外观如下:
- 以下是它在正在运行的应用程序的工具栏上的样子:
请注意,图标在运行时会变得更暗。Ambiance 和 Radiance 主题都会出现这种情况。
我不会太介意,但我注意到它影响了我的自定义图标,其中它的部分变暗(内部填充),而它的部分保持与原始颜色相同的颜色(描边)。
那么是什么原因导致默认符号图标变暗以及如何为我的自定义图标实现这一点?
答案1
- 象征性的图标是在一个色度键控颜色,灰色,完全不透明度(
#bebebeff
)。然后可以根据fg_color
主题settings.ini
(GTK3)或gtkrc
(GTK2)中定义的值对它们进行着色;或者根据fg_color
CSS(GTK3)中定义的值进行着色。- 例如氛围中的前景色(
fg_color
)设置为深灰色(#4c4c4c
)/usr/share/themes/Ambiance/gtk-3.0/settings.ini
,这就是符号图标看起来更暗的原因。
- 例如氛围中的前景色(
为了使自定义符号图标看起来相同,你必须删除笔画并且仅使用设置为 的 RGBA 值进行填充
#bebebeff
;否则,描边将始终按设置显示(即灰色或任何颜色)。- 在 Inkscape 中,只需选择对象,打开填充和描边,然后点击无油漆“描边画”下的(x)图标:
这给了我们一个漂亮且均匀的“MyRefresh”符号图标:
一个用户指出打开的不是默认的 gnome 符号图标,而是一个不同的、更暗的图标;正如这个 strace 所示,这种说法是不正确的:
答案2
符号图标通常由主题使用“颜色”属性设置,这是它们的巨大优势,它们在任何背景下看起来都很好。但是,您可以用自己的颜色加载它们。
vala 代码示例:
//get the icon theme and lookup the icon we want by name, here at a size of 64px
var info = Gtk.IconTheme.get_default ().lookup_icon ("view-refresh-symbolic", 64, 0);
//now load the icon as a symbolic with a color set in the brackets as RGBA, here as plain red
var pixbuf = info.load_symbolic ({1, 0, 0, 1});
//finally we just put in a GtkImage to render it
var image_widget = new Gtk.Image.from_pixbuf (pixbuf);