From 22d10497ca737db1a5d3ef7a8e7e37ad1ce0d00b Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sun, 17 Oct 2021 22:09:34 +0000 Subject: [PATCH] view: Add 'center' option to SnapToEdge Similar to fullscreen, but not a separate state, and with gaps. Signed-off-by: Joshua Ashton --- src/view.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/view.c b/src/view.c index 71c6acc7..62886b80 100644 --- a/src/view.c +++ b/src/view.c @@ -271,6 +271,7 @@ enum view_edge { VIEW_EDGE_RIGHT, VIEW_EDGE_UP, VIEW_EDGE_DOWN, + VIEW_EDGE_CENTER, }; static enum view_edge @@ -281,6 +282,7 @@ view_edge_invert(enum view_edge edge) case VIEW_EDGE_RIGHT: return VIEW_EDGE_LEFT; case VIEW_EDGE_UP: return VIEW_EDGE_DOWN; case VIEW_EDGE_DOWN: return VIEW_EDGE_UP; + case VIEW_EDGE_CENTER: case VIEW_EDGE_INVALID: default: return VIEW_EDGE_INVALID; @@ -298,6 +300,8 @@ view_edge_parse(const char *direction) return VIEW_EDGE_RIGHT; } else if (!strcasecmp(direction, "down")) { return VIEW_EDGE_DOWN; + } else if (!strcasecmp(direction, "center")) { + return VIEW_EDGE_CENTER; } else { return VIEW_EDGE_INVALID; } @@ -327,6 +331,9 @@ view_get_edge_snap_box(struct view *view, struct output *output, enum view_edge base_height = (usable.height - 3 * rc.gap) / 2; break; default: + case VIEW_EDGE_CENTER: + base_width = usable.width - 2 * rc.gap; + base_height = usable.height - 2 * rc.gap; break; } struct wlr_box dst = { @@ -374,7 +381,7 @@ view_snap_to_edge(struct view *view, const char *direction) output_from_wlr_output(view->server, wlr_output_layout_output_at(view->server->output_layout, dst.x, dst.y)); - if (new_output == output || !new_output) { + if (new_output == output || !new_output || edge == VIEW_EDGE_CENTER) { return; }