core: Add PlayerRuntime::{FlashPlayer, AIR} for Adobe AIR support
We've now had two different bug reports involving Adobe AIR SWFs, so I'm going to go ahead and start adding a framework for AIR support. This commit just adds a command-line option `--player-runtime <flash-player|air>` (defaulting to `flash-player`), and passes it along to the `Player`. The actual value is currently unused - in a follow-up PR, I'm going to implement namespace versioning for AIR.
This commit is contained in:
parent
d3b9d8a451
commit
993d8d9f9b
|
@ -69,7 +69,7 @@ pub use events::PlayerEvent;
|
|||
pub use font::DefaultFont;
|
||||
pub use indexmap;
|
||||
pub use loader::LoadBehavior;
|
||||
pub use player::{Player, PlayerBuilder, StaticCallstack};
|
||||
pub use player::{Player, PlayerBuilder, PlayerRuntime, StaticCallstack};
|
||||
pub use ruffle_render::backend::ViewportDimensions;
|
||||
pub use swf;
|
||||
pub use swf::Color;
|
||||
|
|
|
@ -250,6 +250,11 @@ pub struct Player {
|
|||
/// Player can be enabled by setting a particular player version.
|
||||
player_version: u8,
|
||||
|
||||
/// The runtime we're emulating (Flash Player or Adobe AIR).
|
||||
/// In Adobe AIR mode, additional classes are available
|
||||
#[allow(unused)]
|
||||
player_runtime: PlayerRuntime,
|
||||
|
||||
swf: Arc<SwfMovie>,
|
||||
|
||||
is_playing: bool,
|
||||
|
@ -2185,6 +2190,7 @@ pub struct PlayerBuilder {
|
|||
spoofed_url: Option<String>,
|
||||
compatibility_rules: CompatibilityRules,
|
||||
player_version: Option<u8>,
|
||||
player_runtime: PlayerRuntime,
|
||||
quality: StageQuality,
|
||||
sandbox_type: SandboxType,
|
||||
page_url: Option<String>,
|
||||
|
@ -2231,6 +2237,7 @@ impl PlayerBuilder {
|
|||
spoofed_url: None,
|
||||
compatibility_rules: CompatibilityRules::default(),
|
||||
player_version: None,
|
||||
player_runtime: PlayerRuntime::default(),
|
||||
quality: StageQuality::High,
|
||||
sandbox_type: SandboxType::LocalTrusted,
|
||||
page_url: None,
|
||||
|
@ -2390,6 +2397,12 @@ impl PlayerBuilder {
|
|||
self
|
||||
}
|
||||
|
||||
/// Configures the player runtime (default is `PlayerRuntime::FlashPlayer`)
|
||||
pub fn with_player_runtime(mut self, runtime: PlayerRuntime) -> Self {
|
||||
self.player_runtime = runtime;
|
||||
self
|
||||
}
|
||||
|
||||
/// Configures the security sandbox type (default is `SandboxType::LocalTrusted`)
|
||||
pub fn with_sandbox_type(mut self, sandbox_type: SandboxType) -> Self {
|
||||
self.sandbox_type = sandbox_type;
|
||||
|
@ -2547,6 +2560,7 @@ impl PlayerBuilder {
|
|||
transform_stack: TransformStack::new(),
|
||||
instance_counter: 0,
|
||||
player_version,
|
||||
player_runtime: self.player_runtime,
|
||||
is_playing: self.autoplay,
|
||||
needs_render: true,
|
||||
self_reference: self_ref.clone(),
|
||||
|
@ -2669,3 +2683,11 @@ fn run_mouse_pick<'gc>(
|
|||
})
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
|
||||
#[derive(Default, Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub enum PlayerRuntime {
|
||||
#[default]
|
||||
FlashPlayer,
|
||||
AIR,
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ use anyhow::Error;
|
|||
use clap::Parser;
|
||||
use ruffle_core::backend::navigator::{OpenURLMode, SocketMode};
|
||||
use ruffle_core::config::Letterbox;
|
||||
use ruffle_core::{LoadBehavior, StageAlign, StageScaleMode};
|
||||
use ruffle_core::{LoadBehavior, PlayerRuntime, StageAlign, StageScaleMode};
|
||||
use ruffle_render::quality::StageQuality;
|
||||
use ruffle_render_wgpu::clap::{GraphicsBackend, PowerPreference};
|
||||
use std::path::Path;
|
||||
|
@ -119,6 +119,10 @@ pub struct Opt {
|
|||
#[clap(long)]
|
||||
pub player_version: Option<u8>,
|
||||
|
||||
/// The runtime to emulate (Flash Player or Adobe AIR)
|
||||
#[clap(long, default_value = "flash-player")]
|
||||
pub player_runtime: PlayerRuntime,
|
||||
|
||||
/// Set and lock the player's frame rate, overriding the movie's frame rate.
|
||||
#[clap(long)]
|
||||
pub frame_rate: Option<f64>,
|
||||
|
|
|
@ -10,7 +10,9 @@ use crate::{CALLSTACK, RENDER_INFO, SWF_INFO};
|
|||
use anyhow::anyhow;
|
||||
use ruffle_core::backend::navigator::{OpenURLMode, SocketMode};
|
||||
use ruffle_core::config::Letterbox;
|
||||
use ruffle_core::{LoadBehavior, Player, PlayerBuilder, PlayerEvent, StageAlign, StageScaleMode};
|
||||
use ruffle_core::{
|
||||
LoadBehavior, Player, PlayerBuilder, PlayerEvent, PlayerRuntime, StageAlign, StageScaleMode,
|
||||
};
|
||||
use ruffle_render::backend::RenderBackend;
|
||||
use ruffle_render::quality::StageQuality;
|
||||
use ruffle_render_wgpu::backend::WgpuRenderBackend;
|
||||
|
@ -45,6 +47,7 @@ pub struct PlayerOptions {
|
|||
pub letterbox: Letterbox,
|
||||
pub spoof_url: Option<Url>,
|
||||
pub player_version: u8,
|
||||
pub player_runtime: PlayerRuntime,
|
||||
pub frame_rate: Option<f64>,
|
||||
pub open_url_mode: OpenURLMode,
|
||||
pub dummy_external_interface: bool,
|
||||
|
@ -69,6 +72,7 @@ impl From<&Opt> for PlayerOptions {
|
|||
letterbox: value.letterbox,
|
||||
spoof_url: value.spoof_url.clone(),
|
||||
player_version: value.player_version.unwrap_or(32),
|
||||
player_runtime: value.player_runtime,
|
||||
frame_rate: value.frame_rate,
|
||||
open_url_mode: value.open_url_mode,
|
||||
dummy_external_interface: value.dummy_external_interface,
|
||||
|
|
Loading…
Reference in New Issue