From: Pekka Paalanen <[email protected]> Move the long piece of code computing the end-to-end transformation from repaint_region() into a new function pixman_renderer_compute_transform().
The code itself it not modified. Because the number of moved lines is so big, git-diff will show the changes in the context instead of the moved lines. Signed-off-by: Pekka Paalanen <[email protected]> --- src/pixman-renderer.c | 94 +++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c index 09e8c0e..2769168 100644 --- a/src/pixman-renderer.c +++ b/src/pixman-renderer.c @@ -169,51 +169,13 @@ transform_apply_viewport(pixman_transform_t *transform, } static void -repaint_region(struct weston_view *ev, struct weston_output *output, - pixman_region32_t *region, pixman_region32_t *surf_region, - pixman_op_t pixman_op) +pixman_renderer_compute_transform(pixman_transform_t *transform_out, + struct weston_view *ev, + struct weston_output *output) { - struct pixman_renderer *pr = - (struct pixman_renderer *) output->compositor->renderer; - struct pixman_surface_state *ps = get_surface_state(ev->surface); - struct pixman_output_state *po = get_output_state(output); struct weston_buffer_viewport *vp = &ev->surface->buffer_viewport; - pixman_region32_t final_region; - float view_x, view_y; pixman_transform_t transform; pixman_fixed_t fw, fh; - pixman_image_t *mask_image; - pixman_color_t mask = { 0, }; - - /* The final region to be painted is the intersection of - * 'region' and 'surf_region'. However, 'region' is in the global - * coordinates, and 'surf_region' is in the surface-local - * coordinates - */ - pixman_region32_init(&final_region); - if (surf_region) { - pixman_region32_copy(&final_region, surf_region); - - /* Convert from surface to global coordinates */ - if (!ev->transform.enabled) { - pixman_region32_translate(&final_region, ev->geometry.x, ev->geometry.y); - } else { - weston_view_to_global_float(ev, 0, 0, &view_x, &view_y); - pixman_region32_translate(&final_region, (int)view_x, (int)view_y); - } - - /* We need to paint the intersection */ - pixman_region32_intersect(&final_region, &final_region, region); - } else { - /* If there is no surface region, just use the global region */ - pixman_region32_copy(&final_region, region); - } - - /* Convert from global to output coord */ - region_global_to_output(output, &final_region); - - /* And clip to it */ - pixman_image_set_clip_region32 (po->shadow_image, &final_region); /* Set up the source transformation based on the surface position, the output position/transform/scale and the client @@ -333,6 +295,56 @@ repaint_region(struct weston_view *ev, struct weston_output *output, pixman_double_to_fixed(vp->buffer.scale), pixman_double_to_fixed(vp->buffer.scale)); + *transform_out = transform; +} + +static void +repaint_region(struct weston_view *ev, struct weston_output *output, + pixman_region32_t *region, pixman_region32_t *surf_region, + pixman_op_t pixman_op) +{ + struct pixman_renderer *pr = + (struct pixman_renderer *) output->compositor->renderer; + struct pixman_surface_state *ps = get_surface_state(ev->surface); + struct pixman_output_state *po = get_output_state(output); + struct weston_buffer_viewport *vp = &ev->surface->buffer_viewport; + pixman_region32_t final_region; + float view_x, view_y; + pixman_transform_t transform; + pixman_image_t *mask_image; + pixman_color_t mask = { 0, }; + + /* The final region to be painted is the intersection of + * 'region' and 'surf_region'. However, 'region' is in the global + * coordinates, and 'surf_region' is in the surface-local + * coordinates + */ + pixman_region32_init(&final_region); + if (surf_region) { + pixman_region32_copy(&final_region, surf_region); + + /* Convert from surface to global coordinates */ + if (!ev->transform.enabled) { + pixman_region32_translate(&final_region, ev->geometry.x, ev->geometry.y); + } else { + weston_view_to_global_float(ev, 0, 0, &view_x, &view_y); + pixman_region32_translate(&final_region, (int)view_x, (int)view_y); + } + + /* We need to paint the intersection */ + pixman_region32_intersect(&final_region, &final_region, region); + } else { + /* If there is no surface region, just use the global region */ + pixman_region32_copy(&final_region, region); + } + + /* Convert from global to output coord */ + region_global_to_output(output, &final_region); + + /* And clip to it */ + pixman_image_set_clip_region32 (po->shadow_image, &final_region); + + pixman_renderer_compute_transform(&transform, ev, output); pixman_image_set_transform(ps->image, &transform); if (ev->transform.enabled || output->current_scale != vp->buffer.scale) -- 2.0.5 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
