gtk - 获取股票 ID 的图标名称?

标签 gtk

问题

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

    Icon using stock ID (top); using icon name (bottom)

    在上图中,顶部图标使用第一种方法(带有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/

    相关文章:

    treeview - Vala:我怎么知道编辑过的信号是从哪一列发出的?

    java - 如何使用 sudo 在 Java 中保留 GTK 外观

    c - 在水平模式下向 gtk 框(gtk 3)添加按钮,即使 Expand 设置为 false,小部件也会占用整个垂直空间

    c - 如何在二进制 gtk 应用程序中嵌入 `.ui` 文件?

    c - GTK3 设置 GtkButton 大小

    c - 使用 GtkFileChooserButton 和 GtkFileChooserDialog 的区别

    c - gtk 网格布局内的 Webkitgtk webview 无法正确显示

    C - GTKUibuilder - Glade - g_signal_connect 错误

    linux - 错误 : undefined reference to.。编译 GTK-3.12.2 时的长列表

    python - 在 Windows 下构建基于 PyGTK 和 poppler 的二进制文件