Files
wayvr/uidev/src/testbed/testbed_any.rs
2025-12-11 01:09:49 +09:00

66 lines
1.2 KiB
Rust

use std::path::PathBuf;
use crate::{
assets,
testbed::{Testbed, TestbedUpdateParams},
};
use glam::Vec2;
use wgui::{
assets::AssetPath,
font_config::WguiFontConfig,
globals::WguiGlobals,
layout::{LayoutParams, RcLayout},
parser::{ParseDocumentParams, ParserState},
};
pub struct TestbedAny {
pub layout: RcLayout,
#[allow(dead_code)]
state: ParserState,
}
impl TestbedAny {
pub fn new(name: &str) -> anyhow::Result<Self> {
let path = if name.ends_with(".xml") {
AssetPath::FileOrBuiltIn(name)
} else {
AssetPath::BuiltIn(&format!("gui/{name}.xml"))
};
let globals = WguiGlobals::new(
Box::new(assets::Asset {}),
wgui::globals::Defaults::default(),
&WguiFontConfig::default(),
PathBuf::new(), // cwd
)?;
let (layout, state) = wgui::parser::new_layout_from_assets(
&ParseDocumentParams {
globals,
path,
extra: Default::default(),
},
&LayoutParams::default(),
)?;
Ok(Self {
layout: layout.as_rc(),
state,
})
}
}
impl Testbed for TestbedAny {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()> {
self.layout.borrow_mut().update(
Vec2::new(params.width, params.height),
params.timestep_alpha,
)?;
Ok(())
}
fn layout(&self) -> &RcLayout {
&self.layout
}
}