質問
特定の (文字列) Gtk ストック ID に対応する (文字列) アイコン名を取得しようとしています。
例
Gtk ストック ID 'gtk-go-forward' には、'gtk-go-forward-ltr' と 'gtk-go-forward-rtl' という2 つの対応するアイコン名があります。どちらかを取得したい:
- アイコン名 'gtk-go-forward-ltr' と 'gtk-go-forward-rtl' の両方に ID 'gtk-go-forward' を指定します。また
- アイコン名 'gtk-go-forward-ltr' (私のテキスト方向に「適切な」もの) だけです。
潜在的な制限
ベース C ではなく、gobject イントロスペクション API を使用しています。
根拠(オプションで読むことができます)
ストックIDで指定したアイコンの を作ろうとしてSt.Icon
いますが、サイズが大きい(96px)です。
ストック ID 'gtk-go-forward' を次のように直接使用できますgtk_icon_set_render_icon
(LTR バージョンを選択します) (構文は GNOME javascript ですが、これは質問とは無関係です。GObject イントロスペクション API を使用しています):
let style = Gtk.Widget.get_default_style();
let iconset = style.lookup_icon_set('gtk-go-forward');
let icon = new St.Icon({
gicon: iconset.render_icon(gtkStyle, Gtk.TextDirection.LTR,
Gtk.StateType.NORMAL, Gtk.IconSize.DIALOG,
null, null),
icon_type: St.IconType.FULLCOLOR,
icon_size: 96
});
これにより、株式 ID「gtk-go-forward」のアイコンが表示されます (「gtk-go-forward-ltr」が選択されます)が、アイコンは非常にあいまいです。
または、アイコン名 'gtk-go-forward-ltr' を直接フィードすると、アイコンはあいまいになりません。
let icon = new St.Icon({
gicon: Gio.ThemedIcon.new_with_default_fallbacks('gtk-go-forward-ltr'),
icon_type: St.IconType.FULLCOLOR,
icon_size: 96
});
要約すると、大きなあいまいでないアイコンを取得するための最善の策は、株式 ID を使用するのではなく、株式 ID のアイコン名を見つけることだと思います (gtk-go-forward
上記の 2 番目の方法にフィードすると、「不足しているアイコン」アイコンが生成されます)。有効なアイコン名ではないため)。
上の図では、上のアイコンは最初の方法 (render_icon を使用したストック ID) を使用し、下のアイコンは 2 番目の方法 (アイコン名を直接使用) を使用しています。透明度の大きな違い。