[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] ui/gtk: use correct scale for cursors
From: |
lilydjwg |
Subject: |
[PATCH] ui/gtk: use correct scale for cursors |
Date: |
Mon, 12 Dec 2022 16:44:43 +0800 |
From: lilydjwg <lilydjwg@gmail.com>
gdk_cursor_new_from_pixbuf always uses scale=1 and causes blurry large
cursors on HiDPI screens (scale=2). Create a cairo surface ourselves to
pass the desired scale.
Signed-off-by: lilydjwg <lilydjwg@gmail.com>
---
ui/gtk.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 4817623c8f..984a5a4c67 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -469,7 +469,10 @@ static void gd_cursor_define(DisplayChangeListener *dcl,
{
VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
GdkPixbuf *pixbuf;
+ GdkWindow *window;
GdkCursor *cursor;
+ cairo_surface_t *surface;
+ int scale;
if (!gtk_widget_get_realized(vc->gfx.drawing_area)) {
return;
@@ -479,10 +482,14 @@ static void gd_cursor_define(DisplayChangeListener *dcl,
GDK_COLORSPACE_RGB, true, 8,
c->width, c->height, c->width * 4,
NULL, NULL);
- cursor = gdk_cursor_new_from_pixbuf
+ window = gtk_widget_get_window(vc->gfx.drawing_area);
+ scale = gdk_window_get_scale_factor(window);
+ surface = gdk_cairo_surface_create_from_pixbuf(pixbuf, scale, window);
+ cursor = gdk_cursor_new_from_surface
(gtk_widget_get_display(vc->gfx.drawing_area),
- pixbuf, c->hot_x, c->hot_y);
- gdk_window_set_cursor(gtk_widget_get_window(vc->gfx.drawing_area), cursor);
+ surface, c->hot_x / scale, c->hot_y / scale);
+ cairo_surface_destroy(surface);
+ gdk_window_set_cursor(window, cursor);
g_object_unref(pixbuf);
g_object_unref(cursor);
}
--
2.38.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] ui/gtk: use correct scale for cursors,
lilydjwg <=