diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 8e20686..328f1ea 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -939,6 +939,17 @@ impl PixelPassApp { apply_theme(ui.ctx(), &self.theme.active); self.theme.dirty = false; } + // Paint the themed window background behind everything. The app draws on + // egui's bare background layer with no panel, so `window_fill` is never + // shown — without this the only backdrop is the GL clear colour, which + // the theme can't reach. Painted first, so it sits behind the widgets. + let bg = if self.theme.editing { + self.theme.draft.window_bg + } else { + self.theme.active.window_bg + }; + ui.painter() + .rect_filled(ui.ctx().content_rect(), egui::CornerRadius::ZERO, bg); match self.screen { Screen::Menu => self.menu(ui), Screen::Host => self.host(ui), diff --git a/src/gui/theme.rs b/src/gui/theme.rs index 6376657..2ebc214 100644 --- a/src/gui/theme.rs +++ b/src/gui/theme.rs @@ -101,6 +101,9 @@ impl Theme { v.faint_bg_color = self.panel_bg; v.extreme_bg_color = self.input_bg; v.override_text_color = Some(self.text); + // `.weak()` text resolves via `weak_text_color()`, which derives from + // `text` unless this is set — so without it the weak-text field is dead. + v.weak_text_color = Some(self.weak_text); v.hyperlink_color = self.accent; v.error_fg_color = self.error; v.warn_fg_color = self.warning;