compositor: clarify update_transform vs. repaint
Remove redundant weston_surface_update_transform() calls from within output repaint paths, and add a comment that we need to rely on surface->geometry.dirty == 0 within the repaint sub-functions. Now that weston_surface_update_transform() does damage as needed, and weston_output_repaint() explicitly calls update_transform, we can reduce the updates in rotate_grab_motion() to simply scheduling a repaint. This will guarantee that the change in rotation ends up on screen ASAP. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
parent
9651678070
commit
b45ac5eada
@ -716,8 +716,6 @@ weston_surface_draw(struct weston_surface *es, struct weston_output *output)
|
|||||||
GLint filter;
|
GLint filter;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
weston_surface_update_transform(es);
|
|
||||||
|
|
||||||
pixman_region32_init(&repaint);
|
pixman_region32_init(&repaint);
|
||||||
pixman_region32_intersect(&repaint, &es->transform.boundingbox,
|
pixman_region32_intersect(&repaint, &es->transform.boundingbox,
|
||||||
&output->region);
|
&output->region);
|
||||||
@ -892,8 +890,6 @@ weston_output_set_cursor(struct weston_output *output,
|
|||||||
if (device->sprite == NULL)
|
if (device->sprite == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
weston_surface_update_transform(device->sprite);
|
|
||||||
|
|
||||||
pixman_region32_init(&cursor_region);
|
pixman_region32_init(&cursor_region);
|
||||||
pixman_region32_intersect(&cursor_region,
|
pixman_region32_intersect(&cursor_region,
|
||||||
&device->sprite->transform.boundingbox,
|
&device->sprite->transform.boundingbox,
|
||||||
@ -951,6 +947,8 @@ weston_output_repaint(struct weston_output *output, int msecs)
|
|||||||
pixman_region32_init(&overlap);
|
pixman_region32_init(&overlap);
|
||||||
|
|
||||||
wl_list_for_each(es, &ec->surface_list, link) {
|
wl_list_for_each(es, &ec->surface_list, link) {
|
||||||
|
/* Update surface transform now to avoid calling it ever
|
||||||
|
* again from the repaint sub-functions. */
|
||||||
weston_surface_update_transform(es);
|
weston_surface_update_transform(es);
|
||||||
|
|
||||||
pixman_region32_init(&surface_overlap);
|
pixman_region32_init(&surface_overlap);
|
||||||
|
@ -1034,6 +1034,11 @@ rotate_grab_motion(struct wl_grab *grab,
|
|||||||
weston_matrix_init(&surface->rotation.rotation);
|
weston_matrix_init(&surface->rotation.rotation);
|
||||||
weston_matrix_init(&rotate->rotation);
|
weston_matrix_init(&rotate->rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Repaint implies weston_surface_update_transform(), which
|
||||||
|
* lazily applies the damage due to rotation update.
|
||||||
|
*/
|
||||||
|
weston_compositor_schedule_repaint(surface->surface->compositor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user