From 3db7fc2bb2c35d545b2a0a72f5554af833bd447f Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Fri, 11 May 2018 18:44:56 -0400 Subject: Implement hide_edge_borders --- sway/tree/view.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 10 deletions(-) (limited to 'sway/tree') diff --git a/sway/tree/view.c b/sway/tree/view.c index afd7eade..c2496f0d 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -100,6 +100,9 @@ void view_autoconfigure(struct sway_view *view) { return; } + struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); + int other_views = ws->children->length - 1; + double x, y, width, height; x = y = width = height = 0; switch (view->border) { @@ -110,18 +113,51 @@ void view_autoconfigure(struct sway_view *view) { height = view->swayc->height; break; case B_PIXEL: - x = view->swayc->x + view->border_thickness; - y = view->swayc->y + view->border_thickness; - width = view->swayc->width - view->border_thickness * 2; - height = view->swayc->height - view->border_thickness * 2; + if (view->swayc->layout > L_VERT + || config->hide_edge_borders == E_NONE + || config->hide_edge_borders == E_HORIZONTAL + || (config->hide_edge_borders == E_SMART && other_views)) { + x = view->swayc->x + view->border_thickness; + width = view->swayc->width - view->border_thickness * 2; + } else { + x = view->swayc->x; + width = view->swayc->width; + } + if (view->swayc->layout > L_VERT + || config->hide_edge_borders == E_NONE + || config->hide_edge_borders == E_VERTICAL + || (config->hide_edge_borders == E_SMART && other_views)) { + y = view->swayc->y + view->border_thickness; + height = view->swayc->height - view->border_thickness * 2; + } else { + y = view->swayc->y; + height = view->swayc->height; + } break; case B_NORMAL: - // Height is: border + title height + border + view height + border - x = view->swayc->x + view->border_thickness; - y = view->swayc->y + config->font_height + view->border_thickness * 2; - width = view->swayc->width - view->border_thickness * 2; - height = view->swayc->height - config->font_height - - view->border_thickness * 3; + if (view->swayc->layout > L_VERT + || config->hide_edge_borders == E_NONE + || config->hide_edge_borders == E_HORIZONTAL + || (config->hide_edge_borders == E_SMART && other_views)) { + x = view->swayc->x + view->border_thickness; + width = view->swayc->width - view->border_thickness * 2; + } else { + x = view->swayc->x; + width = view->swayc->width; + } + if (view->swayc->layout > L_VERT + || config->hide_edge_borders == E_NONE + || config->hide_edge_borders == E_VERTICAL + || (config->hide_edge_borders == E_SMART && other_views)) { + // Height is: border + title height + border + view height + border + y = view->swayc->y + config->font_height + + view->border_thickness * 2; + height = view->swayc->height - config->font_height + - view->border_thickness * 3; + } else { + y = view->swayc->y; + height = view->swayc->height; + } break; } -- cgit v1.2.3 From e3625d8f337d61c5d2ba1266679b9053168cd0ae Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sat, 12 May 2018 12:37:48 -0400 Subject: Count descendant views for hide_edge_borders smart --- include/sway/tree/container.h | 3 +++ sway/desktop/output.c | 8 ++++---- sway/tree/container.c | 14 ++++++++++++++ sway/tree/view.c | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) (limited to 'sway/tree') diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index 61ab7ca1..ec9e2385 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -187,6 +187,9 @@ bool container_has_anscestor(struct sway_container *container, bool container_has_child(struct sway_container *con, struct sway_container *child); +int container_count_descendants_of_type(struct sway_container *con, + enum sway_container_type type); + void container_create_notify(struct sway_container *container); void container_damage_whole(struct sway_container *container); diff --git a/sway/desktop/output.c b/sway/desktop/output.c index c3bff03d..b99e9a91 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -322,8 +322,8 @@ static void render_container_simple_border_normal(struct sway_output *output, struct wlr_box box; float color[4]; - struct sway_container *workspace = container_parent(con, C_WORKSPACE); - int other_views = workspace->children->length - 1; + struct sway_container *ws = container_parent(con, C_WORKSPACE); + int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; if (config->hide_edge_borders != E_VERTICAL && config->hide_edge_borders != E_BOTH @@ -424,8 +424,8 @@ static void render_container_simple_border_pixel(struct sway_output *output, struct wlr_box box; float color[4]; - struct sway_container *workspace = container_parent(con, C_WORKSPACE); - int other_views = workspace->children->length - 1; + struct sway_container *ws = container_parent(con, C_WORKSPACE); + int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; if (config->hide_edge_borders != E_VERTICAL && config->hide_edge_borders != E_BOTH diff --git a/sway/tree/container.c b/sway/tree/container.c index db02c69c..c26afdd8 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -547,6 +547,20 @@ bool container_has_child(struct sway_container *con, return container_find(con, find_child_func, child); } +int container_count_descendants_of_type(struct sway_container *con, + enum sway_container_type type) { + int children = 0; + if (con->type == type) { + children++; + } else if (con->children) { + for (int i = 0; i < con->children->length; i++) { + struct sway_container *child = con->children->items[i]; + children += container_count_descendants_of_type(child, type); + } + } + return children; +} + void container_damage_whole(struct sway_container *container) { for (int i = 0; i < root_container.children->length; ++i) { struct sway_container *cont = root_container.children->items[i]; diff --git a/sway/tree/view.c b/sway/tree/view.c index c2496f0d..5695a16b 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -101,7 +101,7 @@ void view_autoconfigure(struct sway_view *view) { } struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); - int other_views = ws->children->length - 1; + int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; double x, y, width, height; x = y = width = height = 0; -- cgit v1.2.3 From 2adf23c2a3b80f19fd5e9114192a3dbb88ade2be Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sat, 12 May 2018 12:56:26 -0400 Subject: Only count views for hide_edge_borders smart --- sway/desktop/output.c | 14 ++++++++++---- sway/tree/view.c | 7 +++++-- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'sway/tree') diff --git a/sway/desktop/output.c b/sway/desktop/output.c index b99e9a91..974cd56c 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -322,8 +322,11 @@ static void render_container_simple_border_normal(struct sway_output *output, struct wlr_box box; float color[4]; - struct sway_container *ws = container_parent(con, C_WORKSPACE); - int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; + int other_views = 1; + if (config->hide_edge_borders == E_SMART) { + struct sway_container *ws = container_parent(con, C_WORKSPACE); + other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; + } if (config->hide_edge_borders != E_VERTICAL && config->hide_edge_borders != E_BOTH @@ -424,8 +427,11 @@ static void render_container_simple_border_pixel(struct sway_output *output, struct wlr_box box; float color[4]; - struct sway_container *ws = container_parent(con, C_WORKSPACE); - int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; + int other_views = 1; + if (config->hide_edge_borders == E_SMART) { + struct sway_container *ws = container_parent(con, C_WORKSPACE); + other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; + } if (config->hide_edge_borders != E_VERTICAL && config->hide_edge_borders != E_BOTH diff --git a/sway/tree/view.c b/sway/tree/view.c index ae8709ba..e2cb8a7a 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -100,8 +100,11 @@ void view_autoconfigure(struct sway_view *view) { return; } - struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); - int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; + int other_views = 1; + if (config->hide_edge_borders == E_SMART) { + struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); + other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; + } double x, y, width, height; x = y = width = height = 0; -- cgit v1.2.3 From 0f43eac5dcd3650ad7ecf84cf42da902170174e8 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sat, 12 May 2018 21:19:55 -0400 Subject: Fix recursion when counting descendants of a type --- sway/tree/container.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'sway/tree') diff --git a/sway/tree/container.c b/sway/tree/container.c index c26afdd8..fc35a81c 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -552,7 +552,8 @@ int container_count_descendants_of_type(struct sway_container *con, int children = 0; if (con->type == type) { children++; - } else if (con->children) { + } + if (con->children) { for (int i = 0; i < con->children->length; i++) { struct sway_container *child = con->children->items[i]; children += container_count_descendants_of_type(child, type); -- cgit v1.2.3