【问题标题】:GtkToolButton with custom icon but of stock icon sizeGtkToolButton 具有自定义图标但具有股票图标大小
【发布时间】:2012-09-20 21:23:11
【问题描述】:

我有一个 GtkToolBar,它有 3 个 GtkToolButtons,每个都有一个股票图标值,因此它们都以相同的大小出现;现在我添加了一个带有自定义图像 (.png) 的第 4 个 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);

【问题讨论】:

    标签: icons toolbar gtk2


    【解决方案1】:

    这是另一种解决方案。

    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");
    

    【讨论】:

      【解决方案2】:

      我自己发现了!这是诀窍,它可以帮助像我这样的人。从库存菜单项中查询图标大小,这是一个枚举(标准值,如GTK_ICON_SIZE_BUTTONGTK_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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 2021-02-21
        • 2013-04-20
        • 2022-05-30
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        相关资源
        最近更新 更多