diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-01-13 20:34:13 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-13 20:34:13 -0500 |
commit | 9ce4d53e789b5a3b3f521585a5a0ff62e341468b (patch) | |
tree | d267455e4f5814b7f8f5eae3f85636c90884bcfd | |
parent | Merge pull request #3415 from RedSoxFan/swaybar-output-improved (diff) | |
parent | swaybar: add status_edge_padding command (diff) | |
download | sway-9ce4d53e789b5a3b3f521585a5a0ff62e341468b.tar.gz sway-9ce4d53e789b5a3b3f521585a5a0ff62e341468b.tar.zst sway-9ce4d53e789b5a3b3f521585a5a0ff62e341468b.zip |
Merge pull request #3408 from RedSoxFan/bar-padding
swaybar: adjustable status padding
-rw-r--r-- | include/sway/commands.h | 2 | ||||
-rw-r--r-- | include/sway/config.h | 2 | ||||
-rw-r--r-- | include/swaybar/config.h | 2 | ||||
-rw-r--r-- | sway/commands/bar.c | 2 | ||||
-rw-r--r-- | sway/commands/bar/status_edge_padding.c | 21 | ||||
-rw-r--r-- | sway/commands/bar/status_padding.c | 21 | ||||
-rw-r--r-- | sway/config/bar.c | 2 | ||||
-rw-r--r-- | sway/ipc-json.c | 4 | ||||
-rw-r--r-- | sway/meson.build | 2 | ||||
-rw-r--r-- | sway/sway-bar.5.scd | 10 | ||||
-rw-r--r-- | swaybar/config.c | 2 | ||||
-rw-r--r-- | swaybar/ipc.c | 11 | ||||
-rw-r--r-- | swaybar/render.c | 17 |
13 files changed, 89 insertions, 9 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h index 7d0ff838..04f93ba9 100644 --- a/include/sway/commands.h +++ b/include/sway/commands.h | |||
@@ -198,6 +198,8 @@ sway_cmd bar_cmd_id; | |||
198 | sway_cmd bar_cmd_position; | 198 | sway_cmd bar_cmd_position; |
199 | sway_cmd bar_cmd_separator_symbol; | 199 | sway_cmd bar_cmd_separator_symbol; |
200 | sway_cmd bar_cmd_status_command; | 200 | sway_cmd bar_cmd_status_command; |
201 | sway_cmd bar_cmd_status_edge_padding; | ||
202 | sway_cmd bar_cmd_status_padding; | ||
201 | sway_cmd bar_cmd_pango_markup; | 203 | sway_cmd bar_cmd_pango_markup; |
202 | sway_cmd bar_cmd_strip_workspace_numbers; | 204 | sway_cmd bar_cmd_strip_workspace_numbers; |
203 | sway_cmd bar_cmd_strip_workspace_name; | 205 | sway_cmd bar_cmd_strip_workspace_name; |
diff --git a/include/sway/config.h b/include/sway/config.h index 29c21afe..a667984d 100644 --- a/include/sway/config.h +++ b/include/sway/config.h | |||
@@ -232,6 +232,8 @@ struct bar_config { | |||
232 | bool verbose; | 232 | bool verbose; |
233 | struct side_gaps gaps; | 233 | struct side_gaps gaps; |
234 | pid_t pid; | 234 | pid_t pid; |
235 | int status_padding; | ||
236 | int status_edge_padding; | ||
235 | struct { | 237 | struct { |
236 | char *background; | 238 | char *background; |
237 | char *statusline; | 239 | char *statusline; |
diff --git a/include/swaybar/config.h b/include/swaybar/config.h index 1f6577bd..add0a1cf 100644 --- a/include/swaybar/config.h +++ b/include/swaybar/config.h | |||
@@ -43,6 +43,8 @@ struct swaybar_config { | |||
43 | struct wl_list outputs; // config_output::link | 43 | struct wl_list outputs; // config_output::link |
44 | bool all_outputs; | 44 | bool all_outputs; |
45 | int height; | 45 | int height; |
46 | int status_padding; | ||
47 | int status_edge_padding; | ||
46 | struct { | 48 | struct { |
47 | int top; | 49 | int top; |
48 | int right; | 50 | int right; |
diff --git a/sway/commands/bar.c b/sway/commands/bar.c index 507ee10a..3e7c1b0f 100644 --- a/sway/commands/bar.c +++ b/sway/commands/bar.c | |||
@@ -23,6 +23,8 @@ static struct cmd_handler bar_handlers[] = { | |||
23 | { "position", bar_cmd_position }, | 23 | { "position", bar_cmd_position }, |
24 | { "separator_symbol", bar_cmd_separator_symbol }, | 24 | { "separator_symbol", bar_cmd_separator_symbol }, |
25 | { "status_command", bar_cmd_status_command }, | 25 | { "status_command", bar_cmd_status_command }, |
26 | { "status_edge_padding", bar_cmd_status_edge_padding }, | ||
27 | { "status_padding", bar_cmd_status_padding }, | ||
26 | { "strip_workspace_name", bar_cmd_strip_workspace_name }, | 28 | { "strip_workspace_name", bar_cmd_strip_workspace_name }, |
27 | { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, | 29 | { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, |
28 | { "tray_bindsym", bar_cmd_tray_bindsym }, | 30 | { "tray_bindsym", bar_cmd_tray_bindsym }, |
diff --git a/sway/commands/bar/status_edge_padding.c b/sway/commands/bar/status_edge_padding.c new file mode 100644 index 00000000..f3b10631 --- /dev/null +++ b/sway/commands/bar/status_edge_padding.c | |||
@@ -0,0 +1,21 @@ | |||
1 | #include <stdlib.h> | ||
2 | #include <string.h> | ||
3 | #include "sway/commands.h" | ||
4 | #include "log.h" | ||
5 | |||
6 | struct cmd_results *bar_cmd_status_edge_padding(int argc, char **argv) { | ||
7 | struct cmd_results *error = NULL; | ||
8 | if ((error = checkarg(argc, "status_edge_padding", EXPECTED_EQUAL_TO, 1))) { | ||
9 | return error; | ||
10 | } | ||
11 | char *end; | ||
12 | int padding = strtol(argv[0], &end, 10); | ||
13 | if (strlen(end) || padding < 0) { | ||
14 | return cmd_results_new(CMD_INVALID, "status_edge_padding", | ||
15 | "Padding must be a positive integer"); | ||
16 | } | ||
17 | config->current_bar->status_edge_padding = padding; | ||
18 | wlr_log(WLR_DEBUG, "Status edge padding on bar %s: %d", | ||
19 | config->current_bar->id, config->current_bar->status_edge_padding); | ||
20 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | ||
21 | } | ||
diff --git a/sway/commands/bar/status_padding.c b/sway/commands/bar/status_padding.c new file mode 100644 index 00000000..13b8eb6b --- /dev/null +++ b/sway/commands/bar/status_padding.c | |||
@@ -0,0 +1,21 @@ | |||
1 | #include <stdlib.h> | ||
2 | #include <string.h> | ||
3 | #include "sway/commands.h" | ||
4 | #include "log.h" | ||
5 | |||
6 | struct cmd_results *bar_cmd_status_padding(int argc, char **argv) { | ||
7 | struct cmd_results *error = NULL; | ||
8 | if ((error = checkarg(argc, "status_padding", EXPECTED_EQUAL_TO, 1))) { | ||
9 | return error; | ||
10 | } | ||
11 | char *end; | ||
12 | int padding = strtol(argv[0], &end, 10); | ||
13 | if (strlen(end) || padding < 0) { | ||
14 | return cmd_results_new(CMD_INVALID, "status_padding", | ||
15 | "Padding must be a positive integer"); | ||
16 | } | ||
17 | config->current_bar->status_padding = padding; | ||
18 | wlr_log(WLR_DEBUG, "Status padding on bar %s: %d", | ||
19 | config->current_bar->id, config->current_bar->status_padding); | ||
20 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | ||
21 | } | ||
diff --git a/sway/config/bar.c b/sway/config/bar.c index 670219f1..101562d1 100644 --- a/sway/config/bar.c +++ b/sway/config/bar.c | |||
@@ -106,6 +106,8 @@ struct bar_config *default_bar_config(void) { | |||
106 | bar->verbose = false; | 106 | bar->verbose = false; |
107 | bar->pid = 0; | 107 | bar->pid = 0; |
108 | bar->modifier = get_modifier_mask_by_name("Mod4"); | 108 | bar->modifier = get_modifier_mask_by_name("Mod4"); |
109 | bar->status_padding = 1; | ||
110 | bar->status_edge_padding = 3; | ||
109 | if (!(bar->mode = strdup("dock"))) { | 111 | if (!(bar->mode = strdup("dock"))) { |
110 | goto cleanup; | 112 | goto cleanup; |
111 | } | 113 | } |
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index 53e0e335..09b65e8d 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -660,6 +660,10 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) { | |||
660 | } | 660 | } |
661 | json_object_object_add(json, "bar_height", | 661 | json_object_object_add(json, "bar_height", |
662 | json_object_new_int(bar->height)); | 662 | json_object_new_int(bar->height)); |
663 | json_object_object_add(json, "status_padding", | ||
664 | json_object_new_int(bar->status_padding)); | ||
665 | json_object_object_add(json, "status_edge_padding", | ||
666 | json_object_new_int(bar->status_edge_padding)); | ||
663 | json_object_object_add(json, "wrap_scroll", | 667 | json_object_object_add(json, "wrap_scroll", |
664 | json_object_new_boolean(bar->wrap_scroll)); | 668 | json_object_new_boolean(bar->wrap_scroll)); |
665 | json_object_object_add(json, "workspace_buttons", | 669 | json_object_object_add(json, "workspace_buttons", |
diff --git a/sway/meson.build b/sway/meson.build index 98676ce0..ab5862c5 100644 --- a/sway/meson.build +++ b/sway/meson.build | |||
@@ -116,6 +116,8 @@ sway_sources = files( | |||
116 | 'commands/bar/position.c', | 116 | 'commands/bar/position.c', |
117 | 'commands/bar/separator_symbol.c', | 117 | 'commands/bar/separator_symbol.c', |
118 | 'commands/bar/status_command.c', | 118 | 'commands/bar/status_command.c', |
119 | 'commands/bar/status_edge_padding.c', | ||
120 | 'commands/bar/status_padding.c', | ||
119 | 'commands/bar/strip_workspace_numbers.c', | 121 | 'commands/bar/strip_workspace_numbers.c', |
120 | 'commands/bar/strip_workspace_name.c', | 122 | 'commands/bar/strip_workspace_name.c', |
121 | 'commands/bar/swaybar_command.c', | 123 | 'commands/bar/swaybar_command.c', |
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd index 2357591d..b345b392 100644 --- a/sway/sway-bar.5.scd +++ b/sway/sway-bar.5.scd | |||
@@ -92,6 +92,16 @@ Sway allows configuring swaybar in the sway configuration file. | |||
92 | *modifier* <Modifier>|none | 92 | *modifier* <Modifier>|none |
93 | Specifies the modifier key that shows a hidden bar. Default is _Mod4_. | 93 | Specifies the modifier key that shows a hidden bar. Default is _Mod4_. |
94 | 94 | ||
95 | *status\_padding* <padding> | ||
96 | Sets the vertical padding that is used for the status line. The default is | ||
97 | _1_. If _padding_ is _0_, blocks will be able to take up the full height of | ||
98 | the bar. This value will be multiplied by the output scale. | ||
99 | |||
100 | *status\_edge\_padding* <padding> | ||
101 | Sets the padding that is used when the status line is at the right edge of | ||
102 | the bar. This value will be multiplied by the output scale. The default is | ||
103 | _3_. | ||
104 | |||
95 | ## TRAY | 105 | ## TRAY |
96 | 106 | ||
97 | Swaybar provides a system tray where third-party applications may place icons. | 107 | Swaybar provides a system tray where third-party applications may place icons. |
diff --git a/swaybar/config.c b/swaybar/config.c index 9cafe061..d4cc9b1a 100644 --- a/swaybar/config.c +++ b/swaybar/config.c | |||
@@ -37,6 +37,8 @@ struct swaybar_config *init_config(void) { | |||
37 | config->workspace_buttons = true; | 37 | config->workspace_buttons = true; |
38 | config->bindings = create_list(); | 38 | config->bindings = create_list(); |
39 | wl_list_init(&config->outputs); | 39 | wl_list_init(&config->outputs); |
40 | config->status_padding = 1; | ||
41 | config->status_edge_padding = 3; | ||
40 | 42 | ||
41 | /* height */ | 43 | /* height */ |
42 | config->height = 0; | 44 | config->height = 0; |
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 8e7a542e..bc5c28b4 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -157,7 +157,7 @@ static bool ipc_parse_config( | |||
157 | json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons; | 157 | json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons; |
158 | json_object *strip_workspace_numbers, *strip_workspace_name; | 158 | json_object *strip_workspace_numbers, *strip_workspace_name; |
159 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol; | 159 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol; |
160 | json_object *outputs, *bindings; | 160 | json_object *outputs, *bindings, *status_padding, *status_edge_padding; |
161 | json_object_object_get_ex(bar_config, "mode", &mode); | 161 | json_object_object_get_ex(bar_config, "mode", &mode); |
162 | json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); | 162 | json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); |
163 | json_object_object_get_ex(bar_config, "position", &position); | 163 | json_object_object_get_ex(bar_config, "position", &position); |
@@ -176,6 +176,9 @@ static bool ipc_parse_config( | |||
176 | json_object_object_get_ex(bar_config, "outputs", &outputs); | 176 | json_object_object_get_ex(bar_config, "outputs", &outputs); |
177 | json_object_object_get_ex(bar_config, "pango_markup", &markup); | 177 | json_object_object_get_ex(bar_config, "pango_markup", &markup); |
178 | json_object_object_get_ex(bar_config, "bindings", &bindings); | 178 | json_object_object_get_ex(bar_config, "bindings", &bindings); |
179 | json_object_object_get_ex(bar_config, "status_padding", &status_padding); | ||
180 | json_object_object_get_ex(bar_config, "status_edge_padding", | ||
181 | &status_edge_padding); | ||
179 | if (status_command) { | 182 | if (status_command) { |
180 | free(config->status_command); | 183 | free(config->status_command); |
181 | config->status_command = strdup(json_object_get_string(status_command)); | 184 | config->status_command = strdup(json_object_get_string(status_command)); |
@@ -209,6 +212,12 @@ static bool ipc_parse_config( | |||
209 | if (bar_height) { | 212 | if (bar_height) { |
210 | config->height = json_object_get_int(bar_height); | 213 | config->height = json_object_get_int(bar_height); |
211 | } | 214 | } |
215 | if (status_padding) { | ||
216 | config->status_padding = json_object_get_int(status_padding); | ||
217 | } | ||
218 | if (status_edge_padding) { | ||
219 | config->status_edge_padding = json_object_get_int(status_edge_padding); | ||
220 | } | ||
212 | if (gaps) { | 221 | if (gaps) { |
213 | json_object *top = json_object_object_get(gaps, "top"); | 222 | json_object *top = json_object_object_get(gaps, "top"); |
214 | if (top) { | 223 | if (top) { |
diff --git a/swaybar/render.c b/swaybar/render.c index 7cbcea07..993c8228 100644 --- a/swaybar/render.c +++ b/swaybar/render.c | |||
@@ -35,7 +35,8 @@ static uint32_t render_status_line_error(cairo_t *cairo, | |||
35 | cairo_set_source_u32(cairo, 0xFF0000FF); | 35 | cairo_set_source_u32(cairo, 0xFF0000FF); |
36 | 36 | ||
37 | int margin = 3 * output->scale; | 37 | int margin = 3 * output->scale; |
38 | int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; | 38 | double ws_vertical_padding = |
39 | output->bar->config->status_padding * output->scale; | ||
39 | 40 | ||
40 | char *font = output->bar->config->font; | 41 | char *font = output->bar->config->font; |
41 | int text_width, text_height; | 42 | int text_width, text_height; |
@@ -71,7 +72,7 @@ static uint32_t render_status_line_text(cairo_t *cairo, | |||
71 | get_text_size(cairo, config->font, &text_width, &text_height, NULL, | 72 | get_text_size(cairo, config->font, &text_width, &text_height, NULL, |
72 | output->scale, config->pango_markup, "%s", text); | 73 | output->scale, config->pango_markup, "%s", text); |
73 | 74 | ||
74 | int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; | 75 | double ws_vertical_padding = config->status_padding * output->scale; |
75 | int margin = 3 * output->scale; | 76 | int margin = 3 * output->scale; |
76 | 77 | ||
77 | uint32_t ideal_height = text_height + ws_vertical_padding * 2; | 78 | uint32_t ideal_height = text_height + ws_vertical_padding * 2; |
@@ -153,7 +154,7 @@ static uint32_t render_status_block(cairo_t *cairo, | |||
153 | output->scale, block->markup, "%s", block->full_text); | 154 | output->scale, block->markup, "%s", block->full_text); |
154 | 155 | ||
155 | int margin = 3 * output->scale; | 156 | int margin = 3 * output->scale; |
156 | double ws_vertical_padding = WS_VERTICAL_PADDING * 2 * output->scale; | 157 | double ws_vertical_padding = config->status_padding * output->scale; |
157 | 158 | ||
158 | int width = text_width; | 159 | int width = text_width; |
159 | if (width < block->min_width) { | 160 | if (width < block->min_width) { |
@@ -193,8 +194,8 @@ static uint32_t render_status_block(cairo_t *cairo, | |||
193 | } | 194 | } |
194 | } | 195 | } |
195 | *x -= sep_block_width; | 196 | *x -= sep_block_width; |
196 | } else { | 197 | } else if (config->status_edge_padding) { |
197 | *x -= margin; | 198 | *x -= config->status_edge_padding * output->scale; |
198 | } | 199 | } |
199 | 200 | ||
200 | uint32_t height = output->height * output->scale; | 201 | uint32_t height = output->height * output->scale; |
@@ -212,8 +213,8 @@ static uint32_t render_status_block(cairo_t *cairo, | |||
212 | } | 213 | } |
213 | 214 | ||
214 | double x_pos = *x; | 215 | double x_pos = *x; |
215 | double y_pos = WS_VERTICAL_PADDING * output->scale; | 216 | double y_pos = ws_vertical_padding; |
216 | double render_height = height - ws_vertical_padding + output->scale; | 217 | double render_height = height - ws_vertical_padding * 2; |
217 | 218 | ||
218 | uint32_t bg_color = block->urgent | 219 | uint32_t bg_color = block->urgent |
219 | ? config->colors.urgent_workspace.background : block->background; | 220 | ? config->colors.urgent_workspace.background : block->background; |
@@ -286,7 +287,7 @@ static uint32_t render_status_block(cairo_t *cairo, | |||
286 | static uint32_t render_status_line_i3bar(cairo_t *cairo, | 287 | static uint32_t render_status_line_i3bar(cairo_t *cairo, |
287 | struct swaybar_output *output, double *x) { | 288 | struct swaybar_output *output, double *x) { |
288 | uint32_t max_height = 0; | 289 | uint32_t max_height = 0; |
289 | bool edge = true; | 290 | bool edge = *x == output->width * output->scale; |
290 | struct i3bar_block *block; | 291 | struct i3bar_block *block; |
291 | wl_list_for_each(block, &output->bar->status->blocks, link) { | 292 | wl_list_for_each(block, &output->bar->status->blocks, link) { |
292 | uint32_t h = render_status_block(cairo, output, block, x, edge); | 293 | uint32_t h = render_status_block(cairo, output, block, x, edge); |