diff options
| -rw-r--r-- | AGENTS.md | 11 | ||||
| -rw-r--r-- | desktop/modules/appearance/README.md | 38 |
2 files changed, 33 insertions, 16 deletions
@@ -13,8 +13,8 @@ modules. desktop/ the drawer (SUPER alone): user details, sound, mail, VMs, status, performance, clipboard, updates; and the settings - window for pages set once: wallpaper, theme, theme status, icons, - sunset, idle (the former appearance shell), notifications, autostart, shells, + window for pages set once: wallpaper, transitions, theme, theme status, + icons, sunset, idle (the former appearance shell), notifications, autostart, shells, the assistant's daemon and presets, qtmaildir, git, Hyprland's keyboard shortcuts, options and monitors, fonts island/ top-centre pills on DP-1: clock, volume, tray, layout, privacy, @@ -81,6 +81,13 @@ returns 144. Always `-x`, never `-f`. For anything visual, ask. Screenshots of a transient OSD are a race, and the user has the screen. +**A shader can be checked headless, but not with `QT_QPA_PLATFORM=offscreen`.** +That is the software backend, where a `ShaderEffect` draws nothing, so the new +picture shows through and an "is the end frame the new picture" check passes +for every shader while proving nothing. Run Qt's `qml` tool under `Xvfb` with +`QT_QPA_PLATFORM=xcb LIBGL_ALWAYS_SOFTWARE=1`, which gives llvmpipe, and compare +`grabToImage` frames; `QSG_INFO=1` prints the backend. + ## Per-component notes Each directory's README carries its own, and they are worth reading before diff --git a/desktop/modules/appearance/README.md b/desktop/modules/appearance/README.md index 59868b4..ab61811 100644 --- a/desktop/modules/appearance/README.md +++ b/desktop/modules/appearance/README.md @@ -156,20 +156,30 @@ which screen is targeted. Their proportions come from the pane **width**, not its height. Scaling the stand off height gave the wide monitor a 20px stand that was invisible and would have given the vertical one an absurd long neck. -### The burn - -Apply, and every engine change, burns the old picture away over the new -one (`WallpaperSpread.qml`, `burn.frag`). swaybg has no transitions, and -wallp kills one and starts another, so a surface on the bottom layer of each -screen, above swaybg and below every window, holds the old picture over the -swap. `Wallpapers.run()` emits `swapping`, then waits for each cover to call -`covered()` (both its pictures decoded, then 50ms for a few frames) before -it starts wallp, with a 1.5s fallback for a cover that never comes. Started -any earlier, the new picture showed through for a moment before the burn. -The images stay hidden until both are decoded for the same reason: the new -one usually lands first. A set from a terminal gets no burn. After editing -`burn.frag`, recompile with `qsb --qt6 -o burn.frag.qsb burn.frag` under a -new name or restart the shell: a running shell keeps a shader by URL. +### Transitions + +Apply, and every engine change, plays a transition over the swap, the old +picture giving way to the new one (`WallpaperSpread.qml`, `WallShader.qml`, +one `.frag` each: burn, ink, shatter, ripple, melt, blinds, crosswarp). The +Transitions page picks one, or Random, which draws from the ticked ones and +never repeats the last. Clicking a tile plays it between the two current +wallpapers through the same shader. Both screens play the same one in a run. +Each shader must draw the old picture exactly at `progress` 0 and the new one +at 1, or the cover pops as it comes and goes. Pictures reach a shader through +a layer, since an `Image` sampled directly gives the whole picture and not its +crop. + +swaybg has no transitions, and wallp kills one and starts another, so a +surface on the bottom layer of each screen, above swaybg and below every +window, holds the old picture over the swap. `Wallpapers.run()` emits +`swapping`, then waits for each cover to call `covered()` (both its pictures +decoded, then 50ms for a few frames) before it starts wallp, with a 1.5s +fallback for a cover that never comes. Started any earlier, the new picture +showed through for a moment before the transition. The images stay hidden +until both are decoded for the same reason: the new one usually lands first. +A set from a terminal gets no transition. After editing a `.frag`, recompile +with `qsb --qt6 -o <name>.frag.qsb <name>.frag` under a new name or restart +the shell: a running shell keeps a shader by URL. ## Wallpaper engine |
