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
