From 03f8a8ff5a2a37f0119d1b036a7c0e03d7df1619 Mon Sep 17 00:00:00 2001 From: Haochen Tong Date: Thu, 6 Aug 2020 02:21:35 +0200 Subject: [PATCH] virt-viewer-display: fix guest display size on HiDPI host Signed-off-by: Haochen Tong --- src/virt-viewer-display-spice.c | 6 ++++++ src/virt-viewer-display.c | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c index 311178b..a82422c 100644 --- a/src/virt-viewer-display-spice.c +++ b/src/virt-viewer-display-spice.c @@ -363,6 +363,12 @@ virt_viewer_display_spice_set_desktop(VirtViewerDisplay *display, { VirtViewerDisplaySpicePrivate *priv; guint desktopWidth, desktopHeight; + gint scale_factor = gtk_widget_get_scale_factor(GTK_WIDGET(display)); + + /* parameter width and height are guest monitor physical pixel sizes */ + /* convert to application pixel sizes */ + width /= scale_factor; + height /= scale_factor; g_return_if_fail(VIRT_VIEWER_IS_DISPLAY_SPICE(display)); diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c index de72353..bc2c2a6 100644 --- a/src/virt-viewer-display.c +++ b/src/virt-viewer-display.c @@ -721,6 +721,14 @@ void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay* self, preferred->width = round(preferred->width * NORMAL_ZOOM_LEVEL / (double) zoom); preferred->height = round(preferred->height * NORMAL_ZOOM_LEVEL / (double) zoom); } + + /* calculate device pixel size on HiDPI screens */ + gint scale_factor = gtk_widget_get_scale_factor(GTK_WIDGET(self)); + + preferred->x *= scale_factor; + preferred->y *= scale_factor; + preferred->width *= scale_factor; + preferred->height *= scale_factor; } gint