16

質問

特定の (文字列) Gtk ストック ID に対応する (文字列) アイコン名を取得しようとしています。

Gtk ストック ID 'gtk-go-forward' には、'gtk-go-forward-ltr' と 'gtk-go-forward-rtl' という2 つの対応するアイコン名があります。どちらかを取得したい:

  • アイコン名 'gtk-go-forward-ltr' と 'gtk-go-forward-rtl' の両方に ID 'gtk-go-forward' を指定します。また
  • アイコン名 'gtk-go-forward-ltr' (私のテキスト方向に「適切な」もの) だけです。

潜在的な制限

ベース C ではなく、gobject イントロスペクション API を使用しています。

根拠(オプションで読むことができます)

ストックIDで指定したアイコンの を作ろうとしてSt.Iconいますが、サイズが大きい(96px)です。

ストック ID 'gtk-go-forward' を次のように直接使用できますgtk_icon_set_render_icon(LTR バージョンを選択します) (構文は GNOME javascript ですが、これは質問とは無関係です。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上記の 2 番目の方法にフィードすると、「不足しているアイコン」アイコンが生成されます)。有効なアイコン名ではないため)。

ストック ID を使用したアイコン (上)。 アイコン名の使用 (下)

上の図では、上のアイコンは最初の方法 (render_icon を使用したスト​​ック ID) を使用し、下のアイコンは 2 番目の方法 (アイコン名を直接使用) を使用しています。透明度の大きな違い。

4

2 に答える 2

7

一般的なストック アイコン名

この質問は今では少し古いですが、将来の参考のために:"go-next"ではなく使用することをお勧めします -- これはIcon Naming Spec"gtk-go-forward"によると正しい名前であり、GTK 開発者がストック アイコンをまもなく非推奨にすることを計画しているため、推奨されます。

タイトルに記載されている質問に直接答えるには、GTK ストック アイコンと同等のアイコン仕様名を示す便利な Google ドキュメント スプレッドシートを次に示します。

GTK アイコンのあいまいでない大きなバージョン

デフォルト アイコンのファジーでないバージョンを取得することに関しては、GTK でアイコンを 96 ピクセルでレンダリングするために私が見つけた最良の方法は、アイコンを にロードしGdkPixbufGtkIcon(48 ピクセルに制限されている、それがGtkIconSizej__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_SIZEand/orを試してみることもできます。FORCE_SVG

残念ながら、私はシェル ツールキットを使用したことがないので、特に が必要かどうかはわかりませんSt.Iconが、普通の GTKGdkPixbufでは、ストック アイコンを使用できる場所ならどこでも を使用できるので、これは回避策です。非常に便利です。

于 2013-10-04T05:30:00.437 に答える
1

GTK_ICON_SIZE_DIALOG( Gtk.IconSize.DIALOGJavascript では) が 96px 未満です。小さなアイコンをレンダリングしてから爆破しています。自然と見栄えが悪くなります。

私が思い出したように、値-1は元のサイズが何であれアイコンを返します。次に、St.Icon を使用して描画したいサイズを設定できます。

于 2013-09-02T21:59:01.817 に答える