diff --git a/Cargo.toml b/Cargo.toml index 284c1cac..243c0680 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,22 +8,22 @@ edition = "2024" license = "Apache-2.0" repository = "https://github.com/rust-windowing/winit" rust-version = "1.85" -version = "0.30.12" +version = "0.31.0-beta.1" [workspace.dependencies] # Workspace dependencies. # `winit` has no version here to allow using it in dev deps for docs. winit = { path = "winit" } -winit-android = { version = "0.30.12", path = "winit-android" } -winit-appkit = { version = "0.30.12", path = "winit-appkit" } -winit-common = { version = "0.30.12", path = "winit-common" } -winit-core = { version = "0.30.12", path = "winit-core" } -winit-orbital = { version = "0.30.12", path = "winit-orbital" } -winit-uikit = { version = "0.30.12", path = "winit-uikit" } -winit-wayland = { version = "0.30.12", path = "winit-wayland", default-features = false } -winit-web = { version = "0.30.12", path = "winit-web" } -winit-win32 = { version = "0.30.12", path = "winit-win32" } -winit-x11 = { version = "0.30.12", path = "winit-x11" } +winit-android = { version = "=0.31.0-beta.1", path = "winit-android" } +winit-appkit = { version = "=0.31.0-beta.1", path = "winit-appkit" } +winit-common = { version = "=0.31.0-beta.1", path = "winit-common" } +winit-core = { version = "=0.31.0-beta.1", path = "winit-core" } +winit-orbital = { version = "=0.31.0-beta.1", path = "winit-orbital" } +winit-uikit = { version = "=0.31.0-beta.1", path = "winit-uikit" } +winit-wayland = { version = "=0.31.0-beta.1", path = "winit-wayland", default-features = false } +winit-web = { version = "=0.31.0-beta.1", path = "winit-web" } +winit-win32 = { version = "=0.31.0-beta.1", path = "winit-win32" } +winit-x11 = { version = "=0.31.0-beta.1", path = "winit-x11" } # Core dependencies. bitflags = "2" diff --git a/README.md b/README.md index 50b1f975..15ea7e90 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ```toml [dependencies] -winit = "0.30.12" +winit = "0.31.0-beta.1" ``` ## [Documentation](https://docs.rs/winit) diff --git a/winit-android/src/lib.rs b/winit-android/src/lib.rs index e96cd17b..abe97677 100644 --- a/winit-android/src/lib.rs +++ b/winit-android/src/lib.rs @@ -62,8 +62,8 @@ //! If your application is currently based on `NativeActivity` via the `ndk-glue` crate and building //! with `cargo apk`, then the minimal changes would be: //! 1. Remove `ndk-glue` from your `Cargo.toml` -//! 2. Enable the `"android-native-activity"` feature for Winit: `winit = { version = "0.30.12", -//! features = [ "android-native-activity" ] }` +//! 2. Enable the `"android-native-activity"` feature for Winit: `winit = { version = +//! "0.31.0-beta.1", features = [ "android-native-activity" ] }` //! 3. Add an `android_main` entrypoint (as above), instead of using the '`[ndk_glue::main]` proc //! macro from `ndk-macros` (optionally add a dependency on `android_logger` and initialize //! logging as above). diff --git a/winit/src/changelog/unreleased.md b/winit/src/changelog/unreleased.md index 3bfc2693..f3a0f6d2 100644 --- a/winit/src/changelog/unreleased.md +++ b/winit/src/changelog/unreleased.md @@ -39,237 +39,3 @@ The migration guide could reference other migration examples in the current changelog entry. ## Unreleased - -### Added - -- Add `ActiveEventLoop::create_proxy()`. -- On Web, add `ActiveEventLoopExtWeb::is_cursor_lock_raw()` to determine if - `DeviceEvent::MouseMotion` is returning raw data, not OS accelerated, when using - `CursorGrabMode::Locked`. -- On Web, implement `MonitorHandle` and `VideoModeHandle`. - - Without prompting the user for permission, only the current monitor is returned. But when - prompting and being granted permission through - `ActiveEventLoop::request_detailed_monitor_permission()`, access to all monitors and their - details is available. Handles created with "detailed monitor permissions" can be used in - `Window::set_fullscreen()` as well. - - Keep in mind that handles do not auto-upgrade after permissions are granted and have to be - re-created to make full use of this feature. -- Implement `Clone`, `Copy`, `Debug`, `Deserialize`, `Eq`, `Hash`, `Ord`, `PartialEq`, `PartialOrd` - and `Serialize` on many types. -- Add `MonitorHandle::current_video_mode()`. -- Add `ApplicationHandlerExtMacOS` trait, and a `macos_handler` method to `ApplicationHandler` which returns a `dyn ApplicationHandlerExtMacOS` which allows for macOS specific extensions to winit. -- Add a `standard_key_binding` method to the `ApplicationHandlerExtMacOS` trait. This allows handling of standard keybindings such as "go to end of line" on macOS. -- On macOS, add `WindowExtMacOS::set_unified_titlebar` and `WindowAttributesMacOS::with_unified_titlebar` - to use a larger style of titlebar. -- Add `WindowId::into_raw()` and `from_raw()`. -- Add `PointerKind`, `PointerSource`, `ButtonSource`, `FingerId`, `primary` and `position` to all - pointer events as part of the pointer event overhaul. -- Add `DeviceId::into_raw()` and `from_raw()`. -- Added `Window::surface_position`, which is the position of the surface inside the window. -- Added `Window::safe_area`, which describes the area of the surface that is unobstructed. -- On X11, Wayland, Windows and macOS, improved scancode conversions for more obscure key codes. -- Add ability to make non-activating window on macOS using `NSPanel` with `NSWindowStyleMask::NonactivatingPanel`. -- Implement `MonitorHandleProvider` for `MonitorHandle` to access common monitor API. -- On X11, set an "area" attribute on XIM input connection to convey the cursor area. -- Implement `CustomCursorProvider` for `CustomCursor` to access cursor API. -- Add `CustomCursorSource::Url`, `CustomCursorSource::from_animation`. -- Implement `CustomIconProvider` for `RgbaIcon`. -- Add `icon` module that exposes winit's icon API. -- `VideoMode::new` to create a `VideoMode`. -- `keyboard::ModifiersKey` to track which modifier is exactly pressed. -- `ActivationToken::as_raw` to get a ref to raw token. -- Each platform now has corresponding `WindowAttributes` struct instead of trait extension. -- On Wayland, added implementation for `Window::set_window_icon` -- On Wayland, added `PanGesture`, `PinchGesture`, and `RotationGesture` -- Add `Window::request_ime_update` to atomically apply set of IME changes. -- Add `Ime::DeleteSurrounding` to let the input method delete text. -- Add more `ImePurpose` values. -- Add `ImeHints` to request particular IME behaviour. -- Add Pen input support on Wayland, Windows, and Web via new Pointer event. - -### Changed - -- Change `ActiveEventLoop` and `Window` to be traits, and added `cast_ref`/`cast_mut`/`cast` - methods to extract the backend type from those. -- `ActiveEventLoop::create_window` now returns `Box`. -- `ApplicationHandler` now uses `dyn ActiveEventLoop`. -- On Web, let events wake up event loop immediately when using `ControlFlow::Poll`. -- Bump MSRV from `1.70` to `1.85`. -- Changed `ApplicationHandler::user_event` to `user_wake_up`, removing the - generic user event. - - Winit will now only indicate that wake up happened, you will have to pair - this with an external mechanism like `std::sync::mpsc::channel` if you want - to send specific data to be processed on the main thread. -- Changed `EventLoopProxy::send_event` to `EventLoopProxy::wake_up`, it now - only wakes up the loop. -- On X11, implement smooth resizing through the sync extension API. -- `ApplicationHandler::can_create|destroy_surfaces()` was split off from - `ApplicationHandler::resumed/suspended()`. - - `ApplicationHandler::can_create_surfaces()` should, for portability reasons - to Android, be the only place to create render surfaces. - - `ApplicationHandler::resumed/suspended()` are now only emitted by iOS, Web - and Android, and now signify actually resuming/suspending the application. -- Rename `platform::web::*ExtWebSys` to `*ExtWeb`. -- Change signature of `EventLoop::run_app`, `EventLoopExtPumpEvents::pump_app_events` and - `EventLoopExtRunOnDemand::run_app_on_demand` to accept a `impl ApplicationHandler` directly, - instead of requiring a `&mut` reference to it. -- On Web, `Window::canvas()` now returns a reference. -- On Web, `CursorGrabMode::Locked` now lets `DeviceEvent::MouseMotion` return raw data, not OS - accelerated, if the browser supports it. -- `(Active)EventLoop::create_custom_cursor()` now returns a `Result`. -- Changed how `ModifiersState` is serialized by Serde. -- `VideoModeHandle::refresh_rate_millihertz()` and `bit_depth()` now return a `Option`. -- `MonitorHandle::position()` now returns an `Option`. -- On macOS, remove custom application delegates. You are now allowed to override the - application delegate yourself. -- On X11, remove our dependency on libXcursor. (#3749) -- Renamed the following APIs to make it clearer that the sizes apply to the underlying surface: - - `WindowEvent::Resized` to `SurfaceResized`. - - `InnerSizeWriter` to `SurfaceSizeWriter`. - - `WindowAttributes.inner_size` to `surface_size`. - - `WindowAttributes.min_inner_size` to `min_surface_size`. - - `WindowAttributes.max_inner_size` to `max_surface_size`. - - `WindowAttributes.resize_increments` to `surface_resize_increments`. - - `WindowAttributes::with_inner_size` to `with_surface_size`. - - `WindowAttributes::with_min_inner_size` to `with_min_surface_size`. - - `WindowAttributes::with_max_inner_size` to `with_max_surface_size`. - - `WindowAttributes::with_resize_increments` to `with_surface_resize_increments`. - - `Window::inner_size` to `surface_size`. - - `Window::request_inner_size` to `request_surface_size`. - - `Window::set_min_inner_size` to `set_min_surface_size`. - - `Window::set_max_inner_size` to `set_max_surface_size`. - - To migrate, you can probably just replace all instances of `inner_size` with `surface_size` in your codebase. -- Every event carrying a `DeviceId` now uses `Option` instead. A `None` value signifies that the - device can't be uniquely identified. -- Pointer `WindowEvent`s were overhauled. The new events can handle any type of pointer, serving as - a single pointer input source. Now your application can handle any pointer type without having to - explicitly handle e.g. `Touch`: - - Rename `CursorMoved` to `PointerMoved`. - - Rename `CursorEntered` to `PointerEntered`. - - Rename `CursorLeft` to `PointerLeft`. - - Rename `MouseInput` to `PointerButton`. - - Add `primary` to every `PointerEvent` as a way to identify discard non-primary pointers in a - multi-touch interaction. - - Add `position` to every `PointerEvent`. - - `PointerMoved` is **not sent** after `PointerEntered` anymore. - - Remove `Touch`, which is folded into the `Pointer*` events. - - New `PointerKind` added to `PointerEntered` and `PointerLeft`, signifying which pointer type is - the source of this event. - - New `PointerSource` added to `PointerMoved`, similar to `PointerKind` but holding additional - data. - - New `ButtonSource` added to `PointerButton`, similar to `PointerKind` but holding pointer type - specific buttons. Use `ButtonSource::mouse_button()` to easily normalize any pointer button - type to a generic mouse button. - - New `FingerId` added to `PointerKind::Touch` and `PointerSource::Touch` able to uniquely - identify a finger in a multi-touch interaction. Replaces the old `Touch::id`. - - In the same spirit rename `DeviceEvent::MouseMotion` to `PointerMotion`. - - Remove `Force::Calibrated::altitude_angle`. -- On X11, use bottom-right corner for IME hotspot in `Window::set_ime_cursor_area`. -- On macOS and iOS, no longer emit `ScaleFactorChanged` upon window creation. -- On macOS, no longer emit `Focused` upon window creation. -- On iOS, emit more events immediately, instead of queuing them. -- Update `smol_str` to version `0.3` -- Rename `VideoModeHandle` to `VideoMode`, now it only stores plain data. -- Make `Fullscreen::Exclusive` contain `(MonitorHandle, VideoMode)`. -- Reworked the file drag-and-drop API. -- On macOS, the default menu uses the bundle name or falls back to the process name as before. - - The `WindowEvent::DroppedFile`, `WindowEvent::HoveredFile` and `WindowEvent::HoveredFileCancelled` - events have been removed, and replaced with `WindowEvent::DragEntered`, `WindowEvent::DragMoved`, - `WindowEvent::DragDropped` and `WindowEvent::DragLeft`. - - The old drag-and-drop events were emitted once per file. This occurred when files were *first* - hovered over the window, dropped, or left the window. The new drag-and-drop events are emitted - once per set of files dragged, and include a list of all dragged files. They also include the - pointer position. - - The rough correspondence is: - - `WindowEvent::HoveredFile` -> `WindowEvent::DragEntered` - - `WindowEvent::DroppedFile` -> `WindowEvent::DragDropped` - - `WindowEvent::HoveredFileCancelled` -> `WindowEvent::DragLeft` - - The `WindowEvent::DragMoved` event is entirely new, and is emitted whenever the pointer moves - whilst files are being dragged over the window. It doesn't contain any file paths, just the - pointer position. -- Updated `objc2` to `v0.6`. -- Updated `windows-sys` to `v0.59`. - - To match the corresponding changes in `windows-sys`, the `HWND`, `HMONITOR`, and `HMENU` types - now alias to `*mut c_void` instead of `isize`. -- Removed `KeyEventExtModifierSupplement`, and made the fields `text_with_all_modifiers` and - `key_without_modifiers` public on `KeyEvent` instead. -- Move `window::Fullscreen` to `monitor::Fullscreen`. -- Renamed "super" key to "meta", to match the naming in the W3C specification. - `NamedKey::Super` still exists, but it's non-functional and deprecated, `NamedKey::Meta` should be used instead. -- Move `IconExtWindows` into `WinIcon`. -- Move `EventLoopExtPumpEvents` and `PumpStatus` from platform module to `winit::event_loop::pump_events`. -- Move `EventLoopExtRunOnDemand` from platform module to `winit::event_loop::run_on_demand`. -- Use `NamedKey`, `Code` and `Location` from the `keyboard-types` v0.8 crate. -- Deprecate `Window::set_ime_allowed`, `Window::set_ime_cursor_area`, and `Window::set_ime_purpose`. -- `Force::normalized()` now takes a `Option` to calculate the perpendicular force. -- On Windows, don't confine cursor to center of window when grabbed and hidden. - -### Removed - -- Remove `Event`. -- Remove already deprecated APIs: - - `EventLoop::create_window()` - - `EventLoop::run`. - - `EventLoopBuilder::new()` - - `EventLoopExtPumpEvents::pump_events`. - - `EventLoopExtRunOnDemand::run_on_demand`. - - `VideoMode` - - `WindowAttributes::new()` - - `Window::set_cursor_icon()` -- On iOS, remove `platform::ios::EventLoopExtIOS` and related `platform::ios::Idiom` type. - - This feature was incomplete, and the equivalent functionality can be trivially achieved outside - of `winit` using `objc2-ui-kit` and calling `UIDevice::currentDevice().userInterfaceIdiom()`. -- On Web, remove unused `platform::web::CustomCursorError::Animation`. -- Remove the `rwh_04` and `rwh_05` cargo feature and the corresponding `raw-window-handle` v0.4 and - v0.5 support. v0.6 remains in place and is enabled by default. -- Remove `DeviceEvent::Added` and `DeviceEvent::Removed`. -- Remove `DeviceEvent::Motion` and `WindowEvent::AxisMotion`. -- Remove `MonitorHandle::size()` and `refresh_rate_millihertz()` in favor of - `MonitorHandle::current_video_mode()`. -- On Android, remove all `MonitorHandle` support instead of emitting false data. -- Remove `impl From for WindowId` and `impl From for u64`. Replaced with - `WindowId::into_raw()` and `from_raw()`. -- Remove `dummy()` from `WindowId` and `DeviceId`. -- Remove `WindowEvent::Touch` and `Touch` in favor of the new `PointerKind`, `PointerSource` and - `ButtonSource` as part of the new pointer event overhaul. -- Remove `Force::altitude_angle`. -- Remove `Window::inner_position`, use the new `Window::surface_position` instead. -- Remove `CustomCursorExtWeb`, use the `CustomCursorSource`. -- Remove `CustomCursor::from_rgba`, use `CustomCursorSource` instead. -- Remove `ApplicationHandler::exited`, the event loop being shut down can now be listened to in - the `Drop` impl on the application handler. -- Remove `NamedKey::Space`, match on `Key::Character(" ")` instead. -- Remove `PartialEq` impl for `WindowAttributes`. -- `WindowAttributesExt*` platform extensions; use `WindowAttributes*` instead. -- Remove `Force::Calibrated::altitude_angle` in favor of `ToolAngle::altitude`. - -### Fixed - -- On Orbital, `MonitorHandle::name()` now returns `None` instead of a dummy name. -- On Orbital, implement `fullscreen`. -- On iOS, fixed `SurfaceResized` and `Window::surface_size` not reporting the size of the actual surface. -- On macOS, fixed the scancode conversion for audio volume keys. -- On macOS, fixed the scancode conversion for `IntlBackslash`. -- On macOS, fixed redundant `SurfaceResized` event at window creation. -- On macOS, don't panic on monitors with unknown bit-depths. -- On macOS, fixed crash when closing the window on macOS 26+. -- On Windows, account for mouse wheel lines per scroll setting for `WindowEvent::MouseWheel`. -- On Windows, `Window::theme` will return the correct theme after setting it through `Window::set_theme`. -- On Windows, `Window::set_theme` will change the title bar color immediately now. -- On Windows 11, prevent incorrect shifting when dragging window onto a monitor with different DPI. -- On Windows, avoid returning `SurfaceResized` with size zero when an application is minimized. Let `Window::surface_size` return the pre-minimization window size even while minimized. -- On Web, device events are emitted regardless of cursor type. -- On Wayland, `axis_value120` scroll events now generate `MouseScrollDelta::LineDelta` -- On X11, mouse scroll button events no longer cause duplicated `WindowEvent::MouseWheel` events. -- On macOS, fixed crash when dragging non-file content onto window. diff --git a/winit/src/changelog/v0.31.md b/winit/src/changelog/v0.31.md new file mode 100644 index 00000000..109e23f1 --- /dev/null +++ b/winit/src/changelog/v0.31.md @@ -0,0 +1,235 @@ +## 0.31.0-beta.1 + +### Added + +- Add `ActiveEventLoop::create_proxy()`. +- On Web, add `ActiveEventLoopExtWeb::is_cursor_lock_raw()` to determine if + `DeviceEvent::MouseMotion` is returning raw data, not OS accelerated, when using + `CursorGrabMode::Locked`. +- On Web, implement `MonitorHandle` and `VideoModeHandle`. + + Without prompting the user for permission, only the current monitor is returned. But when + prompting and being granted permission through + `ActiveEventLoop::request_detailed_monitor_permission()`, access to all monitors and their + details is available. Handles created with "detailed monitor permissions" can be used in + `Window::set_fullscreen()` as well. + + Keep in mind that handles do not auto-upgrade after permissions are granted and have to be + re-created to make full use of this feature. +- Implement `Clone`, `Copy`, `Debug`, `Deserialize`, `Eq`, `Hash`, `Ord`, `PartialEq`, `PartialOrd` + and `Serialize` on many types. +- Add `MonitorHandle::current_video_mode()`. +- Add `ApplicationHandlerExtMacOS` trait, and a `macos_handler` method to `ApplicationHandler` which returns a `dyn ApplicationHandlerExtMacOS` which allows for macOS specific extensions to winit. +- Add a `standard_key_binding` method to the `ApplicationHandlerExtMacOS` trait. This allows handling of standard keybindings such as "go to end of line" on macOS. +- On macOS, add `WindowExtMacOS::set_unified_titlebar` and `WindowAttributesMacOS::with_unified_titlebar` + to use a larger style of titlebar. +- Add `WindowId::into_raw()` and `from_raw()`. +- Add `PointerKind`, `PointerSource`, `ButtonSource`, `FingerId`, `primary` and `position` to all + pointer events as part of the pointer event overhaul. +- Add `DeviceId::into_raw()` and `from_raw()`. +- Added `Window::surface_position`, which is the position of the surface inside the window. +- Added `Window::safe_area`, which describes the area of the surface that is unobstructed. +- On X11, Wayland, Windows and macOS, improved scancode conversions for more obscure key codes. +- Add ability to make non-activating window on macOS using `NSPanel` with `NSWindowStyleMask::NonactivatingPanel`. +- Implement `MonitorHandleProvider` for `MonitorHandle` to access common monitor API. +- On X11, set an "area" attribute on XIM input connection to convey the cursor area. +- Implement `CustomCursorProvider` for `CustomCursor` to access cursor API. +- Add `CustomCursorSource::Url`, `CustomCursorSource::from_animation`. +- Implement `CustomIconProvider` for `RgbaIcon`. +- Add `icon` module that exposes winit's icon API. +- `VideoMode::new` to create a `VideoMode`. +- `keyboard::ModifiersKey` to track which modifier is exactly pressed. +- `ActivationToken::as_raw` to get a ref to raw token. +- Each platform now has corresponding `WindowAttributes` struct instead of trait extension. +- On Wayland, added implementation for `Window::set_window_icon` +- On Wayland, added `PanGesture`, `PinchGesture`, and `RotationGesture` +- Add `Window::request_ime_update` to atomically apply set of IME changes. +- Add `Ime::DeleteSurrounding` to let the input method delete text. +- Add more `ImePurpose` values. +- Add `ImeHints` to request particular IME behaviour. +- Add Pen input support on Wayland, Windows, and Web via new Pointer event. + +### Changed + +- Change `ActiveEventLoop` and `Window` to be traits, and added `cast_ref`/`cast_mut`/`cast` + methods to extract the backend type from those. +- `ActiveEventLoop::create_window` now returns `Box`. +- `ApplicationHandler` now uses `dyn ActiveEventLoop`. +- On Web, let events wake up event loop immediately when using `ControlFlow::Poll`. +- Bump MSRV from `1.70` to `1.85`. +- Changed `ApplicationHandler::user_event` to `user_wake_up`, removing the + generic user event. + + Winit will now only indicate that wake up happened, you will have to pair + this with an external mechanism like `std::sync::mpsc::channel` if you want + to send specific data to be processed on the main thread. +- Changed `EventLoopProxy::send_event` to `EventLoopProxy::wake_up`, it now + only wakes up the loop. +- On X11, implement smooth resizing through the sync extension API. +- `ApplicationHandler::can_create|destroy_surfaces()` was split off from + `ApplicationHandler::resumed/suspended()`. + + `ApplicationHandler::can_create_surfaces()` should, for portability reasons + to Android, be the only place to create render surfaces. + + `ApplicationHandler::resumed/suspended()` are now only emitted by iOS, Web + and Android, and now signify actually resuming/suspending the application. +- Rename `platform::web::*ExtWebSys` to `*ExtWeb`. +- Change signature of `EventLoop::run_app`, `EventLoopExtPumpEvents::pump_app_events` and + `EventLoopExtRunOnDemand::run_app_on_demand` to accept a `impl ApplicationHandler` directly, + instead of requiring a `&mut` reference to it. +- On Web, `Window::canvas()` now returns a reference. +- On Web, `CursorGrabMode::Locked` now lets `DeviceEvent::MouseMotion` return raw data, not OS + accelerated, if the browser supports it. +- `(Active)EventLoop::create_custom_cursor()` now returns a `Result`. +- Changed how `ModifiersState` is serialized by Serde. +- `VideoModeHandle::refresh_rate_millihertz()` and `bit_depth()` now return a `Option`. +- `MonitorHandle::position()` now returns an `Option`. +- On macOS, remove custom application delegates. You are now allowed to override the + application delegate yourself. +- On X11, remove our dependency on libXcursor. (#3749) +- Renamed the following APIs to make it clearer that the sizes apply to the underlying surface: + - `WindowEvent::Resized` to `SurfaceResized`. + - `InnerSizeWriter` to `SurfaceSizeWriter`. + - `WindowAttributes.inner_size` to `surface_size`. + - `WindowAttributes.min_inner_size` to `min_surface_size`. + - `WindowAttributes.max_inner_size` to `max_surface_size`. + - `WindowAttributes.resize_increments` to `surface_resize_increments`. + - `WindowAttributes::with_inner_size` to `with_surface_size`. + - `WindowAttributes::with_min_inner_size` to `with_min_surface_size`. + - `WindowAttributes::with_max_inner_size` to `with_max_surface_size`. + - `WindowAttributes::with_resize_increments` to `with_surface_resize_increments`. + - `Window::inner_size` to `surface_size`. + - `Window::request_inner_size` to `request_surface_size`. + - `Window::set_min_inner_size` to `set_min_surface_size`. + - `Window::set_max_inner_size` to `set_max_surface_size`. + + To migrate, you can probably just replace all instances of `inner_size` with `surface_size` in your codebase. +- Every event carrying a `DeviceId` now uses `Option` instead. A `None` value signifies that the + device can't be uniquely identified. +- Pointer `WindowEvent`s were overhauled. The new events can handle any type of pointer, serving as + a single pointer input source. Now your application can handle any pointer type without having to + explicitly handle e.g. `Touch`: + - Rename `CursorMoved` to `PointerMoved`. + - Rename `CursorEntered` to `PointerEntered`. + - Rename `CursorLeft` to `PointerLeft`. + - Rename `MouseInput` to `PointerButton`. + - Add `primary` to every `PointerEvent` as a way to identify discard non-primary pointers in a + multi-touch interaction. + - Add `position` to every `PointerEvent`. + - `PointerMoved` is **not sent** after `PointerEntered` anymore. + - Remove `Touch`, which is folded into the `Pointer*` events. + - New `PointerKind` added to `PointerEntered` and `PointerLeft`, signifying which pointer type is + the source of this event. + - New `PointerSource` added to `PointerMoved`, similar to `PointerKind` but holding additional + data. + - New `ButtonSource` added to `PointerButton`, similar to `PointerKind` but holding pointer type + specific buttons. Use `ButtonSource::mouse_button()` to easily normalize any pointer button + type to a generic mouse button. + - New `FingerId` added to `PointerKind::Touch` and `PointerSource::Touch` able to uniquely + identify a finger in a multi-touch interaction. Replaces the old `Touch::id`. + - In the same spirit rename `DeviceEvent::MouseMotion` to `PointerMotion`. + - Remove `Force::Calibrated::altitude_angle`. +- On X11, use bottom-right corner for IME hotspot in `Window::set_ime_cursor_area`. +- On macOS and iOS, no longer emit `ScaleFactorChanged` upon window creation. +- On macOS, no longer emit `Focused` upon window creation. +- On iOS, emit more events immediately, instead of queuing them. +- Update `smol_str` to version `0.3` +- Rename `VideoModeHandle` to `VideoMode`, now it only stores plain data. +- Make `Fullscreen::Exclusive` contain `(MonitorHandle, VideoMode)`. +- Reworked the file drag-and-drop API. +- On macOS, the default menu uses the bundle name or falls back to the process name as before. + + The `WindowEvent::DroppedFile`, `WindowEvent::HoveredFile` and `WindowEvent::HoveredFileCancelled` + events have been removed, and replaced with `WindowEvent::DragEntered`, `WindowEvent::DragMoved`, + `WindowEvent::DragDropped` and `WindowEvent::DragLeft`. + + The old drag-and-drop events were emitted once per file. This occurred when files were *first* + hovered over the window, dropped, or left the window. The new drag-and-drop events are emitted + once per set of files dragged, and include a list of all dragged files. They also include the + pointer position. + + The rough correspondence is: + - `WindowEvent::HoveredFile` -> `WindowEvent::DragEntered` + - `WindowEvent::DroppedFile` -> `WindowEvent::DragDropped` + - `WindowEvent::HoveredFileCancelled` -> `WindowEvent::DragLeft` + + The `WindowEvent::DragMoved` event is entirely new, and is emitted whenever the pointer moves + whilst files are being dragged over the window. It doesn't contain any file paths, just the + pointer position. +- Updated `objc2` to `v0.6`. +- Updated `windows-sys` to `v0.59`. + - To match the corresponding changes in `windows-sys`, the `HWND`, `HMONITOR`, and `HMENU` types + now alias to `*mut c_void` instead of `isize`. +- Removed `KeyEventExtModifierSupplement`, and made the fields `text_with_all_modifiers` and + `key_without_modifiers` public on `KeyEvent` instead. +- Move `window::Fullscreen` to `monitor::Fullscreen`. +- Renamed "super" key to "meta", to match the naming in the W3C specification. + `NamedKey::Super` still exists, but it's non-functional and deprecated, `NamedKey::Meta` should be used instead. +- Move `IconExtWindows` into `WinIcon`. +- Move `EventLoopExtPumpEvents` and `PumpStatus` from platform module to `winit::event_loop::pump_events`. +- Move `EventLoopExtRunOnDemand` from platform module to `winit::event_loop::run_on_demand`. +- Use `NamedKey`, `Code` and `Location` from the `keyboard-types` v0.8 crate. +- Deprecate `Window::set_ime_allowed`, `Window::set_ime_cursor_area`, and `Window::set_ime_purpose`. +- `Force::normalized()` now takes a `Option` to calculate the perpendicular force. +- On Windows, don't confine cursor to center of window when grabbed and hidden. + +### Removed + +- Remove `Event`. +- Remove already deprecated APIs: + - `EventLoop::create_window()` + - `EventLoop::run`. + - `EventLoopBuilder::new()` + - `EventLoopExtPumpEvents::pump_events`. + - `EventLoopExtRunOnDemand::run_on_demand`. + - `VideoMode` + - `WindowAttributes::new()` + - `Window::set_cursor_icon()` +- On iOS, remove `platform::ios::EventLoopExtIOS` and related `platform::ios::Idiom` type. + + This feature was incomplete, and the equivalent functionality can be trivially achieved outside + of `winit` using `objc2-ui-kit` and calling `UIDevice::currentDevice().userInterfaceIdiom()`. +- On Web, remove unused `platform::web::CustomCursorError::Animation`. +- Remove the `rwh_04` and `rwh_05` cargo feature and the corresponding `raw-window-handle` v0.4 and + v0.5 support. v0.6 remains in place and is enabled by default. +- Remove `DeviceEvent::Added` and `DeviceEvent::Removed`. +- Remove `DeviceEvent::Motion` and `WindowEvent::AxisMotion`. +- Remove `MonitorHandle::size()` and `refresh_rate_millihertz()` in favor of + `MonitorHandle::current_video_mode()`. +- On Android, remove all `MonitorHandle` support instead of emitting false data. +- Remove `impl From for WindowId` and `impl From for u64`. Replaced with + `WindowId::into_raw()` and `from_raw()`. +- Remove `dummy()` from `WindowId` and `DeviceId`. +- Remove `WindowEvent::Touch` and `Touch` in favor of the new `PointerKind`, `PointerSource` and + `ButtonSource` as part of the new pointer event overhaul. +- Remove `Force::altitude_angle`. +- Remove `Window::inner_position`, use the new `Window::surface_position` instead. +- Remove `CustomCursorExtWeb`, use the `CustomCursorSource`. +- Remove `CustomCursor::from_rgba`, use `CustomCursorSource` instead. +- Remove `ApplicationHandler::exited`, the event loop being shut down can now be listened to in + the `Drop` impl on the application handler. +- Remove `NamedKey::Space`, match on `Key::Character(" ")` instead. +- Remove `PartialEq` impl for `WindowAttributes`. +- `WindowAttributesExt*` platform extensions; use `WindowAttributes*` instead. +- Remove `Force::Calibrated::altitude_angle` in favor of `ToolAngle::altitude`. + +### Fixed + +- On Orbital, `MonitorHandle::name()` now returns `None` instead of a dummy name. +- On Orbital, implement `fullscreen`. +- On iOS, fixed `SurfaceResized` and `Window::surface_size` not reporting the size of the actual surface. +- On macOS, fixed the scancode conversion for audio volume keys. +- On macOS, fixed the scancode conversion for `IntlBackslash`. +- On macOS, fixed redundant `SurfaceResized` event at window creation. +- On macOS, don't panic on monitors with unknown bit-depths. +- On macOS, fixed crash when closing the window on macOS 26+. +- On Windows, account for mouse wheel lines per scroll setting for `WindowEvent::MouseWheel`. +- On Windows, `Window::theme` will return the correct theme after setting it through `Window::set_theme`. +- On Windows, `Window::set_theme` will change the title bar color immediately now. +- On Windows 11, prevent incorrect shifting when dragging window onto a monitor with different DPI. +- On Windows, avoid returning `SurfaceResized` with size zero when an application is minimized. Let `Window::surface_size` return the pre-minimization window size even while minimized. +- On Web, device events are emitted regardless of cursor type. +- On Wayland, `axis_value120` scroll events now generate `MouseScrollDelta::LineDelta` +- On X11, mouse scroll button events no longer cause duplicated `WindowEvent::MouseWheel` events. +- On macOS, fixed crash when dragging non-file content onto window.