From f3bb2e070b5e1a189508f542926cd7362331cc7c Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:40:08 +0900 Subject: [PATCH] wip: bindings ui --- Cargo.lock | 17 + Cargo.toml | 1 + dash-frontend/Cargo.toml | 1 + dash-frontend/assets/bindings.json.lz4 | Bin 0 -> 5519 bytes dash-frontend/assets/gui/tab/settings.xml | 7 + dash-frontend/assets/gui/view/bindings.xml | 21 + .../assets/gui/view/input_profiles.xml | 15 + dash-frontend/assets/lang/en.json | 51 +- dash-frontend/src/tab/settings/mod.rs | 2 +- .../src/tab/settings/tab_controls.rs | 98 ++- .../src/tab/settings/tab_features.rs | 2 +- dash-frontend/src/util/mod.rs | 1 + .../src/util/openxr_bindings_schema.rs | 255 +++++++ dash-frontend/src/views/bindings.rs | 656 ++++++++++++++++++ dash-frontend/src/views/input_profiles.rs | 150 ++++ dash-frontend/src/views/mod.rs | 2 + dash-frontend/update-bindings-json.sh | 84 +++ wayvr/Cargo.toml | 2 +- wayvr/src/backend/openxr/input.rs | 72 +- wayvr/src/windowing/manager.rs | 15 +- wayvr/src/windowing/window.rs | 26 +- wlx-common/Cargo.toml | 1 + .../assets}/openxr_actions.json5 | 0 wlx-common/src/config_io.rs | 6 + wlx-common/src/lib.rs | 1 + wlx-common/src/openxr_actions.rs | 66 ++ 26 files changed, 1457 insertions(+), 95 deletions(-) create mode 100644 dash-frontend/assets/bindings.json.lz4 create mode 100644 dash-frontend/assets/gui/view/bindings.xml create mode 100644 dash-frontend/assets/gui/view/input_profiles.xml create mode 100644 dash-frontend/src/util/openxr_bindings_schema.rs create mode 100644 dash-frontend/src/views/bindings.rs create mode 100644 dash-frontend/src/views/input_profiles.rs create mode 100755 dash-frontend/update-bindings-json.sh rename {wayvr/src/backend/openxr => wlx-common/assets}/openxr_actions.json5 (100%) create mode 100644 wlx-common/src/openxr_actions.rs diff --git a/Cargo.lock b/Cargo.lock index 620e572d..518a5fef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1444,6 +1444,7 @@ dependencies = [ "hyper", "keyvalues-parser", "log", + "lz4_flex", "rust-embed", "serde", "serde_json", @@ -3104,6 +3105,15 @@ dependencies = [ "hashbrown 0.16.1", ] +[[package]] +name = "lz4_flex" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" +dependencies = [ + "twox-hash", +] + [[package]] name = "mach2" version = "0.4.3" @@ -5969,6 +5979,12 @@ dependencies = [ "core_maths", ] +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + [[package]] name = "typeid" version = "1.0.3" @@ -7221,6 +7237,7 @@ dependencies = [ "rust-ini", "serde", "serde_json", + "serde_json5", "smol", "strum", "walkdir", diff --git a/Cargo.toml b/Cargo.toml index d32be292..a730f658 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ regex = "1.12.2" rust-embed = "8.9.0" serde = { version = "1", features = ["derive"] } serde_json = "1.0.145" +serde_json5 = "0.2.1" slotmap = "1.1.1" smol = "2.0.2" strum = { version = "0.27.2", features = ["derive"] } diff --git a/dash-frontend/Cargo.toml b/dash-frontend/Cargo.toml index d138ab4d..6b72aebc 100644 --- a/dash-frontend/Cargo.toml +++ b/dash-frontend/Cargo.toml @@ -16,6 +16,7 @@ http-body-util = "0.1.3" hyper = { version = "1.8.1", features = ["client", "http1", "http2"] } keyvalues-parser = { git = "https://codeberg.org/CosmicHarper/vdf-rs.git", rev = "fc6dcbea9eb13cacb98dea40063f6f56cde6e145" } log.workspace = true +lz4_flex = { version = "0.13.1", features = ["frame"] } rust-embed.workspace = true serde = { workspace = true, features = ["rc"] } serde_json.workspace = true diff --git a/dash-frontend/assets/bindings.json.lz4 b/dash-frontend/assets/bindings.json.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..d76de600ad93c44c62da197469219dbff0184717 GIT binary patch literal 5519 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 MK>nUw@YbLIA9d8S82|tP literal 0 HcmV?d00001 diff --git a/dash-frontend/assets/gui/tab/settings.xml b/dash-frontend/assets/gui/tab/settings.xml index 8b7d33a8..ee5a7621 100644 --- a/dash-frontend/assets/gui/tab/settings.xml +++ b/dash-frontend/assets/gui/tab/settings.xml @@ -31,6 +31,13 @@ + +