On Tue, Jan 29, 2013 at 02:58:14PM +0300, Vasily Khoruzhick wrote: > Signed-off-by: Vasily Khoruzhick <anars...@gmail.com>
That looks better, thanks. Committed. Kristian > src/pixman-renderer.c | 44 ++++++++++++++++++++++++++++---------------- > 1 file changed, 28 insertions(+), 16 deletions(-) > > diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c > index 908824c..9571f6f 100644 > --- a/src/pixman-renderer.c > +++ b/src/pixman-renderer.c > @@ -104,6 +104,15 @@ pixman_renderer_read_pixels(struct weston_output *output, > return 0; > } > > +static void > +box_translate(pixman_box32_t *dst, const pixman_box32_t *src, int x, int y) > +{ > + dst->x1 = src->x1 + x; > + dst->x2 = src->x2 + x; > + dst->y1 = src->y1 + y; > + dst->y2 = src->y2 + y; > +} > + > #define D2F(v) pixman_double_to_fixed((double)v) > > static void > @@ -115,7 +124,7 @@ repaint_region_complex(struct weston_surface *es, struct > weston_output *output, > struct pixman_surface_state *ps = get_surface_state(es); > struct pixman_output_state *po = get_output_state(output); > int nrects, i; > - pixman_box32_t *rects; > + pixman_box32_t *rects, rect; > > /* Pixman supports only 2D transform matrix, but Weston uses 3D, > * so we're omitting Z coordinate here > @@ -142,15 +151,16 @@ repaint_region_complex(struct weston_surface *es, > struct weston_output *output, > > rects = pixman_region32_rectangles(region, &nrects); > for (i = 0; i < nrects; i++) { > + box_translate(&rect, &rects[i], -output->x, -output->y); > pixman_image_composite32(PIXMAN_OP_OVER, > ps->image, /* src */ > NULL /* mask */, > po->shadow_image, /* dest */ > rects[i].x1, rects[i].y1, /* src_x, src_y */ > 0, 0, /* mask_x, mask_y */ > - rects[i].x1, rects[i].y1, /* dst_x, dst_y */ > - rects[i].x2 - rects[i].x1, /* width */ > - rects[i].y2 - rects[i].y1 /* height */ > + rect.x1, rect.y1, /* dst_x, dst_y */ > + rect.x2 - rect.x1, /* width */ > + rect.y2 - rect.y1 /* height */ > ); > > if (!pr->repaint_debug) > @@ -162,9 +172,9 @@ repaint_region_complex(struct weston_surface *es, struct > weston_output *output, > po->shadow_image, /* dest */ > 0, 0, /* src_x, src_y */ > 0, 0, /* mask_x, mask_y */ > - rects[i].x1, rects[i].y1, /* dest_x, dest_y */ > - rects[i].x2 - rects[i].x1, /* width */ > - rects[i].y2 - rects[i].y1 /* height */); > + rect.x1, rect.y1, /* dest_x, dest_y */ > + rect.x2 - rect.x1, /* width */ > + rect.y2 - rect.y1 /* height */); > } > } > > @@ -178,7 +188,7 @@ repaint_region_simple(struct weston_surface *es, struct > weston_output *output, > struct pixman_surface_state *ps = get_surface_state(es); > struct pixman_output_state *po = get_output_state(output); > pixman_region32_t final_region; > - pixman_box32_t *rects; > + pixman_box32_t *rects, rect; > int nrects, i, src_x, src_y; > float surface_x, surface_y; > > @@ -206,15 +216,16 @@ repaint_region_simple(struct weston_surface *es, struct > weston_output *output, > > for (i = 0; i < nrects; i++) { > weston_surface_from_global(es, rects[i].x1, rects[i].y1, > &src_x, &src_y); > + box_translate(&rect, &rects[i], -output->x, -output->y); > pixman_image_composite32(pixman_op, > ps->image, /* src */ > NULL /* mask */, > po->shadow_image, /* dest */ > src_x, src_y, /* src_x, src_y */ > 0, 0, /* mask_x, mask_y */ > - rects[i].x1, rects[i].y1, /* dest_x, dest_y */ > - rects[i].x2 - rects[i].x1, /* width */ > - rects[i].y2 - rects[i].y1 /* height */); > + rect.x1, rect.y1, /* dest_x, dest_y */ > + rect.x2 - rect.x1, /* width */ > + rect.y2 - rect.y1 /* height */); > > if (!pr->repaint_debug) > continue; > @@ -225,9 +236,9 @@ repaint_region_simple(struct weston_surface *es, struct > weston_output *output, > po->shadow_image, /* dest */ > src_x, src_y, /* src_x, src_y */ > 0, 0, /* mask_x, mask_y */ > - rects[i].x1, rects[i].y1, /* dest_x, dest_y */ > - rects[i].x2 - rects[i].x1, /* width */ > - rects[i].y2 - rects[i].y1 /* height */); > + rect.x1, rect.y1, /* dest_x, dest_y */ > + rect.x2 - rect.x1, /* width */ > + rect.y2 - rect.y1 /* height */); > } > pixman_region32_fini(&final_region); > } > @@ -300,15 +311,16 @@ copy_to_hw_buffer(struct weston_output *output, > pixman_region32_t *region) > struct pixman_output_state *po = get_output_state(output); > int nrects, i, width, height; > pixman_box32_t *rects; > - pixman_box32_t b; > + pixman_box32_t b, rect; > > width = pixman_image_get_width(po->shadow_image); > height = pixman_image_get_height(po->shadow_image); > > rects = pixman_region32_rectangles(region, &nrects); > for (i = 0; i < nrects; i++) { > + box_translate(&rect, &rects[i], -output->x, -output->y); > b = weston_transformed_rect(width, height, > - output->transform, rects[i]); > + output->transform, rect); > > pixman_image_composite32(PIXMAN_OP_SRC, > po->shadow_image, /* src */ > -- > 1.8.1.2 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel