web-dev-qa-db-ja.com

実行中のアプリケーションでGNOMEシンボリックアイコンが暗くなるのはなぜですか?

デフォルトテーマのシンボリックアイコンを使用するアプリケーションを作成しています。

ただし、デフォルトのテーマのアイコンでは表現できないアイコンがいくつか必要なので、独自のアイコンを作成しています。

私がやったのは、単に/usr/share/icons/gnome/scalable/actions/に移動し、いくつかをローカルでアプリのソースツリーにコピーして、それをベースとして使用し、編集を開始することでした。

ここまでは順調ですね。しかし、私は次のことに気付きました。元の.svgファイルを見ると、すべての記号アイコンは明るい灰色ですが、ウィジェットに置くと暗くなります。

デフォルトテーマの/usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgアイコンを使用した例を次に示します。

  • Inkscapeでオリジナルを開くと、次のようになります。

view-refresh-symbolic on Inkscape

  • そして、実行中のアプリケーションのツールバー上では次のようになります。

view-refresh-symbolic on at runtime

実行時にアイコンが非常に濃くなることに注意してください。それはアンビエンスとラディアンスの両方のテーマで起こります。

あまり気にしませんが、カスタムアイコンに影響することに気付きました。カスタムアイコンの一部はより暗くなり(内側の塗りつぶし)、一部はオリジナルと同じ色のままです(ストローク)。

それでは、デフォルトのシンボリックアイコンが暗くなる原因は何ですか?それをカスタムアイコンにどのように実装する必要がありますか?

10
David Planella
  • シンボルアイコンは、chroma-keyed色、完全な不透明度(#bebebeff)のグレーで作成されます。その後、fg_color(GTK3)またはgtkrc(GTK2)のテーマで定義されたsettings.ini値に基づいて色を付けることができます。またはCSS(GTK3)で定義されているfg_colorに。
    • たとえば、Ambianceの場合、前景色(fg_color)は#4c4c4cでダークグレー(/usr/share/themes/Ambiance/gtk-3.0/settings.ini)に設定されます、これが記号アイコンがより暗く見える理由です。
  • カスタムシンボリックアイコンの外観を同じにするには、ストロークを削除する必要がありますを使用し、RGBA値を#bebebeffに設定した塗りつぶしのみを使用します。そうでない場合、ストロークは常にセットとして表示されます(つまり、グレーまたは任意の色)。

    • Inkscapeでは、オブジェクトを選択して、塗りとストロークを開き、ペイントなし(x)「ストロークペイント」の下のアイコン:

    enter image description here

  • これにより、素敵で均一な「MyRefresh」シンボリックアイコンが得られます。

    enter image description here


あるユーザーは、デフォルトのgnomeシンボリックアイコンの代わりに、別の暗いアイコンが開かれていることを示しました。この痕跡が示すように、そのアサーションは正しくありません:

enter image description here

15
ish

シンボリックアイコンは通常、テーマによって「色」プロパティを使用して設定されます。これは大きな利点であり、どの背景でも見栄えがよくなります。ただし、独自の色で読み込むことができます。

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);
3
Tom