如何从库存项目(new_from_stock)创建Gtk Pixbuf?

时间:2013-08-23 12:43:57

标签: gtk

我想在树视图中使用一个库存项目,但我不能直接将其作为pixbuf,因为pixbufs没有new_from_stock方法!!

4 个答案:

答案 0 :(得分:4)

说你想从stock_item获得一个pixbuf。

有两种方式:

首先(简单):

pixbuf = gtk_widget_render_icon ( widget, stock_item, size )

第二(硬):

您需要在默认图标工厂列表中查找它:

icon_set = gtk_style_lookup_icon_set ( style, stock_item )

OR:

icon_set = gtk_icon_factory_lookup_default ( $stock_item )

然后使用get_sizes检查可用尺寸。 检查您想要的大小是否可用,或者获取最大大小,这将是返回列表中的最后一个大小。 然后你需要渲染它来获得pixbuf:

pixbuf = gtk_icon_set_render_icon ( icon_set, style, direction, state, size, widget )

然后将其缩放到您想要的任何尺寸:

gdk_pixbuf_scale_simple ( pixbuf, width, height, GdkInterpType )

希望你明白了

答案 1 :(得分:2)

你知道GtkCellRendererPixbuf中的icon-name属性吗?这应该可以解决在树视图中显示股票图标的问题。

答案 2 :(得分:0)

ophidion的答案稍微容易(并且更具前瞻性)版本的答案是:

#define ICON_NAME "go-next"
#define ICON_SIZE 96 /* pixels */

GError *error = NULL;

GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
GdkPixbuf *pixbuf = gtk_icon_theme_load_icon(icon_theme, ICON_NAME, ICON_SIZE,
                                             GTK_ICON_LOOKUP_USE_BUILTIN, &error);

假设您没有收到错误,则可以将生成的GdkPixbuf放在树模型中,或者将其与GtkButton一起使用,或者您想要使用其他任何内容。

正如其他人指出的那样GTK stock items are likely to be deprecated,所以如果你想成为未来的证据,你应该根据Icon Naming Spec使用名称。有关GTK库存商品的等效图标规格名称,请参阅this Google Docs spreadsheet

答案 3 :(得分:-1)

您可以使用gtk_image_new_from_stock(),然后使用gtk_image_get_pixbuf()获取原始pixbuf。

但请先查看@jku's回答,这听起来像是正确的解决方案。我只想添加你在其他任何环境中的表现。