我正在尝试检索与给定(字符串)Gtk股票ID相对应的(字符串)图标名称。
Gtk stock id'gtk-go-forward'有两个对应的图标名称,'gtk-go-forward-ltr'和'gtk-go-forward-rtl'。我想找回:
我正在使用gobject内省API,而不是基本的C。
我正在尝试为库存ID指定的图标设置St.Icon
,但尺寸较大(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
提供给第二种方法)上面会生成“缺少图标”图标,因为它不是有效的图标名称。)
在上图中,顶部图标使用第一种方法(库存ID和render_icon),底部图标使用第二种方法(直接使用图标名称)。清晰度差异很大。
答案 0 :(得分:7)
此问题现在有点陈旧,但供将来参考:最好使用"go-next"
而不是"gtk-go-forward"
- 根据Icon Naming Spec这是正确的名称,并建议使用因为GTK开发人员正在计划deprecating stock icons shortly。
直接回答标题中所述的问题:这里是handy Google Docs spreadsheet,为GTK股票图标提供等效的图标规格名称。
关于获取默认图标的非模糊版本,我发现在GTK中以96px呈现图标的最佳方法是将其加载到GdkPixbuf
,然后使用它而不是{{} 1}}(限制为48px,这是最大的GtkIcon
,正如j__m指出的那样)。如何在Vala中执行此操作的示例(可轻松转换为JS或Python等):
GtkIconSize
您可能还想尝试var icon_theme = Gtk.IconTheme.get_default();
try {
var pixbuf = icon_theme.load_icon("go-next", 96, Gtk.IconLookupFlags.USE_BUILTIN);
// Do something with the pixbuf, for example use it with a CellRendererPixbuf,
// or a GtkButton or whatever
catch (GLib.Error e) {
GLib.critical("Could not load icon: %s", e.message);
}
和/或Gtk.IconLookupFlags.FORCE_SIZE
,特别是如果您想要真正巨大的图标。
我担心我从未使用过Shell Toolkit,因此我不知道您是否特别需要FORCE_SVG
,但在普通GTK中,您几乎可以在任何地方使用St.Icon
可以使用股票图标,这是我发现非常有用的解决方法。
答案 1 :(得分:1)
GTK_ICON_SIZE_DIALOG
(Javascript中为Gtk.IconSize.DIALOG
)小于96px。你正在渲染一个小图标,然后把它炸掉;自然它看起来很糟糕。
我记得,值-1
会返回原始大小的图标。然后你可以使用St.Icon设置你想要绘制它的大小,因为这似乎就是你想要如何使用它。