shell: Scale fullscreen surface without cropping them, center on output
This commit is contained in:
+18
-4
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user