forked from rust-windowing/winit
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Event Loop 2.0 API and Windows implementation (rust-windowing#638)
* Rename EventsLoop and associated types to EventLoop * Rename WindowEvent::Refresh to WindowEvent::Redraw * Remove second thread from win32 backend * Update run_forever to hijack thread * Replace windows Mutex with parking_lot Mutex * Implement new ControlFlow and associated events * Add StartCause::Init support, timer example * Add ability to send custom user events * Fully invert windows control flow so win32 calls into winit's callback * Add request_redraw * Rename platform to platform_impl * Rename os to platform, add Ext trait postfixes * Add platform::desktop module with EventLoopExt::run_return * Re-organize into module structure * Improve documentation * Small changes to examples * Improve docs for run and run_return * Change instances of "events_loop" to "event_loop" * Rename MonitorId to MonitorHandle * Add CHANGELOG entry * Improve WaitUntil timer precision * When SendEvent is called during event closure, buffer events * Fix resize lag when waiting in some situations * Update send test and errors that broke some examples/APIs * Improve clarity/fix typos in docs * Fix unreachable panic after setting ControlFlow to Poll during some RedrawRequested events. * Fix crash when running in release mode * Remove crossbeam dependency and make drop events work again * Remove serde implementations from ControlFlow * Fix 1.24.1 build * Fix freeze when setting decorations * Replace &EventLoop in callback with &EventLoopWindowTarget * Document and implement Debug for EventLoopWindowTarget * Fix some deadlocks that could occur when changing window state * Fix thread executor not executing closure when called from non-loop thread * Fix buffered events not getting dispatched * Fix crash with runner refcell not getting dropped * Address review feedback * Fix CHANGELOG typo * Catch panics in user callback
- Loading branch information
Showing
92 changed files
with
3,490 additions
and
1,304 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,48 @@ | ||
extern crate winit; | ||
|
||
use winit::{Event, ElementState, MouseCursor, WindowEvent, KeyboardInput, ControlFlow}; | ||
use winit::window::{WindowBuilder, MouseCursor}; | ||
use winit::event::{Event, WindowEvent, ElementState, KeyboardInput}; | ||
use winit::event_loop::{EventLoop, ControlFlow}; | ||
|
||
fn main() { | ||
let mut events_loop = winit::EventsLoop::new(); | ||
let event_loop = EventLoop::new(); | ||
|
||
let window = winit::WindowBuilder::new().build(&events_loop).unwrap(); | ||
let window = WindowBuilder::new().build(&event_loop).unwrap(); | ||
window.set_title("A fantastic window!"); | ||
|
||
let cursors = [MouseCursor::Default, MouseCursor::Crosshair, MouseCursor::Hand, MouseCursor::Arrow, MouseCursor::Move, MouseCursor::Text, MouseCursor::Wait, MouseCursor::Help, MouseCursor::Progress, MouseCursor::NotAllowed, MouseCursor::ContextMenu, MouseCursor::Cell, MouseCursor::VerticalText, MouseCursor::Alias, MouseCursor::Copy, MouseCursor::NoDrop, MouseCursor::Grab, MouseCursor::Grabbing, MouseCursor::AllScroll, MouseCursor::ZoomIn, MouseCursor::ZoomOut, MouseCursor::EResize, MouseCursor::NResize, MouseCursor::NeResize, MouseCursor::NwResize, MouseCursor::SResize, MouseCursor::SeResize, MouseCursor::SwResize, MouseCursor::WResize, MouseCursor::EwResize, MouseCursor::NsResize, MouseCursor::NeswResize, MouseCursor::NwseResize, MouseCursor::ColResize, MouseCursor::RowResize]; | ||
let mut cursor_idx = 0; | ||
|
||
events_loop.run_forever(|event| { | ||
event_loop.run(move |event, _, control_flow| { | ||
match event { | ||
Event::WindowEvent { event: WindowEvent::KeyboardInput { input: KeyboardInput { state: ElementState::Pressed, .. }, .. }, .. } => { | ||
println!("Setting cursor to \"{:?}\"", cursors[cursor_idx]); | ||
window.set_cursor(cursors[cursor_idx]); | ||
if cursor_idx < cursors.len() - 1 { | ||
println!("Setting cursor to \"{:?}\"", CURSORS[cursor_idx]); | ||
window.set_cursor(CURSORS[cursor_idx]); | ||
if cursor_idx < CURSORS.len() - 1 { | ||
cursor_idx += 1; | ||
} else { | ||
cursor_idx = 0; | ||
} | ||
}, | ||
Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => { | ||
return ControlFlow::Break; | ||
*control_flow = ControlFlow::Exit; | ||
return; | ||
}, | ||
_ => () | ||
} | ||
ControlFlow::Continue | ||
}); | ||
} | ||
|
||
const CURSORS: &[MouseCursor] = &[ | ||
MouseCursor::Default, MouseCursor::Crosshair, MouseCursor::Hand, | ||
MouseCursor::Arrow, MouseCursor::Move, MouseCursor::Text, | ||
MouseCursor::Wait, MouseCursor::Help, MouseCursor::Progress, | ||
MouseCursor::NotAllowed, MouseCursor::ContextMenu, MouseCursor::Cell, | ||
MouseCursor::VerticalText, MouseCursor::Alias, MouseCursor::Copy, | ||
MouseCursor::NoDrop, MouseCursor::Grab, MouseCursor::Grabbing, | ||
MouseCursor::AllScroll, MouseCursor::ZoomIn, MouseCursor::ZoomOut, | ||
MouseCursor::EResize, MouseCursor::NResize, MouseCursor::NeResize, | ||
MouseCursor::NwResize, MouseCursor::SResize, MouseCursor::SeResize, | ||
MouseCursor::SwResize, MouseCursor::WResize, MouseCursor::EwResize, | ||
MouseCursor::NsResize, MouseCursor::NeswResize, MouseCursor::NwseResize, | ||
MouseCursor::ColResize, MouseCursor::RowResize | ||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.