opt: refresh decorate config auto when reload config

This commit is contained in:
DreamMaoMao 2026-06-17 18:07:27 +08:00
parent 4a526bf713
commit 3251e9d3bb
6 changed files with 76 additions and 17 deletions

View file

@ -65,7 +65,7 @@ You can also color-code windows based on their state:
| `text_decorate_corner_radius` | `5` | label corner radius.| | `text_decorate_corner_radius` | `5` | label corner radius.|
| `text_decorate_padding_x` | `10` | label horizontal padding.| | `text_decorate_padding_x` | `10` | label horizontal padding.|
| `text_decorate_padding_y` | `10` | label vertical padding.| | `text_decorate_padding_y` | `10` | label vertical padding.|
| `text_decorate_font_desc` | `monospace Bold 12` | label font set.| | `text_decorate_font_desc` | `monospace Bold 16` | label font set.|
## Cursor Theme ## Cursor Theme

View file

@ -3712,13 +3712,13 @@ void set_value_default() {
config.textdata.bg_color[1] = 0x32 / 255.0f; config.textdata.bg_color[1] = 0x32 / 255.0f;
config.textdata.bg_color[2] = 0x32 / 255.0f; config.textdata.bg_color[2] = 0x32 / 255.0f;
config.textdata.bg_color[3] = 1.0f; config.textdata.bg_color[3] = 1.0f;
config.textdata.focus_fg_color[0] = 0x32 / 255.0f; config.textdata.focus_fg_color[0] = 0xed / 255.0f;
config.textdata.focus_fg_color[1] = 0x32 / 255.0f; config.textdata.focus_fg_color[1] = 0xa6 / 255.0f;
config.textdata.focus_fg_color[2] = 0x32 / 255.0f; config.textdata.focus_fg_color[2] = 0xb4 / 255.0f;
config.textdata.focus_fg_color[3] = 1.0f; config.textdata.focus_fg_color[3] = 1.0f;
config.textdata.focus_bg_color[0] = 0xc4 / 255.0f; config.textdata.focus_bg_color[0] = 0x4e / 255.0f;
config.textdata.focus_bg_color[1] = 0x93 / 255.0f; config.textdata.focus_bg_color[1] = 0x45 / 255.0f;
config.textdata.focus_bg_color[2] = 0x9d / 255.0f; config.textdata.focus_bg_color[2] = 0x3c / 255.0f;
config.textdata.focus_bg_color[3] = 1.0f; config.textdata.focus_bg_color[3] = 1.0f;
config.textdata.border_color[0] = 0x8b / 255.0f; config.textdata.border_color[0] = 0x8b / 255.0f;
config.textdata.border_color[1] = 0xaa / 255.0f; config.textdata.border_color[1] = 0xaa / 255.0f;
@ -4006,6 +4006,10 @@ void reapply_property(void) {
c->bw = config.borderpx; c->bw = config.borderpx;
} }
mango_text_node_apply_config(c->text_node, &config.textdata);
mango_titlebar_node_apply_config(c->titlebar_node,
&config.textdata);
wlr_scene_rect_set_color(c->droparea, config.dropcolor); wlr_scene_rect_set_color(c->droparea, config.dropcolor);
wlr_scene_rect_set_color(c->splitindicator[0], config.splitcolor); wlr_scene_rect_set_color(c->splitindicator[0], config.splitcolor);
wlr_scene_rect_set_color(c->splitindicator[1], config.splitcolor); wlr_scene_rect_set_color(c->splitindicator[1], config.splitcolor);

View file

@ -83,7 +83,7 @@ struct mango_text_node *mango_text_node_create(struct wlr_scene_tree *parent,
node->padding_x = data.padding_x; node->padding_x = data.padding_x;
node->padding_y = data.padding_y; node->padding_y = data.padding_y;
node->font_desc = node->font_desc =
g_strdup(data.font_desc ? data.font_desc : "monospace Bold 12"); g_strdup(data.font_desc ? data.font_desc : "monospace Bold 16");
node->cached_text = NULL; node->cached_text = NULL;
node->cached_scale = -1.0f; node->cached_scale = -1.0f;
@ -440,7 +440,7 @@ mango_titlebar_node_create(void *mango_node_data, struct wlr_scene_tree *parent,
node->padding_x = data.padding_x; node->padding_x = data.padding_x;
node->padding_y = data.padding_y; node->padding_y = data.padding_y;
node->font_desc = node->font_desc =
g_strdup(data.font_desc ? data.font_desc : "monospace Bold 12"); g_strdup(data.font_desc ? data.font_desc : "monospace Bold 16");
node->target_width = width; node->target_width = width;
node->target_height = height; node->target_height = height;
@ -784,3 +784,56 @@ void mango_titlebar_node_set_colors(struct mango_titlebar_node *node,
mango_titlebar_node_update(node, node->last_text, scale); mango_titlebar_node_update(node, node->last_text, scale);
} }
} }
void mango_text_node_apply_config(struct mango_text_node *node,
const TextDrawData *data) {
if (!node || !data)
return;
memcpy(node->fg_color, data->fg_color, sizeof(node->fg_color));
memcpy(node->bg_color, data->bg_color, sizeof(node->bg_color));
memcpy(node->focus_fg_color, data->focus_fg_color,
sizeof(node->focus_fg_color));
memcpy(node->focus_bg_color, data->focus_bg_color,
sizeof(node->focus_bg_color));
memcpy(node->border_color, data->border_color, sizeof(node->border_color));
node->border_width = data->border_width;
node->corner_radius = data->corner_radius;
node->padding_x = data->padding_x;
node->padding_y = data->padding_y;
g_free(node->font_desc);
node->font_desc =
g_strdup(data->font_desc ? data->font_desc : "monospace Bold 16");
if (node->cached_text && node->cached_scale > 0.0f) {
mango_text_node_update(node, node->cached_text, node->cached_scale);
}
}
void mango_titlebar_node_apply_config(struct mango_titlebar_node *node,
const TextDrawData *data) {
if (!node || !data)
return;
memcpy(node->fg_color, data->fg_color, sizeof(node->fg_color));
memcpy(node->bg_color, data->bg_color, sizeof(node->bg_color));
memcpy(node->focus_fg_color, data->focus_fg_color,
sizeof(node->focus_fg_color));
memcpy(node->focus_bg_color, data->focus_bg_color,
sizeof(node->focus_bg_color));
memcpy(node->border_color, data->border_color, sizeof(node->border_color));
node->border_width = data->border_width;
node->corner_radius = data->corner_radius;
node->padding_x = data->padding_x;
node->padding_y = data->padding_y;
g_free(node->font_desc);
node->font_desc =
g_strdup(data->font_desc ? data->font_desc : "monospace Bold 16");
if (node->last_text) {
float scale = node->last_scale > 0.0f ? node->last_scale : 1.0f;
mango_titlebar_node_update(node, node->last_text, scale);
}
}

