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