Carry the wallpaper wipe across every monitor instead of restarting it on each one #10678
sven-strothoff
started this conversation in
Suggestions
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
The wallpaper wipe is the thing that made me stop and look the first time I
changed a theme on Omarchy. It isn't a crossfade and it isn't a swap — it's
a tilted front that opens out of the middle of the screen and pushes the old
wallpaper off both edges. It reads as one deliberate gesture, and it makes
changing a theme feel like an event instead of a settings change. Whoever
built it got something right.
On one screen it's perfect. On two, the illusion breaks — and I think it
breaks in a way that's worth fixing, because the effect is so close to
working across a whole desk.
Right now each output opens its own front at its own centre. So instead of
one gesture you get two unrelated ones firing at the same time, and the
whole thing collapses back into "the wallpaper changed."
The suggestion: make the layout the stage instead of the individual
output. The front starts at the centre of the output you were actually
working on when you changed the wallpaper or theme, and continues onto the
others — arriving from whichever edge faces the output you started on, at
the vertical offset your layout implies. Two competing animations become
one front crossing the desk, which is what the effect was always reaching
for.
Three things I think make it feel right rather than just "bigger":
when the transition begins. Change your theme on the laptop and the front
opens there and travels out to the external; do it on the external and it
goes the other way. That's the same reason it works on a single screen —
it begins where your attention already is.
coordinates, so stacked, offset, mismatched-height and mismatched-resolution
arrangements are followed rather than approximated — including a gap
between two outputs, where the front spends a moment crossing the space,
exactly as it would if the desk were one surface. The flip side: it's only
as right as your layout is. If your outputs aren't arranged in
monitors.luathe way they physically sit, the front crosses them in theorder the compositor believes in. Arguably a feature — it gives you a
visible reason to fix your layout.
trigger it from, the geometry reduces to exactly the current
single-screen wipe. Single-monitor setups are untouched.
I've implemented it, and it's up as a draft PR: #10677
Both the behaviour and the duration are configurable there
(
background.transition=layout|output, andbackground.transitionDuration), withoutputreproducing today'sper-output wipe exactly, so nothing is locked in. The one number I hold
loosely is the duration cap — covering a longer path in the original 420ms
makes the front several times faster, so the duration scales with distance,
capped at 900ms. That cap is a judgement call and I'd happily take a
different one.
Worth knowing if you try it: it needs the two fixes in #10660 to be visible
at all. The wipe currently only animates on one output for two independent
reasons (a reveal guard that locks out every output but the first to decode,
and a mask kept outside the render tree so idle outputs never repaint), so a
front that crosses outputs is invisible everywhere except its origin until
those are fixed.
Happy to take this in a different direction, or to hear that it's not
wanted — mainly I wanted to raise it, because the original effect deserves
to work across the whole desk.
All reactions