From 3251e9d3bb5cc66c8d5cbabc5cc76032d1c75574 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Wed, 17 Jun 2026 18:07:27 +0800 Subject: [PATCH] opt: refresh decorate config auto when reload config --- docs/visuals/theming.md | 2 +- src/config/parse_config.h | 16 ++++++----- src/draw/text-node.c | 57 +++++++++++++++++++++++++++++++++++++-- src/draw/text-node.h | 5 +++- src/layout/horizontal.h | 10 +++---- src/mango.c | 3 ++- 6 files changed, 76 insertions(+), 17 deletions(-) diff --git a/docs/visuals/theming.md b/docs/visuals/theming.md index 3876a7a5..928b1d24 100644 --- a/docs/visuals/theming.md +++ b/docs/visuals/theming.md @@ -65,7 +65,7 @@ You can also color-code windows based on their state: | `text_decorate_corner_radius` | `5` | label corner radius.| | `text_decorate_padding_x` | `10` | label horizontal 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 diff --git a/src/config/parse_config.h b/src/config/parse_config.h index d08e6378..7b7f0daf 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -3712,13 +3712,13 @@ void set_value_default() { config.textdata.bg_color[1] = 0x32 / 255.0f; config.textdata.bg_color[2] = 0x32 / 255.0f; config.textdata.bg_color[3] = 1.0f; - config.textdata.focus_fg_color[0] = 0x32 / 255.0f; - config.textdata.focus_fg_color[1] = 0x32 / 255.0f; - config.textdata.focus_fg_color[2] = 0x32 / 255.0f; + config.textdata.focus_fg_color[0] = 0xed / 255.0f; + config.textdata.focus_fg_color[1] = 0xa6 / 255.0f; + config.textdata.focus_fg_color[2] = 0xb4 / 255.0f; config.textdata.focus_fg_color[3] = 1.0f; - config.textdata.focus_bg_color[0] = 0xc4 / 255.0f; - config.textdata.focus_bg_color[1] = 0x93 / 255.0f; - config.textdata.focus_bg_color[2] = 0x9d / 255.0f; + config.textdata.focus_bg_color[0] = 0x4e / 255.0f; + config.textdata.focus_bg_color[1] = 0x45 / 255.0f; + config.textdata.focus_bg_color[2] = 0x3c / 255.0f; config.textdata.focus_bg_color[3] = 1.0f; config.textdata.border_color[0] = 0x8b / 255.0f; config.textdata.border_color[1] = 0xaa / 255.0f; @@ -4006,6 +4006,10 @@ void reapply_property(void) { 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->splitindicator[0], config.splitcolor); wlr_scene_rect_set_color(c->splitindicator[1], config.splitcolor); diff --git a/src/draw/text-node.c b/src/draw/text-node.c index c42cdf72..32164fbe 100644 --- a/src/draw/text-node.c +++ b/src/draw/text-node.c @@ -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_y = data.padding_y; 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_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_y = data.padding_y; 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_height = height; @@ -783,4 +783,57 @@ void mango_titlebar_node_set_colors(struct mango_titlebar_node *node, float scale = node->last_scale > 0.0f ? node->last_scale : 1.0f; 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); + } } \ No newline at end of file diff --git a/src/draw/text-node.h b/src/draw/text-node.h index e0de8e7e..32b937a1 100644 --- a/src/draw/text-node.h +++ b/src/draw/text-node.h @@ -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, 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 \ No newline at end of file diff --git a/src/layout/horizontal.h b/src/layout/horizontal.h index 99ef465b..4b8fa29d 100644 --- a/src/layout/horizontal.h +++ b/src/layout/horizontal.h @@ -553,16 +553,16 @@ void monocle(Monitor *m) { int32_t cur_gapiv = enablegaps ? m->gappiv : 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; } - int n = m->visible_tiling_clients; + int n = m->visible_fake_tiling_clients; if (n == 0) return; wl_list_for_each(c, &fstack, flink) { - if (c->iskilling || c->isunglobal || !ISTILED(c)) + if (c->iskilling || c->isunglobal || !ISFAKETILED(c)) continue; if (VISIBLEON(c, m)) { fc = c; @@ -577,7 +577,6 @@ void monocle(Monitor *m) { geom.height = m->w.height - 2 * cur_gappov; client_tile_resize(fc, geom, 0); monocle_set_focus(fc, true); - wlr_scene_node_raise_to_top(&fc->scene->node); return; } @@ -592,12 +591,11 @@ void monocle(Monitor *m) { int title_x = m->w.x + cur_gappoh; wl_list_for_each(c, &clients, link) { - if (!VISIBLEON(c, m) || !ISTILED(c)) + if (!VISIBLEON(c, m) || !ISFAKETILED(c)) continue; if (c == fc) { monocle_set_focus(c, true); - wlr_scene_node_raise_to_top(&c->scene->node); } else { monocle_set_focus(c, false); } diff --git a/src/mango.c b/src/mango.c index 146b9448..5f9998aa 100644 --- a/src/mango.c +++ b/src/mango.c @@ -169,8 +169,8 @@ enum { LyrBg, LyrBlur, LyrBottom, - LyrTile, LyrDecorate, + LyrTile, LyrTop, LyrFadeOut, LyrOverlay, @@ -4585,6 +4585,7 @@ mapnotify(struct wl_listener *listener, void *data) { mangonodedata, layers[LyrDecorate], config.textdata, 0, 0); wlr_scene_node_lower_to_bottom(&c->titlebar_node->scene_buffer->node); 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++) { c->splitindicator[i] = wlr_scene_rect_create(