Releases: rust-windowing/winit
Winit version 0.31.0-beta.2
Added
- Add
EventLoopExtRegister::register_appfor being explicit about how the event loop runs on Web. - Add
EventLoopExtNeverReturn::run_app_never_returnfor being explicit about how the event loop runs on iOS.
Changed
- On Web, avoid throwing an exception in
EventLoop::run_app, instead preferring to return to the caller.
This requires passing a'staticapplication to ensure that the application state will live as long as necessary. - On Web, the event loop can now always be re-created once it has finished running.
Fixed
- Fixed panic when calling
Window::set_ime_allowed.
Winit version 0.31.0-beta.1
Added
-
Add
ActiveEventLoop::create_proxy(). -
On Web, add
ActiveEventLoopExtWeb::is_cursor_lock_raw()to determine if
DeviceEvent::MouseMotionis returning raw data, not OS accelerated, when using
CursorGrabMode::Locked. -
On Web, implement
MonitorHandleandVideoModeHandle.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
andSerializeon many types. -
Add
MonitorHandle::current_video_mode(). -
Add
ApplicationHandlerExtMacOStrait, and amacos_handlermethod toApplicationHandlerwhich returns adyn ApplicationHandlerExtMacOSwhich allows for macOS specific extensions to winit. -
Add a
standard_key_bindingmethod to theApplicationHandlerExtMacOStrait. This allows handling of standard keybindings such as "go to end of line" on macOS. -
On macOS, add
WindowExtMacOS::set_unified_titlebarandWindowAttributesMacOS::with_unified_titlebar
to use a larger style of titlebar. -
Add
WindowId::into_raw()andfrom_raw(). -
Add
PointerKind,PointerSource,ButtonSource,FingerId,primaryandpositionto all
pointer events as part of the pointer event overhaul. -
Add
DeviceId::into_raw()andfrom_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
NSPanelwithNSWindowStyleMask::NonactivatingPanel. -
Implement
MonitorHandleProviderforMonitorHandleto access common monitor API. -
On X11, set an "area" attribute on XIM input connection to convey the cursor area.
-
Implement
CustomCursorProviderforCustomCursorto access cursor API. -
Add
CustomCursorSource::Url,CustomCursorSource::from_animation. -
Implement
CustomIconProviderforRgbaIcon. -
Add
iconmodule that exposes winit's icon API. -
VideoMode::newto create aVideoMode. -
keyboard::ModifiersKeyto track which modifier is exactly pressed. -
ActivationToken::as_rawto get a ref to raw token. -
Each platform now has corresponding
WindowAttributesstruct instead of trait extension. -
On Wayland, added implementation for
Window::set_window_icon -
On Wayland, added
PanGesture,PinchGesture, andRotationGesture -
Add
Window::request_ime_updateto atomically apply set of IME changes. -
Add
Ime::DeleteSurroundingto let the input method delete text. -
Add more
ImePurposevalues. -
Add
ImeHintsto request particular IME behaviour. -
Add Pen input support on Wayland, Windows, and Web via new Pointer event.
Changed
-
Change
ActiveEventLoopandWindowto be traits, and addedcast_ref/cast_mut/cast
methods to extract the backend type from those. -
ActiveEventLoop::create_windownow returnsBox<dyn Window>. -
ApplicationHandlernow usesdyn ActiveEventLoop. -
On Web, let events wake up event loop immediately when using
ControlFlow::Poll. -
Bump MSRV from
1.70to1.85. -
Changed
ApplicationHandler::user_eventtouser_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 likestd::sync::mpsc::channelif you want
to send specific data to be processed on the main thread. -
Changed
EventLoopProxy::send_eventtoEventLoopProxy::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::*ExtWebSysto*ExtWeb. -
Change signature of
EventLoop::run_app,EventLoopExtPumpEvents::pump_app_eventsand
EventLoopExtRunOnDemand::run_app_on_demandto accept aimpl ApplicationHandlerdirectly,
instead of requiring a&mutreference to it. -
On Web,
Window::canvas()now returns a reference. -
On Web,
CursorGrabMode::Lockednow letsDeviceEvent::MouseMotionreturn raw data, not OS
accelerated, if the browser supports it. -
(Active)EventLoop::create_custom_cursor()now returns aResult<CustomCursor, ExternalError>. -
Changed how
ModifiersStateis serialized by Serde. -
VideoModeHandle::refresh_rate_millihertz()andbit_depth()now return aOption<NonZero*>. -
MonitorHandle::position()now returns anOption. -
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::ResizedtoSurfaceResized.InnerSizeWritertoSurfaceSizeWriter.WindowAttributes.inner_sizetosurface_size.WindowAttributes.min_inner_sizetomin_surface_size.WindowAttributes.max_inner_sizetomax_surface_size.WindowAttributes.resize_incrementstosurface_resize_increments.WindowAttributes::with_inner_sizetowith_surface_size.WindowAttributes::with_min_inner_sizetowith_min_surface_size.WindowAttributes::with_max_inner_sizetowith_max_surface_size.WindowAttributes::with_resize_incrementstowith_surface_resize_increments.Window::inner_sizetosurface_size.Window::request_inner_sizetorequest_surface_size.Window::set_min_inner_sizetoset_min_surface_size.Window::set_max_inner_sizetoset_max_surface_size.
To migrate, you can probably just replace all instances of
inner_sizewithsurface_sizein your codebase. -
Every event carrying a
DeviceIdnow usesOption<DeviceId>instead. ANonevalue signifies that the
device can't be uniquely identified. -
Pointer
WindowEvents 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
CursorMovedtoPointerMoved. - Rename
CursorEnteredtoPointerEntered. - Rename
CursorLefttoPointerLeft. - Rename
MouseInputtoPointerButton. - Add
primaryto everyPointerEventas a way to identify discard non-primary pointers in a
multi-touch interaction. - Add
positionto everyPointerEvent. PointerMovedis not sent afterPointerEnteredanymore.- Remove
Touch, which is folded into thePointer*events. - New
PointerKindadded toPointerEnteredandPointerLeft, signifying which pointer type is
the source of this event. - New
PointerSourceadded toPointerMoved, similar toPointerKindbut holding additional
data. - New
ButtonSourceadded toPointerButton, similar toPointerKindbut holding pointer type
specific buttons. UseButtonSource::mouse_button()to easily normalize any pointer button
type to a generic mouse button. - New
FingerIdadded toPointerKind::TouchandPointerSource::Touchable to uniquely
identify a finger in a multi-touch interaction. Replaces the oldTouch::id. - In the same spirit rename
DeviceEvent::MouseMotiontoPointerMotion. - Remove
Force::Calibrated::altitude_angle.
- Rename
-
On X11, use bottom-right corner for IME hotspot in
Window::set_ime_cursor_area. -
On macOS and iOS, no longer emit
ScaleFactorChangedupon window creation. -
On macOS, no longer emit
Focusedupon window creation. -
On iOS, emit more events immediately, instead of queuing them.
-
Update
smol_strto version0.3 -
Rename
VideoModeHandletoVideoMode, now it only stores plain data. -
Make
Fullscreen::Exclusivecontain(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::HoveredFileandWindowEvent::HoveredFileCancelled
events have been removed, and replaced withWindowEvent::DragEntered,WindowEvent::DragMoved,
WindowEvent::DragDroppedandWindowEvent::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::DragEnteredWindowEvent::DroppedFile->WindowEvent::DragDroppedWindowEvent::HoveredFileCancelled->WindowEvent::DragLeft
The
WindowEvent::DragMovedevent 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
objc2tov0.6. -
Updated `window...
Winit version v0.30.12
Winit release v0.30.11
Fixed
- On Windows, fixed crash in should_apps_use_dark_mode() for Windows versions < 17763.
- On Wayland, fixed
pump_eventsdriven loop deadlocking when loop was not drained before exit.
Winit version 0.30.10
Added
- On Windows, add
IconExtWindows::from_resource_name. - On Windows, add
CursorGrabMode::Locked. - On Wayland, add
WindowExtWayland::xdg_toplevel.
Changed
- On macOS, no longer need control of the main
NSApplicationclass (which means you can now override it yourself). - On iOS, 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.
Fixed
- On Windows, fixed ~500 ms pause when clicking the title bar during continuous redraw.
- On macOS,
WindowExtMacOS::set_simple_fullscreennow honorsWindowExtMacOS::set_borderless_game - On X11 and Wayland, fixed pump_events with
Some(Duration::Zero)blocking withWaitpolling mode - On Wayland, fixed a crash when consequently calling
set_cursor_grabwithout pointer focus. - On Wayland, ensure that external event loop is woken-up when using pump_events and integrating via
FD. - On Wayland, apply fractional scaling to custom cursors.
- On macOS, fixed
run_app_on_demandreturning without closing open windows. - On macOS, fixed
VideoMode::refresh_rate_millihertzfor fractional refresh rates. - On macOS, store monitor handle to avoid panics after going in/out of sleep.
- On macOS, allow certain invalid monitor handles and return
Noneinstead of panicking. - On Windows, fixed
Ime::Preeditcursor offset calculation.
Winit version 0.30.9
Changed
- On Wayland, no longer send an explicit clearing
Ime::Preeditjust prior to a newIme::Preedit.
Fixed
- On X11, fix crash with uim.
- On X11, fix modifiers for keys that were sent by the same X11 request.
- On iOS, fix high CPU usage even when using
ControlFlow::Wait.
Winit version 0.30.8
Added
ActivationToken::from_rawandActivationToken::into_raw.- On X11, add a workaround for disabling IME on GNOME.
Fixed
- On Windows, fixed the event loop not waking on accessibility requests.
- On X11, fixed cursor grab mode state tracking on error.
Winit version 0.30.7
Fixed
- On X11, fixed KeyboardInput delivered twice when IME enabled.
[YANKED] Winit version 0.30.6
Added
- On macOS, add
WindowExtMacOS::set_borderless_gameandWindowAttributesExtMacOS::with_borderless_game
to fully disable the menu bar and dock in Borderless Fullscreen as commonly done in games. - On X11, the
windowexample now understands theX11_VISUAL_IDandX11_SCREEN_IDenv
variables to test the respective modifiers of window creation. - On Android, the soft keyboard can now be shown using
Window::set_ime_allowed. - Add basic iOS IME support. The soft keyboard can now be shown using
Window::set_ime_allowed.
Fixed
- On macOS, fix
WindowEvent::Movedsometimes being triggered unnecessarily on resize. - On macOS, package manifest definitions of
LSUIElementwill 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::WaitUntilwork 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. - On X11, creating windows while passing
with_x11_screen(non_default_screen)works again. - On X11, fix XInput handling that prevented a new window from getting the focus in some cases.
- On macOS, fix crash when pressing Caps Lock in certain configurations.
- On iOS, fixed
MonitorHandle'sPartialEqandHashimplementations. - On macOS, fixed undocumented cursors (e.g. zoom, resize, help) always appearing to be invalid and falling back to the default cursor.
Winit version 0.30.5
Added
- Add
ActiveEventLoop::system_theme(), returning the current system theme. - On Web, implement
Errorforplatform::web::CustomCursorError. - On Android, add
{Active,}EventLoopExtAndroid::android_app()to access the app used to create the loop.
Fixed
- On MacOS, fix building with
feature = "rwh_04". - On Web, pen events are now routed through to
WindowEvent::Cursor*. - On macOS, fix panic when releasing not available monitor.
- On MacOS, return the system theme in
Window::theme()if no theme override is set.