Releases: rust-windowing/winit
Releases · rust-windowing/winit
v0.20.0
- Breaking: Overhaul how Winit handles DPI:
- Window functions and events now return
PhysicalSize
instead ofLogicalSize
. - Functions that take
Size
orPosition
types can now take eitherLogical
orPhysical
types. hidpi_factor
has been renamed toscale_factor
.HiDpiFactorChanged
has been renamed toScaleFactorChanged
, and lets you control how the OS
resizes the window in response to the change.- On X11, deprecate
WINIT_HIDPI_FACTOR
environment variable in favor ofWINIT_X11_SCALE_FACTOR
. Size
andPosition
types are now generic over their exact pixel type.
- Window functions and events now return
v0.20.0-alpha6
- On macOS, fix
set_cursor_visible
hides cursor outside of window. - On macOS, fix
CursorEntered
andCursorLeft
events fired at old window size. - On macOS, fix error when
set_fullscreen
is called during fullscreen transition. - On all platforms except mobile and WASM, implement
Window::set_minimized
. - On X11, fix
CursorEntered
event being generated for non-winit windows. - On macOS, fix crash when starting maximized without decorations.
- On macOS, fix application not terminating on
run_return
. - On Wayland, fix cursor icon updates on window borders when using CSD.
- On Wayland, under mutter(GNOME Wayland), fix CSD being behind the status bar, when starting window in maximized mode.
- On Windows, theme the title bar according to whether the system theme is "Light" or "Dark".
- Added
WindowEvent::ThemeChanged
variant to handle changes to the system theme. Currently only implemented on Windows. - Breaking: Changes to the
RedrawRequested
event (#1041):RedrawRequested
has been moved fromWindowEvent
toEvent
.EventsCleared
has been renamed toMainEventsCleared
.RedrawRequested
is now issued only afterMainEventsCleared
.RedrawEventsCleared
is issued after each set ofRedrawRequested
events.
- Implement synthetic window focus key events on Windows.
- Breaking: Change
ModifiersState
to abitflags
struct. - On Windows, implement
VirtualKeyCode
translation forLWin
andRWin
. - On Windows, fix closing the last opened window causing
DeviceEvent
s to stop getting emitted. - On Windows, fix
Window::set_visible
not setting internal flags correctly. This resulted in some weird behavior. - Add
DeviceEvent::ModifiersChanged
.- Deprecate
modifiers
fields in other events in favor ofModifiersChanged
.
- Deprecate
- On X11,
WINIT_HIDPI_FACTOR
now dominatesXft.dpi
when picking DPI factor for output. - On X11, add special value
randr
forWINIT_HIDPI_FACTOR
to make winit use self computed DPI factor instead of the one fromXft.dpi
.
v0.20.0-alpha5
- On macOS, fix application termination on
ControlFlow::Exit
- On Windows, fix missing
ReceivedCharacter
events when Alt is held. - On macOS, stop emitting private corporate characters in
ReceivedCharacter
events. - On X11, fix misreporting DPI factor at startup.
- On X11, fix events not being reported when using
run_return
. - On X11, fix key modifiers being incorrectly reported.
- On X11, fix window creation hanging when another window is fullscreen.
- On Windows, fix focusing unfocused windows when switching from fullscreen to windowed.
- On X11, fix reporting incorrect DPI factor when waking from suspend.
- Change
EventLoopClosed
to contain the original event. - Breaking: Add
is_synthetic
field toWindowEvent
variantKeyboardInput
,
indicating that the event is generated by winit. - On X11, generate synthetic key events for keys held when a window gains or loses focus.
- On X11, issue a
CursorMoved
event when aTouch
event occurs,
as X11 implicitly moves the cursor for such events.
v0.20.0-alpha4
- Add web support via the 'stdweb' or 'web-sys' features
- On Windows, implemented function to get HINSTANCE
- On macOS, implement
run_return
. - On iOS, fix inverted parameter in
set_prefers_home_indicator_hidden
. - On X11, performance is improved when rapidly calling
Window::set_cursor_icon
. - On iOS, fix improper
msg_send
usage that was UB and/or would break if!
is stabilized. - On Windows, unset
maximized
when manually changing the window's position or size. - On Windows, add touch pressure information for touch events.
- On macOS, differentiate between
CursorIcon::Grab
andCursorIcon::Grabbing
. - On Wayland, fix event processing sometimes stalling when using OpenGL with vsync.
- Officially remove the Emscripten backend.
- On Windows, fix handling of surrogate pairs when dispatching
ReceivedCharacter
. - On macOS 10.15, fix freeze upon exiting exclusive fullscreen mode.
- On iOS, fix panic upon closing the app.
- On X11, allow setting mulitple
XWindowType
s. - On iOS, fix null window on initial
HiDpiFactorChanged
event. - On Windows, fix fullscreen window shrinking upon getting restored to a normal window.
- On macOS, fix events not being emitted during modal loops, such as when windows are being resized
by the user. - On Windows, fix hovering the mouse over the active window creating an endless stream of CursorMoved events.
- Always dispatch a
RedrawRequested
event after creating a new window. - On X11, return dummy monitor data to avoid panicking when no monitors exist.
- On X11, prevent stealing input focus when creating a new window.
Only steal input focus when entering fullscreen mode. - On Wayland, fixed DeviceEvents for relative mouse movement is not always produced
- On Wayland, add support for set_cursor_visible and set_cursor_grab.
- On Wayland, fixed DeviceEvents for relative mouse movement is not always produced.
- Removed
derivative
crate dependency. - On Wayland, add support for set_cursor_icon.
- Use
impl Iterator<Item = MonitorHandle>
instead ofAvailableMonitorsIter
consistently. - On macOS, fix fullscreen state being updated after entering fullscreen instead of before,
resulting inWindow::fullscreen
returning the old state inResized
events instead of
reflecting the new fullscreen state - On X11, fix use-after-free during window creation
- On Windows, disable monitor change keyboard shortcut while in exclusive fullscreen.
- On Windows, ensure that changing a borderless fullscreen window's monitor via keyboard shortcuts keeps the window fullscreen on the new monitor.
- Prevent
EventLoop::new
andEventLoop::with_user_event
from getting called outside the main thread.- This is because some platforms cannot run the event loop outside the main thread. Preventing this
reduces the potential for cross-platform compatibility gotchyas.
- This is because some platforms cannot run the event loop outside the main thread. Preventing this
- On Windows and Linux X11/Wayland, add platform-specific functions for creating an
EventLoop
outside the main thread. - On Wayland, drop resize events identical to the current window size.
- On Windows, fix window rectangle not getting set correctly on high-DPI systems.
v0.20.0-alpha3
- On macOS, drop the run closure on exit.
- On Windows, location of
WindowEvent::Touch
are window client coordinates instead of screen coordinates. - On X11, fix delayed events after window redraw.
- On macOS, add
WindowBuilderExt::with_disallow_hidpi
to have the option to turn off best resolution openGL surface. - On Windows, screen saver won't start if the window is in fullscreen mode.
- Change all occurrences of the
new_user_event
method towith_user_event
. - On macOS, the dock and the menu bar are now hidden in fullscreen mode.
Window::set_fullscreen
now takesOption<Fullscreen>
whereFullscreen
consists ofFullscreen::Exclusive(VideoMode)
and
Fullscreen::Borderless(MonitorHandle)
variants.- Adds support for exclusive fullscreen mode.
- On iOS, add support for hiding the home indicator.
- On iOS, add support for deferring system gestures.
- On iOS, fix a crash that occurred while acquiring a monitor's name.
- On iOS, fix armv7-apple-ios compile target.
- Removed the
T: Clone
requirement from theClone
impl ofEventLoopProxy<T>
. - On iOS, disable overscan compensation for external displays (removes black
bars surrounding the image). - On Linux, the functions
is_wayland
,is_x11
,xlib_xconnection
andwayland_display
have been moved to a newEventLoopWindowTargetExtUnix
trait. - On iOS, add
set_prefers_status_bar_hidden
extension function instead of
hijackingset_decorations
for this purpose. - On macOS and iOS, corrected the auto trait impls of
EventLoopProxy
. - On iOS, add touch pressure information for touch events.
- Implement
raw_window_handle::HasRawWindowHandle
forWindow
type on all supported platforms. - On macOS, fix the signature of
-[NSView drawRect:]
. - On iOS, fix the behavior of
ControlFlow::Poll
. It wasn't polling if that was the only mode ever used by the application. - On iOS, fix DPI sent out by views on creation was
0.0
- now it gives a reasonable number. - On iOS, RedrawRequested now works for gl/metal backed views.
- On iOS, RedrawRequested is generally ordered after EventsCleared.
v0.20.0-alpha2
- On X11, non-resizable windows now have maximize explicitly disabled.
- On Windows, support paths longer than MAX_PATH (260 characters) in
WindowEvent::DroppedFile
andWindowEvent::HoveredFile
. - On Mac, implement
DeviceEvent::Button
. - Change
Event::Suspended(true / false)
toEvent::Suspended
andEvent::Resumed
. - On X11, fix sanity check which checks that a monitor's reported width and height (in millimeters) are non-zero when calculating the DPI factor.
- Revert the use of invisible surfaces in Wayland, which introduced graphical glitches with OpenGL (#835)
- On X11, implement
_NET_WM_PING
to allow desktop environment to kill unresponsive programs. - On Windows, when a window is initially invisible, it won't take focus from the existing visible windows.
- On Windows, fix multiple calls to
request_redraw
duringEventsCleared
sending multipleRedrawRequested events.
- On Windows, fix edge case where
RedrawRequested
could be dispatched before input events in event loop iteration. - On Windows, fix timing issue that could cause events to be improperly dispatched after
RedrawRequested
but beforeEventsCleared
. - On macOS, drop unused Metal dependency.
- On Windows, fix the trail effect happening on transparent decorated windows. Borderless (or un-decorated) windows were not affected.
- On Windows, fix
with_maximized
not properly setting window size to entire window. - On macOS, change
WindowExtMacOS::request_user_attention()
to take anenum
instead of abool
.
v0.20.0-alpha1
- Changes below are considered breaking.
- Change all occurrences of
EventsLoop
toEventLoop
. - Previously flat API is now exposed through
event
,event_loop
,monitor
, andwindow
modules. os
module changes:- Renamed to
platform
. - All traits now have platform-specific suffixes.
- Exposes new
desktop
module on Windows, Mac, and Linux.
- Renamed to
- Changes to event loop types:
EventLoopProxy::wakeup
has been removed in favor ofsend_event
.- Major: New
run
method drives winit event loop.- Returns
!
to ensure API behaves identically across all supported platforms.- This allows
emscripten
implementation to work without lying about the API.
- This allows
ControlFlow
's variants have been replaced withWait
,WaitUntil(Instant)
,Poll
, andExit
.- Is read after
EventsCleared
is processed. Wait
waits until new events are available.WaitUntil
waits until either new events are available or the provided time has been reached.Poll
instantly resumes the event loop.Exit
aborts the event loop.
- Is read after
- Takes a closure that implements
'static + FnMut(Event<T>, &EventLoop<T>, &mut ControlFlow)
.&EventLoop<T>
is provided to allow newWindow
s to be created.
- Returns
- Major:
platform::desktop
module exposesEventLoopExtDesktop
trait withrun_return
method.- Behaves identically to
run
, but returns control flow to the calling context and can take non-'static
closures.
- Behaves identically to
EventLoop
'spoll_events
andrun_forever
methods have been removed in favor ofrun
andrun_return
.
- Changes to events:
- Remove
Event::Awakened
in favor ofEvent::UserEvent(T)
.- Can be sent with
EventLoopProxy::send_event
.
- Can be sent with
- Rename
WindowEvent::Refresh
toWindowEvent::RedrawRequested
.RedrawRequested
can be sent by the user with theWindow::request_redraw
method.
EventLoop
,EventLoopProxy
, andEvent
are now generic overT
, for use inUserEvent
.- Major: Add
NewEvents(StartCause)
,EventsCleared
, andLoopDestroyed
variants toEvent
.NewEvents
is emitted when new events are ready to be processed by event loop.StartCause
describes why new events are available, withResumeTimeReached
,Poll
,WaitCancelled
, andInit
(sent once at start of loop).
EventsCleared
is emitted when all available events have been processed.- Can be used to perform logic that depends on all events being processed (e.g. an iteration of a game loop).
LoopDestroyed
is emitted when therun
orrun_return
method is about to exit.
- Remove
- Rename
MonitorId
toMonitorHandle
. - Removed
serde
implementations fromControlFlow
. - Rename several functions to improve both internal consistency and compliance with Rust API guidelines.
- Remove
WindowBuilder::multitouch
field, since it was only implemented on a few platforms. Multitouch is always enabled now. - Breaking: On macOS, change
ns
identifiers to use snake_case for consistency with iOS'sui
identifiers. - Add
MonitorHandle::video_modes
method for retrieving supported video modes for the given monitor. - On Wayland, the window now exists even if nothing has been drawn.
- On Windows, fix initial dimensions of a fullscreen window.
- On Windows, Fix transparent borderless windows rendering wrong.
v0.19.1
- On Wayland, added a
get_wayland_display
function toEventsLoopExt
. - On Windows, fix
CursorMoved(0, 0)
getting dispatched on window focus. - On macOS, fix command key event left and right reverse.
- On FreeBSD, NetBSD, and OpenBSD, fix build of X11 backend.
- On Windows, fix icon not showing up in corner of window.
- On X11, change DPI scaling factor behavior. First, winit tries to read it from "Xft.dpi" XResource, and uses DPI calculation from xrandr dimensions as fallback behavior.
v0.18.0
- Breaking:
image
crate upgraded to 0.20. This is exposed as part of theicon_loading
API. - On Wayland, pointer events will now provide the current modifiers state.
- On Wayland, titles will now be displayed in the window header decoration.
- On Wayland, key repetition is now ended when keyboard loses focus.
- On Wayland, windows will now use more stylish and modern client side decorations.
- On Wayland, windows will use server-side decorations when available.
- Breaking: Added support for F16-F24 keys (variants were added to the
VirtualKeyCode
enum). - Fixed graphical glitches when resizing on Wayland.
- On Windows, fix freezes when performing certain actions after a window resize has been triggered. Reintroduces some visual artifacts when resizing.
- Updated window manager hints under X11 to v1.5 of Extended Window Manager Hints.
- Added
WindowBuilderExt::with_gtk_theme_variant
to X11-specificWindowBuilder
functions. - Fixed UTF8 handling bug in X11
set_title
function. - On Windows,
Window::set_cursor
now applies immediately instead of requiring specific events to occur first. - On Windows, the
HoveredFile
andHoveredFileCancelled
events are now implemented. - On Windows, fix
Window::set_maximized
. - On Windows 10, fix transparency (#260).
- On macOS, fix modifiers during key repeat.
- Implemented the
Debug
trait forWindow
,EventsLoop
,EventsLoopProxy
andWindowBuilder
. - On X11, now a
Resized
event will always be generated after a DPI change to ensure the window's logical size is consistent with the new DPI. - Added further clarifications to the DPI docs.
- On Linux, if neither X11 nor Wayland manage to initialize, the corresponding panic now consists of a single line only.
- Add optional
serde
feature with implementations ofSerialize
/Deserialize
for DPI types and various event types. - Add
PartialEq
,Eq
, andHash
implementations on public types that could have them but were missing them. - On X11, drag-and-drop receiving an unsupported drop type can no longer cause the WM to freeze.
- Fix issue whereby the OpenGL context would not appear at startup on macOS Mojave (#1069).
- Breaking: Removed
From<NSApplicationActivationPolicy>
impl fromActivationPolicy
on macOS. - On macOS, the application can request the user's attention with
WindowExt::request_user_attention
.
v0.17.2
- On macOS, fix
<C-Tab>
so applications receive the event. - On macOS, fix
<Cmd-{key}>
so applications receive the event. - On Wayland, key press events will now be repeated.