为什么GNOME符号图标在正在运行的应用程序中显得更暗?

我正在创建一个使用默认主题中的符号图标的应用程序。

但是,有一些我需要的图标无法用默认主题的图标来表示,所以我正在创建自己的图标。

我所做的只是转到/usr/share/icons/gnome/scalable/actions/ ,将一些本地复制到我的应用程序的源代码树中,可以作为基础,并开始编辑它们。

到现在为止还挺好。 但是我注意到以下情况:当查看原始的.svg文件时,所有符号图标都是浅灰色,但是当它们被放到小部件上时,它们会变得更暗。

这是一个例子,使用默认主题中的/usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svg图标:

  • 以下是使用Inkscape打开原始文件时的样子:

Inkscape上的view-refresh-symbolic

  • 这是在正在运行的应用程序的工具栏上的样子:

在运行时查看刷新符号

请注意,图标在运行时更暗。 这与Ambiance和Radiance主题都有关。

我不介意,但我注意到它影响了我的自定义图标,其中部分图标变得更暗(内部填充),而部分颜色与原始图标(笔划)保持相同的颜色。

那么是什么原因导致默认的符号图标变暗以及如何为我的自定义图标实现?

  • 符号图标以色度键控颜色创建,灰色,具有完全不透明度( #bebebeff )。 然后可以根据settings.ini (GTK3)或gtkrc (GTK2)中主题定义的fg_color值对它们进行着色。 或者在CSS(GTK3)中定义的fg_color上。
    • 例如,对于Ambiance ,前景色( fg_color )在/usr/share/themes/Ambiance/gtk-3.0/settings.ini设置为深灰色( #4c4c4c ),这就是符号图标显得更暗的原因。
  • 要使自定义符号图标看起来相同, 您必须删除笔划并仅使用设置为#bebebeff的RGBA值#bebebeff ; 否则,笔划将始终显示为设置(即灰色或任何颜色)。

    • 在Inkscape中,只需选择对象,打开Fill和Stroke ,然后单击“Stroke Paint”下的No Paint (x)图标:

    在此处输入图像描述

  • 这为我们提供了一个漂亮且均匀的“MyRefresh”符号图标:

    在此处输入图像描述


一位用户表示正在打开一个不同的,更暗的图标而不是默认的gnome符号图标; 正如此strace所示,该断言是不正确的:

在此处输入图像描述

符号图标通常由主题使用“颜色”属性设置,这是他们的巨大优势,它们在任何背景上看起来都很好。 但是,您可以使用自己的颜色加载它们。

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