ruffle/desktop/src/ui.rs

93 lines
2.8 KiB
Rust
Raw Normal View History

use clipboard::{ClipboardContext, ClipboardProvider};
use rfd::{MessageButtons, MessageDialog, MessageLevel};
use ruffle_core::backend::ui::{Error, MouseCursor, UiBackend};
use std::rc::Rc;
use winit::window::{Fullscreen, Window};
pub struct DesktopUiBackend {
window: Rc<Window>,
cursor_visible: bool,
clipboard: ClipboardContext,
}
impl DesktopUiBackend {
pub fn new(window: Rc<Window>) -> Self {
Self {
window,
cursor_visible: true,
clipboard: ClipboardProvider::new().unwrap(),
}
}
}
// 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";
const DOWNLOAD_FAILED_MESSAGE: &str = "Ruffle failed to open or download this file.";
impl UiBackend for DesktopUiBackend {
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();
}
fn set_fullscreen(&mut self, is_full: bool) -> Result<(), Error> {
self.window.set_fullscreen(if is_full {
Some(Fullscreen::Borderless(None))
} else {
None
});
Ok(())
}
fn display_unsupported_message(&self) {
let dialog = MessageDialog::new()
.set_level(MessageLevel::Warning)
.set_title("Ruffle - Unsupported content")
.set_description(UNSUPPORTED_CONTENT_MESSAGE)
.set_buttons(MessageButtons::Ok);
dialog.show();
}
fn display_root_movie_download_failed_message(&self) {
let dialog = MessageDialog::new()
.set_level(MessageLevel::Warning)
.set_title("Ruffle - Load failed")
.set_description(DOWNLOAD_FAILED_MESSAGE)
.set_buttons(MessageButtons::Ok);
dialog.show();
}
fn message(&self, message: &str) {
let dialog = MessageDialog::new()
.set_level(MessageLevel::Info)
.set_title("Ruffle")
.set_description(message)
.set_buttons(MessageButtons::Ok);
dialog.show();
}
}