Skip to content
Snippets Groups Projects
Commit 047db043 authored by Brian Tarricone's avatar Brian Tarricone
Browse files

Revert "garcon-gtk: Fix menu icon blurriness when UI scale factor != 1"

This reverts commit 563e07f5.
parent 9ded6bd7
No related branches found
No related tags found
1 merge request!28Use GIcons for menu icons instead of loading surfaces
......@@ -663,10 +663,10 @@ garcon_gtk_menu_reload (GarconGtkMenu *menu)
static GdkPixbuf*
garcon_gtk_menu_load_icon_pixbuf (const gchar *icon_name,
gint scale_factor)
static GtkWidget*
garcon_gtk_menu_load_icon (const gchar *icon_name)
{
GtkWidget *image = NULL;
gint w, h, size;
gchar *p, *name = NULL;
GdkPixbuf *pixbuf = NULL;
......@@ -677,15 +677,13 @@ garcon_gtk_menu_load_icon_pixbuf (const gchar *icon_name,
if (gtk_icon_theme_has_icon (icon_theme, icon_name))
{
pixbuf = gtk_icon_theme_load_icon (icon_theme,
icon_name, size * scale_factor,
GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, size, 0, NULL);;
}
else
{
if (g_path_is_absolute (icon_name))
{
pixbuf = gdk_pixbuf_new_from_file_at_scale (icon_name, w * scale_factor, h * scale_factor, TRUE, NULL);
pixbuf = gdk_pixbuf_new_from_file_at_scale (icon_name, w, h, TRUE, NULL);
}
else
{
......@@ -694,14 +692,12 @@ garcon_gtk_menu_load_icon_pixbuf (const gchar *icon_name,
if (p)
{
name = g_strndup (icon_name, p - icon_name);
pixbuf = gtk_icon_theme_load_icon (icon_theme,
icon_name, size * scale_factor,
GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
pixbuf = gtk_icon_theme_load_icon (icon_theme, name, size, 0, NULL);
g_free (name);
name = NULL;
}
/* maybe they point to a file in the pixmaps folder */
/* maybe they point to a file in the pixbufs folder */
if (G_UNLIKELY (pixbuf == NULL))
{
gchar *filename;
......@@ -713,32 +709,21 @@ garcon_gtk_menu_load_icon_pixbuf (const gchar *icon_name,
if (name)
{
pixbuf = gdk_pixbuf_new_from_file_at_scale (name, w * scale_factor, h * scale_factor, TRUE, NULL);
pixbuf = gdk_pixbuf_new_from_file_at_scale (name, w, h, TRUE, NULL);
g_free (name);
}
}
}
return pixbuf;
}
static GtkWidget*
garcon_gtk_menu_load_icon (const gchar *icon_name,
gint scale_factor)
{
GtkWidget *image = NULL;
GdkPixbuf *pixbuf = NULL;
pixbuf = garcon_gtk_menu_load_icon_pixbuf (icon_name, scale_factor);
if (G_LIKELY (pixbuf != NULL))
/* Turn the pixbuf into a gtk_image */
if (G_LIKELY (pixbuf))
{
cairo_surface_t *surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale_factor, NULL);
/* scale the pixbuf down if it needs it */
GdkPixbuf *pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf, w, h, GDK_INTERP_BILINEAR);
g_object_unref (G_OBJECT (pixbuf));
image = gtk_image_new_from_surface (surface);
cairo_surface_destroy (surface);
image = gtk_image_new_from_pixbuf (pixbuf_scaled);
g_object_unref (G_OBJECT (pixbuf_scaled));
}
else
{
......@@ -751,67 +736,17 @@ garcon_gtk_menu_load_icon (const gchar *icon_name,
static void
garcon_gtk_menu_item_scale_factor_changed (GtkWidget *menu_item,
GParamSpec *pspec,
const gchar *icon_name)
{
GdkPixbuf *pixbuf;
gint scale_factor;
g_return_if_fail (GTK_IS_MENU_ITEM (menu_item));
g_return_if_fail (icon_name != NULL);
scale_factor = gtk_widget_get_scale_factor (menu_item);
pixbuf = garcon_gtk_menu_load_icon_pixbuf (icon_name, scale_factor);
if (G_LIKELY (pixbuf))
{
GtkWidget *image = NULL;
GtkWidget *box;
box = gtk_bin_get_child (GTK_BIN (menu_item));
if (GTK_IS_BOX (box))
{
GList *children = gtk_container_get_children (GTK_CONTAINER (box));
for (GList *l = children; l != NULL; l = l->next)
{
if (GTK_IS_IMAGE (l->data))
{
image = GTK_WIDGET (l->data);
break;
}
}
g_list_free (children);
}
if (image != NULL)
{
GdkWindow *window = gtk_widget_get_window (menu_item);
cairo_surface_t *surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale_factor, window);
gtk_image_set_from_surface (GTK_IMAGE (image), surface);
cairo_surface_destroy (surface);
}
g_object_unref (G_OBJECT (pixbuf));
}
}
static GtkWidget*
garcon_gtk_menu_create_menu_item (gboolean show_menu_icons,
const gchar *name,
const gchar *icon_name,
gint scale_factor)
const gchar *icon_name)
{
GtkWidget *mi;
GtkWidget *image;
gchar *icon_name_copy;
if (show_menu_icons)
{
image = garcon_gtk_menu_load_icon (icon_name, scale_factor);
image = garcon_gtk_menu_load_icon (icon_name);
gtk_widget_show (image);
}
else
......@@ -821,11 +756,6 @@ garcon_gtk_menu_create_menu_item (gboolean show_menu_icons,
mi = xfce_gtk_image_menu_item_new (name, NULL, NULL, NULL, NULL, image, NULL);
icon_name_copy = g_strdup (icon_name);
g_object_set_data_full (G_OBJECT (mi), "--garcon-icon-name", icon_name_copy, g_free);
g_signal_connect (mi, "notify::scale-factor",
G_CALLBACK (garcon_gtk_menu_item_scale_factor_changed), icon_name_copy);
return mi;
}
......@@ -836,8 +766,7 @@ garcon_gtk_menu_pack_actions_menu (GtkWidget *menu,
GarconMenuItem *menu_item,
GList *actions,
const gchar *parent_icon_name,
gboolean show_menu_icons,
gint scale_factor)
gboolean show_menu_icons)
{
GList *iter;
GtkWidget *mi;
......@@ -864,8 +793,7 @@ garcon_gtk_menu_pack_actions_menu (GtkWidget *menu,
mi = garcon_gtk_menu_create_menu_item (show_menu_icons,
garcon_menu_item_action_get_name (action),
action_icon_name,
scale_factor);
action_icon_name);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_signal_connect_object (G_OBJECT (mi), "activate",
......@@ -886,14 +814,13 @@ garcon_gtk_menu_add_actions (GarconGtkMenu *menu,
const gchar *parent_icon_name)
{
GtkWidget *submenu, *mi;
gint scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (menu));
submenu = gtk_menu_new ();
/* Add the parent item again, this time something the user can click to execute */
mi = garcon_gtk_menu_create_menu_item (menu->priv->show_menu_icons,
garcon_menu_item_get_name (menu_item),
parent_icon_name, scale_factor);
parent_icon_name);
gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mi);
/* we need to store the GarconGtkMenu with this item so we can
......@@ -904,8 +831,7 @@ garcon_gtk_menu_add_actions (GarconGtkMenu *menu,
gtk_widget_show (mi);
garcon_gtk_menu_pack_actions_menu (submenu, menu_item, actions,
parent_icon_name, menu->priv->show_menu_icons,
scale_factor);
parent_icon_name, menu->priv->show_menu_icons);
return submenu;
}
......@@ -996,7 +922,6 @@ garcon_gtk_menu_add (GarconGtkMenu *menu,
{
GList *elements, *li;
GtkWidget *mi;
gint scale_factor;
const gchar *name, *icon_name;
const gchar *comment;
GtkWidget *submenu;
......@@ -1007,8 +932,6 @@ garcon_gtk_menu_add (GarconGtkMenu *menu,
g_return_if_fail (GTK_IS_MENU (gtk_menu));
g_return_if_fail (GARCON_IS_MENU (garcon_menu));
scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (menu));
elements = garcon_menu_get_elements (garcon_menu);
for (li = elements; li != NULL; li = li->next)
{
......@@ -1041,7 +964,7 @@ garcon_gtk_menu_add (GarconGtkMenu *menu,
icon_name = "applications-other";
/* build the menu item */
mi = garcon_gtk_menu_create_menu_item (menu->priv->show_menu_icons, name, icon_name, scale_factor);
mi = garcon_gtk_menu_create_menu_item (menu->priv->show_menu_icons, name, icon_name);
gtk_menu_shell_append (GTK_MENU_SHELL (gtk_menu), mi);
/* if the menu item has actions such as "Private browsing mode"
......@@ -1126,7 +1049,7 @@ garcon_gtk_menu_add (GarconGtkMenu *menu,
icon_name = "applications-other";
/* build the menu item */
mi = garcon_gtk_menu_create_menu_item (menu->priv->show_menu_icons, name, icon_name, scale_factor);
mi = garcon_gtk_menu_create_menu_item (menu->priv->show_menu_icons, name, icon_name);
gtk_menu_shell_append (GTK_MENU_SHELL (gtk_menu), mi);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu);
......@@ -1394,15 +1317,13 @@ garcon_gtk_menu_get_desktop_actions_menu (GarconMenuItem *item)
GList *actions = NULL;
const gchar *parent_icon_name;
gboolean show_menu_icons = FALSE;
gint scale_factor;
actions = garcon_menu_item_get_actions (item);
g_return_val_if_fail (actions != NULL, NULL);
parent_icon_name = garcon_menu_item_get_icon_name (item);
scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (submenu));
garcon_gtk_menu_pack_actions_menu (submenu, item, actions, parent_icon_name, show_menu_icons, scale_factor);
garcon_gtk_menu_pack_actions_menu (submenu, item, actions, parent_icon_name, show_menu_icons);
g_list_free (actions);
return GTK_MENU (submenu);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment