core: Use Cow<str> for FullscreenError in UI backend, as it can't ever be anything else

This commit is contained in:
= 2022-08-20 22:10:48 +02:00 committed by Nathan Adams
parent 1c7bfd8c5f
commit b7dcd26c38
3 changed files with 13 additions and 29 deletions

View File

@ -1,7 +1,8 @@
use crate::events::{KeyCode, PlayerEvent};
use std::borrow::Cow;
use std::collections::HashSet;
pub type Error = Box<dyn std::error::Error>;
pub type FullscreenError = Cow<'static, str>;
pub trait UiBackend {
fn mouse_visible(&self) -> bool;
@ -14,7 +15,7 @@ pub trait UiBackend {
/// Sets the clipboard to the given content.
fn set_clipboard_content(&mut self, content: String);
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), Error>;
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), FullscreenError>;
/// Displays a warning about unsupported content in Ruffle.
/// The user can still click an "OK" or "run anyway" message to dismiss the warning.
@ -138,7 +139,7 @@ impl UiBackend for NullUiBackend {
fn set_clipboard_content(&mut self, _content: String) {}
fn set_fullscreen(&mut self, _is_full: bool) -> Result<(), Error> {
fn set_fullscreen(&mut self, _is_full: bool) -> Result<(), FullscreenError> {
Ok(())
}

View File

@ -1,6 +1,6 @@
use clipboard::{ClipboardContext, ClipboardProvider};
use rfd::{MessageButtons, MessageDialog, MessageLevel};
use ruffle_core::backend::ui::{Error, MouseCursor, UiBackend};
use ruffle_core::backend::ui::{FullscreenError, MouseCursor, UiBackend};
use std::rc::Rc;
use winit::window::{Fullscreen, Window};
@ -55,7 +55,7 @@ impl UiBackend for DesktopUiBackend {
self.clipboard.set_contents(content).unwrap();
}
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), Error> {
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), FullscreenError> {
self.window.set_fullscreen(if is_full {
Some(Fullscreen::Borderless(None))
} else {

View File

@ -1,25 +1,9 @@
use super::JavascriptPlayer;
use ruffle_core::backend::ui::{Error, MouseCursor, UiBackend};
use ruffle_core::backend::ui::{FullscreenError, MouseCursor, UiBackend};
use ruffle_web_common::JsResult;
use std::borrow::Cow;
use web_sys::HtmlCanvasElement;
#[derive(Debug)]
struct FullScreenError {
jsval: String,
}
impl std::fmt::Display for FullScreenError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.jsval)
}
}
impl std::error::Error for FullScreenError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
None
}
}
/// An implementation of `UiBackend` utilizing `web_sys` bindings to input APIs.
pub struct WebUiBackend {
js_player: JavascriptPlayer,
@ -75,14 +59,13 @@ impl UiBackend for WebUiBackend {
log::warn!("set clipboard not implemented");
}
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), Error> {
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), FullscreenError> {
match self.js_player.set_fullscreen(is_full) {
Ok(_) => Ok(()),
Err(jsval) => Err(Box::new(FullScreenError {
jsval: jsval
.as_string()
.unwrap_or_else(|| "Failed to change full screen state".to_string()),
})),
Err(jsval) => Err(jsval
.as_string()
.map(Cow::Owned)
.unwrap_or_else(|| Cow::Borrowed("Failed to change full screen state"))),
}
}