proper toast sizing

This commit is contained in:
galister
2025-12-10 21:41:51 +09:00
parent c4b8fbd579
commit cb0831223a
4 changed files with 20 additions and 11 deletions

View File

@@ -2,13 +2,13 @@
<include src="theme.xml" /> <include src="theme.xml" />
<elements> <elements>
<div interactable="0" flex_direction="column"> <div interactable="0" >
<rectangle height="100%" padding="4" box_sizing="content_box" flex_wrap="wrap" flex_direction="row" gap="4" color="#000000c0" border_color="~color_accent" border="2" round="8" justify_content="space_between"> <rectangle padding="4" box_sizing="content_box" flex_wrap="wrap" flex_direction="row" gap="4" color="#000000c0" border_color="~color_accent" border="2" round="8" justify_content="space_between">
<div flex_direction="row" padding="4" align_items="center" justify_content="center"> <div width="100%" padding="4">
<label text="" id="toast_title" weight="bold" /> <label text="toast title" id="toast_title" weight="bold" />
</div> </div>
<div flex_direction="row" flex_wrap="wrap" padding="4" align_items="center" justify_content="center" id="toolbox"> <div width="100%" height="100%" padding="4" flex_wrap="wrap">
<label text="" id="toast_body" /> <label text="toast body goes here" id="toast_body" />
</div> </div>
</rectangle> </rectangle>
</div> </div>

View File

@@ -102,7 +102,6 @@ impl Toast {
} }
} }
#[allow(clippy::too_many_lines)]
fn new_toast(toast: Toast, app: &mut AppState) -> Option<OverlayWindowConfig> { fn new_toast(toast: Toast, app: &mut AppState) -> Option<OverlayWindowConfig> {
let current_method = app let current_method = app
.session .session
@@ -112,7 +111,10 @@ fn new_toast(toast: Toast, app: &mut AppState) -> Option<OverlayWindowConfig> {
.unwrap_or(ToastDisplayMethod::Hide); .unwrap_or(ToastDisplayMethod::Hide);
let (spawn_point, spawn_rotation, positioning) = match current_method { let (spawn_point, spawn_rotation, positioning) = match current_method {
ToastDisplayMethod::Hide => return None, ToastDisplayMethod::Hide => {
log::debug!("Not showing toast: filtered out");
return None;
}
ToastDisplayMethod::Center => ( ToastDisplayMethod::Center => (
vec3(0., -0.2, -0.5), vec3(0., -0.2, -0.5),
Quat::IDENTITY, Quat::IDENTITY,
@@ -168,7 +170,7 @@ fn new_toast(toast: Toast, app: &mut AppState) -> Option<OverlayWindowConfig> {
Ok(()) Ok(())
}); });
let panel = GuiPanel::new_from_template( let mut panel = GuiPanel::new_from_template(
app, app,
"gui/toast.xml", "gui/toast.xml",
(), (),
@@ -177,8 +179,11 @@ fn new_toast(toast: Toast, app: &mut AppState) -> Option<OverlayWindowConfig> {
..Default::default() ..Default::default()
}, },
) )
.inspect_err(|e| log::error!("Could not create toast: {e:?}"))
.ok()?; .ok()?;
panel.update_layout().context("layout update failed").ok()?;
Some(OverlayWindowConfig { Some(OverlayWindowConfig {
name: TOAST_NAME.clone(), name: TOAST_NAME.clone(),
default_state: OverlayWindowState { default_state: OverlayWindowState {

View File

@@ -1,6 +1,6 @@
use glam::Affine3A; use glam::Affine3A;
use idmap::IdMap; use idmap::IdMap;
use smallvec::{SmallVec, smallvec}; use smallvec::{smallvec, SmallVec};
use std::sync::Arc; use std::sync::Arc;
use wgui::{ use wgui::{
font_config::WguiFontConfig, gfx::WGfx, globals::WguiGlobals, font_config::WguiFontConfig, gfx::WGfx, globals::WguiGlobals,

View File

@@ -189,10 +189,12 @@ where
} }
OverlayTask::Create(sel, f) => { OverlayTask::Create(sel, f) => {
let None = self.mut_by_selector(&sel) else { let None = self.mut_by_selector(&sel) else {
log::debug!("Could not create {sel:?}: exists");
return Ok(()); return Ok(());
}; };
let Some(overlay_config) = f(app) else { let Some(overlay_config) = f(app) else {
log::debug!("Could not create {sel:?}: empty config");
return Ok(()); return Ok(());
}; };
@@ -209,6 +211,7 @@ where
&& o.birthframe < FRAME_COUNTER.load(Ordering::Relaxed) && o.birthframe < FRAME_COUNTER.load(Ordering::Relaxed)
{ {
if let Some(o) = self.remove_by_selector(&sel, app) { if let Some(o) = self.remove_by_selector(&sel, app) {
log::debug!("Dropping overlay {}", o.config.name);
self.dropped_overlays.push_back(o); self.dropped_overlays.push_back(o);
} }
} }
@@ -346,7 +349,7 @@ impl<T> OverlayWindowManager<T> {
} }
} }
pub fn remove_by_selector( fn remove_by_selector(
&mut self, &mut self,
selector: &OverlaySelector, selector: &OverlaySelector,
app: &mut AppState, app: &mut AppState,
@@ -411,6 +414,7 @@ impl<T> OverlayWindowManager<T> {
} }
if overlay.config.show_on_spawn { if overlay.config.show_on_spawn {
log::debug!("activating {} due to show_on_spawn", overlay.config.name);
overlay.config.activate(app); overlay.config.activate(app);
} }
let ret_val = self.overlays.insert(overlay); let ret_val = self.overlays.insert(overlay);