16

问题

我正在尝试检索与给定(字符串)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给上面的第二种方法会产生“缺少图标”图标因为它不是有效的图标名称)。

使用股票 ID 的图标(顶部); 使用图标名称(底部)

在上图中,顶部图标使用第一种方法(带有render_icon 的股票ID),底部图标使用第二种方法(直接使用图标名称)。清晰度差别很大。

4

2 回答 2

7

一般股票图标名称

这个问题现在有点老了,但供将来参考:最好使用"go-next"而不是"gtk-go-forward"- 这是根据Icon Naming Spec的正确名称,并且推荐,因为 GTK 开发人员计划很快弃用股票图标

直接回答标题中所述的问题:这是一个方便的 Google Docs 电子表格,为 GTK 股票图标提供了等效的图标规范名称。

非模糊、大版本的 GTK 图标

至于获取默认图标的非模糊版本,我发现在 GTK 中以 96px 呈现图标的最佳方法是将其加载到 aGdkPixbuf中,然后使用它而不是 a GtkIcon(限制为 48px,即最大GtkIconSize的,正如 j__m 指出的那样)。如何在 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几乎可以在任何可以使用股票图标的地方使用 a ,所以这是一种解决方法发现非常有用。

于 2013-10-04T05:30:00.437 回答
1

GTK_ICON_SIZE_DIALOGGtk.IconSize.DIALOG在 Javascript 中)小于 96px。您正在渲染一个小图标,然后将其炸毁;自然会看起来很糟糕。

我记得,该值-1返回图标的原始大小。然后你可以使用 St.Icon 来设置你想要绘制它的大小,因为这似乎是你想要使用它的方式。

于 2013-09-02T21:59:01.817 回答