compositor: let update_transform deal damage
authorPekka Paalanen <ppaalanen@gmail.com>
Thu, 9 Feb 2012 13:32:15 +0000 (15:32 +0200)
committerPekka Paalanen <ppaalanen@gmail.com>
Fri, 10 Feb 2012 13:47:56 +0000 (15:47 +0200)
weston_surface_update_transform() is similar to
weston_surface_configure() in that it changes the surface region on
screen. Unlike configure, update_transform forgets to deal damage at
all, yet it is the only place where we can do damage_below() as needed.

Add a damage_below call to deal damage for the old surface region only
when needed. This uses the cached state from surface->transform to get
the old region.

Add a damage call to deal damage for the new surface region, after
updating the cached state.

Add a repaint call, since we have changed the scene and should render it
out.

This change fixes the rotation not updating the screen properly.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
src/compositor.c

index 486bd22..5baf50a 100644 (file)
@@ -357,6 +357,8 @@ weston_surface_update_transform(struct weston_surface *surface)
 
        surface->geometry.dirty = 0;
 
+       weston_surface_damage_below_noupdate(surface);
+
        pixman_region32_fini(&surface->transform.boundingbox);
 
        /* transform.position is always in transformation_list */
@@ -369,6 +371,12 @@ weston_surface_update_transform(struct weston_surface *surface)
                if (weston_surface_update_transform_enable(surface) < 0)
                        weston_surface_update_transform_disable(surface);
        }
+
+       /* weston_surface_damage() without update */
+       pixman_region32_union(&surface->damage, &surface->damage,
+                             &surface->transform.boundingbox);
+
+       weston_compositor_schedule_repaint(surface->compositor);
 }
 
 WL_EXPORT void