cmd_border: improve width selection
- 'border toggle' now accepts an optional pixel argument which will be ignored when switching to BS_NONE. - 'border pixel' now defaults to 1 pixel instead of 2. - Calling 'border normal' or 'border pixel' will use the configured default_border_width if one exists. Also applies to floating windows.
This commit is contained in:
parent
a40bcef438
commit
bd7a5ee48a
|
@ -2476,7 +2476,9 @@ To change the border of the current client, you can use +border normal+ to use t
|
||||||
border (including window title), +border pixel 1+ to use a 1-pixel border (no window title)
|
border (including window title), +border pixel 1+ to use a 1-pixel border (no window title)
|
||||||
and +border none+ to make the client borderless.
|
and +border none+ to make the client borderless.
|
||||||
|
|
||||||
There is also +border toggle+ which will toggle the different border styles.
|
There is also +border toggle+ which will toggle the different border styles. The
|
||||||
|
optional pixel argument can be used to specify the border width when switching
|
||||||
|
to the normal and pixel styles.
|
||||||
|
|
||||||
Note that "pixel" refers to logical pixel. On HiDPI displays, a logical pixel
|
Note that "pixel" refers to logical pixel. On HiDPI displays, a logical pixel
|
||||||
may be represented by multiple physical pixels, so +pixel 1+ might not
|
may be represented by multiple physical pixels, so +pixel 1+ might not
|
||||||
|
@ -2484,8 +2486,8 @@ necessarily translate into a single pixel row wide border.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
border normal|pixel [<n>]
|
border normal|pixel|toggle [<n>]
|
||||||
border none|toggle
|
border none
|
||||||
|
|
||||||
# legacy syntax, equivalent to "border pixel 1"
|
# legacy syntax, equivalent to "border pixel 1"
|
||||||
border 1pixel
|
border 1pixel
|
||||||
|
|
|
@ -86,16 +86,16 @@ state DEBUGLOG:
|
||||||
# border normal|pixel [<n>]
|
# border normal|pixel [<n>]
|
||||||
# border none|1pixel|toggle
|
# border none|1pixel|toggle
|
||||||
state BORDER:
|
state BORDER:
|
||||||
border_style = 'normal', 'pixel'
|
border_style = 'normal', 'pixel', 'toggle'
|
||||||
-> BORDER_WIDTH
|
-> BORDER_WIDTH
|
||||||
border_style = 'none', 'toggle'
|
border_style = 'none'
|
||||||
-> call cmd_border($border_style, 0)
|
-> call cmd_border($border_style, 0)
|
||||||
border_style = '1pixel'
|
'1pixel'
|
||||||
-> call cmd_border($border_style, 1)
|
-> call cmd_border("pixel", 1)
|
||||||
|
|
||||||
state BORDER_WIDTH:
|
state BORDER_WIDTH:
|
||||||
end
|
end
|
||||||
-> call cmd_border($border_style, 2)
|
-> call cmd_border($border_style, -1)
|
||||||
border_width = number
|
border_width = number
|
||||||
-> call cmd_border($border_style, &border_width)
|
-> call cmd_border($border_style, &border_width)
|
||||||
|
|
||||||
|
|
|
@ -718,6 +718,26 @@ void cmd_resize_set(I3_CMD, long cwidth, const char *mode_width, long cheight, c
|
||||||
ysuccess(success);
|
ysuccess(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int border_width_from_style(border_style_t border_style, long border_width, Con *con) {
|
||||||
|
if (border_style == BS_NONE) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (border_width >= 0) {
|
||||||
|
return logical_px(border_width);
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool is_floating = con_inside_floating(con) != NULL;
|
||||||
|
/* Load the configured defaults. */
|
||||||
|
if (is_floating && border_style == config.default_floating_border) {
|
||||||
|
return config.default_floating_border_width;
|
||||||
|
} else if (!is_floating && border_style == config.default_border) {
|
||||||
|
return config.default_border_width;
|
||||||
|
} else {
|
||||||
|
/* Use some hardcoded values. */
|
||||||
|
return logical_px(border_style == BS_NORMAL ? 2 : 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Implementation of 'border normal|pixel [<n>]', 'border none|1pixel|toggle'.
|
* Implementation of 'border normal|pixel [<n>]', 'border none|1pixel|toggle'.
|
||||||
*
|
*
|
||||||
|
@ -730,36 +750,24 @@ void cmd_border(I3_CMD, const char *border_style_str, long border_width) {
|
||||||
|
|
||||||
TAILQ_FOREACH(current, &owindows, owindows) {
|
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||||
DLOG("matching: %p / %s\n", current->con, current->con->name);
|
DLOG("matching: %p / %s\n", current->con, current->con->name);
|
||||||
int border_style = current->con->border_style;
|
|
||||||
int con_border_width = border_width;
|
|
||||||
|
|
||||||
|
border_style_t border_style;
|
||||||
if (strcmp(border_style_str, "toggle") == 0) {
|
if (strcmp(border_style_str, "toggle") == 0) {
|
||||||
border_style++;
|
border_style = (current->con->border_style + 1) % 3;
|
||||||
border_style %= 3;
|
} else if (strcmp(border_style_str, "normal") == 0) {
|
||||||
if (border_style == BS_NORMAL)
|
border_style = BS_NORMAL;
|
||||||
con_border_width = 2;
|
} else if (strcmp(border_style_str, "pixel") == 0) {
|
||||||
else if (border_style == BS_NONE)
|
border_style = BS_PIXEL;
|
||||||
con_border_width = 0;
|
} else if (strcmp(border_style_str, "none") == 0) {
|
||||||
else if (border_style == BS_PIXEL)
|
border_style = BS_NONE;
|
||||||
con_border_width = 1;
|
|
||||||
} else {
|
} else {
|
||||||
if (strcmp(border_style_str, "normal") == 0) {
|
ELOG("BUG: called with border_style=%s\n", border_style_str);
|
||||||
border_style = BS_NORMAL;
|
ysuccess(false);
|
||||||
} else if (strcmp(border_style_str, "pixel") == 0) {
|
return;
|
||||||
border_style = BS_PIXEL;
|
|
||||||
} else if (strcmp(border_style_str, "1pixel") == 0) {
|
|
||||||
border_style = BS_PIXEL;
|
|
||||||
con_border_width = 1;
|
|
||||||
} else if (strcmp(border_style_str, "none") == 0) {
|
|
||||||
border_style = BS_NONE;
|
|
||||||
} else {
|
|
||||||
ELOG("BUG: called with border_style=%s\n", border_style_str);
|
|
||||||
ysuccess(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
con_set_border_style(current->con, border_style, logical_px(con_border_width));
|
const int con_border_width = border_width_from_style(border_style, border_width, current->con);
|
||||||
|
con_set_border_style(current->con, border_style, con_border_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_output->needs_tree_render = true;
|
cmd_output->needs_tree_render = true;
|
||||||
|
|
|
@ -28,7 +28,7 @@ is($nodes[0]->{border}, 'normal', 'border style normal');
|
||||||
|
|
||||||
cmd 'border 1pixel';
|
cmd 'border 1pixel';
|
||||||
@nodes = @{get_ws_content($tmp)};
|
@nodes = @{get_ws_content($tmp)};
|
||||||
is($nodes[0]->{border}, 'pixel', 'border style 1pixel');
|
is($nodes[0]->{border}, 'pixel', 'border style pixel');
|
||||||
is($nodes[0]->{current_border_width}, 1, 'border width = 1px');
|
is($nodes[0]->{current_border_width}, 1, 'border width = 1px');
|
||||||
|
|
||||||
cmd 'border none';
|
cmd 'border none';
|
||||||
|
@ -48,7 +48,7 @@ is($nodes[0]->{current_border_width}, 0, 'border width = 0px');
|
||||||
|
|
||||||
cmd 'border toggle';
|
cmd 'border toggle';
|
||||||
@nodes = @{get_ws_content($tmp)};
|
@nodes = @{get_ws_content($tmp)};
|
||||||
is($nodes[0]->{border}, 'pixel', 'border style 1pixel');
|
is($nodes[0]->{border}, 'pixel', 'border style pixel');
|
||||||
is($nodes[0]->{current_border_width}, 1, 'border width = 1px');
|
is($nodes[0]->{current_border_width}, 1, 'border width = 1px');
|
||||||
|
|
||||||
cmd 'border toggle';
|
cmd 'border toggle';
|
||||||
|
@ -56,4 +56,19 @@ cmd 'border toggle';
|
||||||
is($nodes[0]->{border}, 'normal', 'border style back to normal');
|
is($nodes[0]->{border}, 'normal', 'border style back to normal');
|
||||||
is($nodes[0]->{current_border_width}, 2, 'border width = 2px');
|
is($nodes[0]->{current_border_width}, 2, 'border width = 2px');
|
||||||
|
|
||||||
|
cmd 'border toggle 10';
|
||||||
|
@nodes = @{get_ws_content($tmp)};
|
||||||
|
is($nodes[0]->{border}, 'none', 'border style back to none even with width argument');
|
||||||
|
is($nodes[0]->{current_border_width}, 0, 'border width = 0px');
|
||||||
|
|
||||||
|
cmd 'border toggle 10';
|
||||||
|
@nodes = @{get_ws_content($tmp)};
|
||||||
|
is($nodes[0]->{border}, 'pixel', 'border style pixel');
|
||||||
|
is($nodes[0]->{current_border_width}, 10, 'border width = 10px');
|
||||||
|
|
||||||
|
cmd 'border toggle 10';
|
||||||
|
@nodes = @{get_ws_content($tmp)};
|
||||||
|
is($nodes[0]->{border}, 'normal', 'border style back to normal');
|
||||||
|
is($nodes[0]->{current_border_width}, 10, 'border width = 10px');
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue