mirror of
https://codeberg.org/dnkl/yambar.git
synced 2025-04-19 19:25:41 +02:00
bar: add border.{left,right,top,bottom}-width
This allows you to configure the width of each side of the border individually. border.width can still be used, and will set all four borders to the same width. Closes #77
This commit is contained in:
parent
8c095eb423
commit
b97ba80aea
8 changed files with 84 additions and 25 deletions
|
@ -12,6 +12,11 @@
|
|||
|
||||
* i3: `persistent` attribute, allowing persistent workspaces
|
||||
(https://codeberg.org/dnkl/yambar/issues/72).
|
||||
* bar: `border.{left,right,top,bottom}-width`, allowing the width of
|
||||
each side of the border to be configured
|
||||
individually. `border.width` is now a short-hand for setting all
|
||||
four borders to the same value
|
||||
(https://codeberg.org/dnkl/yambar/issues/77).
|
||||
|
||||
|
||||
### Changed
|
||||
|
|
48
bar/bar.c
48
bar/bar.c
|
@ -67,16 +67,28 @@ expose(const struct bar *_bar)
|
|||
PIXMAN_OP_SRC, pix, &bar->background, 1,
|
||||
&(pixman_rectangle16_t){0, 0, bar->width, bar->height_with_border});
|
||||
|
||||
if (bar->border.width > 0) {
|
||||
pixman_image_fill_rectangles(
|
||||
PIXMAN_OP_OVER, pix, &bar->border.color, 4,
|
||||
(pixman_rectangle16_t[]){
|
||||
{0, 0, bar->width, bar->border.width},
|
||||
{0, 0, bar->border.width, bar->height_with_border},
|
||||
{bar->width - bar->border.width, 0, bar->border.width, bar->height_with_border},
|
||||
{0, bar->height_with_border - bar->border.width, bar->width, bar->border.width},
|
||||
/* Left */
|
||||
{0, 0, bar->border.left_width, bar->height_with_border},
|
||||
|
||||
/* Right */
|
||||
{bar->width - bar->border.right_width,
|
||||
0, bar->border.right_width, bar->height_with_border},
|
||||
|
||||
/* Top */
|
||||
{bar->border.left_width,
|
||||
0,
|
||||
bar->width - bar->border.left_width - bar->border.right_width,
|
||||
bar->border.top_width},
|
||||
|
||||
/* Bottom */
|
||||
{bar->border.left_width,
|
||||
bar->height_with_border - bar->border.bottom_width,
|
||||
bar->width - bar->border.left_width - bar->border.right_width,
|
||||
bar->border.bottom_width},
|
||||
});
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < bar->left.count; i++) {
|
||||
struct module *m = bar->left.mods[i];
|
||||
|
@ -105,8 +117,8 @@ expose(const struct bar *_bar)
|
|||
int left_width, center_width, right_width;
|
||||
calculate_widths(bar, &left_width, ¢er_width, &right_width);
|
||||
|
||||
int y = bar->border.width;
|
||||
int x = bar->border.width + bar->left_margin - bar->left_spacing;
|
||||
int y = bar->border.top_width;
|
||||
int x = bar->border.left_width + bar->left_margin - bar->left_spacing;
|
||||
for (size_t i = 0; i < bar->left.count; i++) {
|
||||
const struct exposable *e = bar->left.exps[i];
|
||||
e->expose(e, pix, x + bar->left_spacing, y, bar->height);
|
||||
|
@ -124,7 +136,7 @@ expose(const struct bar *_bar)
|
|||
right_width +
|
||||
bar->left_spacing +
|
||||
bar->right_margin +
|
||||
bar->border.width);
|
||||
bar->border.right_width);
|
||||
|
||||
for (size_t i = 0; i < bar->right.count; i++) {
|
||||
const struct exposable *e = bar->right.exps[i];
|
||||
|
@ -156,9 +168,9 @@ on_mouse(struct bar *_bar, enum mouse_event event, enum mouse_button btn,
|
|||
{
|
||||
struct private *bar = _bar->private;
|
||||
|
||||
if ((y < bar->border.width ||
|
||||
y >= (bar->height_with_border - bar->border.width)) ||
|
||||
(x < bar->border.width || x >= (bar->width - bar->border.width)))
|
||||
if ((y < bar->border.top_width ||
|
||||
y >= (bar->height_with_border - bar->border.bottom_width)) ||
|
||||
(x < bar->border.left_width || x >= (bar->width - bar->border.right_width)))
|
||||
{
|
||||
set_cursor(_bar, "left_ptr");
|
||||
return;
|
||||
|
@ -167,7 +179,7 @@ on_mouse(struct bar *_bar, enum mouse_event event, enum mouse_button btn,
|
|||
int left_width, center_width, right_width;
|
||||
calculate_widths(bar, &left_width, ¢er_width, &right_width);
|
||||
|
||||
int mx = bar->border.width + bar->left_margin - bar->left_spacing;
|
||||
int mx = bar->border.left_width + bar->left_margin - bar->left_spacing;
|
||||
for (size_t i = 0; i < bar->left.count; i++) {
|
||||
struct exposable *e = bar->left.exps[i];
|
||||
|
||||
|
@ -198,7 +210,7 @@ on_mouse(struct bar *_bar, enum mouse_event event, enum mouse_button btn,
|
|||
mx = bar->width - (right_width
|
||||
+ bar->left_spacing +
|
||||
bar->right_margin +
|
||||
bar->border.width);
|
||||
bar->border.right_width);
|
||||
|
||||
for (size_t i = 0; i < bar->right.count; i++) {
|
||||
struct exposable *e = bar->right.exps[i];
|
||||
|
@ -236,7 +248,8 @@ run(struct bar *_bar)
|
|||
{
|
||||
struct private *bar = _bar->private;
|
||||
|
||||
bar->height_with_border = bar->height + 2 * bar->border.width;
|
||||
bar->height_with_border =
|
||||
bar->height + bar->border.top_width + bar->border.bottom_width;
|
||||
|
||||
if (!bar->backend.iface->setup(_bar)) {
|
||||
bar->backend.iface->cleanup(_bar);
|
||||
|
@ -409,7 +422,10 @@ bar_new(const struct bar_config *config)
|
|||
priv->left_margin = config->left_margin;
|
||||
priv->right_margin = config->right_margin;
|
||||
priv->trackpad_sensitivity = config->trackpad_sensitivity;
|
||||
priv->border.width = config->border.width;
|
||||
priv->border.left_width = config->border.left_width;
|
||||
priv->border.right_width = config->border.right_width;
|
||||
priv->border.top_width = config->border.top_width;
|
||||
priv->border.bottom_width = config->border.bottom_width;
|
||||
priv->border.color = config->border.color;
|
||||
priv->border.left_margin = config->border.left_margin;
|
||||
priv->border.right_margin = config->border.right_margin;
|
||||
|
|
|
@ -30,7 +30,8 @@ struct bar_config {
|
|||
pixman_color_t background;
|
||||
|
||||
struct {
|
||||
int width;
|
||||
int left_width, right_width;
|
||||
int top_width, bottom_width;
|
||||
pixman_color_t color;
|
||||
int left_margin, right_margin;
|
||||
int top_margin, bottom_margin;
|
||||
|
|
|
@ -15,7 +15,8 @@ struct private {
|
|||
pixman_color_t background;
|
||||
|
||||
struct {
|
||||
int width;
|
||||
int left_width, right_width;
|
||||
int top_width, bottom_width;
|
||||
pixman_color_t color;
|
||||
int left_margin, right_margin;
|
||||
int top_margin, bottom_margin;
|
||||
|
|
|
@ -891,7 +891,7 @@ update_size(struct wayland_backend *backend)
|
|||
int height = bar->height_with_border;
|
||||
height /= scale;
|
||||
height *= scale;
|
||||
bar->height = height - 2 * bar->border.width;
|
||||
bar->height = height - bar->border.top_width - bar->border.bottom_width;
|
||||
bar->height_with_border = height;
|
||||
|
||||
zwlr_layer_surface_v1_set_size(
|
||||
|
|
|
@ -371,6 +371,10 @@ verify_bar_border(keychain_t *chain, const struct yml_node *node)
|
|||
{
|
||||
static const struct attr_info attrs[] = {
|
||||
{"width", false, &conf_verify_int},
|
||||
{"left-width", false, &conf_verify_int},
|
||||
{"right-width", false, &conf_verify_int},
|
||||
{"top-width", false, &conf_verify_int},
|
||||
{"bottom-width", false, &conf_verify_int},
|
||||
{"color", false, &conf_verify_color},
|
||||
{"margin", false, &conf_verify_int},
|
||||
{"left-margin", false, &conf_verify_int},
|
||||
|
|
18
config.c
18
config.c
|
@ -261,6 +261,10 @@ conf_to_bar(const struct yml_node *bar, enum bar_backend backend)
|
|||
const struct yml_node *border = yml_get_value(bar, "border");
|
||||
if (border != NULL) {
|
||||
const struct yml_node *width = yml_get_value(border, "width");
|
||||
const struct yml_node *left_width = yml_get_value(border, "left-width");
|
||||
const struct yml_node *right_width = yml_get_value(border, "right-width");
|
||||
const struct yml_node *top_width = yml_get_value(border, "top-width");
|
||||
const struct yml_node *bottom_width = yml_get_value(border, "bottom-width");
|
||||
const struct yml_node *color = yml_get_value(border, "color");
|
||||
const struct yml_node *margin = yml_get_value(border, "margin");
|
||||
const struct yml_node *left_margin = yml_get_value(border, "left-margin");
|
||||
|
@ -269,7 +273,19 @@ conf_to_bar(const struct yml_node *bar, enum bar_backend backend)
|
|||
const struct yml_node *bottom_margin = yml_get_value(border, "bottom-margin");
|
||||
|
||||
if (width != NULL)
|
||||
conf.border.width = yml_value_as_int(width);
|
||||
conf.border.left_width =
|
||||
conf.border.right_width =
|
||||
conf.border.top_width =
|
||||
conf.border.bottom_width = yml_value_as_int(width);
|
||||
|
||||
if (left_width != NULL)
|
||||
conf.border.left_width = yml_value_as_int(left_width);
|
||||
if (right_width != NULL)
|
||||
conf.border.right_width = yml_value_as_int(right_width);
|
||||
if (top_width != NULL)
|
||||
conf.border.top_width = yml_value_as_int(top_width);
|
||||
if (bottom_width != NULL)
|
||||
conf.border.bottom_width = yml_value_as_int(bottom_width);
|
||||
|
||||
if (color != NULL)
|
||||
conf.border.color = conf_to_color(color);
|
||||
|
|
|
@ -73,10 +73,26 @@ types that are frequently used:
|
|||
: associative array
|
||||
: no
|
||||
: Configures the border around the status bar
|
||||
| border.left-width
|
||||
: int
|
||||
: no
|
||||
: Width of the border on the left side, in pixels
|
||||
| border.right-width
|
||||
: int
|
||||
: no
|
||||
: Width of the border on the right side, in pixels
|
||||
| border.top-width
|
||||
: int
|
||||
: no
|
||||
: Width of the border on the top side, in pixels
|
||||
| border.bottom-width
|
||||
: int
|
||||
: no
|
||||
: Width of the border on the bottom side, in pixels
|
||||
| border.width
|
||||
: int
|
||||
: no
|
||||
: Width, in pixels, of the border
|
||||
: Short-hand for setting _border.left/right/top/bottom-width_
|
||||
| border.color
|
||||
: color
|
||||
: no
|
||||
|
|
Loading…
Add table
Reference in a new issue