diff --git a/Cargo.lock b/Cargo.lock index 2ff2af2..aa605b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1361,6 +1361,16 @@ dependencies = [ "syn 2.0.103", ] +[[package]] +name = "dash-frontend" +version = "0.1.0" +dependencies = [ + "anyhow", + "glam", + "rust-embed", + "wgui", +] + [[package]] name = "dasp_sample" version = "0.11.0" @@ -5121,6 +5131,7 @@ name = "uidev" version = "0.1.0" dependencies = [ "anyhow", + "dash-frontend", "glam", "log", "rust-embed", diff --git a/Cargo.toml b/Cargo.toml index e567d1b..3bf9273 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ inherits = "release" debug = true [workspace] -members = ["uidev", "wgui", "wlx-overlay-s", "wlx-capture"] +members = ["uidev", "wgui", "wlx-overlay-s", "wlx-capture", "dash-frontend"] resolver = "3" [workspace.dependencies] diff --git a/dash-frontend/.editorconfig b/dash-frontend/.editorconfig new file mode 100644 index 0000000..f5834b7 --- /dev/null +++ b/dash-frontend/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*.rs] +indent_style = tab +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/dash-frontend/Cargo.toml b/dash-frontend/Cargo.toml new file mode 100644 index 0000000..b920dad --- /dev/null +++ b/dash-frontend/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "dash-frontend" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow.workspace = true +wgui = { path = "../wgui/" } +glam = { workspace = true } +rust-embed = "8.7.2" diff --git a/uidev/assets/dashboard/add.svg b/dash-frontend/assets/dashboard/add.svg similarity index 100% rename from uidev/assets/dashboard/add.svg rename to dash-frontend/assets/dashboard/add.svg diff --git a/uidev/assets/dashboard/alphabetical.svg b/dash-frontend/assets/dashboard/alphabetical.svg similarity index 100% rename from uidev/assets/dashboard/alphabetical.svg rename to dash-frontend/assets/dashboard/alphabetical.svg diff --git a/uidev/assets/dashboard/apps.svg b/dash-frontend/assets/dashboard/apps.svg similarity index 100% rename from uidev/assets/dashboard/apps.svg rename to dash-frontend/assets/dashboard/apps.svg diff --git a/uidev/assets/dashboard/back.svg b/dash-frontend/assets/dashboard/back.svg similarity index 100% rename from uidev/assets/dashboard/back.svg rename to dash-frontend/assets/dashboard/back.svg diff --git a/uidev/assets/dashboard/bat_10.svg b/dash-frontend/assets/dashboard/bat_10.svg similarity index 100% rename from uidev/assets/dashboard/bat_10.svg rename to dash-frontend/assets/dashboard/bat_10.svg diff --git a/uidev/assets/dashboard/bat_100.svg b/dash-frontend/assets/dashboard/bat_100.svg similarity index 100% rename from uidev/assets/dashboard/bat_100.svg rename to dash-frontend/assets/dashboard/bat_100.svg diff --git a/uidev/assets/dashboard/bat_20.svg b/dash-frontend/assets/dashboard/bat_20.svg similarity index 100% rename from uidev/assets/dashboard/bat_20.svg rename to dash-frontend/assets/dashboard/bat_20.svg diff --git a/uidev/assets/dashboard/bat_30.svg b/dash-frontend/assets/dashboard/bat_30.svg similarity index 100% rename from uidev/assets/dashboard/bat_30.svg rename to dash-frontend/assets/dashboard/bat_30.svg diff --git a/uidev/assets/dashboard/bat_40.svg b/dash-frontend/assets/dashboard/bat_40.svg similarity index 100% rename from uidev/assets/dashboard/bat_40.svg rename to dash-frontend/assets/dashboard/bat_40.svg diff --git a/uidev/assets/dashboard/bat_50.svg b/dash-frontend/assets/dashboard/bat_50.svg similarity index 100% rename from uidev/assets/dashboard/bat_50.svg rename to dash-frontend/assets/dashboard/bat_50.svg diff --git a/uidev/assets/dashboard/bat_60.svg b/dash-frontend/assets/dashboard/bat_60.svg similarity index 100% rename from uidev/assets/dashboard/bat_60.svg rename to dash-frontend/assets/dashboard/bat_60.svg diff --git a/uidev/assets/dashboard/bat_70.svg b/dash-frontend/assets/dashboard/bat_70.svg similarity index 100% rename from uidev/assets/dashboard/bat_70.svg rename to dash-frontend/assets/dashboard/bat_70.svg diff --git a/uidev/assets/dashboard/bat_80.svg b/dash-frontend/assets/dashboard/bat_80.svg similarity index 100% rename from uidev/assets/dashboard/bat_80.svg rename to dash-frontend/assets/dashboard/bat_80.svg diff --git a/uidev/assets/dashboard/bat_90.svg b/dash-frontend/assets/dashboard/bat_90.svg similarity index 100% rename from uidev/assets/dashboard/bat_90.svg rename to dash-frontend/assets/dashboard/bat_90.svg diff --git a/uidev/assets/dashboard/bat_chr_10.svg b/dash-frontend/assets/dashboard/bat_chr_10.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_10.svg rename to dash-frontend/assets/dashboard/bat_chr_10.svg diff --git a/uidev/assets/dashboard/bat_chr_100.svg b/dash-frontend/assets/dashboard/bat_chr_100.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_100.svg rename to dash-frontend/assets/dashboard/bat_chr_100.svg diff --git a/uidev/assets/dashboard/bat_chr_20.svg b/dash-frontend/assets/dashboard/bat_chr_20.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_20.svg rename to dash-frontend/assets/dashboard/bat_chr_20.svg diff --git a/uidev/assets/dashboard/bat_chr_30.svg b/dash-frontend/assets/dashboard/bat_chr_30.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_30.svg rename to dash-frontend/assets/dashboard/bat_chr_30.svg diff --git a/uidev/assets/dashboard/bat_chr_40.svg b/dash-frontend/assets/dashboard/bat_chr_40.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_40.svg rename to dash-frontend/assets/dashboard/bat_chr_40.svg diff --git a/uidev/assets/dashboard/bat_chr_50.svg b/dash-frontend/assets/dashboard/bat_chr_50.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_50.svg rename to dash-frontend/assets/dashboard/bat_chr_50.svg diff --git a/uidev/assets/dashboard/bat_chr_60.svg b/dash-frontend/assets/dashboard/bat_chr_60.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_60.svg rename to dash-frontend/assets/dashboard/bat_chr_60.svg diff --git a/uidev/assets/dashboard/bat_chr_70.svg b/dash-frontend/assets/dashboard/bat_chr_70.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_70.svg rename to dash-frontend/assets/dashboard/bat_chr_70.svg diff --git a/uidev/assets/dashboard/bat_chr_80.svg b/dash-frontend/assets/dashboard/bat_chr_80.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_80.svg rename to dash-frontend/assets/dashboard/bat_chr_80.svg diff --git a/uidev/assets/dashboard/bat_chr_90.svg b/dash-frontend/assets/dashboard/bat_chr_90.svg similarity index 100% rename from uidev/assets/dashboard/bat_chr_90.svg rename to dash-frontend/assets/dashboard/bat_chr_90.svg diff --git a/uidev/assets/dashboard/binary.svg b/dash-frontend/assets/dashboard/binary.svg similarity index 100% rename from uidev/assets/dashboard/binary.svg rename to dash-frontend/assets/dashboard/binary.svg diff --git a/uidev/assets/dashboard/burger.svg b/dash-frontend/assets/dashboard/burger.svg similarity index 100% rename from uidev/assets/dashboard/burger.svg rename to dash-frontend/assets/dashboard/burger.svg diff --git a/uidev/assets/dashboard/category_search.svg b/dash-frontend/assets/dashboard/category_search.svg similarity index 100% rename from uidev/assets/dashboard/category_search.svg rename to dash-frontend/assets/dashboard/category_search.svg diff --git a/uidev/assets/dashboard/circle.svg b/dash-frontend/assets/dashboard/circle.svg similarity index 100% rename from uidev/assets/dashboard/circle.svg rename to dash-frontend/assets/dashboard/circle.svg diff --git a/uidev/assets/dashboard/close.svg b/dash-frontend/assets/dashboard/close.svg similarity index 100% rename from uidev/assets/dashboard/close.svg rename to dash-frontend/assets/dashboard/close.svg diff --git a/uidev/assets/dashboard/cpu.svg b/dash-frontend/assets/dashboard/cpu.svg similarity index 100% rename from uidev/assets/dashboard/cpu.svg rename to dash-frontend/assets/dashboard/cpu.svg diff --git a/uidev/assets/dashboard/display.svg b/dash-frontend/assets/dashboard/display.svg similarity index 100% rename from uidev/assets/dashboard/display.svg rename to dash-frontend/assets/dashboard/display.svg diff --git a/uidev/assets/dashboard/displayport.svg b/dash-frontend/assets/dashboard/displayport.svg similarity index 100% rename from uidev/assets/dashboard/displayport.svg rename to dash-frontend/assets/dashboard/displayport.svg diff --git a/uidev/assets/dashboard/eye.svg b/dash-frontend/assets/dashboard/eye.svg similarity index 100% rename from uidev/assets/dashboard/eye.svg rename to dash-frontend/assets/dashboard/eye.svg diff --git a/uidev/assets/dashboard/fix_floor.svg b/dash-frontend/assets/dashboard/fix_floor.svg similarity index 100% rename from uidev/assets/dashboard/fix_floor.svg rename to dash-frontend/assets/dashboard/fix_floor.svg diff --git a/uidev/assets/dashboard/games.svg b/dash-frontend/assets/dashboard/games.svg similarity index 100% rename from uidev/assets/dashboard/games.svg rename to dash-frontend/assets/dashboard/games.svg diff --git a/uidev/assets/dashboard/github.svg b/dash-frontend/assets/dashboard/github.svg similarity index 100% rename from uidev/assets/dashboard/github.svg rename to dash-frontend/assets/dashboard/github.svg diff --git a/uidev/assets/dashboard/globe.svg b/dash-frontend/assets/dashboard/globe.svg similarity index 100% rename from uidev/assets/dashboard/globe.svg rename to dash-frontend/assets/dashboard/globe.svg diff --git a/uidev/assets/dashboard/home.svg b/dash-frontend/assets/dashboard/home.svg similarity index 100% rename from uidev/assets/dashboard/home.svg rename to dash-frontend/assets/dashboard/home.svg diff --git a/uidev/assets/dashboard/knife.svg b/dash-frontend/assets/dashboard/knife.svg similarity index 100% rename from uidev/assets/dashboard/knife.svg rename to dash-frontend/assets/dashboard/knife.svg diff --git a/uidev/assets/dashboard/magic_wand.svg b/dash-frontend/assets/dashboard/magic_wand.svg similarity index 100% rename from uidev/assets/dashboard/magic_wand.svg rename to dash-frontend/assets/dashboard/magic_wand.svg diff --git a/uidev/assets/dashboard/microphone.svg b/dash-frontend/assets/dashboard/microphone.svg similarity index 100% rename from uidev/assets/dashboard/microphone.svg rename to dash-frontend/assets/dashboard/microphone.svg diff --git a/uidev/assets/dashboard/minijack.svg b/dash-frontend/assets/dashboard/minijack.svg similarity index 100% rename from uidev/assets/dashboard/minijack.svg rename to dash-frontend/assets/dashboard/minijack.svg diff --git a/uidev/assets/dashboard/monado.svg b/dash-frontend/assets/dashboard/monado.svg similarity index 100% rename from uidev/assets/dashboard/monado.svg rename to dash-frontend/assets/dashboard/monado.svg diff --git a/uidev/assets/dashboard/panorama.svg b/dash-frontend/assets/dashboard/panorama.svg similarity index 100% rename from uidev/assets/dashboard/panorama.svg rename to dash-frontend/assets/dashboard/panorama.svg diff --git a/uidev/assets/dashboard/play.svg b/dash-frontend/assets/dashboard/play.svg similarity index 100% rename from uidev/assets/dashboard/play.svg rename to dash-frontend/assets/dashboard/play.svg diff --git a/uidev/assets/dashboard/power.svg b/dash-frontend/assets/dashboard/power.svg similarity index 100% rename from uidev/assets/dashboard/power.svg rename to dash-frontend/assets/dashboard/power.svg diff --git a/uidev/assets/dashboard/recenter.svg b/dash-frontend/assets/dashboard/recenter.svg similarity index 100% rename from uidev/assets/dashboard/recenter.svg rename to dash-frontend/assets/dashboard/recenter.svg diff --git a/uidev/assets/dashboard/refresh.svg b/dash-frontend/assets/dashboard/refresh.svg similarity index 100% rename from uidev/assets/dashboard/refresh.svg rename to dash-frontend/assets/dashboard/refresh.svg diff --git a/uidev/assets/dashboard/remove_circle.svg b/dash-frontend/assets/dashboard/remove_circle.svg similarity index 100% rename from uidev/assets/dashboard/remove_circle.svg rename to dash-frontend/assets/dashboard/remove_circle.svg diff --git a/uidev/assets/dashboard/search.svg b/dash-frontend/assets/dashboard/search.svg similarity index 100% rename from uidev/assets/dashboard/search.svg rename to dash-frontend/assets/dashboard/search.svg diff --git a/uidev/assets/dashboard/settings.svg b/dash-frontend/assets/dashboard/settings.svg similarity index 100% rename from uidev/assets/dashboard/settings.svg rename to dash-frontend/assets/dashboard/settings.svg diff --git a/uidev/assets/dashboard/sleep.svg b/dash-frontend/assets/dashboard/sleep.svg similarity index 100% rename from uidev/assets/dashboard/sleep.svg rename to dash-frontend/assets/dashboard/sleep.svg diff --git a/uidev/assets/dashboard/terminal.svg b/dash-frontend/assets/dashboard/terminal.svg similarity index 100% rename from uidev/assets/dashboard/terminal.svg rename to dash-frontend/assets/dashboard/terminal.svg diff --git a/uidev/assets/dashboard/usage.svg b/dash-frontend/assets/dashboard/usage.svg similarity index 100% rename from uidev/assets/dashboard/usage.svg rename to dash-frontend/assets/dashboard/usage.svg diff --git a/uidev/assets/dashboard/volume.svg b/dash-frontend/assets/dashboard/volume.svg similarity index 100% rename from uidev/assets/dashboard/volume.svg rename to dash-frontend/assets/dashboard/volume.svg diff --git a/uidev/assets/dashboard/volume_off.svg b/dash-frontend/assets/dashboard/volume_off.svg similarity index 100% rename from uidev/assets/dashboard/volume_off.svg rename to dash-frontend/assets/dashboard/volume_off.svg diff --git a/uidev/assets/dashboard/vr.svg b/dash-frontend/assets/dashboard/vr.svg similarity index 100% rename from uidev/assets/dashboard/vr.svg rename to dash-frontend/assets/dashboard/vr.svg diff --git a/uidev/assets/dashboard/wayvr_dashboard.svg b/dash-frontend/assets/dashboard/wayvr_dashboard.svg similarity index 100% rename from uidev/assets/dashboard/wayvr_dashboard.svg rename to dash-frontend/assets/dashboard/wayvr_dashboard.svg diff --git a/uidev/assets/dashboard/wayvr_dashboard_mono.svg b/dash-frontend/assets/dashboard/wayvr_dashboard_mono.svg similarity index 100% rename from uidev/assets/dashboard/wayvr_dashboard_mono.svg rename to dash-frontend/assets/dashboard/wayvr_dashboard_mono.svg diff --git a/uidev/assets/dashboard/window.svg b/dash-frontend/assets/dashboard/window.svg similarity index 100% rename from uidev/assets/dashboard/window.svg rename to dash-frontend/assets/dashboard/window.svg diff --git a/uidev/assets/gui/dashboard.xml b/dash-frontend/assets/gui/dashboard.xml similarity index 100% rename from uidev/assets/gui/dashboard.xml rename to dash-frontend/assets/gui/dashboard.xml diff --git a/uidev/assets/gui/templates.xml b/dash-frontend/assets/gui/templates.xml similarity index 100% rename from uidev/assets/gui/templates.xml rename to dash-frontend/assets/gui/templates.xml diff --git a/dash-frontend/assets/gui/theme.xml b/dash-frontend/assets/gui/theme.xml new file mode 100644 index 0000000..bcbda39 --- /dev/null +++ b/dash-frontend/assets/gui/theme.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/dash-frontend/assets/lang/en.json b/dash-frontend/assets/lang/en.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/dash-frontend/assets/lang/en.json @@ -0,0 +1 @@ +{} diff --git a/dash-frontend/rustfmt.toml b/dash-frontend/rustfmt.toml new file mode 100644 index 0000000..39694dc --- /dev/null +++ b/dash-frontend/rustfmt.toml @@ -0,0 +1,2 @@ +tab_spaces = 2 +hard_tabs = true \ No newline at end of file diff --git a/dash-frontend/src/assets.rs b/dash-frontend/src/assets.rs new file mode 100644 index 0000000..cbc6b5e --- /dev/null +++ b/dash-frontend/src/assets.rs @@ -0,0 +1,12 @@ +#[derive(rust_embed::Embed)] +#[folder = "assets/"] +pub struct Asset; + +impl wgui::assets::AssetProvider for Asset { + fn load_from_path(&mut self, path: &str) -> anyhow::Result> { + match Asset::get(path) { + Some(data) => Ok(data.data.to_vec()), + None => anyhow::bail!("embedded file {} not found", path), + } + } +} diff --git a/dash-frontend/src/lib.rs b/dash-frontend/src/lib.rs new file mode 100644 index 0000000..cb0ff36 --- /dev/null +++ b/dash-frontend/src/lib.rs @@ -0,0 +1,48 @@ +use glam::Vec2; +use wgui::{ + event::EventListenerCollection, + globals::WguiGlobals, + layout::Layout, + parser::{ParseDocumentParams, ParserState}, +}; + +mod assets; + +pub struct Frontend { + pub layout: Layout, + + #[allow(dead_code)] + state: ParserState, +} + +pub struct FrontendParams<'a> { + pub listeners: &'a mut EventListenerCollection<(), ()>, +} + +impl Frontend { + pub fn new(params: FrontendParams) -> anyhow::Result { + let globals = WguiGlobals::new(Box::new(assets::Asset {}))?; + + let (layout, state) = wgui::parser::new_layout_from_assets( + params.listeners, + &ParseDocumentParams { + globals, + path: "gui/dashboard.xml", + extra: Default::default(), + }, + )?; + + Ok(Self { layout, state }) + } + + pub fn update(&mut self, width: f32, height: f32, timeste_alpha: f32) -> anyhow::Result<()> { + self + .layout + .update(Vec2::new(width, height), timeste_alpha)?; + Ok(()) + } + + pub fn get_layout(&mut self) -> &mut Layout { + &mut self.layout + } +} diff --git a/uidev/Cargo.toml b/uidev/Cargo.toml index 591c0ce..3427022 100644 --- a/uidev/Cargo.toml +++ b/uidev/Cargo.toml @@ -14,3 +14,4 @@ wgui = { path = "../wgui/" } winit = "0.30.10" vulkano = { workspace = true } vulkano-shaders = { workspace = true } +dash-frontend = { path = "../dash-frontend/" } diff --git a/uidev/src/main.rs b/uidev/src/main.rs index 1938d2b..2334f79 100644 --- a/uidev/src/main.rs +++ b/uidev/src/main.rs @@ -32,7 +32,7 @@ use winit::{ keyboard::{KeyCode, PhysicalKey}, }; -use crate::testbed::testbed_generic::TestbedGeneric; +use crate::testbed::{testbed_dashboard::TestbedDashboard, testbed_generic::TestbedGeneric}; mod assets; mod profiler; @@ -61,6 +61,7 @@ fn load_testbed( ) -> anyhow::Result> { let name = std::env::var("TESTBED").unwrap_or_default(); Ok(match name.as_str() { + "dashboard" => Box::new(TestbedDashboard::new(listeners)?), "" => Box::new(TestbedGeneric::new(listeners)?), _ => Box::new(TestbedAny::new(&name, listeners)?), }) diff --git a/uidev/src/testbed/mod.rs b/uidev/src/testbed/mod.rs index 588f573..a4742a4 100644 --- a/uidev/src/testbed/mod.rs +++ b/uidev/src/testbed/mod.rs @@ -1,6 +1,7 @@ use wgui::layout::Layout; pub mod testbed_any; +pub mod testbed_dashboard; pub mod testbed_generic; pub trait Testbed { diff --git a/uidev/src/testbed/testbed_dashboard.rs b/uidev/src/testbed/testbed_dashboard.rs new file mode 100644 index 0000000..b67cada --- /dev/null +++ b/uidev/src/testbed/testbed_dashboard.rs @@ -0,0 +1,25 @@ +use crate::testbed::Testbed; +use wgui::{event::EventListenerCollection, layout::Layout}; + +pub struct TestbedDashboard { + frontend: dash_frontend::Frontend, +} + +impl TestbedDashboard { + pub fn new(listeners: &mut EventListenerCollection<(), ()>) -> anyhow::Result { + Ok(Self { + frontend: dash_frontend::Frontend::new(dash_frontend::FrontendParams { listeners })?, + }) + } +} + +impl Testbed for TestbedDashboard { + fn update(&mut self, width: f32, height: f32, timestep_alpha: f32) -> anyhow::Result<()> { + self.frontend.update(width, height, timestep_alpha)?; + Ok(()) + } + + fn layout(&mut self) -> &mut Layout { + self.frontend.get_layout() + } +}