dekstop: Support `quit` and `fullscreen` fscommands

This commit is contained in:
Lord-McSweeney 2023-11-25 14:40:38 -08:00 committed by Lord-McSweeney
parent 66c6c176f0
commit d3b9d8a451
3 changed files with 41 additions and 2 deletions

View File

@ -1,11 +1,13 @@
mod audio;
mod external_interface;
mod fscommand;
mod navigator;
mod storage;
mod ui;
pub use audio::CpalAudioBackend;
pub use external_interface::DesktopExternalInterfaceProvider;
pub use fscommand::DesktopFSCommandProvider;
pub use navigator::ExternalNavigatorBackend;
pub use storage::DiskStorageBackend;
pub use ui::DesktopUiBackend;

View File

@ -0,0 +1,33 @@
use crate::custom_event::RuffleEvent;
use ruffle_core::external::FsCommandProvider;
use std::rc::Rc;
use winit::event_loop::EventLoopProxy;
use winit::window::{Fullscreen, Window};
pub struct DesktopFSCommandProvider {
pub event_loop: EventLoopProxy<RuffleEvent>,
pub window: Rc<Window>,
}
impl FsCommandProvider for DesktopFSCommandProvider {
fn on_fs_command(&self, command: &str, args: &str) -> bool {
match command {
"quit" => {
let _ = self.event_loop.send_event(RuffleEvent::ExitRequested);
}
"fullscreen" => {
match args {
"true" => self
.window
.set_fullscreen(Some(Fullscreen::Borderless(None))),
"false" => self.window.set_fullscreen(None),
_ => {}
};
}
_ => return false,
};
true
}
}

View File

@ -1,6 +1,6 @@
use crate::backends::{
CpalAudioBackend, DesktopExternalInterfaceProvider, DesktopUiBackend, DiskStorageBackend,
ExternalNavigatorBackend,
CpalAudioBackend, DesktopExternalInterfaceProvider, DesktopFSCommandProvider, DesktopUiBackend,
DiskStorageBackend, ExternalNavigatorBackend,
};
use crate::cli::Opt;
use crate::custom_event::RuffleEvent;
@ -143,6 +143,10 @@ impl ActivePlayer {
.with_navigator(navigator)
.with_renderer(renderer)
.with_storage(DiskStorageBackend::new().expect("Couldn't create storage backend"))
.with_fs_commands(Box::new(DesktopFSCommandProvider {
event_loop: event_loop.clone(),
window: window.clone(),
}))
.with_ui(
DesktopUiBackend::new(window.clone(), opt.open_url_mode)
.expect("Couldn't create ui backend"),