mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-24 06:11:30 +11:00
Clippy fixes (#2011)
* windows: bump winapi version * windows: address dark_mode FIXMEs use now available winapi structures * clippy: fix clippy::upper_case_acronyms warnings * clippy: fix needless_arbitrary_self_type warnings * clippy: fix clone_on_copy warnings * clippy: fix unnecessary_mut_passed warnings * clippy: fix identity_op warnings * clippy: fix misc warnings * prefix rustdoc lints with rustdoc:: the prefix was introduced in Rust 1.52 * windows: silence file_drop_handler is never read warning * clippy: fix from_over_into warnings and a bit of naming simplification * clippy: fix missing_safety_doc warnings * make dummy() functions const
This commit is contained in:
parent
9e72396709
commit
1b3b82a3c1
|
@ -58,7 +58,7 @@ features = ["display_link"]
|
||||||
parking_lot = "0.11"
|
parking_lot = "0.11"
|
||||||
|
|
||||||
[target.'cfg(target_os = "windows")'.dependencies.winapi]
|
[target.'cfg(target_os = "windows")'.dependencies.winapi]
|
||||||
version = "0.3.6"
|
version = "0.3.9"
|
||||||
features = [
|
features = [
|
||||||
"combaseapi",
|
"combaseapi",
|
||||||
"commctrl",
|
"commctrl",
|
||||||
|
|
90
src/dpi.rs
90
src/dpi.rs
|
@ -211,9 +211,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for LogicalPosition<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<(X, X)> for LogicalPosition<P> {
|
impl<P: Pixel, X: Pixel> From<LogicalPosition<P>> for (X, X) {
|
||||||
fn into(self: Self) -> (X, X) {
|
fn from(p: LogicalPosition<P>) -> (X, X) {
|
||||||
(self.x.cast(), self.y.cast())
|
(p.x.cast(), p.y.cast())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,26 +223,23 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for LogicalPosition<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<[X; 2]> for LogicalPosition<P> {
|
impl<P: Pixel, X: Pixel> From<LogicalPosition<P>> for [X; 2] {
|
||||||
fn into(self: Self) -> [X; 2] {
|
fn from(p: LogicalPosition<P>) -> [X; 2] {
|
||||||
[self.x.cast(), self.y.cast()]
|
[p.x.cast(), p.y.cast()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<mint::Point2<P>> for LogicalPosition<P> {
|
impl<P: Pixel> From<mint::Point2<P>> for LogicalPosition<P> {
|
||||||
fn from(mint: mint::Point2<P>) -> Self {
|
fn from(p: mint::Point2<P>) -> Self {
|
||||||
Self::new(mint.x, mint.y)
|
Self::new(p.x, p.y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<LogicalPosition<P>> for mint::Point2<P> {
|
impl<P: Pixel> From<LogicalPosition<P>> for mint::Point2<P> {
|
||||||
fn from(winit: LogicalPosition<P>) -> Self {
|
fn from(p: LogicalPosition<P>) -> Self {
|
||||||
mint::Point2 {
|
mint::Point2 { x: p.x, y: p.y }
|
||||||
x: winit.x,
|
|
||||||
y: winit.y,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,9 +290,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for PhysicalPosition<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<(X, X)> for PhysicalPosition<P> {
|
impl<P: Pixel, X: Pixel> From<PhysicalPosition<P>> for (X, X) {
|
||||||
fn into(self: Self) -> (X, X) {
|
fn from(p: PhysicalPosition<P>) -> (X, X) {
|
||||||
(self.x.cast(), self.y.cast())
|
(p.x.cast(), p.y.cast())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,26 +302,23 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for PhysicalPosition<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<[X; 2]> for PhysicalPosition<P> {
|
impl<P: Pixel, X: Pixel> From<PhysicalPosition<P>> for [X; 2] {
|
||||||
fn into(self: Self) -> [X; 2] {
|
fn from(p: PhysicalPosition<P>) -> [X; 2] {
|
||||||
[self.x.cast(), self.y.cast()]
|
[p.x.cast(), p.y.cast()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<mint::Point2<P>> for PhysicalPosition<P> {
|
impl<P: Pixel> From<mint::Point2<P>> for PhysicalPosition<P> {
|
||||||
fn from(mint: mint::Point2<P>) -> Self {
|
fn from(p: mint::Point2<P>) -> Self {
|
||||||
Self::new(mint.x, mint.y)
|
Self::new(p.x, p.y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<PhysicalPosition<P>> for mint::Point2<P> {
|
impl<P: Pixel> From<PhysicalPosition<P>> for mint::Point2<P> {
|
||||||
fn from(winit: PhysicalPosition<P>) -> Self {
|
fn from(p: PhysicalPosition<P>) -> Self {
|
||||||
mint::Point2 {
|
mint::Point2 { x: p.x, y: p.y }
|
||||||
x: winit.x,
|
|
||||||
y: winit.y,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,9 +369,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for LogicalSize<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<(X, X)> for LogicalSize<P> {
|
impl<P: Pixel, X: Pixel> From<LogicalSize<P>> for (X, X) {
|
||||||
fn into(self: LogicalSize<P>) -> (X, X) {
|
fn from(s: LogicalSize<P>) -> (X, X) {
|
||||||
(self.width.cast(), self.height.cast())
|
(s.width.cast(), s.height.cast())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,25 +381,25 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for LogicalSize<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<[X; 2]> for LogicalSize<P> {
|
impl<P: Pixel, X: Pixel> From<LogicalSize<P>> for [X; 2] {
|
||||||
fn into(self: Self) -> [X; 2] {
|
fn from(s: LogicalSize<P>) -> [X; 2] {
|
||||||
[self.width.cast(), self.height.cast()]
|
[s.width.cast(), s.height.cast()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<mint::Vector2<P>> for LogicalSize<P> {
|
impl<P: Pixel> From<mint::Vector2<P>> for LogicalSize<P> {
|
||||||
fn from(mint: mint::Vector2<P>) -> Self {
|
fn from(v: mint::Vector2<P>) -> Self {
|
||||||
Self::new(mint.x, mint.y)
|
Self::new(v.x, v.y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<LogicalSize<P>> for mint::Vector2<P> {
|
impl<P: Pixel> From<LogicalSize<P>> for mint::Vector2<P> {
|
||||||
fn from(winit: LogicalSize<P>) -> Self {
|
fn from(s: LogicalSize<P>) -> Self {
|
||||||
mint::Vector2 {
|
mint::Vector2 {
|
||||||
x: winit.width,
|
x: s.width,
|
||||||
y: winit.height,
|
y: s.height,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,9 +448,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for PhysicalSize<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<(X, X)> for PhysicalSize<P> {
|
impl<P: Pixel, X: Pixel> From<PhysicalSize<P>> for (X, X) {
|
||||||
fn into(self: Self) -> (X, X) {
|
fn from(s: PhysicalSize<P>) -> (X, X) {
|
||||||
(self.width.cast(), self.height.cast())
|
(s.width.cast(), s.height.cast())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,25 +460,25 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for PhysicalSize<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Pixel, X: Pixel> Into<[X; 2]> for PhysicalSize<P> {
|
impl<P: Pixel, X: Pixel> From<PhysicalSize<P>> for [X; 2] {
|
||||||
fn into(self: Self) -> [X; 2] {
|
fn from(s: PhysicalSize<P>) -> [X; 2] {
|
||||||
[self.width.cast(), self.height.cast()]
|
[s.width.cast(), s.height.cast()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<mint::Vector2<P>> for PhysicalSize<P> {
|
impl<P: Pixel> From<mint::Vector2<P>> for PhysicalSize<P> {
|
||||||
fn from(mint: mint::Vector2<P>) -> Self {
|
fn from(v: mint::Vector2<P>) -> Self {
|
||||||
Self::new(mint.x, mint.y)
|
Self::new(v.x, v.y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
impl<P: Pixel> From<PhysicalSize<P>> for mint::Vector2<P> {
|
impl<P: Pixel> From<PhysicalSize<P>> for mint::Vector2<P> {
|
||||||
fn from(winit: PhysicalSize<P>) -> Self {
|
fn from(s: PhysicalSize<P>) -> Self {
|
||||||
mint::Vector2 {
|
mint::Vector2 {
|
||||||
x: winit.width,
|
x: s.width,
|
||||||
y: winit.height,
|
y: s.height,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
28
src/event.rs
28
src/event.rs
|
@ -131,7 +131,7 @@ impl<T: Clone> Clone for Event<'static, T> {
|
||||||
device_id: *device_id,
|
device_id: *device_id,
|
||||||
event: event.clone(),
|
event: event.clone(),
|
||||||
},
|
},
|
||||||
NewEvents(cause) => NewEvents(cause.clone()),
|
NewEvents(cause) => NewEvents(*cause),
|
||||||
MainEventsCleared => MainEventsCleared,
|
MainEventsCleared => MainEventsCleared,
|
||||||
RedrawRequested(wid) => RedrawRequested(*wid),
|
RedrawRequested(wid) => RedrawRequested(*wid),
|
||||||
RedrawEventsCleared => RedrawEventsCleared,
|
RedrawEventsCleared => RedrawEventsCleared,
|
||||||
|
@ -358,8 +358,8 @@ impl Clone for WindowEvent<'static> {
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
use self::WindowEvent::*;
|
use self::WindowEvent::*;
|
||||||
return match self {
|
return match self {
|
||||||
Resized(size) => Resized(size.clone()),
|
Resized(size) => Resized(*size),
|
||||||
Moved(pos) => Moved(pos.clone()),
|
Moved(pos) => Moved(*pos),
|
||||||
CloseRequested => CloseRequested,
|
CloseRequested => CloseRequested,
|
||||||
Destroyed => Destroyed,
|
Destroyed => Destroyed,
|
||||||
DroppedFile(file) => DroppedFile(file.clone()),
|
DroppedFile(file) => DroppedFile(file.clone()),
|
||||||
|
@ -377,7 +377,7 @@ impl Clone for WindowEvent<'static> {
|
||||||
is_synthetic: *is_synthetic,
|
is_synthetic: *is_synthetic,
|
||||||
},
|
},
|
||||||
|
|
||||||
ModifiersChanged(modifiers) => ModifiersChanged(modifiers.clone()),
|
ModifiersChanged(modifiers) => ModifiersChanged(*modifiers),
|
||||||
#[allow(deprecated)]
|
#[allow(deprecated)]
|
||||||
CursorMoved {
|
CursorMoved {
|
||||||
device_id,
|
device_id,
|
||||||
|
@ -437,7 +437,7 @@ impl Clone for WindowEvent<'static> {
|
||||||
value: *value,
|
value: *value,
|
||||||
},
|
},
|
||||||
Touch(touch) => Touch(*touch),
|
Touch(touch) => Touch(*touch),
|
||||||
ThemeChanged(theme) => ThemeChanged(theme.clone()),
|
ThemeChanged(theme) => ThemeChanged(*theme),
|
||||||
ScaleFactorChanged { .. } => {
|
ScaleFactorChanged { .. } => {
|
||||||
unreachable!("Static event can't be about scale factor changing")
|
unreachable!("Static event can't be about scale factor changing")
|
||||||
}
|
}
|
||||||
|
@ -538,12 +538,16 @@ impl<'a> WindowEvent<'a> {
|
||||||
pub struct DeviceId(pub(crate) platform_impl::DeviceId);
|
pub struct DeviceId(pub(crate) platform_impl::DeviceId);
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
/// Returns a dummy `DeviceId`, useful for unit testing. The only guarantee made about the return
|
/// Returns a dummy `DeviceId`, useful for unit testing.
|
||||||
/// 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`.
|
/// # Safety
|
||||||
|
///
|
||||||
|
/// 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.**
|
/// **Passing this into a winit function will result in undefined behavior.**
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
DeviceId(platform_impl::DeviceId::dummy())
|
DeviceId(platform_impl::DeviceId::dummy())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -998,9 +1002,9 @@ bitflags! {
|
||||||
// left and right modifiers are currently commented out, but we should be able to support
|
// left and right modifiers are currently commented out, but we should be able to support
|
||||||
// them in a future release
|
// them in a future release
|
||||||
/// The "shift" key.
|
/// The "shift" key.
|
||||||
const SHIFT = 0b100 << 0;
|
const SHIFT = 0b100;
|
||||||
// const LSHIFT = 0b010 << 0;
|
// const LSHIFT = 0b010;
|
||||||
// const RSHIFT = 0b001 << 0;
|
// const RSHIFT = 0b001;
|
||||||
/// The "control" key.
|
/// The "control" key.
|
||||||
const CTRL = 0b100 << 3;
|
const CTRL = 0b100 << 3;
|
||||||
// const LCTRL = 0b010 << 3;
|
// const LCTRL = 0b010 << 3;
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
//! [`raw_window_handle`]: ./window/struct.Window.html#method.raw_window_handle
|
//! [`raw_window_handle`]: ./window/struct.Window.html#method.raw_window_handle
|
||||||
|
|
||||||
#![deny(rust_2018_idioms)]
|
#![deny(rust_2018_idioms)]
|
||||||
#![deny(broken_intra_doc_links)]
|
#![deny(rustdoc::broken_intra_doc_links)]
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
|
|
@ -443,7 +443,7 @@ impl<T: 'static> EventLoopWindowTarget<T> {
|
||||||
pub struct WindowId;
|
pub struct WindowId;
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
pub fn dummy() -> Self {
|
pub const fn dummy() -> Self {
|
||||||
WindowId
|
WindowId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -452,7 +452,7 @@ impl WindowId {
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub fn dummy() -> Self {
|
pub const fn dummy() -> Self {
|
||||||
DeviceId
|
DeviceId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ pub struct DeviceId {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
DeviceId {
|
DeviceId {
|
||||||
uiscreen: std::ptr::null_mut(),
|
uiscreen: std::ptr::null_mut(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -611,7 +611,7 @@ pub struct WindowId {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
WindowId {
|
WindowId {
|
||||||
window: std::ptr::null_mut(),
|
window: std::ptr::null_mut(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,7 @@ pub enum WindowId {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
#[cfg(feature = "wayland")]
|
#[cfg(feature = "wayland")]
|
||||||
return WindowId::Wayland(wayland::WindowId::dummy());
|
return WindowId::Wayland(wayland::WindowId::dummy());
|
||||||
#[cfg(all(not(feature = "wayland"), feature = "x11"))]
|
#[cfg(all(not(feature = "wayland"), feature = "x11"))]
|
||||||
|
@ -158,7 +158,7 @@ pub enum DeviceId {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
#[cfg(feature = "wayland")]
|
#[cfg(feature = "wayland")]
|
||||||
return DeviceId::Wayland(wayland::DeviceId::dummy());
|
return DeviceId::Wayland(wayland::DeviceId::dummy());
|
||||||
#[cfg(all(not(feature = "wayland"), feature = "x11"))]
|
#[cfg(all(not(feature = "wayland"), feature = "x11"))]
|
||||||
|
|
|
@ -22,7 +22,7 @@ mod window;
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
DeviceId
|
DeviceId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ impl DeviceId {
|
||||||
pub struct WindowId(usize);
|
pub struct WindowId(usize);
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
WindowId(0)
|
WindowId(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -490,7 +490,7 @@ impl<'a> Deref for DeviceInfo<'a> {
|
||||||
pub struct WindowId(ffi::Window);
|
pub struct WindowId(ffi::Window);
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
WindowId(0)
|
WindowId(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -499,7 +499,7 @@ impl WindowId {
|
||||||
pub struct DeviceId(c_int);
|
pub struct DeviceId(c_int);
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
DeviceId(0)
|
DeviceId(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ pub(crate) use crate::icon::NoIcon as PlatformIcon;
|
||||||
pub struct DeviceId;
|
pub struct DeviceId;
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
DeviceId
|
DeviceId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ use objc::{
|
||||||
pub struct Id(pub usize);
|
pub struct Id(pub usize);
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
Id(0)
|
Id(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
pub struct Id(pub i32);
|
pub struct Id(pub i32);
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
Id(0)
|
Id(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -344,7 +344,7 @@ impl Drop for Window {
|
||||||
pub struct Id(pub(crate) u32);
|
pub struct Id(pub(crate) u32);
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
pub unsafe fn dummy() -> Id {
|
pub const unsafe fn dummy() -> Id {
|
||||||
Id(0)
|
Id(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,38 +6,24 @@ use std::os::windows::ffi::OsStrExt;
|
||||||
use winapi::{
|
use winapi::{
|
||||||
shared::{
|
shared::{
|
||||||
basetsd::SIZE_T,
|
basetsd::SIZE_T,
|
||||||
minwindef::{BOOL, DWORD, FALSE, UINT, ULONG, WORD},
|
minwindef::{BOOL, DWORD, FALSE, WORD},
|
||||||
ntdef::{LPSTR, NTSTATUS, NT_SUCCESS, PVOID, WCHAR},
|
ntdef::{NTSTATUS, NT_SUCCESS, PVOID},
|
||||||
windef::HWND,
|
windef::HWND,
|
||||||
winerror::S_OK,
|
winerror::S_OK,
|
||||||
},
|
},
|
||||||
um::{libloaderapi, uxtheme, winuser},
|
um::{libloaderapi, uxtheme, winnt, winuser},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::window::Theme;
|
use crate::window::Theme;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref WIN10_BUILD_VERSION: Option<DWORD> = {
|
static ref WIN10_BUILD_VERSION: Option<DWORD> = {
|
||||||
// FIXME: RtlGetVersion is a documented windows API,
|
type RtlGetVersion = unsafe extern "system" fn (*mut winnt::OSVERSIONINFOW) -> NTSTATUS;
|
||||||
// should be part of winapi!
|
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
|
||||||
#[repr(C)]
|
|
||||||
struct OSVERSIONINFOW {
|
|
||||||
dwOSVersionInfoSize: ULONG,
|
|
||||||
dwMajorVersion: ULONG,
|
|
||||||
dwMinorVersion: ULONG,
|
|
||||||
dwBuildNumber: ULONG,
|
|
||||||
dwPlatformId: ULONG,
|
|
||||||
szCSDVersion: [WCHAR; 128],
|
|
||||||
}
|
|
||||||
|
|
||||||
type RtlGetVersion = unsafe extern "system" fn (*mut OSVERSIONINFOW) -> NTSTATUS;
|
|
||||||
let handle = get_function!("ntdll.dll", RtlGetVersion);
|
let handle = get_function!("ntdll.dll", RtlGetVersion);
|
||||||
|
|
||||||
if let Some(rtl_get_version) = handle {
|
if let Some(rtl_get_version) = handle {
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut vi = OSVERSIONINFOW {
|
let mut vi = winnt::OSVERSIONINFOW {
|
||||||
dwOSVersionInfoSize: 0,
|
dwOSVersionInfoSize: 0,
|
||||||
dwMajorVersion: 0,
|
dwMajorVersion: 0,
|
||||||
dwMinorVersion: 0,
|
dwMinorVersion: 0,
|
||||||
|
@ -108,11 +94,12 @@ fn set_dark_mode_for_window(hwnd: HWND, is_dark_mode: bool) -> bool {
|
||||||
type SetWindowCompositionAttribute =
|
type SetWindowCompositionAttribute =
|
||||||
unsafe extern "system" fn(HWND, *mut WINDOWCOMPOSITIONATTRIBDATA) -> BOOL;
|
unsafe extern "system" fn(HWND, *mut WINDOWCOMPOSITIONATTRIBDATA) -> BOOL;
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(clippy::upper_case_acronyms)]
|
||||||
type WINDOWCOMPOSITIONATTRIB = u32;
|
type WINDOWCOMPOSITIONATTRIB = u32;
|
||||||
const WCA_USEDARKMODECOLORS: WINDOWCOMPOSITIONATTRIB = 26;
|
const WCA_USEDARKMODECOLORS: WINDOWCOMPOSITIONATTRIB = 26;
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
|
#[allow(clippy::upper_case_acronyms)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
struct WINDOWCOMPOSITIONATTRIBDATA {
|
struct WINDOWCOMPOSITIONATTRIBDATA {
|
||||||
Attrib: WINDOWCOMPOSITIONATTRIB,
|
Attrib: WINDOWCOMPOSITIONATTRIB,
|
||||||
|
@ -181,21 +168,8 @@ fn should_apps_use_dark_mode() -> bool {
|
||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This definition was missing from winapi. Can remove from
|
|
||||||
// here and use winapi once the following PR is released:
|
|
||||||
// https://github.com/retep998/winapi-rs/pull/815
|
|
||||||
#[repr(C)]
|
|
||||||
#[allow(non_snake_case)]
|
|
||||||
struct HIGHCONTRASTA {
|
|
||||||
cbSize: UINT,
|
|
||||||
dwFlags: DWORD,
|
|
||||||
lpszDefaultScheme: LPSTR,
|
|
||||||
}
|
|
||||||
|
|
||||||
const HCF_HIGHCONTRASTON: DWORD = 1;
|
|
||||||
|
|
||||||
fn is_high_contrast() -> bool {
|
fn is_high_contrast() -> bool {
|
||||||
let mut hc = HIGHCONTRASTA {
|
let mut hc = winuser::HIGHCONTRASTA {
|
||||||
cbSize: 0,
|
cbSize: 0,
|
||||||
dwFlags: 0,
|
dwFlags: 0,
|
||||||
lpszDefaultScheme: std::ptr::null_mut(),
|
lpszDefaultScheme: std::ptr::null_mut(),
|
||||||
|
@ -210,7 +184,7 @@ fn is_high_contrast() -> bool {
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
ok != FALSE && (HCF_HIGHCONTRASTON & hc.dwFlags) == 1
|
ok != FALSE && (winuser::HCF_HIGHCONTRASTON & hc.dwFlags) == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fn widestring(src: &'static str) -> Vec<u16> {
|
fn widestring(src: &'static str) -> Vec<u16> {
|
||||||
|
|
|
@ -181,7 +181,7 @@ impl FileDropHandler {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut drop_format = FORMATETC {
|
let drop_format = FORMATETC {
|
||||||
cfFormat: CF_HDROP as CLIPFORMAT,
|
cfFormat: CF_HDROP as CLIPFORMAT,
|
||||||
ptd: ptr::null(),
|
ptd: ptr::null(),
|
||||||
dwAspect: DVASPECT_CONTENT,
|
dwAspect: DVASPECT_CONTENT,
|
||||||
|
@ -190,7 +190,7 @@ impl FileDropHandler {
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut medium = std::mem::zeroed();
|
let mut medium = std::mem::zeroed();
|
||||||
let get_data_result = (*data_obj).GetData(&mut drop_format, &mut medium);
|
let get_data_result = (*data_obj).GetData(&drop_format, &mut medium);
|
||||||
if SUCCEEDED(get_data_result) {
|
if SUCCEEDED(get_data_result) {
|
||||||
let hglobal = (*medium.u).hGlobal();
|
let hglobal = (*medium.u).hGlobal();
|
||||||
let hdrop = (*hglobal) as shellapi::HDROP;
|
let hdrop = (*hglobal) as shellapi::HDROP;
|
||||||
|
@ -213,15 +213,15 @@ impl FileDropHandler {
|
||||||
callback(OsString::from_wide(&path_buf[0..character_count]).into());
|
callback(OsString::from_wide(&path_buf[0..character_count]).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
return Some(hdrop);
|
Some(hdrop)
|
||||||
} else if get_data_result == DV_E_FORMATETC {
|
} else if get_data_result == DV_E_FORMATETC {
|
||||||
// If the dropped item is not a file this error will occur.
|
// If the dropped item is not a file this error will occur.
|
||||||
// In this case it is OK to return without taking further action.
|
// In this case it is OK to return without taking further action.
|
||||||
debug!("Error occured while processing dropped/hovered item: item is not a file.");
|
debug!("Error occured while processing dropped/hovered item: item is not a file.");
|
||||||
return None;
|
None
|
||||||
} else {
|
} else {
|
||||||
debug!("Unexpected error occured while processing dropped/hovered item.");
|
debug!("Unexpected error occured while processing dropped/hovered item.");
|
||||||
return None;
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,8 +39,8 @@ pub fn get_key_mods() -> ModifiersState {
|
||||||
bitflags! {
|
bitflags! {
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct ModifiersStateSide: u32 {
|
pub struct ModifiersStateSide: u32 {
|
||||||
const LSHIFT = 0b010 << 0;
|
const LSHIFT = 0b010;
|
||||||
const RSHIFT = 0b001 << 0;
|
const RSHIFT = 0b001;
|
||||||
|
|
||||||
const LCTRL = 0b010 << 3;
|
const LCTRL = 0b010 << 3;
|
||||||
const RCTRL = 0b001 << 3;
|
const RCTRL = 0b001 << 3;
|
||||||
|
@ -343,7 +343,7 @@ pub fn handle_extended_keys(
|
||||||
extended: bool,
|
extended: bool,
|
||||||
) -> Option<(c_int, UINT)> {
|
) -> Option<(c_int, UINT)> {
|
||||||
// Welcome to hell https://blog.molecular-matters.com/2011/09/05/properly-handling-keyboard-input/
|
// Welcome to hell https://blog.molecular-matters.com/2011/09/05/properly-handling-keyboard-input/
|
||||||
scancode = if extended { 0xE000 } else { 0x0000 } | scancode;
|
scancode |= if extended { 0xE000 } else { 0x0000 };
|
||||||
let vkey = match vkey {
|
let vkey = match vkey {
|
||||||
winuser::VK_SHIFT => unsafe {
|
winuser::VK_SHIFT => unsafe {
|
||||||
winuser::MapVirtualKeyA(scancode, winuser::MAPVK_VSC_TO_VK_EX) as _
|
winuser::MapVirtualKeyA(scancode, winuser::MAPVK_VSC_TO_VK_EX) as _
|
||||||
|
@ -369,7 +369,7 @@ pub fn handle_extended_keys(
|
||||||
// Don't emit anything for the LeftControl event in the pair...
|
// Don't emit anything for the LeftControl event in the pair...
|
||||||
0xE01D if vkey == winuser::VK_PAUSE => return None,
|
0xE01D if vkey == winuser::VK_PAUSE => return None,
|
||||||
// ...and emit the Pause event for the second event in the pair.
|
// ...and emit the Pause event for the second event in the pair.
|
||||||
0x45 if vkey == winuser::VK_PAUSE || vkey == 0xFF as _ => {
|
0x45 if vkey == winuser::VK_PAUSE || vkey == 0xFF => {
|
||||||
scancode = 0xE059;
|
scancode = 0xE059;
|
||||||
winuser::VK_PAUSE
|
winuser::VK_PAUSE
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ lazy_static! {
|
||||||
pub(crate) struct WindowData<T: 'static> {
|
pub(crate) struct WindowData<T: 'static> {
|
||||||
pub window_state: Arc<Mutex<WindowState>>,
|
pub window_state: Arc<Mutex<WindowState>>,
|
||||||
pub event_loop_runner: EventLoopRunnerShared<T>,
|
pub event_loop_runner: EventLoopRunnerShared<T>,
|
||||||
pub file_drop_handler: Option<FileDropHandler>,
|
pub _file_drop_handler: Option<FileDropHandler>,
|
||||||
pub userdata_removed: Cell<bool>,
|
pub userdata_removed: Cell<bool>,
|
||||||
pub recurse_depth: Cell<u32>,
|
pub recurse_depth: Cell<u32>,
|
||||||
}
|
}
|
||||||
|
@ -217,8 +217,8 @@ impl<T: 'static> EventLoop<T> {
|
||||||
if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) {
|
if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) {
|
||||||
break 'main;
|
break 'main;
|
||||||
}
|
}
|
||||||
winuser::TranslateMessage(&mut msg);
|
winuser::TranslateMessage(&msg);
|
||||||
winuser::DispatchMessageW(&mut msg);
|
winuser::DispatchMessageW(&msg);
|
||||||
|
|
||||||
if let Err(payload) = runner.take_panic_error() {
|
if let Err(payload) = runner.take_panic_error() {
|
||||||
runner.reset_runner();
|
runner.reset_runner();
|
||||||
|
@ -345,15 +345,15 @@ fn wait_thread(parent_thread_id: DWORD, msg_window_id: HWND) {
|
||||||
|
|
||||||
if wait_until_opt.is_some() {
|
if wait_until_opt.is_some() {
|
||||||
if 0 != winuser::PeekMessageW(&mut msg, ptr::null_mut(), 0, 0, winuser::PM_REMOVE) {
|
if 0 != winuser::PeekMessageW(&mut msg, ptr::null_mut(), 0, 0, winuser::PM_REMOVE) {
|
||||||
winuser::TranslateMessage(&mut msg);
|
winuser::TranslateMessage(&msg);
|
||||||
winuser::DispatchMessageW(&mut msg);
|
winuser::DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) {
|
if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) {
|
||||||
break 'main;
|
break 'main;
|
||||||
} else {
|
} else {
|
||||||
winuser::TranslateMessage(&mut msg);
|
winuser::TranslateMessage(&msg);
|
||||||
winuser::DispatchMessageW(&mut msg);
|
winuser::DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,8 +714,8 @@ unsafe fn flush_paint_messages<T: 'static>(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
winuser::TranslateMessage(&mut msg);
|
winuser::TranslateMessage(&msg);
|
||||||
winuser::DispatchMessageW(&mut msg);
|
winuser::DispatchMessageW(&msg);
|
||||||
});
|
});
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
|
@ -938,7 +938,7 @@ unsafe fn public_window_callback_inner<T: 'static>(
|
||||||
winuser::MonitorFromRect(&new_rect, winuser::MONITOR_DEFAULTTONULL);
|
winuser::MonitorFromRect(&new_rect, winuser::MONITOR_DEFAULTTONULL);
|
||||||
match fullscreen {
|
match fullscreen {
|
||||||
Fullscreen::Borderless(ref mut fullscreen_monitor) => {
|
Fullscreen::Borderless(ref mut fullscreen_monitor) => {
|
||||||
if new_monitor != ptr::null_mut()
|
if !new_monitor.is_null()
|
||||||
&& fullscreen_monitor
|
&& fullscreen_monitor
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|monitor| new_monitor != monitor.inner.hmonitor())
|
.map(|monitor| new_monitor != monitor.inner.hmonitor())
|
||||||
|
@ -1020,8 +1020,8 @@ unsafe fn public_window_callback_inner<T: 'static>(
|
||||||
winuser::WM_CHAR | winuser::WM_SYSCHAR => {
|
winuser::WM_CHAR | winuser::WM_SYSCHAR => {
|
||||||
use crate::event::WindowEvent::ReceivedCharacter;
|
use crate::event::WindowEvent::ReceivedCharacter;
|
||||||
use std::char;
|
use std::char;
|
||||||
let is_high_surrogate = 0xD800 <= wparam && wparam <= 0xDBFF;
|
let is_high_surrogate = (0xD800..=0xDBFF).contains(&wparam);
|
||||||
let is_low_surrogate = 0xDC00 <= wparam && wparam <= 0xDFFF;
|
let is_low_surrogate = (0xDC00..=0xDFFF).contains(&wparam);
|
||||||
|
|
||||||
if is_high_surrogate {
|
if is_high_surrogate {
|
||||||
userdata.window_state.lock().high_surrogate = Some(wparam as u16);
|
userdata.window_state.lock().high_surrogate = Some(wparam as u16);
|
||||||
|
|
|
@ -58,7 +58,7 @@ unsafe impl Sync for Cursor {}
|
||||||
pub struct DeviceId(u32);
|
pub struct DeviceId(u32);
|
||||||
|
|
||||||
impl DeviceId {
|
impl DeviceId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
DeviceId(0)
|
DeviceId(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ unsafe impl Send for WindowId {}
|
||||||
unsafe impl Sync for WindowId {}
|
unsafe impl Sync for WindowId {}
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
use std::ptr::null_mut;
|
use std::ptr::null_mut;
|
||||||
|
|
||||||
WindowId(null_mut())
|
WindowId(null_mut())
|
||||||
|
|
|
@ -30,7 +30,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wchar_to_string(wchar: &[wchar_t]) -> String {
|
pub fn wchar_to_string(wchar: &[wchar_t]) -> String {
|
||||||
String::from_utf16_lossy(wchar).to_string()
|
String::from_utf16_lossy(wchar)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wchar_ptr_to_string(wchar: *const wchar_t) -> String {
|
pub fn wchar_ptr_to_string(wchar: *const wchar_t) -> String {
|
||||||
|
|
|
@ -116,7 +116,7 @@ impl Window {
|
||||||
event_loop::WindowData {
|
event_loop::WindowData {
|
||||||
window_state: win.window_state.clone(),
|
window_state: win.window_state.clone(),
|
||||||
event_loop_runner: event_loop.runner_shared.clone(),
|
event_loop_runner: event_loop.runner_shared.clone(),
|
||||||
file_drop_handler,
|
_file_drop_handler: file_drop_handler,
|
||||||
userdata_removed: Cell::new(false),
|
userdata_removed: Cell::new(false),
|
||||||
recurse_depth: Cell::new(0),
|
recurse_depth: Cell::new(0),
|
||||||
}
|
}
|
||||||
|
@ -455,7 +455,7 @@ impl Window {
|
||||||
// string, so add it
|
// string, so add it
|
||||||
display_name.push(0);
|
display_name.push(0);
|
||||||
|
|
||||||
let mut native_video_mode = video_mode.video_mode.native_video_mode.clone();
|
let mut native_video_mode = video_mode.video_mode.native_video_mode;
|
||||||
|
|
||||||
let res = unsafe {
|
let res = unsafe {
|
||||||
winuser::ChangeDisplaySettingsExW(
|
winuser::ChangeDisplaySettingsExW(
|
||||||
|
@ -896,7 +896,7 @@ unsafe fn post_init<T: 'static>(
|
||||||
win.set_maximized(true);
|
win.set_maximized(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(_) = attributes.fullscreen {
|
if attributes.fullscreen.is_some() {
|
||||||
win.set_fullscreen(attributes.fullscreen);
|
win.set_fullscreen(attributes.fullscreen);
|
||||||
force_window_active(win.window.0);
|
force_window_active(win.window.0);
|
||||||
}
|
}
|
||||||
|
@ -986,7 +986,7 @@ unsafe fn taskbar_mark_fullscreen(handle: HWND, fullscreen: bool) {
|
||||||
TASKBAR_LIST.with(|task_bar_list_ptr| {
|
TASKBAR_LIST.with(|task_bar_list_ptr| {
|
||||||
let mut task_bar_list = task_bar_list_ptr.get();
|
let mut task_bar_list = task_bar_list_ptr.get();
|
||||||
|
|
||||||
if task_bar_list == ptr::null_mut() {
|
if task_bar_list.is_null() {
|
||||||
use winapi::{shared::winerror::S_OK, Interface};
|
use winapi::{shared::winerror::S_OK, Interface};
|
||||||
|
|
||||||
let hr = combaseapi::CoCreateInstance(
|
let hr = combaseapi::CoCreateInstance(
|
||||||
|
|
|
@ -69,12 +69,16 @@ impl Drop for Window {
|
||||||
pub struct WindowId(pub(crate) platform_impl::WindowId);
|
pub struct WindowId(pub(crate) platform_impl::WindowId);
|
||||||
|
|
||||||
impl WindowId {
|
impl WindowId {
|
||||||
/// Returns a dummy `WindowId`, useful for unit testing. The only guarantee made about the return
|
/// Returns a dummy `WindowId`, useful for unit testing.
|
||||||
/// 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`.
|
/// # Safety
|
||||||
|
///
|
||||||
|
/// 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.**
|
/// **Passing this into a winit function will result in undefined behavior.**
|
||||||
pub unsafe fn dummy() -> Self {
|
pub const unsafe fn dummy() -> Self {
|
||||||
WindowId(platform_impl::WindowId::dummy())
|
WindowId(platform_impl::WindowId::dummy())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue