sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit 50205ade9d7b3d4c014fce5364db329c29acfa86
parent cf1e3be22813d343ec177d48a926d7d9104230dd
Author: Kenny Levinsen <kl@kl.wtf>
Date:   Mon,  8 Feb 2021 01:03:44 +0100

transaction: Move centering to view_center_surface

This will allow us to reuse it for centering elsewhere.

Diffstat:
Minclude/sway/tree/view.h | 1+
Msway/desktop/transaction.c | 13+------------
Msway/tree/view.c | 10++++++++++
3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h @@ -317,6 +317,7 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, void view_unmap(struct sway_view *view); void view_update_size(struct sway_view *view, int width, int height); +void view_center_surface(struct sway_view *view); void view_child_init(struct sway_view_child *child, const struct sway_view_child_impl *impl, struct sway_view *view, diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c @@ -255,18 +255,7 @@ static void apply_container_state(struct sway_container *container, // the container. This is important for fullscreen views which // refuse to resize to the size of the output. if (view && view->surface) { - if (view->geometry.width < container->current.content_width) { - container->surface_x = container->current.content_x + - (container->current.content_width - view->geometry.width) / 2; - } else { - container->surface_x = container->current.content_x; - } - if (view->geometry.height < container->current.content_height) { - container->surface_y = container->current.content_y + - (container->current.content_height - view->geometry.height) / 2; - } else { - container->surface_y = container->current.content_y; - } + view_center_surface(view); } if (!container->node.destroying) { diff --git a/sway/tree/view.c b/sway/tree/view.c @@ -887,6 +887,16 @@ void view_update_size(struct sway_view *view, int width, int height) { } } +void view_center_surface(struct sway_view *view) { + struct sway_container *con = view->container; + // We always center the current coordinates rather than the next, as the + // geometry immediately affects the currently active rendering. + con->surface_x = fmax(con->current.content_x, con->current.content_x + + (con->current.content_width - view->geometry.width) / 2); + con->surface_y = fmax(con->current.content_y, con->current.content_y + + (con->current.content_height - view->geometry.height) / 2); +} + static const struct sway_view_child_impl subsurface_impl; static void subsurface_get_root_coords(struct sway_view_child *child,