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()
+ }
+}