GtkToolButton具有自定义图标但库存图标大小

时间:2012-09-20 21:23:11

标签: gtk icons toolbar

我有一个GtkToolBar,它说3个GtkToolButtons,每个都有一个股票图标值,因此它们都出现在相同的大小;现在我添加了第四个带有自定义图像(.png)的GtkToolButton,它具有任意尺寸,只有这个按钮看起来很大(因为图像具有更高的重新设置)。如何缩放此GtkToolButton以匹配其他3个按钮?

以下是我所做的简要介绍的代码:

GtkWidget *custom_icon = gtk_image_new_from_file(path);
GtkToolItem *toolbar_item = gtk_toggle_tool_button_new();
gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolbar_item), custom_icon);
gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolbar_item), "Custom Item");
gtk_toolbar_insert(toolbar, toolbar_item, -1);

2 个答案:

答案 0 :(得分:6)

这是另一种解决方案。

GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(icon_file_path, NULL);
int width, height;
gdk_pixbuf_get_file_info (icon_file_path, &width, &height);
gtk_icon_theme_add_builtin_icon ("custom_icon", width, pixbuf);
g_object_unref (G_OBJECT (pixbuf)); 

GtkToolItem *toolbar_item = gtk_toggle_tool_button_new();
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(toolbar_item), "custom_icon");

如果您有不同尺寸的图像,可以将它们全部添加,让Gtk选择正确尺寸的图像(如果没有找到则调整大小):只需重复每个图像文件的前五行。

您可以在其他地方使用您的图标,其大小也会自动调整。 例如,要将它用于主窗口:

gtk_window_set_icon_name(GTK_WINDOW(main_window), "custom_icon");

答案 1 :(得分:2)

自己找到它!这是诀窍,它可以帮助像我这样的人。从库存菜单项查询图标大小,这是一个枚举(标准值,如GTK_ICON_SIZE_BUTTON,GTK_ICON_SIZE_LARGE_TOOLBAR等)。现在使用gtk_icon_size_lookup获取像素大小。使用正确的尺寸从自定义图标/图像文件创建pixbuf。从中创建一个GtkImage并将其设置为新的菜单项,你就完成了!

GtkToolItem *stock_menu_item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_NEW);
GtkIconSize toolbar_icon_size = gtk_tool_item_get_icon_size(stock_menu_item);
gint width = 0, height = 0;
gtk_icon_size_lookup(toolbar_icon_size, &width, &height);
GdkPixbuf *app_icon = gdk_pixbuf_new_from_file_at_size(icon_file_path, width, height, NULL);
GtkImage *tray_icon = gtk_image_new_from_pixbuf(app_icon);
g_object_unref(app_icon);
app_icon = NULL;
GtkToolItem *toolbar_item = gtk_toggle_tool_button_new();
gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolbar_item), tray_icon);