desktop: Add "Exit Full Screen" option to context menu
This option allows the user to exit full screen without knowing the Esc shortcut.
This commit is contained in:
parent
2889a715ad
commit
56f092be2e
|
@ -787,6 +787,12 @@ impl Player {
|
|||
context.stage.root_clip()
|
||||
}
|
||||
|
||||
pub fn is_fullscreen(&mut self) -> bool {
|
||||
self.mutate_with_update_context(|context| {
|
||||
context.stage.display_state() != StageDisplayState::Normal
|
||||
})
|
||||
}
|
||||
|
||||
pub fn set_fullscreen(&mut self, is_fullscreen: bool) {
|
||||
self.mutate_with_update_context(|context| {
|
||||
let display_state = if is_fullscreen {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
context-menu-exit-fullscreen = Exit Full Screen
|
|
@ -8,7 +8,7 @@ use crate::util::{
|
|||
};
|
||||
use anyhow::{Context, Error};
|
||||
use gilrs::{Event, EventType, Gilrs};
|
||||
use ruffle_core::{PlayerEvent, StageDisplayState};
|
||||
use ruffle_core::PlayerEvent;
|
||||
use ruffle_render::backend::ViewportDimensions;
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
@ -339,14 +339,7 @@ impl App {
|
|||
..
|
||||
} = event
|
||||
{
|
||||
if let Some(mut player) = self.player.get() {
|
||||
if player.is_playing() {
|
||||
player.update(|uc| {
|
||||
uc.stage
|
||||
.set_display_state(uc, StageDisplayState::Normal);
|
||||
})
|
||||
}
|
||||
}
|
||||
let _ = event_loop_proxy.send_event(RuffleEvent::ExitFullScreen);
|
||||
}
|
||||
|
||||
let key_code = winit_to_ruffle_key_code(&event);
|
||||
|
@ -511,6 +504,14 @@ impl App {
|
|||
self.player.destroy();
|
||||
}
|
||||
|
||||
winit::event::Event::UserEvent(RuffleEvent::ExitFullScreen) => {
|
||||
if let Some(mut player) = self.player.get() {
|
||||
if player.is_playing() {
|
||||
player.set_fullscreen(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
winit::event::Event::UserEvent(RuffleEvent::ExitRequested) => {
|
||||
elwt.exit();
|
||||
return;
|
||||
|
|
|
@ -19,6 +19,9 @@ pub enum RuffleEvent {
|
|||
/// The user requested to close the current SWF.
|
||||
CloseFile,
|
||||
|
||||
/// The user requested to exit full screen.
|
||||
ExitFullScreen,
|
||||
|
||||
/// The user requested to exit Ruffle.
|
||||
ExitRequested,
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ impl RuffleGui {
|
|||
}
|
||||
|
||||
if let Some(context_menu) = &mut self.context_menu {
|
||||
if !context_menu.show(egui_ctx, &self.event_loop) {
|
||||
if !context_menu.show(&locale, egui_ctx, &self.event_loop, player.is_fullscreen()) {
|
||||
self.close_context_menu(player);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
use crate::custom_event::RuffleEvent;
|
||||
use egui::{
|
||||
vec2, Align, Area, Button, Checkbox, Color32, Frame, Id, Key, Layout, Modifiers, Order, Pos2,
|
||||
Stroke, Style, Widget,
|
||||
vec2, Align, Area, Button, Checkbox, Color32, Frame, Id, Key, KeyboardShortcut, Layout,
|
||||
Modifiers, Order, Pos2, Stroke, Style, Widget,
|
||||
};
|
||||
use ruffle_core::{ContextMenuItem, PlayerEvent};
|
||||
use unic_langid::LanguageIdentifier;
|
||||
use winit::event_loop::EventLoopProxy;
|
||||
|
||||
use super::text;
|
||||
|
||||
pub struct ContextMenu {
|
||||
items: Vec<ContextMenuItem>,
|
||||
position: Option<Pos2>,
|
||||
|
@ -27,8 +30,10 @@ impl ContextMenu {
|
|||
|
||||
pub fn show(
|
||||
&mut self,
|
||||
locale: &LanguageIdentifier,
|
||||
egui_ctx: &egui::Context,
|
||||
event_loop: &EventLoopProxy<RuffleEvent>,
|
||||
fullscreen: bool,
|
||||
) -> bool {
|
||||
let mut item_clicked = false;
|
||||
self.position = self.position.or(egui_ctx.pointer_latest_pos());
|
||||
|
@ -61,6 +66,22 @@ impl ContextMenu {
|
|||
item_clicked = true;
|
||||
}
|
||||
}
|
||||
|
||||
if fullscreen {
|
||||
ui.separator();
|
||||
if Button::new(text(locale, "context-menu-exit-fullscreen"))
|
||||
.shortcut_text(ui.ctx().format_shortcut(&KeyboardShortcut::new(
|
||||
Modifiers::NONE,
|
||||
Key::Escape,
|
||||
)))
|
||||
.wrap_mode(egui::TextWrapMode::Extend)
|
||||
.ui(ui)
|
||||
.clicked()
|
||||
{
|
||||
let _ = event_loop.send_event(RuffleEvent::ExitFullScreen);
|
||||
item_clicked = true;
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue