diff --git a/Cargo.lock b/Cargo.lock index 2e8f4b6..75e661e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2884,8 +2884,7 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libmonado" version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56d8582a273a05076c57d5478faa51c39958744760938f2da770e890b43c62d" +source = "git+https://github.com/technobaboo/libmonado-rs.git?rev=26292e5b14663ee2f089f66f0851438a0c00ee67#26292e5b14663ee2f089f66f0851438a0c00ee67" dependencies = [ "bindgen", "cmake", diff --git a/dash-frontend/assets/gui/tab/monado.xml b/dash-frontend/assets/gui/tab/monado.xml index 1534d01..cd89474 100644 --- a/dash-frontend/assets/gui/tab/monado.xml +++ b/dash-frontend/assets/gui/tab/monado.xml @@ -28,8 +28,13 @@ + \ No newline at end of file diff --git a/dash-frontend/assets/lang/de.json b/dash-frontend/assets/lang/de.json index 4188434..f2192eb 100644 --- a/dash-frontend/assets/lang/de.json +++ b/dash-frontend/assets/lang/de.json @@ -144,5 +144,6 @@ }, "AUTOSTART": "Automatisch beim Start ausführen", "LAUNCH": "Starten" - } + }, + "DISPLAY_BRIGHTNESS": "Bildschirmhelligkeit" } \ No newline at end of file diff --git a/dash-frontend/assets/lang/en.json b/dash-frontend/assets/lang/en.json index 7342d2a..7a50884 100644 --- a/dash-frontend/assets/lang/en.json +++ b/dash-frontend/assets/lang/en.json @@ -113,6 +113,7 @@ "VOLUME": "Volume" }, "CLOSE_WINDOW": "Close window", + "DISPLAY_BRIGHTNESS": "Display brightness", "FAILED_TO_LAUNCH_APPLICATION": "Failed to launch a application:", "GAME_LAUNCHED": "Game launched", "GAME_LIST": { diff --git a/dash-frontend/assets/lang/es.json b/dash-frontend/assets/lang/es.json index 06ee798..a5278e4 100644 --- a/dash-frontend/assets/lang/es.json +++ b/dash-frontend/assets/lang/es.json @@ -144,5 +144,6 @@ }, "AUTOSTART": "Ejecutar automáticamente al inicio", "LAUNCH": "Iniciar" - } + }, + "DISPLAY_BRIGHTNESS": "Brillo de la pantalla" } \ No newline at end of file diff --git a/dash-frontend/assets/lang/ja.json b/dash-frontend/assets/lang/ja.json index b9e381f..c854e82 100644 --- a/dash-frontend/assets/lang/ja.json +++ b/dash-frontend/assets/lang/ja.json @@ -144,5 +144,6 @@ }, "AUTOSTART": "起動時に自動実行", "LAUNCH": "起動" - } + }, + "DISPLAY_BRIGHTNESS": "ディスプレイの明るさ" } \ No newline at end of file diff --git a/dash-frontend/assets/lang/pl.json b/dash-frontend/assets/lang/pl.json index 7f48b75..ba29a10 100644 --- a/dash-frontend/assets/lang/pl.json +++ b/dash-frontend/assets/lang/pl.json @@ -1,148 +1,149 @@ { - "ACTIONS": { - "RECENTER_PLAYSPACE": "Wycentruj przestrzeń" - }, - "APP_SETTINGS": { - "HIDE_USERNAME": "Ukryj nazwę użytkownika", - "OPAQUE_BACKGROUND": "Nieprzezroczyste tło", - "WLX": {}, - "LOOK_AND_FEEL": "Wygląd i działanie", - "HIDE_GRAB_HELP": "Ukryj pomoc dotyczącą chwytania", - "ANIMATION_SPEED": "Prędkość animacji UI", - "ROUND_MULTIPLIER": "Zaokrąglenie krawędzi UI", - "USE_SKYBOX": "Włącz niebo", - "USE_PASSTHROUGH": "Włącz passthrough", - "CLOCK_12H": "Zegar 12-godzinny", - "FEATURES": "Funkcje", - "NOTIFICATIONS_ENABLED": "Włącz powiadomienia", - "NOTIFICATIONS_SOUND_ENABLED": "Dźwięki powiadomień", - "KEYBOARD_SOUND_ENABLED": "Dźwięki klawiatury", - "SPACE_DRAG_MULTIPLIER": "Mnożnik przesuwania przestrzeni", - "SPACE_DRAG_UNLOCKED": "Pozwól na przesuwanie przestrzeni na wszystkich osiach", - "SPACE_ROTATE_UNLOCKED": "Pozwól na rotację przestrzeni na wszystkich osiach", - "BLOCK_GAME_INPUT": "Blokuj input z gry", - "BLOCK_GAME_INPUT_IGNORE_WATCH": "Nie blokuj inputu gry, gdy zegarek jest używany", - "CONTROLS": "Sterowanie", - "FOCUS_FOLLOWS_MOUSE_MODE": "Ruch myszą po dotknięciu spustu", - "LEFT_HANDED_MOUSE": "Myszka dla leworęcznych", - "ALLOW_SLIDING": "Interakcja z drążkami podczas chwytania", - "INVERT_SCROLL_DIRECTION_X": "Odwróć kierunek przewijania w poziomie", - "INVERT_SCROLL_DIRECTION_Y": "Odwróć kierunek przewijania w pionie", - "SCROLL_SPEED": "Prędkość przewijania", - "LONG_PRESS_DURATION": "Czas długiego przytrzymania", - "POINTER_LERP_FACTOR": "Wygładzanie wskaźnika", - "XR_CLICK_SENSITIVITY": "Czułość kliknięć XR", - "XR_CLICK_SENSITIVITY_RELEASE": "Czułość zwalniania XR", - "CLICK_FREEZE_TIME_MS": "Czas zamrożenia po kliknięciu (ms)", - "MISC": "Różne", - "XWAYLAND_BY_DEFAULT": "Uruchamiaj aplikacje domyślnie w trybie kompatybilności", - "UPRIGHT_SCREEN_FIX": "Naprawa pozycji ekranu", - "DOUBLE_CURSOR_FIX": "Naprawa podwójnego kursora", - "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", - "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", - "LEFT_HANDED_MOUSE_HELP": "Użyj tego, jeśli przyciski myszy są zamienione", - "BLOCK_GAME_INPUT_HELP": "Blokuje wszystkie dane wejściowe, gdy kursor najedzie na nakładkę", - "BLOCK_GAME_INPUT_IGNORE_WATCH_HELP": "Nie blokuj inputu, gdy wskaźnik jest najedzony", - "USE_SKYBOX_HELP": "Wyświetlaj niebo, jeśli nie ma aplikacji sceny lub passthrough", - "USE_PASSTHROUGH_HELP": "Pozwól na passthrough, jeśli runtime XR to obsługuje", - "SCREEN_RENDER_DOWN_HELP": "Pomaga redukować aliasing na ekranach o wysokiej rozdzielczości", - "SETS_ON_WATCH": "Lista zestawów na zegarku", - "TROUBLESHOOTING": "Rozwiązywanie problemów", - "CLEAR_SAVED_STATE": "Wyczyść zapisany stan", - "CLEAR_PIPEWIRE_TOKENS": "Wyczyść tokeny PipeWire", - "DELETE_ALL_CONFIGS": "Wyczyść konfigurację", - "RESTART_SOFTWARE": "Uruchom ponownie oprogramowanie", - "CLEAR_SAVED_STATE_HELP": "Zresetuj zestawy i pozycje nakładek", - "CLEAR_PIPEWIRE_TOKENS_HELP": "Zapytaj o wybór ekranu przy następnym uruchomieniu", - "DELETE_ALL_CONFIGS_HELP": "Usuń wszystkie pliki konfiguracyjne z katalogu conf.d", - "RESTART_SOFTWARE_HELP": "Zastosuj ustawienia wymagające ponownego uruchomienia", - "CAPTURE_METHOD": "Przechwytywanie ekranu Wayland", - "CAPTURE_METHOD_HELP": "Spróbuj zmienić tę opcję, jeśli masz\nproblemy z czarnym lub migoczącym ekranem", - "KEYBOARD_MIDDLE_CLICK": "Środkowy przycisk myszy na klawiaturze", - "KEYBOARD_MIDDLE_CLICK_HELP": "Modyfikator, który ma zostać użyty podczas pisania\nfioletową wiązką lasera", - "OPTION": { - "PIPEWIRE_HELP": "Szybkie przechwytywanie GPU. Zalecane", - "PW_FALLBACK_HELP": "Wolno. Wypróbuj w przypadku, gdy PipeWire GPU nie działa.", - "SCREENCOPY_HELP": "Wolne. Działa na: Hyprland, Niri, River, Sway" - } - }, - "APPLICATION_LAUNCHER": "Uruchamiacz aplikacji", - "APPLICATIONS": "Aplikacje", - "AUDIO": { - "AUTO_SWITCH_TO_VR_AUDIO": "Automatyczne przełączanie na dźwięk VR", - "CARDS": "Karty", - "FAILED_TO_SWITCH_MICROPHONE": "Nie udało się przełączyć mikrofon", - "MICROPHONE_SET_SUCCESSFULLY": "Mikrofon ustawiono pomyślnie", - "MICROPHONES": "Mikrofony", - "NO_VR_MICROPHONE_SWITCH_MANUALLY": "Brak mikrofonu VR. Włącz go ręcznie.", - "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "Brak głośników VR. Włącz je ręcznie.", - "SELECT_AUDIO_CARD_PROFILE": "Wybierz profil karty dźwiękowej", - "SETTINGS": "Ustawienia dźwięku", - "SPEAKERS": "Głośniki", - "SPEAKERS_SET_SUCCESSFULLY": "Głośniki ustawiono pomyślnie", - "VOLUME": "Głośność" - }, - "GAMES": "Gry", - "GENERAL_SETTINGS": "Ustawienia ogólne", - "HEIGHT": "Wysokość", - "HELLO": "Witaj!", - "HELLO_USER": "Witaj, {USER}!", - "HIDE": "Ukryj", - "HOME_SCREEN": "Ekran główny", - "LIST_OF_PROCESSES": "Lista procesów", - "MONADO_RUNTIME": "Środowisko Monado", - "POPUP_ADD_DISPLAY": { - "RESOLUTION": "Rozdzielczość" - }, - "REMOVE": "Usuń", - "SETTINGS": "Ustawienia", - "SHOW": "Pokaż", - "WIDTH": "Szerokość", - "PROCESSES": "Procesy", - "PROCESS_LIST": { - "NO_PROCESSES_FOUND": "Nie znaleziono procesów", - "LOCATED_ON": "na", - "TERMINATE_PROCESS_NAMED_X": "Zakończ proces \"{PROCESS_NAME}\"" - }, - "FAILED_TO_LAUNCH_APPLICATION": "Nie udało się uruchomić aplikacji:", - "NO_WINDOWS_FOUND": "Nie znaleziono okien", - "WINDOW_OPTIONS": "Opcje okna", - "APPLICATION_STARTED": "Aplikacja uruchomiona", - "LIST_OF_WINDOWS": "Lista okien", - "CLOSE_WINDOW": "Zamknij okno", - "GAME_LIST": { - "NO_GAMES_FOUND": "Nie znaleziono gier" - }, - "TERMINATE_PROCESS": "Zakończ proces", - "GAME_LAUNCHED": "Gra uruchomiona", - "APP_LAUNCHER": { - "MODE": { - "NATIVE": "Tryb natywny", - "CAGE": "Tryb kompatybilności (Cage)" - }, - "RES_TITLE": "Rozdzielczość", - "ASPECT_TITLE": "Proporcje", - "ASPECT": { - "WIDE": "Szeroki", - "SEMI_WIDE": "Półszeroki", - "SQUARE": "Kwadrat", - "SEMI_TALL": "Pół-wysoki", - "TALL": "Wysoki" - }, - "POS_TITLE": "Pozycjonowanie", - "POS": { - "FLOATING": "Pływający", - "ANCHORED": "Przymocowane", - "STATIC": "Statyczny", - "FLOATING_HELP": "Porusza się niezależnie, wycentrowuje się po otwarciu.", - "ANCHORED_HELP": "Pozostaje nieruchoma względem centralnego znacznika.", - "STATIC_HELP": "Nie należy do żadnego zestawu. Nie wyśrodkowuje." - }, - "AUTOSTART": "Uruchom automatycznie przy starcie", - "LAUNCH": "Uruchom" - } -} + "ACTIONS": { + "RECENTER_PLAYSPACE": "Wycentruj przestrzeń" + }, + "APP_SETTINGS": { + "HIDE_USERNAME": "Ukryj nazwę użytkownika", + "OPAQUE_BACKGROUND": "Nieprzezroczyste tło", + "WLX": {}, + "LOOK_AND_FEEL": "Wygląd i działanie", + "HIDE_GRAB_HELP": "Ukryj pomoc dotyczącą chwytania", + "ANIMATION_SPEED": "Prędkość animacji UI", + "ROUND_MULTIPLIER": "Zaokrąglenie krawędzi UI", + "USE_SKYBOX": "Włącz niebo", + "USE_PASSTHROUGH": "Włącz passthrough", + "CLOCK_12H": "Zegar 12-godzinny", + "FEATURES": "Funkcje", + "NOTIFICATIONS_ENABLED": "Włącz powiadomienia", + "NOTIFICATIONS_SOUND_ENABLED": "Dźwięki powiadomień", + "KEYBOARD_SOUND_ENABLED": "Dźwięki klawiatury", + "SPACE_DRAG_MULTIPLIER": "Mnożnik przesuwania przestrzeni", + "SPACE_DRAG_UNLOCKED": "Pozwól na przesuwanie przestrzeni na wszystkich osiach", + "SPACE_ROTATE_UNLOCKED": "Pozwól na rotację przestrzeni na wszystkich osiach", + "BLOCK_GAME_INPUT": "Blokuj input z gry", + "BLOCK_GAME_INPUT_IGNORE_WATCH": "Nie blokuj inputu gry, gdy zegarek jest używany", + "CONTROLS": "Sterowanie", + "FOCUS_FOLLOWS_MOUSE_MODE": "Ruch myszą po dotknięciu spustu", + "LEFT_HANDED_MOUSE": "Myszka dla leworęcznych", + "ALLOW_SLIDING": "Interakcja z drążkami podczas chwytania", + "INVERT_SCROLL_DIRECTION_X": "Odwróć kierunek przewijania w poziomie", + "INVERT_SCROLL_DIRECTION_Y": "Odwróć kierunek przewijania w pionie", + "SCROLL_SPEED": "Prędkość przewijania", + "LONG_PRESS_DURATION": "Czas długiego przytrzymania", + "POINTER_LERP_FACTOR": "Wygładzanie wskaźnika", + "XR_CLICK_SENSITIVITY": "Czułość kliknięć XR", + "XR_CLICK_SENSITIVITY_RELEASE": "Czułość zwalniania XR", + "CLICK_FREEZE_TIME_MS": "Czas zamrożenia po kliknięciu (ms)", + "MISC": "Różne", + "XWAYLAND_BY_DEFAULT": "Uruchamiaj aplikacje domyślnie w trybie kompatybilności", + "UPRIGHT_SCREEN_FIX": "Naprawa pozycji ekranu", + "DOUBLE_CURSOR_FIX": "Naprawa podwójnego kursora", + "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", + "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", + "LEFT_HANDED_MOUSE_HELP": "Użyj tego, jeśli przyciski myszy są zamienione", + "BLOCK_GAME_INPUT_HELP": "Blokuje wszystkie dane wejściowe, gdy kursor najedzie na nakładkę", + "BLOCK_GAME_INPUT_IGNORE_WATCH_HELP": "Nie blokuj inputu, gdy wskaźnik jest najedzony", + "USE_SKYBOX_HELP": "Wyświetlaj niebo, jeśli nie ma aplikacji sceny lub passthrough", + "USE_PASSTHROUGH_HELP": "Pozwól na passthrough, jeśli runtime XR to obsługuje", + "SCREEN_RENDER_DOWN_HELP": "Pomaga redukować aliasing na ekranach o wysokiej rozdzielczości", + "SETS_ON_WATCH": "Lista zestawów na zegarku", + "TROUBLESHOOTING": "Rozwiązywanie problemów", + "CLEAR_SAVED_STATE": "Wyczyść zapisany stan", + "CLEAR_PIPEWIRE_TOKENS": "Wyczyść tokeny PipeWire", + "DELETE_ALL_CONFIGS": "Wyczyść konfigurację", + "RESTART_SOFTWARE": "Uruchom ponownie oprogramowanie", + "CLEAR_SAVED_STATE_HELP": "Zresetuj zestawy i pozycje nakładek", + "CLEAR_PIPEWIRE_TOKENS_HELP": "Zapytaj o wybór ekranu przy następnym uruchomieniu", + "DELETE_ALL_CONFIGS_HELP": "Usuń wszystkie pliki konfiguracyjne z katalogu conf.d", + "RESTART_SOFTWARE_HELP": "Zastosuj ustawienia wymagające ponownego uruchomienia", + "CAPTURE_METHOD": "Przechwytywanie ekranu Wayland", + "CAPTURE_METHOD_HELP": "Spróbuj zmienić tę opcję, jeśli masz\nproblemy z czarnym lub migoczącym ekranem", + "KEYBOARD_MIDDLE_CLICK": "Środkowy przycisk myszy na klawiaturze", + "KEYBOARD_MIDDLE_CLICK_HELP": "Modyfikator, który ma zostać użyty podczas pisania\nfioletową wiązką lasera", + "OPTION": { + "PIPEWIRE_HELP": "Szybkie przechwytywanie GPU. Zalecane", + "PW_FALLBACK_HELP": "Wolno. Wypróbuj w przypadku, gdy PipeWire GPU nie działa.", + "SCREENCOPY_HELP": "Wolne. Działa na: Hyprland, Niri, River, Sway" + } + }, + "APPLICATION_LAUNCHER": "Uruchamiacz aplikacji", + "APPLICATIONS": "Aplikacje", + "AUDIO": { + "AUTO_SWITCH_TO_VR_AUDIO": "Automatyczne przełączanie na dźwięk VR", + "CARDS": "Karty", + "FAILED_TO_SWITCH_MICROPHONE": "Nie udało się przełączyć mikrofon", + "MICROPHONE_SET_SUCCESSFULLY": "Mikrofon ustawiono pomyślnie", + "MICROPHONES": "Mikrofony", + "NO_VR_MICROPHONE_SWITCH_MANUALLY": "Brak mikrofonu VR. Włącz go ręcznie.", + "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "Brak głośników VR. Włącz je ręcznie.", + "SELECT_AUDIO_CARD_PROFILE": "Wybierz profil karty dźwiękowej", + "SETTINGS": "Ustawienia dźwięku", + "SPEAKERS": "Głośniki", + "SPEAKERS_SET_SUCCESSFULLY": "Głośniki ustawiono pomyślnie", + "VOLUME": "Głośność" + }, + "GAMES": "Gry", + "GENERAL_SETTINGS": "Ustawienia ogólne", + "HEIGHT": "Wysokość", + "HELLO": "Witaj!", + "HELLO_USER": "Witaj, {USER}!", + "HIDE": "Ukryj", + "HOME_SCREEN": "Ekran główny", + "LIST_OF_PROCESSES": "Lista procesów", + "MONADO_RUNTIME": "Środowisko Monado", + "POPUP_ADD_DISPLAY": { + "RESOLUTION": "Rozdzielczość" + }, + "REMOVE": "Usuń", + "SETTINGS": "Ustawienia", + "SHOW": "Pokaż", + "WIDTH": "Szerokość", + "PROCESSES": "Procesy", + "PROCESS_LIST": { + "NO_PROCESSES_FOUND": "Nie znaleziono procesów", + "LOCATED_ON": "na", + "TERMINATE_PROCESS_NAMED_X": "Zakończ proces \"{PROCESS_NAME}\"" + }, + "FAILED_TO_LAUNCH_APPLICATION": "Nie udało się uruchomić aplikacji:", + "NO_WINDOWS_FOUND": "Nie znaleziono okien", + "WINDOW_OPTIONS": "Opcje okna", + "APPLICATION_STARTED": "Aplikacja uruchomiona", + "LIST_OF_WINDOWS": "Lista okien", + "CLOSE_WINDOW": "Zamknij okno", + "GAME_LIST": { + "NO_GAMES_FOUND": "Nie znaleziono gier" + }, + "TERMINATE_PROCESS": "Zakończ proces", + "GAME_LAUNCHED": "Gra uruchomiona", + "APP_LAUNCHER": { + "MODE": { + "NATIVE": "Tryb natywny", + "CAGE": "Tryb kompatybilności (Cage)" + }, + "RES_TITLE": "Rozdzielczość", + "ASPECT_TITLE": "Proporcje", + "ASPECT": { + "WIDE": "Szeroki", + "SEMI_WIDE": "Półszeroki", + "SQUARE": "Kwadrat", + "SEMI_TALL": "Pół-wysoki", + "TALL": "Wysoki" + }, + "POS_TITLE": "Pozycjonowanie", + "POS": { + "FLOATING": "Pływający", + "ANCHORED": "Przymocowane", + "STATIC": "Statyczny", + "FLOATING_HELP": "Porusza się niezależnie, wycentrowuje się po otwarciu.", + "ANCHORED_HELP": "Pozostaje nieruchoma względem centralnego znacznika.", + "STATIC_HELP": "Nie należy do żadnego zestawu. Nie wyśrodkowuje." + }, + "AUTOSTART": "Uruchom automatycznie przy starcie", + "LAUNCH": "Uruchom" + }, + "DISPLAY_BRIGHTNESS": "Jasność wyświetlacza" +} \ No newline at end of file diff --git a/dash-frontend/src/tab/monado.rs b/dash-frontend/src/tab/monado.rs index 8540ee6..30abf19 100644 --- a/dash-frontend/src/tab/monado.rs +++ b/dash-frontend/src/tab/monado.rs @@ -2,7 +2,7 @@ use std::{collections::HashMap, marker::PhantomData, rc::Rc}; use wgui::{ assets::AssetPath, - components::checkbox::ComponentCheckbox, + components::{checkbox::ComponentCheckbox, slider::ComponentSlider}, globals::WguiGlobals, layout::WidgetID, parser::{self, Fetchable, ParseDocumentParams, ParserState}, @@ -19,6 +19,7 @@ use crate::{ enum Task { Refresh, FocusClient(String), + SetBrightness(f32), } pub struct TabMonado { @@ -46,6 +47,7 @@ impl Tab for TabMonado { match task { Task::Refresh => self.refresh(frontend, data)?, Task::FocusClient(name) => self.focus_client(frontend, data, name)?, + Task::SetBrightness(brightness) => self.set_brightness(frontend, data, brightness), } } @@ -152,6 +154,22 @@ impl TabMonado { self.mount_client(frontend, &client)?; } + // get brightness + let slider_brightness = self.state.fetch_component_as::("slider_brightness")?; + if let Some(brightness) = frontend.interface.monado_brightness_get(data) { + let mut c = frontend.layout.start_common(); + slider_brightness.set_value(&mut c.common(), brightness * 100.0); + c.finish()?; + + slider_brightness.on_value_changed({ + let tasks = self.tasks.clone(); + Box::new(move |_common, e| { + tasks.push(Task::SetBrightness(e.value / 100.0)); + Ok(()) + }) + }); + } + Ok(()) } @@ -160,4 +178,8 @@ impl TabMonado { self.tasks.push(Task::Refresh); Ok(()) } + + fn set_brightness(&mut self, frontend: &mut Frontend, data: &mut T, brightness: f32) { + frontend.interface.monado_brightness_set(data, brightness); + } } diff --git a/wlx-common/src/dash_interface.rs b/wlx-common/src/dash_interface.rs index 1c47efd..1fd6fb1 100644 --- a/wlx-common/src/dash_interface.rs +++ b/wlx-common/src/dash_interface.rs @@ -31,6 +31,8 @@ pub trait DashInterface { fn process_terminate(&mut self, data: &mut T, handle: WvrProcessHandle) -> anyhow::Result<()>; fn monado_client_list(&mut self, data: &mut T) -> anyhow::Result>; fn monado_client_focus(&mut self, data: &mut T, name: &str) -> anyhow::Result<()>; + fn monado_brightness_get(&mut self, data: &mut T) -> Option; + fn monado_brightness_set(&mut self, data: &mut T, brightness: f32) -> Option<()>; 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; diff --git a/wlx-common/src/dash_interface_emulated.rs b/wlx-common/src/dash_interface_emulated.rs index d521663..abc74f5 100644 --- a/wlx-common/src/dash_interface_emulated.rs +++ b/wlx-common/src/dash_interface_emulated.rs @@ -62,6 +62,7 @@ pub struct DashInterfaceEmulated { desktop_finder: DesktopFinder, general_config: GeneralConfig, monado_clients: Vec, + brightness: f32, } impl DashInterfaceEmulated { @@ -119,6 +120,7 @@ impl DashInterfaceEmulated { desktop_finder, general_config, monado_clients, + brightness: 1.0, } } } @@ -243,4 +245,13 @@ impl DashInterface<()> for DashInterfaceEmulated { } Ok(()) } + + fn monado_brightness_get(&mut self, _: &mut ()) -> Option { + Some(self.brightness) + } + + fn monado_brightness_set(&mut self, _: &mut (), brightness: f32) -> Option<()> { + self.brightness = brightness; + Some(()) + } } diff --git a/wlx-overlay-s/Cargo.toml b/wlx-overlay-s/Cargo.toml index ca36f99..6052181 100644 --- a/wlx-overlay-s/Cargo.toml +++ b/wlx-overlay-s/Cargo.toml @@ -57,7 +57,7 @@ interprocess = { version = "2.2.3" } json = { version = "0.12.4", optional = true } json5 = "1.3.0" libc = "0.2.178" -libmonado = { version = "1.3.2", optional = true } +libmonado = { git = "https://github.com/technobaboo/libmonado-rs.git", rev = "26292e5b14663ee2f089f66f0851438a0c00ee67", optional = true } log-panics = { version = "2.1.0", features = ["with-backtrace"] } mint = "0.5.9" openxr = { git = "https://github.com/Ralith/openxrs", rev = "d0afdd3365bc1e14de28f6a3a21f457e788a702e", features = [ diff --git a/wlx-overlay-s/src/overlays/dashboard.rs b/wlx-overlay-s/src/overlays/dashboard.rs index 6d7a1b2..8033643 100644 --- a/wlx-overlay-s/src/overlays/dashboard.rs +++ b/wlx-overlay-s/src/overlays/dashboard.rs @@ -487,10 +487,37 @@ impl DashInterface for DashInterfaceLive { app.monado_init(); Ok(()) } + + fn monado_brightness_get(&mut self, app: &mut AppState) -> Option { + let Some(monado) = &mut app.monado else { + return None; + }; + + monado_get_brightness(monado) + } + + fn monado_brightness_set(&mut self, app: &mut AppState, brightness: f32) -> Option<()> { + let Some(monado) = &mut app.monado else { + return None; + }; + + monado_set_brightness(monado, brightness).ok() + } } const CLIENT_NAME_BLACKLIST: [&str; 2] = ["wlx-overlay-s", "libmonado"]; +fn monado_get_brightness(monado: &mut libmonado::Monado) -> Option { + let device = monado.device_from_role(libmonado::DeviceRole::Head).ok()?; + device.brightness().ok() +} + +fn monado_set_brightness(monado: &mut libmonado::Monado, brightness: f32) -> anyhow::Result<()> { + let device = monado.device_from_role(libmonado::DeviceRole::Head)?; + device.set_brightness(brightness, false)?; + Ok(()) +} + fn monado_list_clients_filtered( monado: &mut libmonado::Monado, ) -> anyhow::Result>> {