[PATCH weston v2 11/16] pixman-renderer: refactor into region_intersect_only_translation()

Jason Ekstrand jason at jlekstrand.net
Tue Mar 10 13:30:41 PDT 2015


On Tue, Mar 10, 2015 at 6:01 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:

> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> Move code into a new helper function. No changes.
>
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> Reviewed-By: Derek Foreman <derekf at osg.samsung.com>
> ---
>  src/pixman-renderer.c | 31 ++++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
> index 8fd50e3..96123cb 100644
> --- a/src/pixman-renderer.c
> +++ b/src/pixman-renderer.c
> @@ -181,6 +181,22 @@ pixman_renderer_compute_transform(pixman_transform_t
> *transform_out,
>  }
>
>  static void
> +region_intersect_only_translation(pixman_region32_t *result_global,
> +                                 pixman_region32_t *global,
> +                                 pixman_region32_t *surf,
> +                                 struct weston_view *view)
> +{
> +       float view_x, view_y;
>

We should have an assert in here that it really is only translation.  Both
for documentation and for sanity.


> +
> +       /* Convert from surface to global coordinates */
> +       pixman_region32_copy(result_global, surf);
> +       weston_view_to_global_float(view, 0, 0, &view_x, &view_y);
> +       pixman_region32_translate(result_global, (int)view_x, (int)view_y);
> +
> +       pixman_region32_intersect(result_global, result_global, global);
> +}
> +
> +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)
> @@ -191,7 +207,6 @@ repaint_region(struct weston_view *ev, struct
> weston_output *output,
>         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, };
> @@ -203,18 +218,8 @@ repaint_region(struct weston_view *ev, struct
> weston_output *output,
>          */
>         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);
> +               region_intersect_only_translation(&final_region, region,
> +                                                 surf_region, ev);
>         } else {
>                 /* If there is no surface region, just use the global
> region */
>                 pixman_region32_copy(&final_region, region);
> --
> 2.0.5
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20150310/d13f564c/attachment-0001.html>


More information about the wayland-devel mailing list