2021-01-31 00:36:45 +00:00
|
|
|
use clipboard::{ClipboardContext, ClipboardProvider};
|
2022-02-13 10:21:24 +00:00
|
|
|
use rfd::{MessageButtons, MessageDialog, MessageLevel};
|
2021-08-25 08:02:53 +00:00
|
|
|
use ruffle_core::backend::ui::{Error, MouseCursor, UiBackend};
|
2021-01-07 20:24:58 +00:00
|
|
|
use std::rc::Rc;
|
2021-08-25 08:02:53 +00:00
|
|
|
use winit::window::{Fullscreen, Window};
|
2020-12-15 16:39:11 +00:00
|
|
|
|
2021-01-07 20:24:58 +00:00
|
|
|
pub struct DesktopUiBackend {
|
|
|
|
window: Rc<Window>,
|
2021-01-31 00:36:45 +00:00
|
|
|
cursor_visible: bool,
|
|
|
|
clipboard: ClipboardContext,
|
2021-01-07 20:24:58 +00:00
|
|
|
}
|
2020-12-15 16:39:11 +00:00
|
|
|
|
|
|
|
impl DesktopUiBackend {
|
2021-01-07 20:24:58 +00:00
|
|
|
pub fn new(window: Rc<Window>) -> Self {
|
2021-01-31 00:36:45 +00:00
|
|
|
Self {
|
|
|
|
window,
|
|
|
|
cursor_visible: true,
|
|
|
|
clipboard: ClipboardProvider::new().unwrap(),
|
|
|
|
}
|
|
|
|
}
|
2020-12-15 16:39:11 +00:00
|
|
|
}
|
|
|
|
|
2021-01-31 01:57:44 +00:00
|
|
|
// TODO: Move link to https://ruffle.rs/faq or similar
|
|
|
|
const UNSUPPORTED_CONTENT_MESSAGE: &str = "\
|
|
|
|
This content is not yet supported by Ruffle and will likely not run as intended.
|
|
|
|
|
|
|
|
See the following link for more info:
|
|
|
|
https://github.com/ruffle-rs/ruffle/wiki/Frequently-Asked-Questions-For-Users";
|
|
|
|
|
2021-06-24 20:29:34 +00:00
|
|
|
const DOWNLOAD_FAILED_MESSAGE: &str = "Ruffle failed to open or download this file.";
|
|
|
|
|
2020-12-15 16:39:11 +00:00
|
|
|
impl UiBackend for DesktopUiBackend {
|
2021-01-31 00:36:45 +00:00
|
|
|
fn mouse_visible(&self) -> bool {
|
|
|
|
self.cursor_visible
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_mouse_visible(&mut self, visible: bool) {
|
|
|
|
self.window.set_cursor_visible(visible);
|
|
|
|
self.cursor_visible = visible;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_mouse_cursor(&mut self, cursor: MouseCursor) {
|
|
|
|
use winit::window::CursorIcon;
|
|
|
|
let icon = match cursor {
|
|
|
|
MouseCursor::Arrow => CursorIcon::Arrow,
|
|
|
|
MouseCursor::Hand => CursorIcon::Hand,
|
|
|
|
MouseCursor::IBeam => CursorIcon::Text,
|
|
|
|
MouseCursor::Grab => CursorIcon::Grab,
|
|
|
|
};
|
|
|
|
self.window.set_cursor_icon(icon);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_clipboard_content(&mut self, content: String) {
|
|
|
|
self.clipboard.set_contents(content).unwrap();
|
|
|
|
}
|
|
|
|
|
2021-08-25 08:02:53 +00:00
|
|
|
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), Error> {
|
|
|
|
self.window.set_fullscreen(if is_full {
|
|
|
|
Some(Fullscreen::Borderless(None))
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
});
|
|
|
|
Ok(())
|
2021-01-06 00:41:47 +00:00
|
|
|
}
|
|
|
|
|
2021-01-31 01:57:44 +00:00
|
|
|
fn display_unsupported_message(&self) {
|
2022-02-13 10:21:24 +00:00
|
|
|
let dialog = MessageDialog::new()
|
|
|
|
.set_level(MessageLevel::Warning)
|
|
|
|
.set_title("Ruffle - Unsupported content")
|
|
|
|
.set_description(UNSUPPORTED_CONTENT_MESSAGE)
|
|
|
|
.set_buttons(MessageButtons::Ok);
|
|
|
|
dialog.show();
|
2021-01-31 01:57:44 +00:00
|
|
|
}
|
|
|
|
|
2021-06-24 20:29:34 +00:00
|
|
|
fn display_root_movie_download_failed_message(&self) {
|
2022-02-13 10:21:24 +00:00
|
|
|
let dialog = MessageDialog::new()
|
|
|
|
.set_level(MessageLevel::Warning)
|
|
|
|
.set_title("Ruffle - Load failed")
|
|
|
|
.set_description(DOWNLOAD_FAILED_MESSAGE)
|
|
|
|
.set_buttons(MessageButtons::Ok);
|
|
|
|
dialog.show();
|
2021-06-24 20:29:34 +00:00
|
|
|
}
|
|
|
|
|
2020-12-15 16:39:11 +00:00
|
|
|
fn message(&self, message: &str) {
|
2022-02-13 10:21:24 +00:00
|
|
|
let dialog = MessageDialog::new()
|
|
|
|
.set_level(MessageLevel::Info)
|
|
|
|
.set_title("Ruffle")
|
|
|
|
.set_description(message)
|
|
|
|
.set_buttons(MessageButtons::Ok);
|
|
|
|
dialog.show();
|
2020-12-15 16:39:11 +00:00
|
|
|
}
|
|
|
|
}
|