1
0
Fork 0
forked from wry/wry

theme: add title-font and bar-font settings

This commit is contained in:
Julian Orth 2025-09-17 18:37:13 +02:00
parent 01f9c094ee
commit 035e2972de
14 changed files with 116 additions and 11 deletions

View file

@ -2341,16 +2341,30 @@ impl ConfigProxyHandler {
}
fn handle_reset_font(&self) {
self.state
.theme
.font
.set(self.state.theme.default_font.clone());
let theme = &self.state.theme;
theme.font.set(self.state.theme.default_font.clone());
theme.bar_font.set(None);
theme.title_font.set(None);
}
fn handle_set_font(&self, font: &str) {
self.state.theme.font.set(Arc::new(font.to_string()));
}
fn handle_set_bar_font(&self, font: &str) {
self.state
.theme
.bar_font
.set(Some(Arc::new(font.to_string())));
}
fn handle_set_title_font(&self, font: &str) {
self.state
.theme
.title_font
.set(Some(Arc::new(font.to_string())));
}
fn handle_get_font(&self) {
let font = self.state.theme.font.get().to_string();
self.respond(Response::GetFont { font });
@ -3143,6 +3157,8 @@ impl ConfigProxyHandler {
} => self
.handle_connector_set_blend_space(connector, blend_space)
.wrn("connector_set_blend_space")?,
ClientMessage::SetBarFont { font } => self.handle_set_bar_font(font),
ClientMessage::SetTitleFont { font } => self.handle_set_title_font(font),
}
Ok(())
}

View file

@ -463,6 +463,8 @@ pub struct Theme {
pub colors: ThemeColors,
pub sizes: ThemeSizes,
pub font: CloneCell<Arc<String>>,
pub bar_font: CloneCell<Option<Arc<String>>>,
pub title_font: CloneCell<Option<Arc<String>>>,
pub default_font: Arc<String>,
}
@ -473,7 +475,19 @@ impl Default for Theme {
colors: Default::default(),
sizes: Default::default(),
font: CloneCell::new(default_font.clone()),
bar_font: Default::default(),
title_font: Default::default(),
default_font,
}
}
}
impl Theme {
pub fn title_font(&self) -> Arc<String> {
self.title_font.get().unwrap_or_else(|| self.font.get())
}
pub fn bar_font(&self) -> Arc<String> {
self.bar_font.get().unwrap_or_else(|| self.font.get())
}
}

View file

@ -707,7 +707,7 @@ impl ContainerNode {
};
let theme = &self.state.theme;
let th = theme.sizes.title_height.get();
let font = theme.font.get();
let font = theme.title_font();
let last_active = self.focus_history.last().map(|v| v.node.node_id());
let have_active = self.children.iter().any(|c| c.active.get());
let scales = self.state.scales.lock();

View file

@ -205,7 +205,7 @@ impl FloatNode {
true => theme.colors.focused_title_text.get(),
false => theme.colors.unfocused_title_text.get(),
};
let font = theme.font.get();
let font = theme.title_font();
let title = self.title.borrow_mut();
let ctx = match self.state.render_ctx.get() {
Some(c) => c,

View file

@ -514,7 +514,7 @@ impl OutputNode {
let Some(ctx) = self.state.render_ctx.get() else {
return on_completed.event();
};
let font = self.state.theme.font.get();
let font = self.state.theme.bar_font();
let theme = &self.state.theme;
let bh = theme.sizes.bar_height();
let scale = self.global.persistent.scale.get();