From 6f1421f5b5c70bc681fe4f9b1b2c32d7216db6cb Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 16 Jun 2026 17:49:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(bar):=20=E9=87=8D=E7=BB=98=E5=89=8D?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=E5=86=85=E5=AE=B9=E5=B9=B6=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E4=BB=A5=E6=B6=88=E9=99=A4=E8=84=8F=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E6=AE=8B=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bar/bar.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/bar/bar.c b/src/bar/bar.c index 0ab3fec..ad5ac0a 100644 --- a/src/bar/bar.c +++ b/src/bar/bar.c @@ -15,6 +15,7 @@ #include "bar/windows.h" #include "bar/workspaces.h" #include "base/array.h" +#include "base/color.h" #include "base/macros.h" #include "base/memory.h" #include "base/time.h" @@ -345,8 +346,25 @@ static inline bool bar_output_is_dirty(bar_output_t *bar_output) { return false; } -static void bar_output_draw(bar_output_t *bar_output, text_context_t *ctx) { +static inline void clean_cairo_context(cairo_t *cr) { + cairo_save(cr); + cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR); + cairo_paint(cr); + cairo_restore(cr); +} + +static void +bar_output_draw(bar_output_t *bar_output, text_context_t *ctx, color_t *bg) { auto cr = bar_output->cr; + clean_cairo_context(cr); + + zdwm_rect_t output_area = { + .x = 0, + .y = 0, + .width = bar_output->width, + .height = bar_output->height, + }; + draw_background(cr, bg, output_area); auto left = &bar_output->left; for (size_t i = 0; i < left->count; ++i) { @@ -370,7 +388,7 @@ bool bar_draw(bar_t *bar) { if (!bar_output_is_dirty(bar_output)) continue; bar_output_layout(bar_output, ctx); - bar_output_draw(bar_output, ctx); + bar_output_draw(bar_output, ctx, &bar->palette.bg); changed = true; }