feat: handle screen changes at runtime

This commit is contained in:
galister
2024-04-04 20:06:34 +09:00
parent e845ac8d53
commit c02edb7a43
11 changed files with 372 additions and 214 deletions

View File

@@ -8,7 +8,10 @@ use crate::{
def_half, def_left, def_point7, def_watch_pos, def_watch_rot, load_known_yaml, ConfigType,
},
config_io,
gui::modular::{modular_canvas, ModularUiConfig},
gui::{
modular::{modular_canvas, ModularData, ModularUiConfig},
Canvas,
},
state::{AppState, LeftRight},
};
@@ -20,8 +23,6 @@ where
{
let config = load_known_yaml::<ModularUiConfig>(ConfigType::Watch);
let canvas = modular_canvas(&config.size, &config.elements, state)?;
let relative_to = RelativeTo::Hand(state.session.config.watch_hand as usize);
Ok(OverlayData {
@@ -36,11 +37,20 @@ where
relative_to,
..Default::default()
},
backend: Box::new(canvas),
backend: Box::new(create_watch_canvas(Some(config), state)?),
..Default::default()
})
}
pub fn create_watch_canvas(
config: Option<ModularUiConfig>,
state: &AppState,
) -> anyhow::Result<Canvas<(), ModularData>> {
let config = config.unwrap_or_else(|| load_known_yaml::<ModularUiConfig>(ConfigType::Watch));
modular_canvas(&config.size, &config.elements, state)
}
pub fn watch_fade<D>(app: &mut AppState, watch: &mut OverlayData<D>)
where
D: Default,