Merge branch 'imbris/screenshot-tweak' into 'master'

Only screenshot and toggle fullscreen once per frame

See merge request veloren/veloren!1217
This commit is contained in:
Imbris 2020-07-18 19:08:42 +00:00
commit d46bf03e27
2 changed files with 23 additions and 14 deletions

View File

@ -59,6 +59,10 @@ fn handle_main_events_cleared(
control_flow: &mut winit::event_loop::ControlFlow, control_flow: &mut winit::event_loop::ControlFlow,
global_state: &mut GlobalState, global_state: &mut GlobalState,
) { ) {
// Screenshot / Fullscreen toggle
global_state
.window
.resolve_deduplicated_events(&mut global_state.settings);
// Run tick here // Run tick here
// What's going on here? // What's going on here?

View File

@ -488,6 +488,9 @@ pub struct Window {
// Currently used to send and receive screenshot result messages // Currently used to send and receive screenshot result messages
message_sender: channel::Sender<String>, message_sender: channel::Sender<String>,
message_receiver: channel::Receiver<String>, message_receiver: channel::Receiver<String>,
// Used for screenshots & fullscreen toggle to deduplicate/postpone to after event handler
take_screenshot: bool,
toggle_fullscreen: bool,
} }
impl Window { impl Window {
@ -591,6 +594,8 @@ impl Window {
// Currently used to send and receive screenshot result messages // Currently used to send and receive screenshot result messages
message_sender, message_sender,
message_receiver, message_receiver,
take_screenshot: false,
toggle_fullscreen: false,
}; };
this.fullscreen(settings.graphics.fullscreen); this.fullscreen(settings.graphics.fullscreen);
@ -608,6 +613,18 @@ impl Window {
pub fn renderer_mut(&mut self) -> &mut Renderer { &mut self.renderer } pub fn renderer_mut(&mut self) -> &mut Renderer { &mut self.renderer }
pub fn resolve_deduplicated_events(&mut self, settings: &mut Settings) {
// Handle screenshots and toggling fullscreen
if self.take_screenshot {
self.take_screenshot = false;
self.take_screenshot(&settings);
}
if self.toggle_fullscreen {
self.toggle_fullscreen = false;
self.toggle_fullscreen(settings);
}
}
pub fn fetch_events(&mut self) -> Vec<Event> { pub fn fetch_events(&mut self) -> Vec<Event> {
// Refresh ui size (used when changing playstates) // Refresh ui size (used when changing playstates)
if self.needs_refresh_resize { if self.needs_refresh_resize {
@ -876,10 +893,6 @@ impl Window {
use winit::event::WindowEvent; use winit::event::WindowEvent;
let controls = &mut settings.controls; let controls = &mut settings.controls;
// TODO: these used to be used to deduplicate events which they no longer do
// this needs to be handled elsewhere
let mut toggle_fullscreen = false;
let mut take_screenshot = false;
match event { match event {
WindowEvent::CloseRequested => self.events.push(Event::Close), WindowEvent::CloseRequested => self.events.push(Event::Close),
@ -954,7 +967,7 @@ impl Window {
GameInput::Fullscreen, GameInput::Fullscreen,
) )
{ {
toggle_fullscreen = !toggle_fullscreen; self.toggle_fullscreen = !self.toggle_fullscreen;
} }
Self::set_pressed( Self::set_pressed(
&mut self.keypress_map, &mut self.keypress_map,
@ -963,7 +976,7 @@ impl Window {
); );
}, },
GameInput::Screenshot => { GameInput::Screenshot => {
take_screenshot = input.state self.take_screenshot = input.state
== winit::event::ElementState::Pressed == winit::event::ElementState::Pressed
&& !Self::is_pressed( && !Self::is_pressed(
&mut self.keypress_map, &mut self.keypress_map,
@ -993,14 +1006,6 @@ impl Window {
}, },
_ => {}, _ => {},
} }
if take_screenshot {
self.take_screenshot(&settings);
}
if toggle_fullscreen {
self.toggle_fullscreen(settings);
}
} }
/// Moves cursor by an offset /// Moves cursor by an offset