The format is based on Keep a Changelog.
The sections should follow the order Added
, Changed
, Deprecated
,
Removed
, and Fixed
.
Platform specific changed should be added to the end of the section and grouped
by platform name. Common API additions should have , implemented
at the end
for platforms where the API was initially implemented. See the following example
on how to add them:
### Added
- Add `Window::turbo()`, implemented on X11, Wayland, and Web.
- On X11, add `Window::some_rare_api`.
- On X11, add `Window::even_more_rare_api`.
- On Wayland, add `Window::common_api`.
- On Windows, add `Window::some_rare_api`.
When the change requires non-trivial amount of work for users to comply with it, the migration guide should be added below the entry, like:
- Deprecate `Window` creation outside of `EventLoop::run`
This was done to simply migration in the future. Consider the
following code:
// Code snippet.
To migrate it we should do X, Y, and then Z, for example:
// Code snippet.
The migration guide could reference other migration examples in the current changelog entry.
-
Add
ActiveEventLoop::create_proxy()
. -
On Web, add
ActiveEventLoopExtWeb::is_cursor_lock_raw()
to determine ifDeviceEvent::MouseMotion
is returning raw data, not OS accelerated, when usingCursorGrabMode::Locked
. -
On Web, implement
MonitorHandle
andVideoModeHandle
.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 inWindow::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
andSerialize
on many types. -
Add
MonitorHandle::current_video_mode()
. -
Add basic iOS IME support. The soft keyboard can now be shown using
Window::set_ime_allowed
. -
Add
ApplicationHandlerExtMacOS
trait, and amacos_handler
method toApplicationHandler
which returns adyn ApplicationHandlerExtMacOS
which allows for macOS specific extensions to winit. -
Add a
standard_key_binding
method to theApplicationHandlerExtMacOS
trait. This allows handling of standard keybindings such as "go to end of line" on macOS. -
On macOS, add
WindowExtMacOS::set_borderless_game
andWindowAttributesExtMacOS::with_borderless_game
to fully disable the menu bar and dock in Borderless Fullscreen as commonly done in games. -
On macOS, add
WindowExtMacOS::set_unified_titlebar
andWindowAttributesExtMacOS::with_unified_titlebar
to use a larger style of titlebar. -
Add
WindowId::into_raw()
andfrom_raw()
. -
Add
PointerKind
,PointerSource
,ButtonSource
,FingerId
,primary
andposition
to all pointer events as part of the pointer event overhaul. -
Add
DeviceId::into_raw()
andfrom_raw()
.
-
Change
ActiveEventLoop
to be a trait. -
Change
Window
to be a trait. -
ActiveEventLoop::create_window
now returnsBox<dyn Window>
. -
ApplicationHandler
now usesdyn ActiveEventLoop
. -
On Web, let events wake up event loop immediately when using
ControlFlow::Poll
. -
Bump MSRV from
1.70
to1.73
. -
Changed
ApplicationHandler::user_event
touser_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
toEventLoopProxy::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 fromApplicationHandler::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
andEventLoopExtRunOnDemand::run_app_on_demand
to accept aimpl ApplicationHandler
directly, instead of requiring a&mut
reference to it. -
On Web,
Window::canvas()
now returns a reference. -
On Web,
CursorGrabMode::Locked
now letsDeviceEvent::MouseMotion
return raw data, not OS accelerated, if the browser supports it. -
(Active)EventLoop::create_custom_cursor()
now returns aResult<CustomCursor, ExternalError>
. -
Changed how
ModifiersState
is serialized by Serde. -
VideoModeHandle::refresh_rate_millihertz()
andbit_depth()
now return aOption<NonZero*>
. -
MonitorHandle::position()
now returns anOption
. -
On iOS and macOS, remove custom application delegates. You are now allowed to override the application delegate yourself.
-
On iOS, no longer act as-if the application successfully open all URLs. Override
application:didFinishLaunchingWithOptions:
and provide the desired behaviour 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
toSurfaceResized
.InnerSizeWriter
toSurfaceSizeWriter
.WindowAttributes.inner_size
tosurface_size
.WindowAttributes.min_inner_size
tomin_surface_size
.WindowAttributes.max_inner_size
tomax_surface_size
.WindowAttributes.resize_increments
tosurface_resize_increments
.WindowAttributes::with_inner_size
towith_surface_size
.WindowAttributes::with_min_inner_size
towith_min_surface_size
.WindowAttributes::with_max_inner_size
towith_max_surface_size
.WindowAttributes::with_resize_increments
towith_surface_resize_increments
.Window::inner_size
tosurface_size
.Window::request_inner_size
torequest_surface_size
.Window::set_min_inner_size
toset_min_surface_size
.Window::set_max_inner_size
toset_max_surface_size
.
To migrate, you can probably just replace all instances of
inner_size
withsurface_size
in your codebase. -
Every event carrying a
DeviceId
now usesOption<DeviceId>
instead. ANone
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
toPointerMoved
. - Rename
CursorEntered
toPointerEntered
. - Rename
CursorLeft
toPointerLeft
. - Rename
MouseInput
toPointerButton
. - Add
primary
to everyPointerEvent
as a way to identify discard non-primary pointers in a multi-touch interaction. - Add
position
to everyPointerEvent
. PointerMoved
is not sent afterPointerEntered
anymore.- Remove
Touch
, which is folded into thePointer*
events. - New
PointerKind
added toPointerEntered
andPointerLeft
, signifying which pointer type is the source of this event. - New
PointerSource
added toPointerMoved
, similar toPointerKind
but holding additional data. - New
ButtonSource
added toPointerButton
, similar toPointerKind
but holding pointer type specific buttons. UseButtonSource::mouse_button()
to easily normalize any pointer button type to a generic mouse button. - New
FingerId
added toPointerKind::Touch
andPointerSource::Touch
able to uniquely identify a finger in a multi-touch interaction. Replaces the oldTouch::id
. - In the same spirit rename
DeviceEvent::MouseMotion
toPointerMotion
. - Remove
Force::Calibrated::altitude_angle
.
- Rename
-
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 relatedplatform::ios::Idiom
type.This feature was incomplete, and the equivalent functionality can be trivially achieved outside of
winit
usingobjc2-ui-kit
and callingUIDevice::currentDevice().userInterfaceIdiom()
. -
On Web, remove unused
platform::web::CustomCursorError::Animation
. -
Remove the
rwh_04
andrwh_05
cargo feature and the correspondingraw-window-handle
v0.4 and v0.5 support. v0.6 remains in place and is enabled by default. -
Remove
DeviceEvent::Added
andDeviceEvent::Removed
. -
Remove
DeviceEvent::Motion
andWindowEvent::AxisMotion
. -
Remove
MonitorHandle::size()
andrefresh_rate_millihertz()
in favor ofMonitorHandle::current_video_mode()
. -
On Android, remove all
MonitorHandle
support instead of emitting false data. -
Remove
impl From<u64> for WindowId
andimpl From<WindowId> for u64
. Replaced withWindowId::into_raw()
andfrom_raw()
. -
Remove
dummy()
fromWindowId
andDeviceId
. -
Remove
WindowEvent::Touch
andTouch
in favor of the newPointerKind
,PointerSource
andButtonSource
as part of the new pointer event overhaul. -
Remove
Force::altitude_angle
.
- On Orbital,
MonitorHandle::name()
now returnsNone
instead of a dummy name. - On macOS, fix
WindowEvent::Moved
sometimes being triggered unnecessarily on resize. - On macOS, package manifest definitions of
LSUIElement
will no longer be overridden with the default activation policy, unless explicitly provided during initialization. - On macOS, fix crash when calling
drag_window()
without a left click present. - On X11, key events forward to IME anyway, even when it's disabled.
- On Windows, make
ControlFlow::WaitUntil
work more precisely usingCREATE_WAITABLE_TIMER_HIGH_RESOLUTION
. - On X11, creating windows on screen that is not the first one (e.g.
DISPLAY=:0.1
) works again.