shell: Scale fullscreen surface without cropping them, center on output

Kristian Høgsberg 13 years ago
parent fe89f07e33
commit 240dfeb0fe
  1. 22
      src/shell.c

@ -1400,7 +1400,7 @@ shell_configure_fullscreen(struct shell_surface *shsurf)
struct weston_output *output = shsurf->fullscreen_output;
struct weston_surface *surface = shsurf->surface;
struct weston_matrix *matrix;
float scale;
float scale, output_aspect, surface_aspect, x, y;
if (!shsurf->fullscreen.black_surface)
shsurf->fullscreen.black_surface =
@ -1421,12 +1421,26 @@ shell_configure_fullscreen(struct shell_surface *shsurf)
case WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE:
matrix = &shsurf->fullscreen.transform.matrix;
weston_matrix_init(matrix);
scale = (float)output->current->width/(float)surface->geometry.width;
output_aspect = (float) output->current->width /
(float) output->current->height;
surface_aspect = (float) surface->geometry.width /
(float) surface->geometry.height;
if (output_aspect < surface_aspect)
scale = (float) output->current->width /
(float) surface->geometry.width;
else
scale = (float) output->current->height /
(float) surface->geometry.height;
weston_matrix_scale(matrix, scale, scale, 1);
wl_list_remove(&shsurf->fullscreen.transform.link);
wl_list_insert(surface->geometry.transformation_list.prev,
wl_list_insert(&surface->geometry.transformation_list,
&shsurf->fullscreen.transform.link);
weston_surface_set_position(surface, output->x, output->y);
x = output->x + (output->current->width - surface->geometry.width * scale) / 2;
y = output->y + (output->current->height - surface->geometry.height * scale) / 2;
weston_surface_set_position(surface, x, y);
break;
case WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER:
if (shell_surface_is_top_fullscreen(shsurf)) {

Loading…
Cancel
Save