diff --git a/dash-frontend/src/frontend.rs b/dash-frontend/src/frontend.rs index 3c334356..b74d9187 100644 --- a/dash-frontend/src/frontend.rs +++ b/dash-frontend/src/frontend.rs @@ -1,11 +1,10 @@ -use std::{path::PathBuf, rc::Rc}; +use std::rc::Rc; use chrono::Timelike; use glam::Vec2; use wgui::{ - assets::{AssetPath, AssetProvider}, + assets::{AssetPath}, components::button::ComponentButton, - font_config::WguiFontConfig, globals::WguiGlobals, i18n::Translation, layout::{Layout, LayoutParams, LayoutUpdateParams, LayoutUpdateResult, WidgetID}, @@ -23,7 +22,6 @@ use wlx_common::{ }; use crate::{ - assets, tab::{Tab, TabType, apps::TabApps, games::TabGames, home::TabHome, monado::TabMonado, settings::TabSettings}, util::{ popup_manager::{MountPopupParams, PopupManager, PopupManagerParams}, @@ -85,6 +83,7 @@ pub struct FrontendUpdateResult { pub struct InitParams<'a, T> { pub interface: BoxDashInterface, pub lang_provider: &'a WayVRLangProvider, + pub globals: WguiGlobals, pub has_monado: bool, } @@ -111,31 +110,11 @@ pub enum FrontendTask { } impl Frontend { - pub fn new(mut params: InitParams, data: &mut T) -> anyhow::Result> { - let mut assets = Box::new(assets::Asset {}); - - let font_binary_bold = assets.load_from_path_gzip("Quicksand-Bold.ttf.gz")?; - let font_binary_regular = assets.load_from_path_gzip("Quicksand-Regular.ttf.gz")?; - let font_binary_light = assets.load_from_path_gzip("Quicksand-Light.ttf.gz")?; - - let globals = WguiGlobals::new( - assets, - params.lang_provider, - wgui::globals::Defaults::default(), - &WguiFontConfig { - binaries: vec![&font_binary_regular, &font_binary_bold, &font_binary_light], - family_name_sans_serif: "Quicksand", - family_name_serif: "Quicksand", - family_name_monospace: "", - }, - PathBuf::new(), //FIXME: pass from somewhere else - )?; - - Frontend::update_defaults_from_config(&globals, &mut params.interface, data); + pub fn new(params: InitParams) -> anyhow::Result> { let (layout, state) = wgui::parser::new_layout_from_assets( &ParseDocumentParams { - globals: globals.clone(), + globals: params.globals.clone(), path: AssetPath::BuiltIn("gui/dashboard.xml"), extra: Default::default(), }, @@ -163,7 +142,7 @@ impl Frontend { layout, state, current_tab: None, - globals, + globals: params.globals.clone(), tasks, ticks: 0, widgets: FrontendWidgets { @@ -196,16 +175,6 @@ impl Frontend { self.sounds_to_play.push(sound_type); } - fn update_defaults_from_config(globals: &WguiGlobals, interface: &mut BoxDashInterface, data: &mut T) { - let config = interface.general_config(data); - - let mut globals = globals.get(); - let defaults = &mut globals.defaults; - - defaults.animation_mult = 1.0 / config.ui_animation_speed; - defaults.gradient_intensity = config.ui_gradient_intensity; - } - fn play_sound(&mut self, audio_system: &mut audio::AudioSystem, sound_type: SoundType) -> anyhow::Result<()> { let mut assets = self.globals.assets_builtin(); @@ -375,7 +344,7 @@ impl Frontend { FrontendTask::PlaySound(sound_type) => self.queue_play_sound(sound_type), FrontendTask::HideDashboard => self.action_hide_dashboard(params.data), FrontendTask::UpdateWguiDefaultsFromConfig => { - Frontend::update_defaults_from_config(&self.globals, &mut self.interface, params.data) + // Frontend::update_defaults_from_config(&self.globals, &mut self.interface, params.data) } }; Ok(()) diff --git a/uidev/src/main.rs b/uidev/src/main.rs index a812d1ce..e229c6cf 100644 --- a/uidev/src/main.rs +++ b/uidev/src/main.rs @@ -65,7 +65,7 @@ fn load_testbed(audio_sample_player: &mut audio::SamplePlayer) -> anyhow::Result let name = std::env::var("TESTBED").unwrap_or_default(); Ok(match name.as_str() { - "dashboard" => Box::new(TestbedDashboard::new()?), + "dashboard" => Box::new(TestbedDashboard::new(assets)?), "" => Box::new(TestbedGeneric::new(assets)?), _ => Box::new(TestbedAny::new(assets, &name)?), }) diff --git a/uidev/src/testbed/testbed_dashboard.rs b/uidev/src/testbed/testbed_dashboard.rs index a051ad67..f2f4544f 100644 --- a/uidev/src/testbed/testbed_dashboard.rs +++ b/uidev/src/testbed/testbed_dashboard.rs @@ -1,6 +1,11 @@ -use crate::testbed::{Testbed, TestbedUpdateParams}; +use std::path::PathBuf; + +use crate::{ + assets, + testbed::{Testbed, TestbedUpdateParams}, +}; use dash_frontend::frontend::{self, FrontendUpdateParams}; -use wgui::layout::Layout; +use wgui::{font_config::WguiFontConfig, globals::WguiGlobals, layout::Layout}; use wlx_common::{dash_interface_emulated::DashInterfaceEmulated, locale::WayVRLangProvider}; pub struct TestbedDashboard { @@ -8,17 +13,24 @@ pub struct TestbedDashboard { } impl TestbedDashboard { - pub fn new() -> anyhow::Result { + pub fn new(assets: Box) -> anyhow::Result { let interface = DashInterfaceEmulated::new(); let lang_provider = WayVRLangProvider::default(); + let globals = WguiGlobals::new( + assets, + &lang_provider, + wgui::globals::Defaults::default(), + &WguiFontConfig::default(), + PathBuf::new(), // cwd + )?; let frontend = frontend::Frontend::new( frontend::InitParams { interface: Box::new(interface), has_monado: true, + globals, lang_provider: &lang_provider, }, - &mut (), )?; Ok(Self { frontend }) } diff --git a/dash-frontend/assets/Quicksand-Bold.ttf.gz b/wayvr/src/assets/Quicksand-Bold.ttf.gz similarity index 100% rename from dash-frontend/assets/Quicksand-Bold.ttf.gz rename to wayvr/src/assets/Quicksand-Bold.ttf.gz diff --git a/dash-frontend/assets/Quicksand-Light.ttf.gz b/wayvr/src/assets/Quicksand-Light.ttf.gz similarity index 100% rename from dash-frontend/assets/Quicksand-Light.ttf.gz rename to wayvr/src/assets/Quicksand-Light.ttf.gz diff --git a/dash-frontend/assets/Quicksand-Regular.ttf.gz b/wayvr/src/assets/Quicksand-Regular.ttf.gz similarity index 100% rename from dash-frontend/assets/Quicksand-Regular.ttf.gz rename to wayvr/src/assets/Quicksand-Regular.ttf.gz diff --git a/wayvr/src/overlays/dashboard.rs b/wayvr/src/overlays/dashboard.rs index 1fc4b4db..7b42727b 100644 --- a/wayvr/src/overlays/dashboard.rs +++ b/wayvr/src/overlays/dashboard.rs @@ -81,9 +81,9 @@ impl DashFrontend { frontend::InitParams { interface: Box::new(interface), lang_provider: &WayVRLangProvider::from_config(&app.session.config), + globals: app.wgui_globals.clone(), has_monado: matches!(app.xr_backend, XrBackend::OpenXR), }, - app, )?; frontend diff --git a/wayvr/src/state.rs b/wayvr/src/state.rs index 0547549e..63f93137 100644 --- a/wayvr/src/state.rs +++ b/wayvr/src/state.rs @@ -2,6 +2,7 @@ use glam::Affine3A; use idmap::IdMap; use smallvec::{SmallVec, smallvec}; use std::sync::Arc; +use wgui::assets::AssetProvider; use wgui::log::LogErr; use wgui::{ drawing, font_config::WguiFontConfig, gfx::WGfx, globals::WguiGlobals, parser::parse_color_hex, @@ -112,6 +113,10 @@ impl AppState { let mut assets = Box::new(gui::asset::GuiAsset {}); audio_sample_player.register_wgui_samples(assets.as_mut())?; + let font_binary_bold = assets.load_from_path_gzip("Quicksand-Bold.ttf.gz")?; + let font_binary_regular = assets.load_from_path_gzip("Quicksand-Regular.ttf.gz")?; + let font_binary_light = assets.load_from_path_gzip("Quicksand-Light.ttf.gz")?; + let mut defaults = wgui::globals::Defaults::default(); { @@ -131,6 +136,7 @@ impl AppState { defaults.animation_mult = 1. / session.config.ui_animation_speed; defaults.rounding_mult = session.config.ui_round_multiplier; + defaults.gradient_intensity = session.config.ui_gradient_intensity; let dbus = DbusConnector::default(); @@ -158,7 +164,12 @@ impl AppState { assets, &lang_provider, defaults, - &WguiFontConfig::default(), + &WguiFontConfig { + binaries: vec![&font_binary_regular, &font_binary_bold, &font_binary_light], + family_name_sans_serif: "Quicksand", + family_name_serif: "Quicksand", + family_name_monospace: "", + }, get_config_file_path(&theme), )?, dbus,