WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Releases: rust-windowing/winit

Winit version 0.31.0-beta.2

16 Nov 08:26
v0.31.0-beta.2

Choose a tag to compare

Pre-release

Added

  • Add EventLoopExtRegister::register_app for being explicit about how the event loop runs on Web.
  • Add EventLoopExtNeverReturn::run_app_never_return for 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 'static application 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

16 Nov 04:41
v0.31.0-beta.1

Choose a tag to compare

Pre-release

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<dyn Window>.

  • 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<CustomCursor, ExternalError>.

  • Changed how ModifiersState is serialized by Serde.

  • VideoModeHandle::refresh_rate_millihertz() and bit_depth() now return a Option<NonZero*>.

  • 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<DeviceId> instead. A None value 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 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 `window...

Read more

Winit version v0.30.12

27 Jul 13:02
v0.30.12

Choose a tag to compare

Fixed

  • On macOS, fix crash on macOS 26 by using objc2's relax-sign-encoding feature.

Winit release v0.30.11

21 May 08:54
v0.30.11

Choose a tag to compare

Fixed

  • On Windows, fixed crash in should_apps_use_dark_mode() for Windows versions < 17763.
  • On Wayland, fixed pump_events driven loop deadlocking when loop was not drained before exit.

Winit version 0.30.10

30 Apr 11:48
v0.30.10

Choose a tag to compare

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 NSApplication class (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_fullscreen now honors WindowExtMacOS::set_borderless_game
  • On X11 and Wayland, fixed pump_events with Some(Duration::Zero) blocking with Wait polling mode
  • On Wayland, fixed a crash when consequently calling set_cursor_grab without 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_demand returning without closing open windows.
  • On macOS, fixed VideoMode::refresh_rate_millihertz for 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 None instead of panicking.
  • On Windows, fixed Ime::Preedit cursor offset calculation.

Winit version 0.30.9

06 Feb 10:16
v0.30.9

Choose a tag to compare

Changed

  • On Wayland, no longer send an explicit clearing Ime::Preedit just prior to a new Ime::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

04 Jan 05:47
v0.30.8

Choose a tag to compare

Added

  • ActivationToken::from_raw and ActivationToken::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

22 Dec 20:04
v0.30.7

Choose a tag to compare

Fixed

  • On X11, fixed KeyboardInput delivered twice when IME enabled.

[YANKED] Winit version 0.30.6

21 Dec 06:07
v0.30.6

Choose a tag to compare

Added

  • On macOS, add WindowExtMacOS::set_borderless_game and WindowAttributesExtMacOS::with_borderless_game
    to fully disable the menu bar and dock in Borderless Fullscreen as commonly done in games.
  • On X11, the window example now understands the X11_VISUAL_ID and X11_SCREEN_ID env
    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::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 using CREATE_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's PartialEq and Hash implementations.
  • 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

08 Aug 18:31
v0.30.5

Choose a tag to compare

Added

  • Add ActiveEventLoop::system_theme(), returning the current system theme.
  • On Web, implement Error for platform::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.