问题
我正在尝试检索与给定(字符串)Gtk 股票 ID 对应的(字符串)图标名称。
例子
Gtk stock id 'gtk-go-forward' 有两个对应的图标名称,'gtk-go-forward-ltr' 和 'gtk-go-forward-rtl'。我想检索:
潜在限制
我使用的是 gobject 内省(introspection) API,而不是基本的 C API。
基本原理(可选阅读)
我正在尝试制作
St.Icon
用于股票 ID 指定的图标,但尺寸较大(96 像素)。我可以使用
gtk_icon_set_render_icon
直接使用股票 ID 'gtk-go-forward' (它选择 LTR 版本)(语法是 GNOME javscript,但这与问题无关;我使用的是 GObject 自省(introspection) 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),底部图标使用第二种方法(直接使用图标名称)。清晰度差别很大。
最佳答案
一般股票图标名称
这个问题现在有点老了,但供将来引用:最好使用"go-next"
而不是 "gtk-go-forward"
-- 这是根据 Icon Naming Spec 的正确名称,并推荐,因为 GTK 开发人员正在计划 deprecating stock icons shortly .
直接回答标题中的问题:这里是handy Google Docs spreadsheet为 GTK 股票图标提供等效的图标规范名称。
非模糊、大版本的 GTK 图标
至于获取默认图标的非模糊版本,我发现在 GTK 中以 96px 渲染图标的最佳方法是将其加载到 GdkPixbuf
中。 , 然后使用它而不是 GtkIcon
(正如 j__m 指出的那样,它被限制为 48px,这是最大的 GtkIconSize
)。如何在 Vala 中执行此操作的示例(轻松转换为 JS 或 Python 等):
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
和/或 FORCE_SVG
,特别是如果您想要非常大的图标。恐怕我没用过Shell Toolkit,所以不知道你是不是特别需要
St.Icon
,但在普通 GTK 中,您可以使用 GdkPixbuf
几乎可以在任何地方使用股票图标,所以这是一种我发现非常有用的解决方法。
关于gtk - 获取股票 ID 的图标名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353516/