From 368710fd9d5891c6a664db6c551989906f386b68 Mon Sep 17 00:00:00 2001 From: Observer KRypt0n_ Date: Wed, 14 Sep 2022 09:32:56 +0200 Subject: [PATCH] Improved FPS unlocker support - added fullscreen and priority options - added fps unlocker folder creation --- assets/ui/preferences/enhancements.blp | 25 +++++++++++++++ .../enhancements/fps_unlocker/config/mod.rs | 18 +++++++++-- src/lib/fps_unlocker/config_schema.rs | 2 ++ src/lib/fps_unlocker/mod.rs | 5 +++ src/ui/preferences/enhancements.rs | 32 +++++++++++++++++-- 5 files changed, 78 insertions(+), 4 deletions(-) diff --git a/assets/ui/preferences/enhancements.blp b/assets/ui/preferences/enhancements.blp index 2a87ca7..d12cb4f 100644 --- a/assets/ui/preferences/enhancements.blp +++ b/assets/ui/preferences/enhancements.blp @@ -120,5 +120,30 @@ Adw.PreferencesPage page { valign: center; } } + + Adw.ActionRow { + title: "Fullscreen"; + subtitle: "Open game window in fullscreen mode"; + + Gtk.Switch fps_unlocker_fullscreen_switcher { + valign: center; + } + } + + Adw.ComboRow fps_unlocker_priority_combo { + title: "Priority"; + subtitle: "Game process priority"; + + model: Gtk.StringList { + strings [ + "Realtime", + "High", + "Above normal", + "Normal", + "Below normal", + "Low" + ] + }; + } } } diff --git a/src/lib/config/game/enhancements/fps_unlocker/config/mod.rs b/src/lib/config/game/enhancements/fps_unlocker/config/mod.rs index 908986f..6292740 100644 --- a/src/lib/config/game/enhancements/fps_unlocker/config/mod.rs +++ b/src/lib/config/game/enhancements/fps_unlocker/config/mod.rs @@ -10,14 +10,18 @@ pub mod prelude { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Config { pub fps: u64, - pub power_saving: bool + pub power_saving: bool, + pub fullscreen: bool, + pub priority: u64 } impl Default for Config { fn default() -> Self { Self { fps: 120, - power_saving: false + power_saving: false, + fullscreen: false, + priority: 3 } } } @@ -35,6 +39,16 @@ impl From<&JsonValue> for Config { power_saving: match value.get("power_saving") { Some(value) => value.as_bool().unwrap_or(default.power_saving), None => default.power_saving + }, + + fullscreen: match value.get("fullscreen") { + Some(value) => value.as_bool().unwrap_or(default.fullscreen), + None => default.fullscreen + }, + + priority: match value.get("priority") { + Some(value) => value.as_u64().unwrap_or(default.priority), + None => default.priority } } } diff --git a/src/lib/fps_unlocker/config_schema.rs b/src/lib/fps_unlocker/config_schema.rs index 69401b2..c32a5d4 100644 --- a/src/lib/fps_unlocker/config_schema.rs +++ b/src/lib/fps_unlocker/config_schema.rs @@ -53,6 +53,8 @@ impl ConfigSchema { Self { FPSTarget: config.fps, UsePowerSave: config.power_saving, + Fullscreen: config.fullscreen, + Priority: config.priority, ..Self::default() } diff --git a/src/lib/fps_unlocker/mod.rs b/src/lib/fps_unlocker/mod.rs index dbb3495..ccf957b 100644 --- a/src/lib/fps_unlocker/mod.rs +++ b/src/lib/fps_unlocker/mod.rs @@ -35,6 +35,11 @@ impl FpsUnlocker { pub fn download(dir: T) -> anyhow::Result { let mut downloader = Downloader::new(LATEST_INFO.1)?; + // Create FPS unlocker folder if needed + if !std::path::Path::new(&dir.to_string()).exists() { + std::fs::create_dir_all(dir.to_string())?; + } + match downloader.download_to(format!("{}/unlocker.exe", dir.to_string()), |_, _| {}) { Ok(_) => Ok(Self { dir: dir.to_string() diff --git a/src/ui/preferences/enhancements.rs b/src/ui/preferences/enhancements.rs index dd731cb..d577955 100644 --- a/src/ui/preferences/enhancements.rs +++ b/src/ui/preferences/enhancements.rs @@ -42,7 +42,9 @@ pub struct AppWidgets { pub fps_unlocker_combo: adw::ComboRow, pub fps_unlocker_switcher: gtk::Switch, - pub fps_unlocker_power_saving_switcher: gtk::Switch + pub fps_unlocker_power_saving_switcher: gtk::Switch, + pub fps_unlocker_fullscreen_switcher: gtk::Switch, + pub fps_unlocker_priority_combo: adw::ComboRow } impl AppWidgets { @@ -73,7 +75,9 @@ impl AppWidgets { fps_unlocker_combo: get_object(&builder, "fps_unlocker_combo")?, fps_unlocker_switcher: get_object(&builder, "fps_unlocker_switcher")?, - fps_unlocker_power_saving_switcher: get_object(&builder, "fps_unlocker_power_saving_switcher")? + fps_unlocker_power_saving_switcher: get_object(&builder, "fps_unlocker_power_saving_switcher")?, + fps_unlocker_fullscreen_switcher: get_object(&builder, "fps_unlocker_fullscreen_switcher")?, + fps_unlocker_priority_combo: get_object(&builder, "fps_unlocker_priority_combo")? }; // Set availale wine languages @@ -267,6 +271,24 @@ impl App { } }); + // FPS unlocker -> fullscreen swithing + self.widgets.fps_unlocker_fullscreen_switcher.connect_state_notify(move |switch| { + if let Ok(mut config) = config::get() { + config.game.enhancements.fps_unlocker.config.fullscreen = switch.state(); + + config::update(config); + } + }); + + // FPS unlocker -> priority combo + self.widgets.fps_unlocker_priority_combo.connect_selected_notify(move |row| { + if let Ok(mut config) = config::get() { + config.game.enhancements.fps_unlocker.config.priority = row.selected() as u64; + + config::update(config); + } + }); + self } @@ -349,6 +371,12 @@ impl App { // Switch FPS unlocker -> power saving self.widgets.fps_unlocker_power_saving_switcher.set_state(config.game.enhancements.fps_unlocker.config.power_saving); + // Switch FPS unlocker -> fullscreen + self.widgets.fps_unlocker_fullscreen_switcher.set_state(config.game.enhancements.fps_unlocker.config.fullscreen); + + // Switch FPS unlocker -> priority + self.widgets.fps_unlocker_priority_combo.set_selected(config.game.enhancements.fps_unlocker.config.priority as u32); + // Prepare gamescope settings app self.widgets.gamescope_app.prepare(status_page)?;