kiran-menu/0001-fix-tray-Fix-the-dbus-icon-can-not-scaled-when-syste.patch
wangxiaoqing ec868bb836 Fix the dbus icon can not scaled when system scale changed.
Signed-off-by: wangxiaoqing <wangxiaoqing@kylinsec.com.cn>
2022-09-06 11:31:09 +08:00

133 lines
4.4 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 49591a3b1b1c2f58b8b4a7cacfa7093fad26a3ab Mon Sep 17 00:00:00 2001
From: wangxiaoqing <wangxiaoqing@kylinsec.com.cn>
Date: Tue, 6 Sep 2022 10:20:27 +0800
Subject: [PATCH] fix(tray):Fix the dbus icon can not scaled when system scale
changed
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修复当系统显示设置放大2倍数托盘声音网络通知图标未放大的问题
Signed-off-by: wangxiaoqing <wangxiaoqing@kylinsec.com.cn>
---
src/tray/kiran-sn-icon.c | 51 +++++++++++++++++++++++-----------------
1 file changed, 29 insertions(+), 22 deletions(-)
diff --git a/src/tray/kiran-sn-icon.c b/src/tray/kiran-sn-icon.c
index b6644c3..f312458 100644
--- a/src/tray/kiran-sn-icon.c
+++ b/src/tray/kiran-sn-icon.c
@@ -202,9 +202,10 @@ kiran_sn_tooltip_new(GVariant *variant)
return tooltip;
}
-static GdkPixbuf *
+static cairo_surface_t *
get_icon_by_name(const gchar *icon_name,
- gint requested_size)
+ gint requested_size,
+ gint scale)
{
GtkIconTheme *icon_theme;
gint *sizes;
@@ -235,9 +236,9 @@ get_icon_by_name(const gchar *icon_name,
if (chosen_size == 0)
chosen_size = requested_size;
- return gtk_icon_theme_load_icon(icon_theme, icon_name,
- chosen_size, GTK_ICON_LOOKUP_FORCE_SIZE,
- NULL);
+ return gtk_icon_theme_load_surface(icon_theme, icon_name,
+ chosen_size, scale,
+ NULL, GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
}
static cairo_surface_t *
@@ -501,44 +502,46 @@ update(KiranSnIcon *icon)
KiranSnIconPrivate *priv;
KiranSnTooltip *tip;
gint icon_size;
- gint scale;
priv = KIRAN_SN_ICON_GET_PRIVATE(icon);
- scale = gtk_widget_get_scale_factor(GTK_WIDGET(priv->image));
if (priv->icon_size > 0)
icon_size = priv->icon_size;
else
icon_size = MAX(1, priv->effective_icon_size);
- icon_size = icon_size * scale;
-
if (priv->icon_name != NULL && priv->icon_name[0] != '\0')
{
- GdkPixbuf *pixbuf;
- pixbuf = get_icon_by_name(priv->icon_name, icon_size);
- if (!pixbuf)
+ cairo_surface_t *surface;
+ gint scale;
+
+ scale = gtk_widget_get_scale_factor(GTK_WIDGET(priv->image));
+ surface = get_icon_by_name(priv->icon_name, icon_size, scale);
+ if (!surface)
{
+ GdkPixbuf *pixbuf;
+
/*try to find icons specified by path and filename*/
pixbuf = gdk_pixbuf_new_from_file(priv->icon_name, NULL);
if (pixbuf && icon_size > 1)
{
/*An icon specified by path and filename may be the wrong size for the tray */
- pixbuf = gdk_pixbuf_scale_simple(pixbuf, scale * icon_size - 2, scale * icon_size - 2, GDK_INTERP_BILINEAR);
+ pixbuf = gdk_pixbuf_scale_simple(pixbuf, icon_size - 2, icon_size - 2, GDK_INTERP_BILINEAR);
+ surface = gdk_cairo_surface_create_from_pixbuf(pixbuf, scale, NULL);
+ }
+
+ if (pixbuf)
+ {
+ g_object_unref(pixbuf);
}
}
- if (!pixbuf)
+ if (!surface)
{
/*deal with missing icon or failure to load icon*/
- pixbuf = get_icon_by_name("image-missing", icon_size);
- }
-
- if (pixbuf)
- {
- gtk_image_set_from_pixbuf(GTK_IMAGE(priv->image), pixbuf);
- g_object_unref(pixbuf);
+ surface = get_icon_by_name("image-missing", icon_size, scale);
}
+ gtk_image_set_from_surface(GTK_IMAGE(priv->image), surface);
g_free(priv->icon);
priv->icon = g_strdup(priv->icon_name);
}
@@ -551,7 +554,6 @@ update(KiranSnIcon *icon)
icon_size);
if (surface != NULL)
{
- cairo_surface_set_device_scale(surface, scale, scale);
gtk_image_set_from_surface(GTK_IMAGE(priv->image), surface);
g_free(priv->icon);
@@ -579,6 +581,11 @@ update(KiranSnIcon *icon)
cairo_surface_destroy(surface);
}
}
+ else
+ {
+ gtk_image_set_from_icon_name(GTK_IMAGE(priv->image), "image-missing", GTK_ICON_SIZE_MENU);
+ gtk_image_set_pixel_size(GTK_IMAGE(priv->image), icon_size);
+ }
tip = priv->tooltip;
if (tip != NULL)
--
2.36.1