compositor: Update output state after mode switch

After a mode switch, the output region and transformation matrix need
to be updated. The call to weston_output_move() would do the former but
not the latter, but calling that when the output remains in the same
coordinate doesn't make much sense. Instead, update this state and the
transformation matrix in weston_output_mode_switch().
Ander Conselvan de Oliveira 12 years ago committed by Kristian Høgsberg
parent b77aa062c9
commit 5c38ef4d4a
  1. 2
      src/compositor-drm.c
  2. 20
      src/compositor.c

@ -1041,8 +1041,6 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
/*update output*/ /*update output*/
output->base.current = &drm_mode->base; output->base.current = &drm_mode->base;
output->base.dirty = 1;
weston_output_move(&output->base, output->base.x, output->base.y);
return 0; return 0;
err_gl: err_gl:

@ -84,13 +84,31 @@ sigchld_handler(int signal_number, void *data)
return 1; return 1;
} }
static void
weston_output_transform_init(struct weston_output *output, uint32_t transform);
WL_EXPORT int WL_EXPORT int
weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode) weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode)
{ {
int ret;
if (!output->switch_mode) if (!output->switch_mode)
return -1; return -1;
return output->switch_mode(output, mode); ret = output->switch_mode(output, mode);
if (ret < 0)
return ret;
/* Update output region and transformation matrix */
weston_output_transform_init(output, output->transform);
pixman_region32_init(&output->previous_damage);
pixman_region32_init_rect(&output->region, output->x, output->y,
output->width, output->height);
weston_output_update_matrix(output);
return ret;
} }
WL_EXPORT void WL_EXPORT void

Loading…
Cancel
Save