desktop: Made player_version Option

This commit is contained in:
Nathan Adams 2024-04-24 22:20:34 +02:00
parent 09e5339fab
commit d3b3119c9d
2 changed files with 38 additions and 8 deletions

View File

@ -3,8 +3,7 @@ use crate::gui::text;
use crate::gui::widgets::PathOrUrlField;
use crate::player::LaunchOptions;
use egui::{
Align2, Button, Checkbox, ComboBox, DragValue, Grid, Layout, Slider, TextEdit, Ui, Widget,
Window,
emath, Align2, Button, Checkbox, ComboBox, Grid, Layout, Slider, TextEdit, Ui, Widget, Window,
};
use ruffle_core::backend::navigator::{OpenURLMode, SocketMode};
use ruffle_core::config::Letterbox;
@ -38,6 +37,7 @@ pub struct OpenDialog {
scale_mode: OptionalField<FieldWithCheckbox<EnumDropdownField<StageScaleMode>>>,
load_behavior: OptionalField<EnumDropdownField<LoadBehavior>>,
letterbox: OptionalField<EnumDropdownField<Letterbox>>,
player_version: OptionalField<NumberField<u8>>,
}
impl OpenDialog {
@ -198,6 +198,8 @@ impl OpenDialog {
}),
),
);
let player_version =
OptionalField::new(defaults.player_version, NumberField::new(1..=32, 32));
Self {
options: defaults,
@ -215,6 +217,7 @@ impl OpenDialog {
scale_mode,
load_behavior,
letterbox,
player_version,
}
}
@ -429,9 +432,8 @@ impl OpenDialog {
ui.end_row();
ui.label(text(locale, "player-version"));
DragValue::new(&mut self.options.player_version)
.clamp_range(1..=32)
.ui(ui);
self.player_version
.ui(ui, &mut self.options.player_version, locale);
ui.end_row();
ui.label(text(locale, "custom-framerate"));
@ -580,6 +582,34 @@ impl InnerField for DurationField {
}
}
struct NumberField<T: emath::Numeric> {
range: RangeInclusive<T>,
default: T,
}
impl<T: emath::Numeric> NumberField<T> {
pub fn new(range: RangeInclusive<T>, default: T) -> Self {
Self { range, default }
}
}
impl<T: emath::Numeric> InnerField for NumberField<T> {
type Value = T;
type Result = T;
fn value_if_missing(&self) -> Self::Value {
self.default
}
fn ui(&self, ui: &mut Ui, value: &mut Self::Value, _error: bool, _locale: &LanguageIdentifier) {
Slider::new(value, self.range.clone()).ui(ui);
}
fn value_to_result(&self, value: &Self::Value) -> Result<Self::Result, ()> {
Ok(*value)
}
}
type ValueToTextFn<T> = dyn Fn(T, &LanguageIdentifier) -> Cow<'static, str>;
type CheckboxLabelFn = dyn Fn(&LanguageIdentifier) -> Cow<'static, str>;

View File

@ -54,7 +54,7 @@ pub struct LaunchOptions {
pub save_directory: PathBuf,
pub letterbox: Option<Letterbox>,
pub spoof_url: Option<Url>,
pub player_version: u8,
pub player_version: Option<u8>,
pub player_runtime: PlayerRuntime,
pub frame_rate: Option<f64>,
pub open_url_mode: OpenURLMode,
@ -89,7 +89,7 @@ impl From<&GlobalPreferences> for LaunchOptions {
save_directory: value.cli.save_directory.clone(),
letterbox: value.cli.letterbox,
spoof_url: value.cli.spoof_url.clone(),
player_version: value.cli.player_version.unwrap_or(32),
player_version: value.cli.player_version,
player_runtime: value.cli.player_runtime,
frame_rate: value.cli.frame_rate,
open_url_mode: value.cli.open_url_mode,
@ -239,7 +239,7 @@ impl ActivePlayer {
.with_load_behavior(opt.load_behavior.unwrap_or(LoadBehavior::Streaming))
.with_spoofed_url(opt.spoof_url.clone().map(|url| url.to_string()))
.with_page_url(opt.spoof_url.clone().map(|url| url.to_string()))
.with_player_version(Some(opt.player_version))
.with_player_version(opt.player_version)
.with_player_runtime(opt.player_runtime)
.with_frame_rate(opt.frame_rate)
.with_avm2_optimizer_enabled(opt.avm2_optimizer_enabled);