----- Original Message ----- > I'm not convinced that this 'scaling' option is really a useful feature. > I find it a bit confusing to have these two checkboxes with very similar > names right next to eachother in the menu ("scale display" / "resize > display"). It's not intuitive what the effect of each option would be. > It also seems like very few people would ever want to disable automatic > scaling... In some cases, the guest can't be resized, and scaling can introduce undesired bluriness and artifacts. The bug that triggered this: https://bugzilla.redhat.com/show_bug.cgi?id=1054757 > > On top of the above issues, the support for this feature is incomplete > because of several issues. Reference this screenshot: > > http://jjongsma.fedorapeople.org/vv-no-scaling.png > > As you can see, if you resize the window smaller than the guest display > size, it becomes unusable because: > A) there are no scrollbars to access the parts of the display outside of > the window Right, I didn't think enough about that. Perhaps it could embed the display in GtkScrolledWindow. > B) instead of displaying as much of the unscaled display as possible, it > maintains the aspect ratio of the guest display, which makes no sense in > this case. that sounds also like a bug that could be easily fixable > > I haven't reviewed the code yet, I'd like to hear other's opinions on > this feature first. > > Jonathon > > > > > On Thu, 2014-02-27 at 16:26 +0100, Marc-André Lureau wrote: > > Currently "dead" property zoom can be used instead to control display > > scaling behaviour (in fact, it was probably meant to do that). > > --- > > src/virt-viewer-display.c | 41 +++++++++++++++++++++++++---------------- > > src/virt-viewer-display.h | 4 ++-- > > 2 files changed, 27 insertions(+), 18 deletions(-) > > > > diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c > > index feefcca..3c893e2 100644 > > --- a/src/virt-viewer-display.c > > +++ b/src/virt-viewer-display.c > > @@ -42,7 +42,7 @@ struct _VirtViewerDisplayPrivate > > guint desktopWidth; > > guint desktopHeight; > > guint zoom_level; > > - gboolean zoom; > > + gboolean scale; > > gint nth_display; /* Monitor number inside the guest */ > > gint monitor; /* Monitor number on the client */ > > guint show_hint; > > @@ -84,7 +84,7 @@ enum { > > PROP_DESKTOP_HEIGHT, > > PROP_FULLSCREEN, > > PROP_NTH_DISPLAY, > > - PROP_ZOOM, > > + PROP_SCALE, > > PROP_ZOOM_LEVEL, > > PROP_SHOW_HINT, > > PROP_SESSION, > > @@ -132,10 +132,10 @@ virt_viewer_display_class_init(VirtViewerDisplayClass > > *class) > > G_PARAM_READWRITE)); > > > > g_object_class_install_property(object_class, > > - PROP_ZOOM, > > - g_param_spec_boolean("zoom", > > - "Zoom", > > - "Zoom", > > + PROP_SCALE, > > + g_param_spec_boolean("scale", > > + "Scale", > > + "Scale", > > TRUE, > > G_PARAM_READWRITE)); > > > > @@ -279,7 +279,7 @@ virt_viewer_display_init(VirtViewerDisplay *display) > > display->priv->desktopWidth = 100; > > display->priv->desktopHeight = 100; > > display->priv->zoom_level = 100; > > - display->priv->zoom = TRUE; > > + display->priv->scale = TRUE; > > display->priv->auto_resize = TRUE; > > #if !GTK_CHECK_VERSION(3, 0, 0) > > display->priv->dirty = TRUE; > > @@ -322,6 +322,10 @@ virt_viewer_display_set_property(GObject *object, > > case PROP_MONITOR: > > priv->monitor = g_value_get_int(value); > > break; > > + case PROP_SCALE: > > + virt_viewer_display_set_scale(display, > > + g_value_get_boolean(value)); > > + break; > > > > default: > > G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); > > @@ -363,6 +367,9 @@ virt_viewer_display_get_property(GObject *object, > > case PROP_FULLSCREEN: > > g_value_set_boolean(value, > > virt_viewer_display_get_fullscreen(display)); > > break; > > + case PROP_SCALE: > > + g_value_set_boolean(value, > > virt_viewer_display_get_scale(display)); > > + break; > > > > default: > > G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); > > @@ -404,7 +411,7 @@ virt_viewer_display_size_request(GtkWidget *widget, > > requisition->height = border_width * 2; > > > > if (priv->dirty) { > > - if (priv->zoom) { > > + if (priv->scale) { > > requisition->width += round(priv->desktopWidth * > > priv->zoom_level / 100.0); > > requisition->height += round(priv->desktopHeight * > > priv->zoom_level / 100.0); > > } else { > > @@ -456,7 +463,7 @@ static void > > virt_viewer_display_get_preferred_width(GtkWidget *widget, > > > > *minwidth = 50 + 2 * border_width; > > > > - if (priv->zoom) { > > + if (priv->scale) { > > *defwidth = round(priv->desktopWidth * priv->zoom_level / 100.0) + > > 2 * border_width; > > } else { > > @@ -475,7 +482,7 @@ static void > > virt_viewer_display_get_preferred_height(GtkWidget *widget, > > > > *minheight = 50 + 2 * border_height; > > > > - if (priv->zoom) { > > + if (priv->scale) { > > *defheight = round(priv->desktopHeight * priv->zoom_level / 100.0) > > + > > 2 * border_height; > > } else { > > @@ -609,20 +616,22 @@ guint > > virt_viewer_display_get_zoom_level(VirtViewerDisplay *display) > > } > > > > > > -void virt_viewer_display_set_zoom(VirtViewerDisplay *display, > > - gboolean zoom) > > +void virt_viewer_display_set_scale(VirtViewerDisplay *display, > > + gboolean scale) > > { > > VirtViewerDisplayPrivate *priv = display->priv; > > > > - priv->zoom = zoom; > > + priv->scale = scale; > > + g_object_notify(G_OBJECT(display), "scale"); > > + > > virt_viewer_display_queue_resize(display); > > } > > > > > > -gboolean virt_viewer_display_get_zoom(VirtViewerDisplay *display) > > +gboolean virt_viewer_display_get_scale(VirtViewerDisplay *display) > > { > > VirtViewerDisplayPrivate *priv = display->priv; > > - return priv->zoom; > > + return priv->scale; > > } > > > > > > @@ -822,7 +831,7 @@ void > > virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay* > > self, > > preferred->y = topy; > > } > > > > - if (virt_viewer_display_get_zoom(VIRT_VIEWER_DISPLAY(self))) { > > + if (virt_viewer_display_get_scale(VIRT_VIEWER_DISPLAY(self))) { > > guint zoom = > > virt_viewer_display_get_zoom_level(VIRT_VIEWER_DISPLAY(self)); > > > > preferred->width = round(preferred->width * 100 / zoom); > > diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h > > index 195eeee..f3e4bdd 100644 > > --- a/src/virt-viewer-display.h > > +++ b/src/virt-viewer-display.h > > @@ -104,9 +104,9 @@ void > > virt_viewer_display_get_desktop_size(VirtViewerDisplay *display, > > void virt_viewer_display_set_zoom_level(VirtViewerDisplay *display, > > guint zoom); > > guint virt_viewer_display_get_zoom_level(VirtViewerDisplay *display); > > -void virt_viewer_display_set_zoom(VirtViewerDisplay *display, > > +void virt_viewer_display_set_scale(VirtViewerDisplay *display, > > gboolean zoom); > > -gboolean virt_viewer_display_get_zoom(VirtViewerDisplay *display); > > +gboolean virt_viewer_display_get_scale(VirtViewerDisplay *display); > > > > void virt_viewer_display_send_keys(VirtViewerDisplay *display, > > const guint *keyvals, int nkeyvals); > > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list