diff options
| author | Ryan Dwyer <RyanDwyer@users.noreply.github.com> | 2018-05-13 11:52:51 +1000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-13 11:52:51 +1000 | 
| commit | 0c96d757d0d5d1762390dd119cbe344e8781c19f (patch) | |
| tree | 34ca494ccdc42799010a00f495b1d19193f20fe7 /sway/tree | |
| parent | 9d607b72532096e469fdaccf474836c310b629ff (diff) | |
| parent | 90e6dfa268461a10d6b95c3a7d74834923392cd6 (diff) | |
| download | sway-0c96d757d0d5d1762390dd119cbe344e8781c19f.tar.xz | |
Merge pull request #1960 from RedSoxFan/edge-borders
Implement hide_edge_borders
Diffstat (limited to 'sway/tree')
| -rw-r--r-- | sway/tree/container.c | 15 | ||||
| -rw-r--r-- | sway/tree/view.c | 59 | 
2 files changed, 64 insertions, 10 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c index db02c69c..fc35a81c 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -547,6 +547,21 @@ 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++; +	} +	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 424c1084..e2cb8a7a 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -100,6 +100,12 @@ void view_autoconfigure(struct sway_view *view) {  		return;  	} +	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;  	switch (view->border) { @@ -110,18 +116,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;  	}  | 