View file

@ -157,5 +157,8 @@ void mango_titlebar_node_set_focus(struct mango_titlebar_node *node,
void mango_titlebar_node_set_colors(struct mango_titlebar_node *node, void mango_titlebar_node_set_colors(struct mango_titlebar_node *node,
const float fg[4], const float bg[4]); const float fg[4], const float bg[4]);
void mango_text_node_apply_config(struct mango_text_node *node,
const TextDrawData *data);
void mango_titlebar_node_apply_config(struct mango_titlebar_node *node,
const TextDrawData *data);
#endif // TEXT_NODE_H #endif // TEXT_NODE_H

View file

@ -553,16 +553,16 @@ void monocle(Monitor *m) {
int32_t cur_gapiv = enablegaps ? m->gappiv : 0; int32_t cur_gapiv = enablegaps ? m->gappiv : 0;
int32_t cur_gapih = enablegaps ? m->gappih : 0; int32_t cur_gapih = enablegaps ? m->gappih : 0;
if (config.smartgaps && m->visible_tiling_clients == 1) { if (config.smartgaps && m->visible_fake_tiling_clients == 1) {
cur_gappov = cur_gappoh = cur_gapiv = cur_gapih = 0; cur_gappov = cur_gappoh = cur_gapiv = cur_gapih = 0;
} }
int n = m->visible_tiling_clients; int n = m->visible_fake_tiling_clients;
if (n == 0) if (n == 0)
return; return;
wl_list_for_each(c, &fstack, flink) { wl_list_for_each(c, &fstack, flink) {
if (c->iskilling || c->isunglobal || !ISTILED(c)) if (c->iskilling || c->isunglobal || !ISFAKETILED(c))
continue; continue;
if (VISIBLEON(c, m)) { if (VISIBLEON(c, m)) {
fc = c; fc = c;
@ -577,7 +577,6 @@ void monocle(Monitor *m) {
geom.height = m->w.height - 2 * cur_gappov; geom.height = m->w.height - 2 * cur_gappov;
client_tile_resize(fc, geom, 0); client_tile_resize(fc, geom, 0);
monocle_set_focus(fc, true); monocle_set_focus(fc, true);
wlr_scene_node_raise_to_top(&fc->scene->node);
return; return;
} }
@ -592,12 +591,11 @@ void monocle(Monitor *m) {
int title_x = m->w.x + cur_gappoh; int title_x = m->w.x + cur_gappoh;
wl_list_for_each(c, &clients, link) { wl_list_for_each(c, &clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c)) if (!VISIBLEON(c, m) || !ISFAKETILED(c))
continue; continue;
if (c == fc) { if (c == fc) {
monocle_set_focus(c, true); monocle_set_focus(c, true);
wlr_scene_node_raise_to_top(&c->scene->node);
} else { } else {
monocle_set_focus(c, false); monocle_set_focus(c, false);
} }

View file

@ -169,8 +169,8 @@ enum {
LyrBg, LyrBg,
LyrBlur, LyrBlur,
LyrBottom, LyrBottom,
LyrTile,
LyrDecorate, LyrDecorate,
LyrTile,
LyrTop, LyrTop,
LyrFadeOut, LyrFadeOut,
LyrOverlay, LyrOverlay,
@ -4585,6 +4585,7 @@ mapnotify(struct wl_listener *listener, void *data) {
mangonodedata, layers[LyrDecorate], config.textdata, 0, 0); mangonodedata, layers[LyrDecorate], config.textdata, 0, 0);
wlr_scene_node_lower_to_bottom(&c->titlebar_node->scene_buffer->node); wlr_scene_node_lower_to_bottom(&c->titlebar_node->scene_buffer->node);
wlr_scene_node_set_enabled(&c->titlebar_node->scene_buffer->node, false); wlr_scene_node_set_enabled(&c->titlebar_node->scene_buffer->node, false);
mango_titlebar_node_update(c->titlebar_node, client_get_title(c), 1.0);
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
c->splitindicator[i] = wlr_scene_rect_create( c->splitindicator[i] = wlr_scene_rect_create(