Fix the dbus icon can not scaled when system scale changed.

Signed-off-by: wangxiaoqing <wangxiaoqing@kylinsec.com.cn>
This commit is contained in:
wangxiaoqing 2022-09-06 11:31:09 +08:00
parent 055dda94cf
commit ec868bb836
2 changed files with 137 additions and 1 deletions

View File

@ -0,0 +1,132 @@
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

View File

@ -1,6 +1,6 @@
Name: kiran-menu
Version: 2.3.0
Release: 9
Release: 10
Summary: Applets for mate panel from Kiran Desktop
License: MulanPSL-2.0
@ -15,6 +15,7 @@ Patch1005: 0002-fix-coredump-Fix-the-coredump-problem-caused-by-null.patch
Patch1006: 0001-fix-coredump-Fix-the-coredump-problem-caused-by-Rece.patch
Patch1007: 0002-feature-gitlab-Add-.gitlab-ci.yml.patch
Patch1008: 0001-fix-tray-Fix-the-icon-location-error-when-system-res.patch
Patch1009: 0001-fix-tray-Fix-the-dbus-icon-can-not-scaled-when-syste.patch
BuildRequires: cmake > 3.0
@ -95,6 +96,9 @@ gtk-update-icon-cache -f /usr/share/icons/hicolor/
%changelog
* Tue Sep 06 2022 wangxiaoqing <wangxiaoqing@kylinsec.com.cn> - 2.3.0-10
- KYOS-B: Fix the dbus icon can not scaled when system scale changed.(#I5LQVE)
* Tue Aug 30 2022 wangxiaoqing <wangxiaoqing@kylinsec.com.cn> - 2.3.0-9
- KYOS-B: Fix the icon location error when system resolution change.