* 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
77 lines
1.8 KiB
Rust
77 lines
1.8 KiB
Rust
#![cfg(target_os = "windows")]
|
|
|
|
use winapi;
|
|
use winapi::shared::windef::HWND;
|
|
|
|
pub use self::event_loop::{EventLoop, EventLoopWindowTarget, EventLoopProxy};
|
|
pub use self::monitor::MonitorHandle;
|
|
pub use self::window::Window;
|
|
|
|
use window::Icon;
|
|
use event::DeviceId as RootDeviceId;
|
|
|
|
#[derive(Clone, Default)]
|
|
pub struct PlatformSpecificWindowBuilderAttributes {
|
|
pub parent: Option<HWND>,
|
|
pub taskbar_icon: Option<Icon>,
|
|
pub no_redirection_bitmap: bool,
|
|
}
|
|
|
|
unsafe impl Send for PlatformSpecificWindowBuilderAttributes {}
|
|
unsafe impl Sync for PlatformSpecificWindowBuilderAttributes {}
|
|
|
|
// Cursor name in UTF-16. Used to set cursor in `WM_SETCURSOR`.
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub struct Cursor(pub *const winapi::ctypes::wchar_t);
|
|
unsafe impl Send for Cursor {}
|
|
unsafe impl Sync for Cursor {}
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
pub struct DeviceId(u32);
|
|
|
|
impl DeviceId {
|
|
pub unsafe fn dummy() -> Self {
|
|
DeviceId(0)
|
|
}
|
|
}
|
|
|
|
impl DeviceId {
|
|
pub fn get_persistent_identifier(&self) -> Option<String> {
|
|
if self.0 != 0 {
|
|
raw_input::get_raw_input_device_name(self.0 as _)
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
// Constant device ID, to be removed when this backend is updated to report real device IDs.
|
|
const DEVICE_ID: RootDeviceId = RootDeviceId(DeviceId(0));
|
|
|
|
fn wrap_device_id(id: u32) -> RootDeviceId {
|
|
RootDeviceId(DeviceId(id))
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
pub struct WindowId(HWND);
|
|
unsafe impl Send for WindowId {}
|
|
unsafe impl Sync for WindowId {}
|
|
|
|
impl WindowId {
|
|
pub unsafe fn dummy() -> Self {
|
|
use std::ptr::null_mut;
|
|
|
|
WindowId(null_mut())
|
|
}
|
|
}
|
|
|
|
mod dpi;
|
|
mod drop_handler;
|
|
mod event;
|
|
mod event_loop;
|
|
mod icon;
|
|
mod monitor;
|
|
mod raw_input;
|
|
mod util;
|
|
mod window;
|
|
mod window_state;
|