Skip to content

Commit

Permalink
desktop: Add gamemode preference GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
kjarosh authored and Dinnerbone committed Oct 6, 2024
1 parent b2d62f0 commit 4544f86
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 1 deletion.
2 changes: 1 addition & 1 deletion desktop/assets/texts/en-US/common.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ cancel = Cancel
remove = Remove
enable = Enable
disable = Disable
disable = Disable
8 changes: 8 additions & 0 deletions desktop/assets/texts/en-US/preferences_dialog.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,11 @@ theme = Theme
theme-system = System Default
theme-light = Light
theme-dark = Dark
# See for context https:/FeralInteractive/gamemode
gamemode = GameMode
gamemode-tooltip =
GameMode temporarily applies a set of optimizations to your computer and/or Ruffle.
Ruffle requests GameMode only when a movie is being played.
gamemode-default = Default
gamemode-default-tooltip = GameMode will be enabled only when power preference is set to high.
77 changes: 77 additions & 0 deletions desktop/src/gui/dialogs/preferences_dialog.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::cli::GameModePreference;
use crate::gui::{available_languages, optional_text, text, ThemePreference};
use crate::log::FilenamePattern;
use crate::preferences::{storage::StorageBackend, GlobalPreferences};
Expand All @@ -19,6 +20,10 @@ pub struct PreferencesDialog {
power_preference_readonly: bool,
power_preference_changed: bool,

gamemode_preference: GameModePreference,
gamemode_preference_readonly: bool,
gamemode_preference_changed: bool,

language: LanguageIdentifier,
language_changed: bool,

Expand Down Expand Up @@ -68,6 +73,10 @@ impl PreferencesDialog {
power_preference_readonly: preferences.cli.power.is_some(),
power_preference_changed: false,

gamemode_preference: preferences.gamemode_preference(),
gamemode_preference_readonly: preferences.cli.gamemode.is_some(),
gamemode_preference_changed: false,

language: preferences.language(),
language_changed: false,

Expand Down Expand Up @@ -114,6 +123,10 @@ impl PreferencesDialog {
.show(ui, |ui| {
self.show_graphics_preferences(locale, &locked_text, ui);

if cfg!(target_os = "linux") {
self.show_gamemode_preferences(locale, &locked_text, ui);
}

self.show_language_preferences(locale, ui);

self.show_theme_preferences(locale, ui);
Expand Down Expand Up @@ -289,6 +302,46 @@ impl PreferencesDialog {
ui.end_row();
}

fn show_gamemode_preferences(
&mut self,
locale: &LanguageIdentifier,
locked_text: &str,
ui: &mut Ui,
) {
ui.label(text(locale, "gamemode"))
.on_hover_text_at_pointer(text(locale, "gamemode-tooltip"));
if self.gamemode_preference_readonly {
ui.label(gamemode_preference_name(locale, self.gamemode_preference))
.on_hover_text(locked_text);
} else {
let previous = self.gamemode_preference;
ComboBox::from_id_salt("gamemode")
.selected_text(gamemode_preference_name(locale, self.gamemode_preference))
.show_ui(ui, |ui| {
let values = [
GameModePreference::Default,
GameModePreference::On,
GameModePreference::Off,
];
for value in values {
let response = ui.selectable_value(
&mut self.gamemode_preference,
value,
gamemode_preference_name(locale, value),
);

if let Some(tooltip) = gamemode_preference_tooltip(locale, value) {
response.on_hover_text_at_pointer(tooltip);
}
}
});
if self.gamemode_preference != previous {
self.gamemode_preference_changed = true;
}
}
ui.end_row();
}

fn show_audio_preferences(&mut self, locale: &LanguageIdentifier, ui: &mut Ui) {
ui.label(text(locale, "audio-output-device"));

Expand Down Expand Up @@ -459,6 +512,9 @@ impl PreferencesDialog {
if self.theme_preference_changed {
preferences.set_theme_preference(self.theme_preference);
}
if self.gamemode_preference_changed {
preferences.set_gamemode_preference(self.gamemode_preference);
}
}) {
// [NA] TODO: Better error handling... everywhere in desktop, really
tracing::error!("Could not save preferences: {e}");
Expand Down Expand Up @@ -500,6 +556,27 @@ fn theme_preference_name(
}
}

fn gamemode_preference_name(
locale: &LanguageIdentifier,
gamemode_preference: GameModePreference,
) -> Cow<str> {
match gamemode_preference {
GameModePreference::Default => text(locale, "gamemode-default"),
GameModePreference::On => text(locale, "enable"),
GameModePreference::Off => text(locale, "disable"),
}
}

fn gamemode_preference_tooltip(
locale: &LanguageIdentifier,
gamemode_preference: GameModePreference,
) -> Option<Cow<str>> {
Some(match gamemode_preference {
GameModePreference::Default => text(locale, "gamemode-default-tooltip"),
_ => return None,
})
}

fn filename_pattern_name(locale: &LanguageIdentifier, pattern: FilenamePattern) -> Cow<str> {
match pattern {
FilenamePattern::SingleFile => text(locale, "log-filename-pattern-single-file"),
Expand Down

0 comments on commit 4544f86

Please sign in to comment.