On 06/03/15 05:03 AM, Pekka Paalanen wrote:
> 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.
> 

Nice refactor, but the transform patch series posted a while ago
contains a patch:
http://patchwork.freedesktop.org/patch/35170/

that reduces the bits moved into pixman_renderer_compute_transform to
about 10 lines.

Do you need those bits in a separate function somewhere or is this just
a cosmetic refactor?

> 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)
> 

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to