core: Changed Player::set_quality to take in a StageQuality directly

This commit is contained in:
Nathan Adams 2023-02-03 15:09:08 +01:00
parent b270d1bbd7
commit 12bd38b338
4 changed files with 18 additions and 6 deletions

1
Cargo.lock generated
View File

@ -3695,6 +3695,7 @@ dependencies = [
"getrandom",
"js-sys",
"ruffle_core",
"ruffle_render",
"ruffle_render_canvas",
"ruffle_render_webgl",
"ruffle_render_wgpu",

View File

@ -776,12 +776,9 @@ impl Player {
})
}
pub fn set_quality(&mut self, quality: &str) {
pub fn set_quality(&mut self, quality: StageQuality) {
self.mutate_with_update_context(|context| {
let stage = context.stage;
if let Ok(quality) = StageQuality::from_str(quality) {
stage.set_quality(context.gc_context, quality);
}
context.stage.set_quality(context.gc_context, quality);
})
}

View File

@ -34,6 +34,7 @@ tracing-subscriber = { version = "0.3.16", default-features = false, features =
tracing-wasm = "0.2.1"
ruffle_render_canvas = { path = "../render/canvas", optional = true }
ruffle_web_common = { path = "common" }
ruffle_render = { path = "../render" }
ruffle_render_webgl = { path = "../render/webgl", optional = true }
ruffle_render_wgpu = { path = "../render/wgpu", optional = true }
ruffle_video_software = { path = "../video/software" }

View File

@ -17,6 +17,7 @@ use ruffle_core::external::{
};
use ruffle_core::tag_utils::SwfMovie;
use ruffle_core::{Color, Player, PlayerBuilder, PlayerEvent, StaticCallstack, ViewportDimensions};
use ruffle_render::quality::StageQuality;
use ruffle_video_software::backend::SoftwareVideoBackend;
use ruffle_web_common::JsResult;
use serde::{Deserialize, Serialize};
@ -540,6 +541,13 @@ impl Ruffle {
.with_player_version(config.player_version)
.build();
let default_quality = if ruffle_web_common::is_mobile_or_tablet() {
tracing::info!("Running on a mobile device; defaulting to low quality");
StageQuality::Low
} else {
StageQuality::High
};
let mut callstack = None;
if let Ok(mut core) = core.try_lock() {
// Set config parameters.
@ -548,7 +556,12 @@ impl Ruffle {
}
core.set_show_menu(config.show_menu);
core.set_stage_align(config.salign.as_deref().unwrap_or(""));
core.set_quality(config.quality.as_deref().unwrap_or("high"));
core.set_quality(
config
.quality
.and_then(|q| StageQuality::from_str(&q).ok())
.unwrap_or(default_quality),
);
core.set_scale_mode(config.scale.as_deref().unwrap_or("showAll"));
core.set_window_mode(config.wmode.as_deref().unwrap_or("window"));