From 4d1154cdcb43481aa9353113f4447efbe4021a02 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Thu, 8 Jan 2026 01:06:54 +0900 Subject: [PATCH] watch rework --- dash-frontend/assets/lang/de.json | 4 +- dash-frontend/assets/lang/en.json | 3 +- dash-frontend/assets/lang/ja.json | 2 - dash-frontend/assets/lang/pl.json | 4 +- dash-frontend/src/tab/settings.rs | 18 +- wlx-common/src/config.rs | 2 +- wlx-common/src/dash_interface.rs | 1 + wlx-common/src/dash_interface_emulated.rs | 2 + wlx-overlay-s/src/assets/gui/watch-noset.xml | 133 ----- wlx-overlay-s/src/assets/gui/watch.xml | 172 +++--- wlx-overlay-s/src/backend/input.rs | 3 +- wlx-overlay-s/src/backend/task.rs | 10 +- wlx-overlay-s/src/gui/panel/button.rs | 30 +- wlx-overlay-s/src/gui/panel/device_list.rs | 67 +++ wlx-overlay-s/src/gui/panel/label.rs | 1 + wlx-overlay-s/src/gui/panel/mod.rs | 1 + wlx-overlay-s/src/gui/panel/overlay_list.rs | 15 +- wlx-overlay-s/src/gui/panel/set_list.rs | 4 + wlx-overlay-s/src/overlays/dashboard.rs | 25 +- wlx-overlay-s/src/overlays/screen/mirror.rs | 13 +- wlx-overlay-s/src/overlays/watch.rs | 548 ++++--------------- wlx-overlay-s/src/res/config.yaml | 5 +- wlx-overlay-s/src/windowing/backend.rs | 1 + wlx-overlay-s/src/windowing/manager.rs | 30 +- wlx-overlay-s/src/windowing/window.rs | 12 +- 25 files changed, 376 insertions(+), 730 deletions(-) delete mode 100644 wlx-overlay-s/src/assets/gui/watch-noset.xml create mode 100644 wlx-overlay-s/src/gui/panel/device_list.rs diff --git a/dash-frontend/assets/lang/de.json b/dash-frontend/assets/lang/de.json index a41ed43..1e04655 100644 --- a/dash-frontend/assets/lang/de.json +++ b/dash-frontend/assets/lang/de.json @@ -16,7 +16,6 @@ "HIDE_GRAB_HELP": "Greif-Hilfe ausblenden", "ANIMATION_SPEED": "UI-Animationsgeschwindigkeit", "ROUND_MULTIPLIER": "UI-Kantenrundung", - "SINGLE_SET_MODE": "Einzelnes Modus", "USE_SKYBOX": "Skybox aktivieren", "USE_PASSTHROUGH": "Passthrough aktivieren", "CLOCK_12H": "12-Stunden-Uhr", @@ -48,7 +47,6 @@ "SCREEN_RENDER_DOWN": "Bildschirm bei niedrigerer Auflösung rendern", "UPRIGHT_SCREEN_FIX_HELP": "Behebt hochstehende Bildschirme auf einigen Desktops", "DOUBLE_CURSOR_FIX_HELP": "Aktivieren Sie dies, wenn Sie 2 Cursor sehen", - "SINGLE_SET_MODE_HELP": "Optimieren Sie die Anzeige für die Arbeit mit einem einzelnen Monitor", "XR_CLICK_SENSITIVITY_HELP": "Analoge Trigger-Empfindlichkeit", "XR_CLICK_SENSITIVITY_RELEASE_HELP": "Muss niedriger als Klick sein", "CLICK_FREEZE_TIME_MS_HELP": "Hilft bei der Präzision von Doppelklicks", @@ -102,4 +100,4 @@ }, "TERMINATE_PROCESS": "Prozess beenden", "GAME_LAUNCHED": "Spiel gestartet" -} \ No newline at end of file +} diff --git a/dash-frontend/assets/lang/en.json b/dash-frontend/assets/lang/en.json index 682f465..8ece3e3 100644 --- a/dash-frontend/assets/lang/en.json +++ b/dash-frontend/assets/lang/en.json @@ -10,7 +10,7 @@ "HIDE_GRAB_HELP": "Hide grab help", "ANIMATION_SPEED": "UI Animation speed", "ROUND_MULTIPLIER": "UI Edge roundness", - "SINGLE_SET_MODE": "Single set mode", + "SETS_ON_WATCH": "Sets on watch", "USE_SKYBOX": "Enable skybox", "USE_PASSTHROUGH": "Enable passthrough", "CLOCK_12H": "12-hour clock", @@ -49,7 +49,6 @@ "UPRIGHT_SCREEN_FIX_HELP": "Fixes upright screens on some desktops", "DOUBLE_CURSOR_FIX_HELP": "Enable this if you see 2 cursors", - "SINGLE_SET_MODE_HELP": "Optimize the watch for working with a single set", "XR_CLICK_SENSITIVITY_HELP": "Analog trigger sensitivity", "XR_CLICK_SENSITIVITY_RELEASE_HELP": "Must be lower than click", "CLICK_FREEZE_TIME_MS_HELP": "Helps with double-click precision", diff --git a/dash-frontend/assets/lang/ja.json b/dash-frontend/assets/lang/ja.json index 2dcf3b0..9c5cabf 100644 --- a/dash-frontend/assets/lang/ja.json +++ b/dash-frontend/assets/lang/ja.json @@ -16,7 +16,6 @@ "HIDE_GRAB_HELP": "掴み操作のヘルプを非表示にする", "ANIMATION_SPEED": "UIアニメーション速度", "ROUND_MULTIPLIER": "UI エッジの丸み", - "SINGLE_SET_MODE": "単一設定モード", "USE_SKYBOX": "スカイボックスを有効にする", "USE_PASSTHROUGH": "パススルーを有効にする", "CLOCK_12H": "12時間制", @@ -48,7 +47,6 @@ "SCREEN_RENDER_DOWN": "低い解像度で画面をレンダリングする", "UPRIGHT_SCREEN_FIX_HELP": "一部のデスクトップで縦向きの画面を修正", "DOUBLE_CURSOR_FIX_HELP": "2つのカーソルが表示される場合は、これを有効にします", - "SINGLE_SET_MODE_HELP": "シングルセットでの作業用に最適化", "XR_CLICK_SENSITIVITY_HELP": "アナログトリガの感度", "XR_CLICK_SENSITIVITY_RELEASE_HELP": "クリックより低くする必要があります", "CLICK_FREEZE_TIME_MS_HELP": "ダブルクリックの精度向上に役立ちます", diff --git a/dash-frontend/assets/lang/pl.json b/dash-frontend/assets/lang/pl.json index cf46b7c..e4c8000 100644 --- a/dash-frontend/assets/lang/pl.json +++ b/dash-frontend/assets/lang/pl.json @@ -10,7 +10,6 @@ "HIDE_GRAB_HELP": "Ukryj pomoc dotyczącą chwytania", "ANIMATION_SPEED": "Prędkość animacji UI", "ROUND_MULTIPLIER": "Zaokrąglenie krawędzi UI", - "SINGLE_SET_MODE": "Tryb pojedynczego zestawu", "USE_SKYBOX": "Włącz niebo", "USE_PASSTHROUGH": "Włącz passthrough", "CLOCK_12H": "Zegar 12-godzinny", @@ -42,7 +41,6 @@ "SCREEN_RENDER_DOWN": "Renderuj ekran w niższej rozdzielczości", "UPRIGHT_SCREEN_FIX_HELP": "Naprawia pionowe ekrany na niektórych komputerach", "DOUBLE_CURSOR_FIX_HELP": "Włącz to, jeśli widzisz 2 kursory", - "SINGLE_SET_MODE_HELP": "Zoptymalizuj oglądanie dla pracy z jednym zestawem", "XR_CLICK_SENSITIVITY_HELP": "Czułość analogowego spustu", "XR_CLICK_SENSITIVITY_RELEASE_HELP": "Musi być niższa niż kliknięcie", "CLICK_FREEZE_TIME_MS_HELP": "Pomaga w precyzji podwójnego kliknięcia", @@ -102,4 +100,4 @@ }, "TERMINATE_PROCESS": "Zakończ proces", "GAME_LAUNCHED": "Gra uruchomiona" -} \ No newline at end of file +} diff --git a/dash-frontend/src/tab/settings.rs b/dash-frontend/src/tab/settings.rs index bc38630..4260137 100644 --- a/dash-frontend/src/tab/settings.rs +++ b/dash-frontend/src/tab/settings.rs @@ -36,22 +36,29 @@ impl Tab for TabSettings { fn update(&mut self, frontend: &mut Frontend, data: &mut T) -> anyhow::Result<()> { let config = frontend.interface.general_config(data); + let mut changed = false; for task in self.tasks.drain() { match task { Task::UpdateBool(setting, n) => { setting.get_frontend_task().map(|task| frontend.tasks.push(task)); *setting.mut_bool(config) = n; + changed = true; } Task::UpdateFloat(setting, n) => { setting.get_frontend_task().map(|task| frontend.tasks.push(task)); *setting.mut_f32(config) = n; + changed = true; } Task::UpdateInt(setting, n) => { setting.get_frontend_task().map(|task| frontend.tasks.push(task)); *setting.mut_i32(config) = n; + changed = true; } } } + if changed { + frontend.interface.config_changed(data); + } Ok(()) } } @@ -70,7 +77,7 @@ enum SettingType { KeyboardSoundEnabled, UprightScreenFix, DoubleCursorFix, - SingleSetMode, + SetsOnWatch, HideGrabHelp, XrClickSensitivity, XrClickSensitivityRelease, @@ -103,7 +110,7 @@ impl SettingType { Self::KeyboardSoundEnabled => &mut config.keyboard_sound_enabled, Self::UprightScreenFix => &mut config.upright_screen_fix, Self::DoubleCursorFix => &mut config.double_cursor_fix, - Self::SingleSetMode => &mut config.single_set_mode, + Self::SetsOnWatch => &mut config.sets_on_watch, Self::HideGrabHelp => &mut config.hide_grab_help, Self::AllowSliding => &mut config.allow_sliding, Self::FocusFollowsMouseMode => &mut config.focus_follows_mouse_mode, @@ -158,7 +165,7 @@ impl SettingType { Self::KeyboardSoundEnabled => Ok("APP_SETTINGS.KEYBOARD_SOUND_ENABLED"), Self::UprightScreenFix => Ok("APP_SETTINGS.UPRIGHT_SCREEN_FIX"), Self::DoubleCursorFix => Ok("APP_SETTINGS.DOUBLE_CURSOR_FIX"), - Self::SingleSetMode => Ok("APP_SETTINGS.SINGLE_SET_MODE"), + Self::SetsOnWatch => Ok("APP_SETTINGS.SETS_ON_WATCH"), Self::HideGrabHelp => Ok("APP_SETTINGS.HIDE_GRAB_HELP"), Self::XrClickSensitivity => Ok("APP_SETTINGS.XR_CLICK_SENSITIVITY"), Self::XrClickSensitivityRelease => Ok("APP_SETTINGS.XR_CLICK_SENSITIVITY_RELEASE"), @@ -186,7 +193,6 @@ impl SettingType { match self { Self::UprightScreenFix => Some("APP_SETTINGS.UPRIGHT_SCREEN_FIX_HELP"), Self::DoubleCursorFix => Some("APP_SETTINGS.DOUBLE_CURSOR_FIX_HELP"), - Self::SingleSetMode => Some("APP_SETTINGS.SINGLE_SET_MODE_HELP"), Self::XrClickSensitivity => Some("APP_SETTINGS.XR_CLICK_SENSITIVITY_HELP"), Self::XrClickSensitivityRelease => Some("APP_SETTINGS.XR_CLICK_SENSITIVITY_RELEASE_HELP"), Self::FocusFollowsMouseMode => Some("APP_SETTINGS.FOCUS_FOLLOWS_MOUSE_MODE_HELP"), @@ -207,7 +213,7 @@ impl SettingType { | Self::RoundMultiplier | Self::UprightScreenFix | Self::DoubleCursorFix - | Self::SingleSetMode + | Self::SetsOnWatch | Self::UseSkybox | Self::UsePassthrough | Self::ScreenRenderDown => true, @@ -388,7 +394,7 @@ impl TabSettings { checkbox!(mp, c, SettingType::HideGrabHelp); slider_f32!(mp, c, SettingType::AnimationSpeed, 0.5, 5.0, 0.1); // min, max, step slider_f32!(mp, c, SettingType::RoundMultiplier, 0.5, 5.0, 0.1); - checkbox!(mp, c, SettingType::SingleSetMode); + checkbox!(mp, c, SettingType::SetsOnWatch); checkbox!(mp, c, SettingType::UseSkybox); checkbox!(mp, c, SettingType::UsePassthrough); checkbox!(mp, c, SettingType::Clock12h); diff --git a/wlx-common/src/config.rs b/wlx-common/src/config.rs index abd2e7c..d897d2a 100644 --- a/wlx-common/src/config.rs +++ b/wlx-common/src/config.rs @@ -166,7 +166,7 @@ pub struct GeneralConfig { pub double_cursor_fix: bool, #[serde(default = "def_false")] - pub single_set_mode: bool, + pub sets_on_watch: bool, #[serde(default = "def_false")] pub hide_grab_help: bool, diff --git a/wlx-common/src/dash_interface.rs b/wlx-common/src/dash_interface.rs index 898867a..c4c5d60 100644 --- a/wlx-common/src/dash_interface.rs +++ b/wlx-common/src/dash_interface.rs @@ -16,6 +16,7 @@ pub trait DashInterface { fn recenter_playspace(&mut self, data: &mut T) -> anyhow::Result<()>; fn desktop_finder<'a>(&'a mut self, data: &'a mut T) -> &'a mut DesktopFinder; fn general_config<'a>(&'a mut self, data: &'a mut T) -> &'a mut GeneralConfig; + fn config_changed(&mut self, data: &mut T); } pub type BoxDashInterface = Box>; diff --git a/wlx-common/src/dash_interface_emulated.rs b/wlx-common/src/dash_interface_emulated.rs index dfd4027..64d3fe7 100644 --- a/wlx-common/src/dash_interface_emulated.rs +++ b/wlx-common/src/dash_interface_emulated.rs @@ -178,4 +178,6 @@ impl DashInterface<()> for DashInterfaceEmulated { fn general_config<'a>(&'a mut self, _: &'a mut ()) -> &'a mut crate::config::GeneralConfig { &mut self.general_config } + + fn config_changed(&mut self, _: &mut ()) {} } diff --git a/wlx-overlay-s/src/assets/gui/watch-noset.xml b/wlx-overlay-s/src/assets/gui/watch-noset.xml deleted file mode 100644 index 6878d0d..0000000 --- a/wlx-overlay-s/src/assets/gui/watch-noset.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - -
- - -
- - -
-
-
-
- -
-
-
-
-
-
- - -
-
- - -
-
- - -
-
-
- - -
- - - - - - - - - -
-
-
-
-
diff --git a/wlx-overlay-s/src/assets/gui/watch.xml b/wlx-overlay-s/src/assets/gui/watch.xml index f65f9a6..4d68bdd 100644 --- a/wlx-overlay-s/src/assets/gui/watch.xml +++ b/wlx-overlay-s/src/assets/gui/watch.xml @@ -19,22 +19,52 @@ align_items="center" justify_content="center" /> -