The other half of the wgpu-hal patch: that one lets a caller promise a pre-rotated swapchain, and this is the caller keeping the promise. On configure, `WGPUSurface` reads the surface's `currentTransform`, sizes the swapchain in the panel's orientation (swapped for a quarter turn), tells wgpu-hal to use that transform, and before each frame concatenates the matching rotation onto the Skia canvas. Everything Slint draws goes through that one matrix, so an imported wgpu texture is rotated with the rest of the window. Input is not rotated, and must not be, because Android delivers it in window coordinates. Three details that would each have been a visible bug: - `resize_event` compared the new size against the swapchain's. The swapchain is transposed while a quarter turn is in effect, so the comparison now uses the window's size, kept beside it. - A half turn, landscape to reverse landscape, changes the transform without resizing the window, and wgpu-hal hides the SUBOPTIMAL that would report it. So the transform is re-read before every frame. That costs one query into the native window. - The item renderer snapped the origin to the pixel grid only when the canvas matrix was a pure translation. Under a rotation that is never true, so portrait would have lost pixel alignment everywhere. The check now accepts right-angle rotations and flips without scaling. The direction of each rotation follows the Vulkan spec's reading of preTransform (the image is drawn already rotated clockwise by the transform). It has not been confirmed on the device yet.
NOTE: This library is an internal crate of the Slint project.
This crate should not be used directly by applications using Slint.
You should use the slint crate instead.
WARNING: This crate does not follow the semver convention for versioning and can
only be used with version = "=x.y.z" in Cargo.toml.