mirror of
https://codeberg.org/dnkl/yambar.git
synced 2025-04-25 05:15:41 +02:00
commit
741107d31c
8 changed files with 84 additions and 25 deletions
|
@ -12,6 +12,11 @@
|
||||||
|
|
||||||
* i3: `persistent` attribute, allowing persistent workspaces
|
* i3: `persistent` attribute, allowing persistent workspaces
|
||||||
(https://codeberg.org/dnkl/yambar/issues/72).
|
(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
|
### Changed
|
||||||
|
|
56
bar/bar.c
56
bar/bar.c
|
@ -67,16 +67,28 @@ expose(const struct bar *_bar)
|
||||||
PIXMAN_OP_SRC, pix, &bar->background, 1,
|
PIXMAN_OP_SRC, pix, &bar->background, 1,
|
||||||
&(pixman_rectangle16_t){0, 0, bar->width, bar->height_with_border});
|
&(pixman_rectangle16_t){0, 0, bar->width, bar->height_with_border});
|
||||||
|
|
||||||
if (bar->border.width > 0) {
|
pixman_image_fill_rectangles(
|
||||||
pixman_image_fill_rectangles(
|
PIXMAN_OP_OVER, pix, &bar->border.color, 4,
|
||||||
PIXMAN_OP_OVER, pix, &bar->border.color, 4,
|
(pixman_rectangle16_t[]){
|
||||||
(pixman_rectangle16_t[]){
|
/* Left */
|
||||||
{0, 0, bar->width, bar->border.width},
|
{0, 0, bar->border.left_width, bar->height_with_border},
|
||||||
{0, 0, bar->border.width, bar->height_with_border},
|
|
||||||
{bar->width - bar->border.width, 0, bar->border.width, bar->height_with_border},
|
/* Right */
|
||||||
{0, bar->height_with_border - bar->border.width, bar->width, bar->border.width},
|
{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++) {
|
for (size_t i = 0; i < bar->left.count; i++) {
|
||||||
struct module *m = bar->left.mods[i];
|
struct module *m = bar->left.mods[i];
|
||||||
|
@ -105,8 +117,8 @@ expose(const struct bar *_bar)
|
||||||
int left_width, center_width, right_width;
|
int left_width, center_width, right_width;
|
||||||
calculate_widths(bar, &left_width, ¢er_width, &right_width);
|
calculate_widths(bar, &left_width, ¢er_width, &right_width);
|
||||||
|
|
||||||
int y = bar->border.width;
|
int y = bar->border.top_width;
|
||||||
int x = bar->border.width + bar->left_margin - bar->left_spacing;
|
int x = bar->border.left_width + bar->left_margin - bar->left_spacing;
|
||||||
for (size_t i = 0; i < bar->left.count; i++) {
|
for (size_t i = 0; i < bar->left.count; i++) {
|
||||||
const struct exposable *e = bar->left.exps[i];
|
const struct exposable *e = bar->left.exps[i];
|
||||||
e->expose(e, pix, x + bar->left_spacing, y, bar->height);
|
e->expose(e, pix, x + bar->left_spacing, y, bar->height);
|
||||||
|
@ -124,7 +136,7 @@ expose(const struct bar *_bar)
|
||||||
right_width +
|
right_width +
|
||||||
bar->left_spacing +
|
bar->left_spacing +
|
||||||
bar->right_margin +
|
bar->right_margin +
|
||||||
bar->border.width);
|
bar->border.right_width);
|
||||||
|
|
||||||
for (size_t i = 0; i < bar->right.count; i++) {
|
for (size_t i = 0; i < bar->right.count; i++) {
|
||||||
const struct exposable *e = bar->right.exps[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;
|
struct private *bar = _bar->private;
|
||||||
|
|
||||||
if ((y < bar->border.width ||
|
if ((y < bar->border.top_width ||
|
||||||
y >= (bar->height_with_border - bar->border.width)) ||
|
y >= (bar->height_with_border - bar->border.bottom_width)) ||
|
||||||
(x < bar->border.width || x >= (bar->width - bar->border.width)))
|
(x < bar->border.left_width || x >= (bar->width - bar->border.right_width)))
|
||||||
{
|
{
|
||||||
set_cursor(_bar, "left_ptr");
|
set_cursor(_bar, "left_ptr");
|
||||||
return;
|
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;
|
int left_width, center_width, right_width;
|
||||||
calculate_widths(bar, &left_width, ¢er_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++) {
|
for (size_t i = 0; i < bar->left.count; i++) {
|
||||||
struct exposable *e = bar->left.exps[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
|
mx = bar->width - (right_width
|
||||||
+ bar->left_spacing +
|
+ bar->left_spacing +
|
||||||
bar->right_margin +
|
bar->right_margin +
|
||||||
bar->border.width);
|
bar->border.right_width);
|
||||||
|
|
||||||
for (size_t i = 0; i < bar->right.count; i++) {
|
for (size_t i = 0; i < bar->right.count; i++) {
|
||||||
struct exposable *e = bar->right.exps[i];
|
struct exposable *e = bar->right.exps[i];
|
||||||
|
@ -236,7 +248,8 @@ run(struct bar *_bar)
|
||||||
{
|
{
|
||||||
struct private *bar = _bar->private;
|
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)) {
|
if (!bar->backend.iface->setup(_bar)) {
|
||||||
bar->backend.iface->cleanup(_bar);
|
bar->backend.iface->cleanup(_bar);
|
||||||
|
@ -409,7 +422,10 @@ bar_new(const struct bar_config *config)
|
||||||
priv->left_margin = config->left_margin;
|
priv->left_margin = config->left_margin;
|
||||||
priv->right_margin = config->right_margin;
|
priv->right_margin = config->right_margin;
|
||||||
priv->trackpad_sensitivity = config->trackpad_sensitivity;
|
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.color = config->border.color;
|
||||||
priv->border.left_margin = config->border.left_margin;
|
priv->border.left_margin = config->border.left_margin;
|
||||||
priv->border.right_margin = config->border.right_margin;
|
priv->border.right_margin = config->border.right_margin;
|
||||||
|
|
|
@ -30,7 +30,8 @@ struct bar_config {
|
||||||
pixman_color_t background;
|
pixman_color_t background;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
int width;
|
int left_width, right_width;
|
||||||
|
int top_width, bottom_width;
|
||||||
pixman_color_t color;
|
pixman_color_t color;
|
||||||
int left_margin, right_margin;
|
int left_margin, right_margin;
|
||||||
int top_margin, bottom_margin;
|
int top_margin, bottom_margin;
|
||||||
|
|
|
@ -15,7 +15,8 @@ struct private {
|
||||||
pixman_color_t background;
|
pixman_color_t background;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
int width;
|
int left_width, right_width;
|
||||||
|
int top_width, bottom_width;
|
||||||
pixman_color_t color;
|
pixman_color_t color;
|
||||||
int left_margin, right_margin;
|
int left_margin, right_margin;
|
||||||
int top_margin, bottom_margin;
|
int top_margin, bottom_margin;
|
||||||
|
|
|
@ -891,7 +891,7 @@ update_size(struct wayland_backend *backend)
|
||||||
int height = bar->height_with_border;
|
int height = bar->height_with_border;
|
||||||
height /= scale;
|
height /= scale;
|
||||||
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;
|
bar->height_with_border = height;
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_size(
|
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[] = {
|
static const struct attr_info attrs[] = {
|
||||||
{"width", false, &conf_verify_int},
|
{"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},
|
{"color", false, &conf_verify_color},
|
||||||
{"margin", false, &conf_verify_int},
|
{"margin", false, &conf_verify_int},
|
||||||
{"left-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");
|
const struct yml_node *border = yml_get_value(bar, "border");
|
||||||
if (border != NULL) {
|
if (border != NULL) {
|
||||||
const struct yml_node *width = yml_get_value(border, "width");
|
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 *color = yml_get_value(border, "color");
|
||||||
const struct yml_node *margin = yml_get_value(border, "margin");
|
const struct yml_node *margin = yml_get_value(border, "margin");
|
||||||
const struct yml_node *left_margin = yml_get_value(border, "left-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");
|
const struct yml_node *bottom_margin = yml_get_value(border, "bottom-margin");
|
||||||
|
|
||||||
if (width != NULL)
|
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)
|
if (color != NULL)
|
||||||
conf.border.color = conf_to_color(color);
|
conf.border.color = conf_to_color(color);
|
||||||
|
|
|
@ -73,10 +73,26 @@ types that are frequently used:
|
||||||
: associative array
|
: associative array
|
||||||
: no
|
: no
|
||||||
: Configures the border around the status bar
|
: 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
|
| border.width
|
||||||
: int
|
: int
|
||||||
: no
|
: no
|
||||||
: Width, in pixels, of the border
|
: Short-hand for setting _border.left/right/top/bottom-width_
|
||||||
| border.color
|
| border.color
|
||||||
: color
|
: color
|
||||||
: no
|
: no
|
||||||
|
|
Loading…
Add table
Reference in a new issue