问题
我正在尝试检索与给定(字符串)Gtk 股票 ID 对应的(字符串)图标名称。
例子
Gtk stock id 'gtk-go-forward' 有两个对应的图标名称,'gtk-go-forward-ltr' 和 'gtk-go-forward-rtl'。我想检索:
- 给定 ID 'gtk-go-forward' 的图标名称 'gtk-go-forward-ltr' 和 'gtk-go-forward-rtl';或者
- 只是图标名称“gtk-go-forward-ltr”(我的文本方向的“适当”名称)。
潜在限制
我使用的是 gobject 内省 API,而不是基本的 C API。
基本原理(可选阅读)
我正在尝试为St.Icon
股票 ID 指定的图标制作一个,但尺寸较大(96 像素)。
我可以gtk_icon_set_render_icon
像这样直接使用股票 ID 'gtk-go-forward'(它选择 LTR 版本)(语法是 GNOME javscript,但这与问题无关;我使用的是 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
给上面的第二种方法会产生“缺少图标”图标因为它不是有效的图标名称)。
在上图中,顶部图标使用第一种方法(带有render_icon 的股票ID),底部图标使用第二种方法(直接使用图标名称)。清晰度差别很大。