[Spice-devel] [PATCH spice-gtk v2 8/8] widget: modify update-area to not require primary surface

Pavel Grunt pgrunt at redhat.com
Thu Mar 24 06:38:46 UTC 2016


On Wed, 2016-03-23 at 19:32 -0400, Marc-André Lureau wrote:
> Hi
> 
> ----- Original Message -----
> > 
> > Hi,
> > 
> > as we discussed, I prefer this patch to go in after 9/8 to avoid
> > some
> > incorrect resizes
> Ok
> 
> > 
> > 
> > On Tue, 2016-03-22 at 13:57 +0100, Marc-André Lureau wrote:
> > > 
> > > If egl display is enabled, use GL scanout geometry to check
> > > intersection
> > > with the monitor area. This solves displaying GL display without
> > > software canvas.
> > What are the issues?
> There is no interesection with monitor area & missing primary canvas,
> so d->area is not set and gl update display fails.
> 
Thanks, ack

Pavel

> > 
> > 
> > Pavel
> > > 
> > > 
> > > Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>
> > > ---
> > >  src/spice-widget.c | 41 ++++++++++++++++++++++++++++----------
> > > ---
> > >  1 file changed, 28 insertions(+), 13 deletions(-)
> > > 
> > > diff --git a/src/spice-widget.c b/src/spice-widget.c
> > > index e16126a..4b7e202 100644
> > > --- a/src/spice-widget.c
> > > +++ b/src/spice-widget.c
> > > @@ -2190,32 +2190,47 @@ static void update_area(SpiceDisplay
> > > *display,
> > >                          gint x, gint y, gint width, gint height)
> > >  {
> > >      SpiceDisplayPrivate *d = display->priv;
> > > -    GdkRectangle primary = {
> > > -        .x = 0,
> > > -        .y = 0,
> > > -        .width = d->width,
> > > -        .height = d->height
> > > -    };
> > > -    GdkRectangle area = {
> > > +    GdkRectangle primary;
> > > +
> > > +    SPICE_DEBUG("update area +%d+%d %dx%d", x, y, width,
> > > height);
> > > +    d->area = (GdkRectangle) {
> > >          .x = x,
> > >          .y = y,
> > >          .width = width,
> > >          .height = height
> > >      };
> > >  
> > > -    SPICE_DEBUG("update area, primary: %dx%d, area: +%d+%d
> > > %dx%d",
> > > d->width, d->height, area.x, area.y, area.width, area.height);
> > > +#ifndef G_OS_WIN32
> > > +    if (d->egl.enabled) {
> > > +        primary = (GdkRectangle) {
> > > +            .width = d->egl.scanout.width,
> > > +            .height = d->egl.scanout.height
> > > +        };
> > > +    } else
> > > +#endif
> > > +    {
> > > +        primary = (GdkRectangle) {
> > > +            .width = d->width,
> > > +            .height = d->height
> > > +        };
> > > +    }
> > >  
> > > -    if (!gdk_rectangle_intersect(&primary, &area, &area)) {
> > > +    SPICE_DEBUG("primary: %dx%d", primary.width,
> > > primary.height);
> > > +    if (!gdk_rectangle_intersect(&primary, &d->area, &d->area))
> > > {
> > >          SPICE_DEBUG("The monitor area is not intersecting
> > > primary
> > > surface");
> > >          memset(&d->area, '\0', sizeof(d->area));
> > >          set_monitor_ready(display, false);
> > >          return;
> > >      }
> > >  
> > > -    spicex_image_destroy(display);
> > > -    d->area = area;
> > > -    if (gtk_widget_get_realized(GTK_WIDGET(display)))
> > > -        update_image(display);
> > > +#ifndef G_OS_WIN32
> > > +    if (!d->egl.enabled)
> > > +#endif
> > > +    {
> > > +        spicex_image_destroy(display);
> > > +        if (gtk_widget_get_realized(GTK_WIDGET(display)))
> > > +            update_image(display);
> > > +    }
> > >  
> > >      update_size_request(display);
> > >  
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/spice-devel
> > 


More information about the Spice-devel mailing list