compositor: let update_transform deal damage
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>
This commit is contained in:
@@ -357,6 +357,8 @@ weston_surface_update_transform(struct weston_surface *surface)
|
|||||||
|
|
||||||
surface->geometry.dirty = 0;
|
surface->geometry.dirty = 0;
|
||||||
|
|
||||||
|
weston_surface_damage_below_noupdate(surface);
|
||||||
|
|
||||||
pixman_region32_fini(&surface->transform.boundingbox);
|
pixman_region32_fini(&surface->transform.boundingbox);
|
||||||
|
|
||||||
/* transform.position is always in transformation_list */
|
/* 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)
|
if (weston_surface_update_transform_enable(surface) < 0)
|
||||||
weston_surface_update_transform_disable(surface);
|
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
|
WL_EXPORT void
|
||||||
|
|||||||
Reference in New Issue
Block a user