mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2025-01-23 10:26:34 +11:00
Add support for generating dummy DeviceIDs and WindowIDs (#738)
* Add support for generating dummy DeviceIDs and WindowIDs * Fix linux * Improve docs and move dummy to unsafe * Strengthen guarantees a bit * Add backticks to CHANGELOG.md Co-Authored-By: Xaeroxe <xaeroxe@amethyst-engine.org>
This commit is contained in:
parent
45a4281413
commit
9ae75c0c03
11 changed files with 121 additions and 0 deletions
|
@ -15,6 +15,7 @@
|
||||||
- On Wayland, fix resizing and DPI calculation when a `wl_output` is removed without sending a `leave` event to the `wl_surface`, such as disconnecting a monitor from a laptop.
|
- On Wayland, fix resizing and DPI calculation when a `wl_output` is removed without sending a `leave` event to the `wl_surface`, such as disconnecting a monitor from a laptop.
|
||||||
- On Wayland, DPI calculation is handled by smithay-client-toolkit.
|
- On Wayland, DPI calculation is handled by smithay-client-toolkit.
|
||||||
- On X11, `WindowBuilder::with_min_dimensions` and `WindowBuilder::with_max_dimensions` now correctly account for DPI.
|
- On X11, `WindowBuilder::with_min_dimensions` and `WindowBuilder::with_max_dimensions` now correctly account for DPI.
|
||||||
|
- Added support for generating dummy `DeviceId`s and `WindowId`s to better support unit testing.
|
||||||
|
|
||||||
# Version 0.18.0 (2018-11-07)
|
# Version 0.18.0 (2018-11-07)
|
||||||
|
|
||||||
|
|
22
src/lib.rs
22
src/lib.rs
|
@ -169,6 +169,17 @@ impl std::fmt::Debug for Window {
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct WindowId(platform::WindowId);
|
pub struct WindowId(platform::WindowId);
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
/// Returns a dummy `WindowId`, useful for unit testing. The only guarantee made about the return
|
||||||
|
/// value of this function is that it will always be equal to itself and to future values returned
|
||||||
|
/// by this function. No other guarantees are made. This may be equal to a real `WindowId`.
|
||||||
|
///
|
||||||
|
/// **Passing this into a winit function will result in undefined behavior.**
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId(platform::WindowId::dummy())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Identifier of an input device.
|
/// Identifier of an input device.
|
||||||
///
|
///
|
||||||
/// Whenever you receive an event arising from a particular input device, this event contains a `DeviceId` which
|
/// Whenever you receive an event arising from a particular input device, this event contains a `DeviceId` which
|
||||||
|
@ -177,6 +188,17 @@ pub struct WindowId(platform::WindowId);
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId(platform::DeviceId);
|
pub struct DeviceId(platform::DeviceId);
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
/// Returns a dummy `DeviceId`, useful for unit testing. The only guarantee made about the return
|
||||||
|
/// value of this function is that it will always be equal to itself and to future values returned
|
||||||
|
/// by this function. No other guarantees are made. This may be equal to a real `DeviceId`.
|
||||||
|
///
|
||||||
|
/// **Passing this into a winit function will result in undefined behavior.**
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId(platform::DeviceId::dummy())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Provides a way to retrieve events from the system and from the windows that were registered to
|
/// Provides a way to retrieve events from the system and from the windows that were registered to
|
||||||
/// the events loop.
|
/// the events loop.
|
||||||
///
|
///
|
||||||
|
|
|
@ -170,9 +170,21 @@ impl EventsLoopProxy {
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct WindowId;
|
pub struct WindowId;
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Window {
|
pub struct Window {
|
||||||
native_window: *const c_void,
|
native_window: *const c_void,
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,12 @@ unsafe impl Sync for PlatformSpecificWindowBuilderAttributes {}
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
pub struct PlatformSpecificHeadlessBuilderAttributes;
|
pub struct PlatformSpecificHeadlessBuilderAttributes;
|
||||||
|
|
||||||
|
@ -149,6 +155,12 @@ impl EventsLoop {
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct WindowId(usize);
|
pub struct WindowId(usize);
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Window2 {
|
pub struct Window2 {
|
||||||
cursor_grabbed: Mutex<bool>,
|
cursor_grabbed: Mutex<bool>,
|
||||||
cursor_hidden: Mutex<bool>,
|
cursor_hidden: Mutex<bool>,
|
||||||
|
|
|
@ -290,9 +290,21 @@ impl EventsLoopProxy {
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct WindowId;
|
pub struct WindowId;
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct PlatformSpecificWindowBuilderAttributes {
|
pub struct PlatformSpecificWindowBuilderAttributes {
|
||||||
pub root_view_class: &'static Class,
|
pub root_view_class: &'static Class,
|
||||||
|
|
|
@ -66,12 +66,24 @@ pub enum WindowId {
|
||||||
Wayland(wayland::WindowId),
|
Wayland(wayland::WindowId),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId::X(x11::WindowId::dummy())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub enum DeviceId {
|
pub enum DeviceId {
|
||||||
X(x11::DeviceId),
|
X(x11::DeviceId),
|
||||||
Wayland(wayland::DeviceId),
|
Wayland(wayland::DeviceId),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId::X(x11::DeviceId::dummy())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum MonitorId {
|
pub enum MonitorId {
|
||||||
X(x11::MonitorId),
|
X(x11::MonitorId),
|
||||||
|
|
|
@ -16,9 +16,21 @@ mod window;
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct WindowId(usize);
|
pub struct WindowId(usize);
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn make_wid(s: &Proxy<wl_surface::WlSurface>) -> WindowId {
|
fn make_wid(s: &Proxy<wl_surface::WlSurface>) -> WindowId {
|
||||||
WindowId(s.c_ptr() as usize)
|
WindowId(s.c_ptr() as usize)
|
||||||
|
|
|
@ -1262,9 +1262,21 @@ impl<'a> Deref for DeviceInfo<'a> {
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct WindowId(ffi::Window);
|
pub struct WindowId(ffi::Window);
|
||||||
|
|
||||||
|
impl WindowId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
WindowId(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId(c_int);
|
pub struct DeviceId(c_int);
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Window(Arc<UnownedWindow>);
|
pub struct Window(Arc<UnownedWindow>);
|
||||||
|
|
||||||
impl Deref for Window {
|
impl Deref for Window {
|
||||||
|
|
|
@ -8,6 +8,12 @@ use std::sync::Arc;
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
use {CreationError};
|
use {CreationError};
|
||||||
|
|
||||||
pub struct Window {
|
pub struct Window {
|
||||||
|
|
|
@ -50,6 +50,12 @@ use window::MonitorId as RootMonitorId;
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct Id(pub usize);
|
pub struct Id(pub usize);
|
||||||
|
|
||||||
|
impl Id {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
Id(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: It's possible for delegate methods to be called asynchronously, causing data races / `RefCell` panics.
|
// TODO: It's possible for delegate methods to be called asynchronously, causing data races / `RefCell` panics.
|
||||||
pub struct DelegateState {
|
pub struct DelegateState {
|
||||||
view: IdRef,
|
view: IdRef,
|
||||||
|
|
|
@ -26,6 +26,12 @@ unsafe impl Sync for Cursor {}
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct DeviceId(u32);
|
pub struct DeviceId(u32);
|
||||||
|
|
||||||
|
impl DeviceId {
|
||||||
|
pub unsafe fn dummy() -> Self {
|
||||||
|
DeviceId(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub fn get_persistent_identifier(&self) -> Option<String> {
|
pub fn get_persistent_identifier(&self) -> Option<String> {
|
||||||
if self.0 != 0 {
|
if self.0 != 0 {
|
||||||
|
@ -48,6 +54,14 @@ pub struct WindowId(HWND);
|
||||||
unsafe impl Send for WindowId {}
|
unsafe impl Send for WindowId {}
|
||||||
unsafe impl Sync 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 dpi;
|
||||||
mod drop_handler;
|
mod drop_handler;
|
||||||
mod event;
|
mod event;
|
||||||
|
|
Loading…
Add table
Reference in a new issue