mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2025-01-11 21:31:29 +11:00
Migrate from lazy_static to once_cell
This commit is contained in:
parent
4c39b3188c
commit
2c01e9e747
|
@ -26,7 +26,7 @@ wayland-csd-adwaita-notitle = ["sctk-adwaita"]
|
|||
|
||||
[dependencies]
|
||||
instant = { version = "0.1", features = ["wasm-bindgen"] }
|
||||
lazy_static = "1"
|
||||
once_cell = "1.12"
|
||||
log = "0.4"
|
||||
serde = { version = "1", optional = true, features = ["serde_derive"] }
|
||||
raw-window-handle = "0.4.2"
|
||||
|
|
|
@ -133,9 +133,6 @@
|
|||
#![deny(rust_2018_idioms)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
#[allow(unused_imports)]
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
#[allow(unused_imports)]
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
|
|
@ -1,5 +1,20 @@
|
|||
#![cfg(target_os = "android")]
|
||||
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
sync::{Arc, Mutex, RwLock},
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
use ndk::{
|
||||
configuration::Configuration,
|
||||
event::{InputEvent, KeyAction, Keycode, MotionAction},
|
||||
looper::{ForeignLooper, Poll, ThreadLooper},
|
||||
};
|
||||
use ndk_glue::{Event, Rect};
|
||||
use once_cell::sync::Lazy;
|
||||
use raw_window_handle::{AndroidNdkHandle, RawWindowHandle};
|
||||
|
||||
use crate::{
|
||||
dpi::{PhysicalPosition, PhysicalSize, Position, Size},
|
||||
error,
|
||||
|
@ -7,32 +22,20 @@ use crate::{
|
|||
event_loop::{self, ControlFlow},
|
||||
monitor, window,
|
||||
};
|
||||
use ndk::{
|
||||
configuration::Configuration,
|
||||
event::{InputEvent, KeyAction, Keycode, MotionAction},
|
||||
looper::{ForeignLooper, Poll, ThreadLooper},
|
||||
};
|
||||
use ndk_glue::{Event, Rect};
|
||||
use raw_window_handle::{AndroidNdkHandle, RawWindowHandle};
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
sync::{Arc, Mutex, RwLock},
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
lazy_static! {
|
||||
static ref CONFIG: RwLock<Configuration> = RwLock::new(Configuration::from_asset_manager(
|
||||
static CONFIG: Lazy<RwLock<Configuration>> = Lazy::new(|| {
|
||||
RwLock::new(Configuration::from_asset_manager(
|
||||
#[allow(deprecated)] // TODO: rust-windowing/winit#2196
|
||||
&ndk_glue::native_activity().asset_manager()
|
||||
));
|
||||
&ndk_glue::native_activity().asset_manager(),
|
||||
))
|
||||
});
|
||||
// If this is `Some()` a `Poll::Wake` is considered an `EventSource::Internal` with the event
|
||||
// contained in the `Option`. The event is moved outside of the `Option` replacing it with a
|
||||
// `None`.
|
||||
//
|
||||
// This allows us to inject event into the event loop without going through `ndk-glue` and
|
||||
// calling unsafe function that should only be called by Android.
|
||||
static ref INTERNAL_EVENT: RwLock<Option<InternalEvent>> = RwLock::new(None);
|
||||
}
|
||||
static INTERNAL_EVENT: Lazy<RwLock<Option<InternalEvent>>> = Lazy::new(|| RwLock::new(None));
|
||||
|
||||
enum InternalEvent {
|
||||
RedrawRequested,
|
||||
|
|
|
@ -10,6 +10,7 @@ use std::{
|
|||
};
|
||||
|
||||
use objc::runtime::{BOOL, YES};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{
|
||||
dpi::LogicalSize,
|
||||
|
@ -1016,8 +1017,7 @@ impl NSOperatingSystemVersion {
|
|||
}
|
||||
|
||||
pub fn os_capabilities() -> OSCapabilities {
|
||||
lazy_static! {
|
||||
static ref OS_CAPABILITIES: OSCapabilities = {
|
||||
static OS_CAPABILITIES: Lazy<OSCapabilities> = Lazy::new(|| {
|
||||
let version: NSOperatingSystemVersion = unsafe {
|
||||
let process_info: id = msg_send![class!(NSProcessInfo), processInfo];
|
||||
let atleast_ios_8: BOOL = msg_send![
|
||||
|
@ -1038,7 +1038,6 @@ pub fn os_capabilities() -> OSCapabilities {
|
|||
msg_send![process_info, operatingSystemVersion]
|
||||
};
|
||||
version.into()
|
||||
};
|
||||
}
|
||||
});
|
||||
OS_CAPABILITIES.clone()
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ use std::{collections::VecDeque, env, fmt};
|
|||
#[cfg(feature = "x11")]
|
||||
use std::{ffi::CStr, mem::MaybeUninit, os::raw::*, sync::Arc};
|
||||
|
||||
#[cfg(feature = "x11")]
|
||||
use once_cell::sync::Lazy;
|
||||
#[cfg(feature = "x11")]
|
||||
use parking_lot::Mutex;
|
||||
use raw_window_handle::RawWindowHandle;
|
||||
|
@ -135,10 +137,8 @@ impl Default for PlatformSpecificWindowBuilderAttributes {
|
|||
}
|
||||
|
||||
#[cfg(feature = "x11")]
|
||||
lazy_static! {
|
||||
pub static ref X11_BACKEND: Mutex<Result<Arc<XConnection>, XNotSupported>> =
|
||||
Mutex::new(XConnection::new(Some(x_error_callback)).map(Arc::new));
|
||||
}
|
||||
pub static X11_BACKEND: Lazy<Mutex<Result<Arc<XConnection>, XNotSupported>>> =
|
||||
Lazy::new(|| Mutex::new(XConnection::new(Some(x_error_callback)).map(Arc::new)));
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum OsError {
|
||||
|
|
|
@ -7,13 +7,12 @@ use std::{
|
|||
sync::Arc,
|
||||
};
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use super::{ffi, util, XConnection, XError};
|
||||
|
||||
lazy_static! {
|
||||
static ref GLOBAL_LOCK: Mutex<()> = Default::default();
|
||||
}
|
||||
static GLOBAL_LOCK: Lazy<Mutex<()>> = Lazy::new(Default::default);
|
||||
|
||||
unsafe fn open_im(xconn: &Arc<XConnection>, locale_modifiers: &CStr) -> Option<ffi::XIM> {
|
||||
let _lock = GLOBAL_LOCK.lock();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use std::os::raw::*;
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use super::{
|
||||
|
@ -18,9 +19,7 @@ use crate::{
|
|||
// Used for testing. This should always be committed as false.
|
||||
const DISABLE_MONITOR_LIST_CACHING: bool = false;
|
||||
|
||||
lazy_static! {
|
||||
static ref MONITORS: Mutex<Option<Vec<MonitorHandle>>> = Mutex::default();
|
||||
}
|
||||
static MONITORS: Lazy<Mutex<Option<Vec<MonitorHandle>>>> = Lazy::new(Mutex::default);
|
||||
|
||||
pub fn invalidate_cached_monitor_list() -> Option<Vec<MonitorHandle>> {
|
||||
// We update this lazily.
|
||||
|
|
|
@ -5,15 +5,14 @@ use std::{
|
|||
os::raw::*,
|
||||
};
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use super::*;
|
||||
|
||||
type AtomCache = HashMap<CString, ffi::Atom>;
|
||||
|
||||
lazy_static! {
|
||||
static ref ATOM_CACHE: Mutex<AtomCache> = Mutex::new(HashMap::with_capacity(2048));
|
||||
}
|
||||
static ATOM_CACHE: Lazy<Mutex<AtomCache>> = Lazy::new(|| Mutex::new(HashMap::with_capacity(2048)));
|
||||
|
||||
impl XConnection {
|
||||
pub fn get_atom<T: AsRef<CStr> + Debug>(&self, name: T) -> ffi::Atom {
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
use once_cell::sync::Lazy;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use super::*;
|
||||
|
||||
// This info is global to the window manager.
|
||||
lazy_static! {
|
||||
static ref SUPPORTED_HINTS: Mutex<Vec<ffi::Atom>> = Mutex::new(Vec::with_capacity(0));
|
||||
static ref WM_NAME: Mutex<Option<String>> = Mutex::new(None);
|
||||
}
|
||||
static SUPPORTED_HINTS: Lazy<Mutex<Vec<ffi::Atom>>> =
|
||||
Lazy::new(|| Mutex::new(Vec::with_capacity(0)));
|
||||
static WM_NAME: Lazy<Mutex<Option<String>>> = Lazy::new(|| Mutex::new(None));
|
||||
|
||||
pub fn hint_is_supported(hint: ffi::Atom) -> bool {
|
||||
(*SUPPORTED_HINTS.lock()).contains(&hint)
|
||||
|
|
|
@ -8,6 +8,7 @@ use objc::{
|
|||
declare::ClassDecl,
|
||||
runtime::{Class, Object, Sel},
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use super::{app_state::AppState, event::EventWrapper, util, DEVICE_ID};
|
||||
use crate::event::{DeviceEvent, ElementState, Event};
|
||||
|
@ -16,8 +17,7 @@ pub struct AppClass(pub *const Class);
|
|||
unsafe impl Send for AppClass {}
|
||||
unsafe impl Sync for AppClass {}
|
||||
|
||||
lazy_static! {
|
||||
pub static ref APP_CLASS: AppClass = unsafe {
|
||||
pub static APP_CLASS: Lazy<AppClass> = Lazy::new(|| unsafe {
|
||||
let superclass = class!(NSApplication);
|
||||
let mut decl = ClassDecl::new("WinitApp", superclass).unwrap();
|
||||
|
||||
|
@ -27,8 +27,7 @@ lazy_static! {
|
|||
);
|
||||
|
||||
AppClass(decl.register())
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// Normally, holding Cmd + any key never sends us a `keyUp` event for that key.
|
||||
// Overriding `sendEvent:` like this fixes that. (https://stackoverflow.com/a/15294196)
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
use crate::{platform::macos::ActivationPolicy, platform_impl::platform::app_state::AppState};
|
||||
use std::{
|
||||
cell::{RefCell, RefMut},
|
||||
os::raw::c_void,
|
||||
};
|
||||
|
||||
use cocoa::base::id;
|
||||
use objc::{
|
||||
declare::ClassDecl,
|
||||
runtime::{Class, Object, Sel},
|
||||
};
|
||||
use std::{
|
||||
cell::{RefCell, RefMut},
|
||||
os::raw::c_void,
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{platform::macos::ActivationPolicy, platform_impl::platform::app_state::AppState};
|
||||
|
||||
static AUX_DELEGATE_STATE_NAME: &str = "auxState";
|
||||
|
||||
|
@ -21,8 +23,7 @@ pub struct AppDelegateClass(pub *const Class);
|
|||
unsafe impl Send for AppDelegateClass {}
|
||||
unsafe impl Sync for AppDelegateClass {}
|
||||
|
||||
lazy_static! {
|
||||
pub static ref APP_DELEGATE_CLASS: AppDelegateClass = unsafe {
|
||||
pub static APP_DELEGATE_CLASS: Lazy<AppDelegateClass> = Lazy::new(|| unsafe {
|
||||
let superclass = class!(NSResponder);
|
||||
let mut decl = ClassDecl::new("WinitAppDelegate", superclass).unwrap();
|
||||
|
||||
|
@ -36,8 +37,7 @@ lazy_static! {
|
|||
decl.add_ivar::<*mut c_void>(AUX_DELEGATE_STATE_NAME);
|
||||
|
||||
AppDelegateClass(decl.register())
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
/// Safety: Assumes that Object is an instance of APP_DELEGATE_CLASS
|
||||
pub unsafe fn get_aux_state_mut(this: &Object) -> RefMut<'_, AuxDelegateState> {
|
||||
|
|
|
@ -21,6 +21,7 @@ use objc::{
|
|||
rc::autoreleasepool,
|
||||
runtime::{Object, BOOL, NO, YES},
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{
|
||||
dpi::LogicalSize,
|
||||
|
@ -41,9 +42,7 @@ use crate::{
|
|||
window::WindowId,
|
||||
};
|
||||
|
||||
lazy_static! {
|
||||
static ref HANDLER: Handler = Default::default();
|
||||
}
|
||||
static HANDLER: Lazy<Handler> = Lazy::new(Default::default);
|
||||
|
||||
impl<'a, Never> Event<'a, Never> {
|
||||
fn userify<T: 'static>(self) -> Event<'a, T> {
|
||||
|
|
|
@ -18,6 +18,7 @@ use objc::{
|
|||
declare::ClassDecl,
|
||||
runtime::{Class, Object, Protocol, Sel, BOOL, NO, YES},
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{
|
||||
dpi::{LogicalPosition, LogicalSize},
|
||||
|
@ -155,8 +156,7 @@ struct ViewClass(*const Class);
|
|||
unsafe impl Send for ViewClass {}
|
||||
unsafe impl Sync for ViewClass {}
|
||||
|
||||
lazy_static! {
|
||||
static ref VIEW_CLASS: ViewClass = unsafe {
|
||||
static VIEW_CLASS: Lazy<ViewClass> = Lazy::new(|| unsafe {
|
||||
let superclass = class!(NSView);
|
||||
let mut decl = ClassDecl::new("WinitView", superclass).unwrap();
|
||||
decl.add_method(sel!(dealloc), dealloc as extern "C" fn(&Object, Sel));
|
||||
|
@ -320,8 +320,7 @@ lazy_static! {
|
|||
let protocol = Protocol::get("NSTextInputClient").unwrap();
|
||||
decl.add_protocol(protocol);
|
||||
ViewClass(decl.register())
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
extern "C" fn dealloc(this: &Object, _sel: Sel) {
|
||||
unsafe {
|
||||
|
|
|
@ -46,6 +46,7 @@ use objc::{
|
|||
rc::autoreleasepool,
|
||||
runtime::{Class, Object, Sel, BOOL, NO, YES},
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
pub struct WindowId(pub usize);
|
||||
|
@ -246,8 +247,7 @@ struct WindowClass(*const Class);
|
|||
unsafe impl Send for WindowClass {}
|
||||
unsafe impl Sync for WindowClass {}
|
||||
|
||||
lazy_static! {
|
||||
static ref WINDOW_CLASS: WindowClass = unsafe {
|
||||
static WINDOW_CLASS: Lazy<WindowClass> = Lazy::new(|| unsafe {
|
||||
let window_superclass = class!(NSWindow);
|
||||
let mut decl = ClassDecl::new("WinitWindow", window_superclass).unwrap();
|
||||
|
||||
|
@ -270,8 +270,7 @@ lazy_static! {
|
|||
can_become_key_window as extern "C" fn(&Object, Sel) -> BOOL,
|
||||
);
|
||||
WindowClass(decl.register())
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct SharedState {
|
||||
|
|
|
@ -14,6 +14,7 @@ use objc::{
|
|||
rc::autoreleasepool,
|
||||
runtime::{Class, Object, Sel, BOOL, NO, YES},
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{
|
||||
dpi::{LogicalPosition, LogicalSize},
|
||||
|
@ -134,8 +135,7 @@ struct WindowDelegateClass(*const Class);
|
|||
unsafe impl Send for WindowDelegateClass {}
|
||||
unsafe impl Sync for WindowDelegateClass {}
|
||||
|
||||
lazy_static! {
|
||||
static ref WINDOW_DELEGATE_CLASS: WindowDelegateClass = unsafe {
|
||||
static WINDOW_DELEGATE_CLASS: Lazy<WindowDelegateClass> = Lazy::new(|| unsafe {
|
||||
let superclass = class!(NSResponder);
|
||||
let mut decl = ClassDecl::new("WinitWindowDelegate", superclass).unwrap();
|
||||
|
||||
|
@ -223,8 +223,7 @@ lazy_static! {
|
|||
|
||||
decl.add_ivar::<*mut c_void>("winitState");
|
||||
WindowDelegateClass(decl.register())
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// This function is definitely unsafe, but labeling that would increase
|
||||
// boilerplate and wouldn't really clarify anything...
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
/// which is inspired by the solution in https://github.com/ysc3839/win32-darkmode
|
||||
use std::{ffi::c_void, ptr};
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use windows_sys::{
|
||||
core::PCSTR,
|
||||
Win32::{
|
||||
|
@ -22,8 +23,7 @@ use crate::window::Theme;
|
|||
|
||||
use super::util;
|
||||
|
||||
lazy_static! {
|
||||
static ref WIN10_BUILD_VERSION: Option<u32> = {
|
||||
static WIN10_BUILD_VERSION: Lazy<Option<u32>> = Lazy::new(|| {
|
||||
type RtlGetVersion = unsafe extern "system" fn(*mut OSVERSIONINFOW) -> NTSTATUS;
|
||||
let handle = get_function!("ntdll.dll", RtlGetVersion);
|
||||
|
||||
|
@ -49,20 +49,19 @@ lazy_static! {
|
|||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
static ref DARK_MODE_SUPPORTED: bool = {
|
||||
static DARK_MODE_SUPPORTED: Lazy<bool> = Lazy::new(|| {
|
||||
// We won't try to do anything for windows versions < 17763
|
||||
// (Windows 10 October 2018 update)
|
||||
match *WIN10_BUILD_VERSION {
|
||||
Some(v) => v >= 17763,
|
||||
None => false
|
||||
None => false,
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
static ref DARK_THEME_NAME: Vec<u16> = util::encode_wide("DarkMode_Explorer");
|
||||
static ref LIGHT_THEME_NAME: Vec<u16> = util::encode_wide("");
|
||||
}
|
||||
static DARK_THEME_NAME: Lazy<Vec<u16>> = Lazy::new(|| util::encode_wide("DarkMode_Explorer"));
|
||||
static LIGHT_THEME_NAME: Lazy<Vec<u16>> = Lazy::new(|| util::encode_wide(""));
|
||||
|
||||
/// Attempt to set a theme on a window, if necessary.
|
||||
/// Returns the theme that was picked
|
||||
|
@ -113,10 +112,8 @@ fn set_dark_mode_for_window(hwnd: HWND, is_dark_mode: bool) -> bool {
|
|||
cbData: usize,
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
static ref SET_WINDOW_COMPOSITION_ATTRIBUTE: Option<SetWindowCompositionAttribute> =
|
||||
get_function!("user32.dll", SetWindowCompositionAttribute);
|
||||
}
|
||||
static SET_WINDOW_COMPOSITION_ATTRIBUTE: Lazy<Option<SetWindowCompositionAttribute>> =
|
||||
Lazy::new(|| get_function!("user32.dll", SetWindowCompositionAttribute));
|
||||
|
||||
if let Some(set_window_composition_attribute) = *SET_WINDOW_COMPOSITION_ATTRIBUTE {
|
||||
unsafe {
|
||||
|
@ -144,9 +141,7 @@ fn should_use_dark_mode() -> bool {
|
|||
|
||||
fn should_apps_use_dark_mode() -> bool {
|
||||
type ShouldAppsUseDarkMode = unsafe extern "system" fn() -> bool;
|
||||
lazy_static! {
|
||||
static ref SHOULD_APPS_USE_DARK_MODE: Option<ShouldAppsUseDarkMode> = {
|
||||
unsafe {
|
||||
static SHOULD_APPS_USE_DARK_MODE: Lazy<Option<ShouldAppsUseDarkMode>> = Lazy::new(|| unsafe {
|
||||
const UXTHEME_SHOULDAPPSUSEDARKMODE_ORDINAL: PCSTR = 132 as PCSTR;
|
||||
|
||||
let module = LoadLibraryA("uxtheme.dll\0".as_ptr());
|
||||
|
@ -158,9 +153,7 @@ fn should_apps_use_dark_mode() -> bool {
|
|||
let handle = GetProcAddress(module, UXTHEME_SHOULDAPPSUSEDARKMODE_ORDINAL);
|
||||
|
||||
handle.map(|handle| std::mem::transmute(handle))
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
SHOULD_APPS_USE_DARK_MODE
|
||||
.map(|should_apps_use_dark_mode| unsafe { (should_apps_use_dark_mode)() })
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
mod runner;
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use parking_lot::Mutex;
|
||||
use std::{
|
||||
cell::Cell,
|
||||
|
@ -112,18 +113,17 @@ type GetPointerTouchInfo =
|
|||
type GetPointerPenInfo =
|
||||
unsafe extern "system" fn(pointId: u32, penInfo: *mut POINTER_PEN_INFO) -> BOOL;
|
||||
|
||||
lazy_static! {
|
||||
static ref GET_POINTER_FRAME_INFO_HISTORY: Option<GetPointerFrameInfoHistory> =
|
||||
get_function!("user32.dll", GetPointerFrameInfoHistory);
|
||||
static ref SKIP_POINTER_FRAME_MESSAGES: Option<SkipPointerFrameMessages> =
|
||||
get_function!("user32.dll", SkipPointerFrameMessages);
|
||||
static ref GET_POINTER_DEVICE_RECTS: Option<GetPointerDeviceRects> =
|
||||
get_function!("user32.dll", GetPointerDeviceRects);
|
||||
static ref GET_POINTER_TOUCH_INFO: Option<GetPointerTouchInfo> =
|
||||
get_function!("user32.dll", GetPointerTouchInfo);
|
||||
static ref GET_POINTER_PEN_INFO: Option<GetPointerPenInfo> =
|
||||
get_function!("user32.dll", GetPointerPenInfo);
|
||||
}
|
||||
static GET_POINTER_FRAME_INFO_HISTORY: Lazy<Option<GetPointerFrameInfoHistory>> =
|
||||
Lazy::new(|| get_function!("user32.dll", GetPointerFrameInfoHistory));
|
||||
static SKIP_POINTER_FRAME_MESSAGES: Lazy<Option<SkipPointerFrameMessages>> =
|
||||
Lazy::new(|| get_function!("user32.dll", SkipPointerFrameMessages));
|
||||
static GET_POINTER_DEVICE_RECTS: Lazy<Option<GetPointerDeviceRects>> =
|
||||
Lazy::new(|| get_function!("user32.dll", GetPointerDeviceRects));
|
||||
static GET_POINTER_TOUCH_INFO: Lazy<Option<GetPointerTouchInfo>> =
|
||||
Lazy::new(|| get_function!("user32.dll", GetPointerTouchInfo));
|
||||
static GET_POINTER_PEN_INFO: Lazy<Option<GetPointerPenInfo>> =
|
||||
Lazy::new(|| get_function!("user32.dll", GetPointerPenInfo));
|
||||
|
||||
pub(crate) struct WindowData<T: 'static> {
|
||||
pub window_state: Arc<Mutex<WindowState>>,
|
||||
pub event_loop_runner: EventLoopRunnerShared<T>,
|
||||
|
@ -375,8 +375,7 @@ fn get_wait_thread_id() -> u32 {
|
|||
}
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
static ref WAIT_PERIOD_MIN: Option<u32> = unsafe {
|
||||
static WAIT_PERIOD_MIN: Lazy<Option<u32>> = Lazy::new(|| unsafe {
|
||||
let mut caps = TIMECAPS {
|
||||
wPeriodMin: 0,
|
||||
wPeriodMax: 0,
|
||||
|
@ -386,8 +385,7 @@ lazy_static! {
|
|||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
fn wait_thread(parent_thread_id: u32, msg_window_id: HWND) {
|
||||
unsafe {
|
||||
|
@ -582,59 +580,36 @@ impl<T: 'static> EventLoopProxy<T> {
|
|||
|
||||
type WaitUntilInstantBox = Box<Instant>;
|
||||
|
||||
lazy_static! {
|
||||
// Message sent by the `EventLoopProxy` when we want to wake up the thread.
|
||||
// WPARAM and LPARAM are unused.
|
||||
static ref USER_EVENT_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::WakeupMsg\0".as_ptr())
|
||||
}
|
||||
};
|
||||
static USER_EVENT_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::WakeupMsg\0".as_ptr()) });
|
||||
// Message sent when we want to execute a closure in the thread.
|
||||
// WPARAM contains a Box<Box<dyn FnMut()>> that must be retrieved with `Box::from_raw`,
|
||||
// and LPARAM is unused.
|
||||
static ref EXEC_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::ExecMsg\0".as_ptr())
|
||||
}
|
||||
};
|
||||
static ref PROCESS_NEW_EVENTS_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::ProcessNewEvents\0".as_ptr())
|
||||
}
|
||||
};
|
||||
static EXEC_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::ExecMsg\0".as_ptr()) });
|
||||
static PROCESS_NEW_EVENTS_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::ProcessNewEvents\0".as_ptr()) });
|
||||
/// lparam is the wait thread's message id.
|
||||
static ref SEND_WAIT_THREAD_ID_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::SendWaitThreadId\0".as_ptr())
|
||||
}
|
||||
};
|
||||
static SEND_WAIT_THREAD_ID_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::SendWaitThreadId\0".as_ptr()) });
|
||||
/// lparam points to a `Box<Instant>` signifying the time `PROCESS_NEW_EVENTS_MSG_ID` should
|
||||
/// be sent.
|
||||
static ref WAIT_UNTIL_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::WaitUntil\0".as_ptr())
|
||||
}
|
||||
};
|
||||
static ref CANCEL_WAIT_UNTIL_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::CancelWaitUntil\0".as_ptr())
|
||||
}
|
||||
};
|
||||
static WAIT_UNTIL_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::WaitUntil\0".as_ptr()) });
|
||||
static CANCEL_WAIT_UNTIL_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::CancelWaitUntil\0".as_ptr()) });
|
||||
// Message sent by a `Window` when it wants to be destroyed by the main thread.
|
||||
// WPARAM and LPARAM are unused.
|
||||
pub static ref DESTROY_MSG_ID: u32 = {
|
||||
unsafe {
|
||||
RegisterWindowMessageA("Winit::DestroyMsg\0".as_ptr())
|
||||
}
|
||||
};
|
||||
pub static DESTROY_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::DestroyMsg\0".as_ptr()) });
|
||||
// WPARAM is a bool specifying the `WindowFlags::MARKER_RETAIN_STATE_ON_SIZE` flag. See the
|
||||
// documentation in the `window_state` module for more information.
|
||||
pub static ref SET_RETAIN_STATE_ON_SIZE_MSG_ID: u32 = unsafe {
|
||||
RegisterWindowMessageA("Winit::SetRetainMaximized\0".as_ptr())
|
||||
};
|
||||
static ref THREAD_EVENT_TARGET_WINDOW_CLASS: Vec<u16> = util::encode_wide("Winit Thread Event Target");
|
||||
}
|
||||
pub static SET_RETAIN_STATE_ON_SIZE_MSG_ID: Lazy<u32> =
|
||||
Lazy::new(|| unsafe { RegisterWindowMessageA("Winit::SetRetainMaximized\0".as_ptr()) });
|
||||
static THREAD_EVENT_TARGET_WINDOW_CLASS: Lazy<Vec<u16>> =
|
||||
Lazy::new(|| util::encode_wide("Winit Thread Event Target"));
|
||||
|
||||
fn create_event_target_window<T: 'static>() -> HWND {
|
||||
unsafe {
|
||||
|
|
|
@ -9,6 +9,7 @@ use std::{
|
|||
sync::atomic::{AtomicBool, Ordering},
|
||||
};
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use windows_sys::{
|
||||
core::{HRESULT, PCWSTR},
|
||||
Win32::{
|
||||
|
@ -298,19 +299,17 @@ pub type AdjustWindowRectExForDpi = unsafe extern "system" fn(
|
|||
dpi: u32,
|
||||
) -> BOOL;
|
||||
|
||||
lazy_static! {
|
||||
pub static ref GET_DPI_FOR_WINDOW: Option<GetDpiForWindow> =
|
||||
get_function!("user32.dll", GetDpiForWindow);
|
||||
pub static ref ADJUST_WINDOW_RECT_EX_FOR_DPI: Option<AdjustWindowRectExForDpi> =
|
||||
get_function!("user32.dll", AdjustWindowRectExForDpi);
|
||||
pub static ref GET_DPI_FOR_MONITOR: Option<GetDpiForMonitor> =
|
||||
get_function!("shcore.dll", GetDpiForMonitor);
|
||||
pub static ref ENABLE_NON_CLIENT_DPI_SCALING: Option<EnableNonClientDpiScaling> =
|
||||
get_function!("user32.dll", EnableNonClientDpiScaling);
|
||||
pub static ref SET_PROCESS_DPI_AWARENESS_CONTEXT: Option<SetProcessDpiAwarenessContext> =
|
||||
get_function!("user32.dll", SetProcessDpiAwarenessContext);
|
||||
pub static ref SET_PROCESS_DPI_AWARENESS: Option<SetProcessDpiAwareness> =
|
||||
get_function!("shcore.dll", SetProcessDpiAwareness);
|
||||
pub static ref SET_PROCESS_DPI_AWARE: Option<SetProcessDPIAware> =
|
||||
get_function!("user32.dll", SetProcessDPIAware);
|
||||
}
|
||||
pub static GET_DPI_FOR_WINDOW: Lazy<Option<GetDpiForWindow>> =
|
||||
Lazy::new(|| get_function!("user32.dll", GetDpiForWindow));
|
||||
pub static ADJUST_WINDOW_RECT_EX_FOR_DPI: Lazy<Option<AdjustWindowRectExForDpi>> =
|
||||
Lazy::new(|| get_function!("user32.dll", AdjustWindowRectExForDpi));
|
||||
pub static GET_DPI_FOR_MONITOR: Lazy<Option<GetDpiForMonitor>> =
|
||||
Lazy::new(|| get_function!("shcore.dll", GetDpiForMonitor));
|
||||
pub static ENABLE_NON_CLIENT_DPI_SCALING: Lazy<Option<EnableNonClientDpiScaling>> =
|
||||
Lazy::new(|| get_function!("user32.dll", EnableNonClientDpiScaling));
|
||||
pub static SET_PROCESS_DPI_AWARENESS_CONTEXT: Lazy<Option<SetProcessDpiAwarenessContext>> =
|
||||
Lazy::new(|| get_function!("user32.dll", SetProcessDpiAwarenessContext));
|
||||
pub static SET_PROCESS_DPI_AWARENESS: Lazy<Option<SetProcessDpiAwareness>> =
|
||||
Lazy::new(|| get_function!("shcore.dll", SetProcessDpiAwareness));
|
||||
pub static SET_PROCESS_DPI_AWARE: Lazy<Option<SetProcessDPIAware>> =
|
||||
Lazy::new(|| get_function!("user32.dll", SetProcessDPIAware));
|
||||
|
|
Loading…
Reference in a new issue