@@ -47,201 +47,3 @@ through the implementation work necessary to function on all platforms. When one
4747gets implemented across all platforms, a PR can be opened to upgrade the feature to a core feature.
4848If that gets accepted, the platform-specific functions get deprecated and become permanently
4949exposed through the core, cross-platform API.
50-
51- # Features
52-
53- ## Extending this section
54-
55- If your PR makes notable changes to Winit's features, please update this section as follows:
56-
57- - If your PR adds a new feature, add a brief description to the relevant section. If the feature is a core
58- feature, add a row to the feature matrix and describe what platforms the feature has been implemented on.
59-
60- - If your PR begins a new API rework, add a row to the ` Pending API Reworks ` table. If the PR implements the
61- API rework on all relevant platforms, please move it to the ` Completed API Reworks ` table.
62-
63- - If your PR implements an already-existing feature on a new platform, either mark the feature as * completed* ,
64- or mark it as * mostly completed* and link to an issue describing the problems with the implementation.
65-
66- ## Core
67-
68- ### Windowing
69- - ** Window initialization** : Winit allows the creation of a window
70- - ** Providing pointer to init OpenGL** : Winit provides the necessary pointers to initialize a working opengl context
71- - ** Providing pointer to init Vulkan** : Same as OpenGL but for Vulkan
72- - ** Window decorations** : The windows created by winit are properly decorated, and the decorations can
73- be deactivated
74- - ** Window decorations toggle** : Decorations can be turned on or off after window creation
75- - ** Window resizing** : The windows created by winit can be resized and generate the appropriate events
76- when they are. The application can precisely control its window size if desired.
77- - ** Window resize increments** : When the window gets resized, the application can choose to snap the window's
78- size to specific values.
79- - ** Window transparency** : Winit allows the creation of windows with a transparent background.
80- - ** Window maximization** : The windows created by winit can be maximized upon creation.
81- - ** Window maximization toggle** : The windows created by winit can be maximized and unmaximized after
82- creation.
83- - ** Window minimization** : The windows created by winit can be minimized after creation.
84- - ** Fullscreen** : The windows created by winit can be put into fullscreen mode.
85- - ** Fullscreen toggle** : The windows created by winit can be switched to and from fullscreen after
86- creation.
87- - ** Exclusive fullscreen** : Winit allows changing the video mode of the monitor
88- for fullscreen windows and, if applicable, captures the monitor for exclusive
89- use by this application.
90- - ** HiDPI support** : Winit assists developers in appropriately scaling HiDPI content.
91- - ** Popup / modal windows** : Windows can be created relative to the client area of other windows, and parent
92- windows can be disabled in favor of popup windows. This feature also guarantees that popup windows
93- get drawn above their owner.
94-
95-
96- ### System Information
97- - ** Monitor list** : Retrieve the list of monitors and their metadata, including which one is primary.
98- - ** Video mode query** : Monitors can be queried for their supported fullscreen video modes (consisting of resolution, refresh rate, and bit depth).
99-
100- ### Input Handling
101- - ** Mouse events** : Generating mouse events associated with pointer motion, click, and scrolling events.
102- - ** Mouse set location** : Forcibly changing the location of the pointer.
103- - ** Cursor locking** : Locking the cursor inside the window so it cannot move.
104- - ** Cursor confining** : Confining the cursor to the window bounds so it cannot leave them.
105- - ** Cursor icon** : Changing the cursor icon or hiding the cursor.
106- - ** Cursor image** : Changing the cursor to your own image.
107- - ** Cursor hittest** : Handle or ignore mouse events for a window.
108- - ** Touch events** : Single-touch events.
109- - ** Touch pressure** : Touch events contain information about the amount of force being applied.
110- - ** Multitouch** : Multi-touch events, including cancellation of a gesture.
111- - ** Keyboard events** : Properly processing keyboard events using the user-specified keymap and
112- translating keypresses into UTF-8 characters, handling dead keys and IMEs.
113- - ** Drag & Drop** : Dragging content into winit, detecting when content enters, drops, or if the drop is cancelled.
114- - ** Raw Device Events** : Capturing input from input devices without any OS filtering.
115- - ** Gamepad/Joystick events** : Capturing input from gamepads and joysticks.
116- - ** Device movement events** : Capturing input from the device gyroscope and accelerometer.
117-
118- ## Platform
119- ### Windows
120- * Setting the name of the internal window class
121- * Setting the taskbar icon
122- * Setting the parent window
123- * Setting a menu bar
124- * ` WS_EX_NOREDIRECTIONBITMAP ` support
125- * Theme the title bar according to Windows 10 Dark Mode setting or set a preferred theme
126- * Changing a system-drawn backdrop
127- * Setting the window border color
128- * Setting the title bar background color
129- * Setting the title color
130- * Setting the corner rounding preference
131-
132- ### macOS
133- * Window activation policy
134- * Window movable by background
135- * Transparent titlebar
136- * Hidden titlebar
137- * Hidden titlebar buttons
138- * Full-size content view
139- * Accepts first mouse
140- * Set a preferred theme and get current theme.
141-
142- ### Unix
143- * Window urgency
144- * X11 Window Class
145- * X11 Override Redirect Flag
146- * GTK Theme Variant
147- * Base window size
148- * Setting the X11 parent window
149-
150- ### iOS
151- * Get the ` UIScreen ` object pointer
152- * Setting the ` UIView ` hidpi factor
153- * Valid orientations
154- * Home indicator visibility
155- * Status bar visibility and style
156- * Deferring system gestures
157- * Getting the preferred video mode
158-
159- ### Web
160- * Get if the systems preferred color scheme is "dark"
161-
162- ## Compatibility Matrix
163-
164- Legend:
165-
166- - ✔️: Works as intended
167- - ▢: Mostly works, but some bugs are known
168- - ❌: Missing feature or large bugs making it unusable
169- - ** N/A** : Not applicable for this platform
170- - ❓: Unknown status
171-
172- ### Windowing
173- | Feature | Windows| MacOS | Linux x11 | Linux Wayland | Android| iOS | Web | Redox OS|
174- | -------------------------------- | ----- | ---- | ------- | ----------- | ----- | ----- | -------- | ------ |
175- | Window initialization | ✔️ | ✔️ | ▢[ #5 ] | ✔️ | ▢[ #33 ] | ▢[ #33 ] | ✔️ | ✔️ |
176- | Providing pointer to init OpenGL | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ✔️ |
177- | Providing pointer to init Vulkan | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❓ | ** N/A** | ** N/A** |
178- | Window decorations | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ✔️ |
179- | Window decorations toggle | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
180- | Window resizing | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ✔️ | ✔️ |
181- | Window resize increments | ✔️ | ✔️ | ✔️ | ❌ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
182- | Window transparency | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | N/A | ✔️ |
183- | Window blur | ❌ | ❌ | ❌ | ✔️ | ** N/A** | ** N/A** | N/A | ❌ |
184- | Window maximization | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
185- | Window maximization toggle | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
186- | Window minimization | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
187- | Fullscreen | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ✔️ | ✔️ | ** N/A** |
188- | Fullscreen toggle | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ✔️ | ✔️ | ** N/A** |
189- | Exclusive fullscreen | ✔️ | ✔️ | ✔️ | ** N/A** | ❌ | ✔️ | ** N/A** | ** N/A** |
190- | HiDPI support | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
191- | Popup windows | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ** N/A** | ** N/A** |
192-
193- ### System information
194- | Feature | Windows| MacOS | Linux x11| Linux Wayland| Android| iOS | Web | Redox OS|
195- | ---------------- | ----- | ---- | ------- | ----------- | ----- | ------- | -------- | ------ |
196- | Monitor list | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ❌ |
197- | Video mode query | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ❌ |
198-
199- ### Input handling
200- | Feature | Windows | MacOS | Linux x11| Linux Wayland| Android| iOS | Web | Redox OS|
201- | ----------------------- | ----- | ---- | ------- | ----------- | ----- | ----- | -------- | ------ |
202- | Mouse events | ✔️ | ▢[ #63 ] | ✔️ | ✔️ | ** N/A** | ** N/A** | ✔️ | ✔️ |
203- | Mouse set location | ✔️ | ✔️ | ✔️ | ✔️(when locked) | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
204- | Cursor locking | ❌ | ✔️ | ❌ | ✔️ | ** N/A** | ** N/A** | ✔️ | ❌ |
205- | Cursor confining | ✔️ | ❌ | ✔️ | ✔️ | ** N/A** | ** N/A** | ❌ | ❌ |
206- | Cursor icon | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ✔️ | ** N/A** |
207- | Cursor image | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ✔️ | ** N/A** |
208- | Cursor hittest | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ❌ | ❌ |
209- | Touch events | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** |
210- | Touch pressure | ✔️ | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ | ** N/A** |
211- | Multitouch | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ** N/A** |
212- | Keyboard events | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
213- | Drag & Drop | ▢[ #720 ] | ▢[ #720 ] | ▢[ #720 ] | ▢[ #720 ] | ** N/A** | ** N/A** | ❓ | ** N/A** |
214- | Raw Device Events | ▢[ #750 ] | ▢[ #750 ] | ▢[ #750 ] | ❌ | ❌ | ❌ | ❓ | ** N/A** |
215- | Gamepad/Joystick events | ❌[ #804 ] | ❌ | ❌ | ❌ | ❌ | ❌ | ❓ | ** N/A** |
216- | Device movement events | ❓ | ❓ | ❓ | ❓ | ❌ | ❌ | ❓ | ** N/A** |
217- | Drag window with cursor | ✔️ | ✔️ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
218- | Resize with cursor | ✔️ | ❌ | ✔️ | ✔️ | ** N/A** | ** N/A** | ** N/A** | ** N/A** |
219-
220- ### Pending API Reworks
221- Changes in the API that have been agreed upon but aren't implemented across all platforms.
222-
223- | Feature | Windows| MacOS | Linux x11| Linux Wayland| Android| iOS | Web | Redox OS|
224- | ------------------------------ | ----- | ---- | ------- | ----------- | ----- | ----- | -------- | ------ |
225- | New API for HiDPI ([ #315 ] [ #319 ] ) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❓ | ❓ |
226- | Event Loop 2.0 ([ #459 ] ) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❓ | ✔️ |
227- | Keyboard Input 2.0 ([ #753 ] ) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
228-
229- ### Completed API Reworks
230- | Feature | Windows| MacOS | Linux x11| Linux Wayland| Android| iOS | Web | Redox OS|
231- | ------------------------------ | ----- | ---- | ------- | ----------- | ----- | ----- | -------- | ------ |
232-
233- [ #165 ] : https://github.com/rust-windowing/winit/issues/165
234- [ #219 ] : https://github.com/rust-windowing/winit/issues/219
235- [ #242 ] : https://github.com/rust-windowing/winit/issues/242
236- [ #306 ] : https://github.com/rust-windowing/winit/issues/306
237- [ #315 ] : https://github.com/rust-windowing/winit/issues/315
238- [ #319 ] : https://github.com/rust-windowing/winit/issues/319
239- [ #33 ] : https://github.com/rust-windowing/winit/issues/33
240- [ #459 ] : https://github.com/rust-windowing/winit/issues/459
241- [ #5 ] : https://github.com/rust-windowing/winit/issues/5
242- [ #63 ] : https://github.com/rust-windowing/winit/issues/63
243- [ #720 ] : https://github.com/rust-windowing/winit/issues/720
244- [ #721 ] : https://github.com/rust-windowing/winit/issues/721
245- [ #750 ] : https://github.com/rust-windowing/winit/issues/750
246- [ #753 ] : https://github.com/rust-windowing/winit/issues/753
247- [ #804 ] : https://github.com/rust-windowing/winit/issues/804
0 commit comments