[Spice-devel] [PATCH spice-gtk v2 8/8] widget: modify update-area to not require primary surface
Marc-André Lureau
mlureau at redhat.com
Wed Mar 23 23:32:52 UTC 2016
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.
>
> 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