Fix the pixman renderer with respect to output transforms

Commit fa1b3055 introducted a regression in the pixman renderer.  In
particular, it would not draw properly with any output transform other
than normal, 180, 180-flipped, or 270-flipped.  This patch fixes this
regression.  The weston-scalar program appears to work normally at all
rotations with this patch.  Therefore, this patch should fix the regression
while maintaining the added functionality from fa1b3055.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
dev
Jason Ekstrand 11 years ago committed by Kristian Høgsberg
parent 97b52203aa
commit 50fba97ec6
  1. 12
      src/pixman-renderer.c

@ -276,12 +276,8 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
pixman_double_to_fixed(viewport_y)); pixman_double_to_fixed(viewport_y));
} }
pixman_transform_scale(&transform, NULL, fw = pixman_int_to_fixed(ev->surface->width);
pixman_double_to_fixed(ev->surface->buffer_viewport.scale), fh = pixman_int_to_fixed(ev->surface->height);
pixman_double_to_fixed(ev->surface->buffer_viewport.scale));
fw = pixman_int_to_fixed(pixman_image_get_width(ps->image));
fh = pixman_int_to_fixed(pixman_image_get_height(ps->image));
switch (ev->surface->buffer_viewport.transform) { switch (ev->surface->buffer_viewport.transform) {
case WL_OUTPUT_TRANSFORM_FLIPPED: case WL_OUTPUT_TRANSFORM_FLIPPED:
@ -317,6 +313,10 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
break; break;
} }
pixman_transform_scale(&transform, NULL,
pixman_double_to_fixed(ev->surface->buffer_viewport.scale),
pixman_double_to_fixed(ev->surface->buffer_viewport.scale));
pixman_image_set_transform(ps->image, &transform); pixman_image_set_transform(ps->image, &transform);
if (ev->transform.enabled || output->current_scale != ev->surface->buffer_viewport.scale) if (ev->transform.enabled || output->current_scale != ev->surface->buffer_viewport.scale)

Loading…
Cancel
Save