Merge pull request #3408 from RedSoxFan/bar-padding

swaybar: adjustable status padding
This commit is contained in:
Drew DeVault 2019-01-13 20:34:13 -05:00 committed by GitHub
commit 9ce4d53e78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 89 additions and 9 deletions

View file

@ -198,6 +198,8 @@ sway_cmd bar_cmd_id;
sway_cmd bar_cmd_position; sway_cmd bar_cmd_position;
sway_cmd bar_cmd_separator_symbol; sway_cmd bar_cmd_separator_symbol;
sway_cmd bar_cmd_status_command; sway_cmd bar_cmd_status_command;
sway_cmd bar_cmd_status_edge_padding;
sway_cmd bar_cmd_status_padding;
sway_cmd bar_cmd_pango_markup; sway_cmd bar_cmd_pango_markup;
sway_cmd bar_cmd_strip_workspace_numbers; sway_cmd bar_cmd_strip_workspace_numbers;
sway_cmd bar_cmd_strip_workspace_name; sway_cmd bar_cmd_strip_workspace_name;

View file

@ -232,6 +232,8 @@ struct bar_config {
bool verbose; bool verbose;
struct side_gaps gaps; struct side_gaps gaps;
pid_t pid; pid_t pid;
int status_padding;
int status_edge_padding;
struct { struct {
char *background; char *background;
char *statusline; char *statusline;

View file

@ -43,6 +43,8 @@ struct swaybar_config {
struct wl_list outputs; // config_output::link struct wl_list outputs; // config_output::link
bool all_outputs; bool all_outputs;
int height; int height;
int status_padding;
int status_edge_padding;
struct { struct {
int top; int top;
int right; int right;

View file

@ -23,6 +23,8 @@ static struct cmd_handler bar_handlers[] = {
{ "position", bar_cmd_position }, { "position", bar_cmd_position },
{ "separator_symbol", bar_cmd_separator_symbol }, { "separator_symbol", bar_cmd_separator_symbol },
{ "status_command", bar_cmd_status_command }, { "status_command", bar_cmd_status_command },
{ "status_edge_padding", bar_cmd_status_edge_padding },
{ "status_padding", bar_cmd_status_padding },
{ "strip_workspace_name", bar_cmd_strip_workspace_name }, { "strip_workspace_name", bar_cmd_strip_workspace_name },
{ "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers },
{ "tray_bindsym", bar_cmd_tray_bindsym }, { "tray_bindsym", bar_cmd_tray_bindsym },

View file

@ -0,0 +1,21 @@
#include <stdlib.h>
#include <string.h>
#include "sway/commands.h"
#include "log.h"
struct cmd_results *bar_cmd_status_edge_padding(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "status_edge_padding", EXPECTED_EQUAL_TO, 1))) {
return error;
}
char *end;
int padding = strtol(argv[0], &end, 10);
if (strlen(end) || padding < 0) {
return cmd_results_new(CMD_INVALID, "status_edge_padding",
"Padding must be a positive integer");
}
config->current_bar->status_edge_padding = padding;
wlr_log(WLR_DEBUG, "Status edge padding on bar %s: %d",
config->current_bar->id, config->current_bar->status_edge_padding);
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}

View file

@ -0,0 +1,21 @@
#include <stdlib.h>
#include <string.h>
#include "sway/commands.h"
#include "log.h"
struct cmd_results *bar_cmd_status_padding(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "status_padding", EXPECTED_EQUAL_TO, 1))) {
return error;
}
char *end;
int padding = strtol(argv[0], &end, 10);
if (strlen(end) || padding < 0) {
return cmd_results_new(CMD_INVALID, "status_padding",
"Padding must be a positive integer");
}
config->current_bar->status_padding = padding;
wlr_log(WLR_DEBUG, "Status padding on bar %s: %d",
config->current_bar->id, config->current_bar->status_padding);
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}

View file

@ -106,6 +106,8 @@ struct bar_config *default_bar_config(void) {
bar->verbose = false; bar->verbose = false;
bar->pid = 0; bar->pid = 0;
bar->modifier = get_modifier_mask_by_name("Mod4"); bar->modifier = get_modifier_mask_by_name("Mod4");
bar->status_padding = 1;
bar->status_edge_padding = 3;
if (!(bar->mode = strdup("dock"))) { if (!(bar->mode = strdup("dock"))) {
goto cleanup; goto cleanup;
} }

View file

@ -660,6 +660,10 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
} }
json_object_object_add(json, "bar_height", json_object_object_add(json, "bar_height",
json_object_new_int(bar->height)); json_object_new_int(bar->height));
json_object_object_add(json, "status_padding",
json_object_new_int(bar->status_padding));
json_object_object_add(json, "status_edge_padding",
json_object_new_int(bar->status_edge_padding));
json_object_object_add(json, "wrap_scroll", json_object_object_add(json, "wrap_scroll",
json_object_new_boolean(bar->wrap_scroll)); json_object_new_boolean(bar->wrap_scroll));
json_object_object_add(json, "workspace_buttons", json_object_object_add(json, "workspace_buttons",

View file

@ -116,6 +116,8 @@ sway_sources = files(
'commands/bar/position.c', 'commands/bar/position.c',
'commands/bar/separator_symbol.c', 'commands/bar/separator_symbol.c',
'commands/bar/status_command.c', 'commands/bar/status_command.c',
'commands/bar/status_edge_padding.c',
'commands/bar/status_padding.c',
'commands/bar/strip_workspace_numbers.c', 'commands/bar/strip_workspace_numbers.c',
'commands/bar/strip_workspace_name.c', 'commands/bar/strip_workspace_name.c',
'commands/bar/swaybar_command.c', 'commands/bar/swaybar_command.c',

View file

@ -92,6 +92,16 @@ Sway allows configuring swaybar in the sway configuration file.
*modifier* <Modifier>|none *modifier* <Modifier>|none
Specifies the modifier key that shows a hidden bar. Default is _Mod4_. Specifies the modifier key that shows a hidden bar. Default is _Mod4_.
*status\_padding* <padding>
Sets the vertical padding that is used for the status line. The default is
_1_. If _padding_ is _0_, blocks will be able to take up the full height of
the bar. This value will be multiplied by the output scale.
*status\_edge\_padding* <padding>
Sets the padding that is used when the status line is at the right edge of
the bar. This value will be multiplied by the output scale. The default is
_3_.
## TRAY ## TRAY
Swaybar provides a system tray where third-party applications may place icons. Swaybar provides a system tray where third-party applications may place icons.

View file

@ -37,6 +37,8 @@ struct swaybar_config *init_config(void) {
config->workspace_buttons = true; config->workspace_buttons = true;
config->bindings = create_list(); config->bindings = create_list();
wl_list_init(&config->outputs); wl_list_init(&config->outputs);
config->status_padding = 1;
config->status_edge_padding = 3;
/* height */ /* height */
config->height = 0; config->height = 0;

View file

@ -157,7 +157,7 @@ static bool ipc_parse_config(
json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons; json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons;
json_object *strip_workspace_numbers, *strip_workspace_name; json_object *strip_workspace_numbers, *strip_workspace_name;
json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol; json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol;
json_object *outputs, *bindings; json_object *outputs, *bindings, *status_padding, *status_edge_padding;
json_object_object_get_ex(bar_config, "mode", &mode); json_object_object_get_ex(bar_config, "mode", &mode);
json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); json_object_object_get_ex(bar_config, "hidden_state", &hidden_state);
json_object_object_get_ex(bar_config, "position", &position); json_object_object_get_ex(bar_config, "position", &position);
@ -176,6 +176,9 @@ static bool ipc_parse_config(
json_object_object_get_ex(bar_config, "outputs", &outputs); json_object_object_get_ex(bar_config, "outputs", &outputs);
json_object_object_get_ex(bar_config, "pango_markup", &markup); json_object_object_get_ex(bar_config, "pango_markup", &markup);
json_object_object_get_ex(bar_config, "bindings", &bindings); json_object_object_get_ex(bar_config, "bindings", &bindings);
json_object_object_get_ex(bar_config, "status_padding", &status_padding);
json_object_object_get_ex(bar_config, "status_edge_padding",
&status_edge_padding);
if (status_command) { if (status_command) {
free(config->status_command); free(config->status_command);
config->status_command = strdup(json_object_get_string(status_command)); config->status_command = strdup(json_object_get_string(status_command));
@ -209,6 +212,12 @@ static bool ipc_parse_config(
if (bar_height) { if (bar_height) {
config->height = json_object_get_int(bar_height); config->height = json_object_get_int(bar_height);
} }
if (status_padding) {
config->status_padding = json_object_get_int(status_padding);
}
if (status_edge_padding) {
config->status_edge_padding = json_object_get_int(status_edge_padding);
}
if (gaps) { if (gaps) {
json_object *top = json_object_object_get(gaps, "top"); json_object *top = json_object_object_get(gaps, "top");
if (top) { if (top) {

View file

@ -35,7 +35,8 @@ static uint32_t render_status_line_error(cairo_t *cairo,
cairo_set_source_u32(cairo, 0xFF0000FF); cairo_set_source_u32(cairo, 0xFF0000FF);
int margin = 3 * output->scale; int margin = 3 * output->scale;
int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; double ws_vertical_padding =
output->bar->config->status_padding * output->scale;
char *font = output->bar->config->font; char *font = output->bar->config->font;
int text_width, text_height; int text_width, text_height;
@ -71,7 +72,7 @@ static uint32_t render_status_line_text(cairo_t *cairo,
get_text_size(cairo, config->font, &text_width, &text_height, NULL, get_text_size(cairo, config->font, &text_width, &text_height, NULL,
output->scale, config->pango_markup, "%s", text); output->scale, config->pango_markup, "%s", text);
int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; double ws_vertical_padding = config->status_padding * output->scale;
int margin = 3 * output->scale; int margin = 3 * output->scale;
uint32_t ideal_height = text_height + ws_vertical_padding * 2; uint32_t ideal_height = text_height + ws_vertical_padding * 2;
@ -153,7 +154,7 @@ static uint32_t render_status_block(cairo_t *cairo,
output->scale, block->markup, "%s", block->full_text); output->scale, block->markup, "%s", block->full_text);
int margin = 3 * output->scale; int margin = 3 * output->scale;
double ws_vertical_padding = WS_VERTICAL_PADDING * 2 * output->scale; double ws_vertical_padding = config->status_padding * output->scale;
int width = text_width; int width = text_width;
if (width < block->min_width) { if (width < block->min_width) {
@ -193,8 +194,8 @@ static uint32_t render_status_block(cairo_t *cairo,
} }
} }
*x -= sep_block_width; *x -= sep_block_width;
} else { } else if (config->status_edge_padding) {
*x -= margin; *x -= config->status_edge_padding * output->scale;
} }
uint32_t height = output->height * output->scale; uint32_t height = output->height * output->scale;
@ -212,8 +213,8 @@ static uint32_t render_status_block(cairo_t *cairo,
} }
double x_pos = *x; double x_pos = *x;
double y_pos = WS_VERTICAL_PADDING * output->scale; double y_pos = ws_vertical_padding;
double render_height = height - ws_vertical_padding + output->scale; double render_height = height - ws_vertical_padding * 2;
uint32_t bg_color = block->urgent uint32_t bg_color = block->urgent
? config->colors.urgent_workspace.background : block->background; ? config->colors.urgent_workspace.background : block->background;
@ -286,7 +287,7 @@ static uint32_t render_status_block(cairo_t *cairo,
static uint32_t render_status_line_i3bar(cairo_t *cairo, static uint32_t render_status_line_i3bar(cairo_t *cairo,
struct swaybar_output *output, double *x) { struct swaybar_output *output, double *x) {
uint32_t max_height = 0; uint32_t max_height = 0;
bool edge = true; bool edge = *x == output->width * output->scale;
struct i3bar_block *block; struct i3bar_block *block;
wl_list_for_each(block, &output->bar->status->blocks, link) { wl_list_for_each(block, &output->bar->status->blocks, link) {
uint32_t h = render_status_block(cairo, output, block, x, edge); uint32_t h = render_status_block(cairo, output, block, x, edge);