v0.1.7 #480
YaLTeR
announced in
Announcements
v0.1.7
#480
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Niri is a scrollable-tiling Wayland compositor. Windows are arranged in columns on an infinite strip going to the right. Opening a new window never causes existing windows to resize.
Here are the improvements from the last release.
Fractional Scaling
The big update this time is fractional scale support. You can set output scale to fractional values like 1.5 and automatic scale factor guessing will now return fractional scale factors.
On the surface this sounds simple, but under the hood, doing it properly required a complete refactor of the layout system to use fractional coordinates and sizes (and then chasing down all of the bugs caused by this).
The result is well worth it though. Borders, gaps and windows are always physical-pixel aligned, and not restricted to integer logical pixel positions. There's no blur or position-dependent +-1 px jank. Fractional-scale-aware clients remain crisp at any scale.
Here's a demo of going through every single currently representable fractional scale factor between 100% and 200% where everything remains crisp, including a 1 px checkerboard in mpv. Watch it in the native 1920×1080 resolution if you want to see the checkerboard correctly.
niri-scale.mp4
As a bonus, you can set the scale to a value below 1, which will make things smaller and give you more space. This could be useful in specific cases like monitors with very big pixel size, but it will lose you some image crispness.
Fractional Layout
As previously mentioned, niri layout now completely operates in floating-point. While fractional scaling benefits the most from this, fractional layout is also useful for integer scales.
Concretely, you can now set border and focus ring width, gaps, struts to fractional values, which will round to physical pixels according to the monitor's scale factor. Which means you can have 1 px wide borders on a 200% monitor for example by setting the border width to 0.5.
The view position is also no longer restricted to integer logical pixels, so when you do a touchpad swipe gesture on a 200% monitor, windows will move in single physical pixel increments.
If you're interested in the technical details of how this works, check this wiki page.
Window Screencasts
You can now select an individual window to screencast through xdg-desktop-portal-gnome. You can resize windows, open pop-ups, use block-out rules, and it will all work correctly.
niri-window-screencast-2.mp4
This involved some refactoring of the PipeWire screencasting code in niri, most notably adding support for changing the video stream size on the fly. As a bonus, monitor screencasts will now also keep running through monitor resolution changes.
I still need to work out some details like frame callback delivery to obscured windows, but the current implementation should already work for a lot of use cases.
xdg-activation
@pcc implemented the xdg-activation-v1 protocol which allows apps to pass focus to other apps. For example, clicking on a link in a GTK 4 app will now automatically focus your browser, switching the workspace if necessary.
niri-xdg-activation.mp4
This protocol is also used by clients to indicate urgency; this part is not implemented yet (but planned).
Workspace Switch Mouse Gesture
Last release I added the horizontal Mod + middle mouse drag gesture to scroll the view. This release I also added the vertical drag gesture to switch workspaces, just like on a touchpad you can swipe both horizontally and vertically.
niri-vertical-mouse-gesture.mp4
Other improvements in this release
focus-window-{up,down}-or-column-{left,right}
which allow traversing all windows on a workspace in order (thanks @minego).focus-column-right-or-first
,focus-column-left-or-last
which allow the focus to loop around (thanks @sullyj3).focus-column-or-monitor-left
andfocus-column-or-monitor-right
that switch the monitor upon reaching the end of the workspace.niri msg focused-output
which returns information about the currently focused output (thanks @rustysec).off
flag to disable input devices (thanks @yuja).left-handed
flag to touchpad, mouse, tablet input config.scroll-method
property to touchpad, mouse, trackpoint input config (thanks @yuja).disabled-on-external-mouse
flag to touchpad input config (thanks @yuja).$NIRI_CONFIG
, to help with nix wrappers. The--config
flag still takes precedence (thanks @sodiboo).map-to-output
to map to a union rectangle across all outputs. This makes Open Tablet Driver work.scale 2
will work.focus-window-or-workspace-{up,down}
missing the workspace switch animation.keyboard
config section is missing.This discussion was created from the release v0.1.7.
Beta Was this translation helpful? Give feedback.
All reactions