Skip to content

v2.3.10-beta — Water ripple is now actual BG refraction

Pre-release
Pre-release

Choose a tag to compare

@Delido Delido released this 17 Jun 12:31
· 6 commits to main since this release

The v2.3.3-beta "Water ripple" mode was three concentric outline strokes per click. Visually it read as an inflated click ring, not as water. Rebuilt from the ground up to use real SVG-displacement refraction on the wallpaper image.

Changed — Water ripple uses SVG feDisplacementMap on #bg

New water IIFE module owns its own SVG <filter id="pixelfx-water-filter"> with feImage + feDisplacementMap (scale=80), applied via body.fx-pixelfx-water #bg. Only the BG image gets the filter — the glow bars stay stable so they don't read as part of the wave.

Per-click behavior:

  • Two staggered ripples spawn per click (the second 0.12 s behind the first → single click produces a visible follow-up wave)
  • rAF chain paints expanding ring fronts into a 256×256 displacement-map canvas
  • 48 angular slices per ripple: outer band encodes radial outward push (R/G shifted by +cos θ × amp / +sin θ × amp), inner band encodes radial inward pull (opposite sign)
  • Activity-gated toDataURL + setAttribute("href") — encoding stops when the last ripple expires (gotcha-uncapped-raf-dpr pattern, same memory discipline Liquid Distortion already uses)

Architecture mirrors the existing Liquid Distortion (mousefx.ripple) which uses the same SVG-displacement technique for cursor-driven ripples — but with a separate filter ID so both effects can run independently.

The pixelfx canvas is stopped (backing buffer → 1×1) in water mode since it no longer participates in the render.

Visual result

The wallpaper image actually bends along a propagating wave front. Reads as water on the surface of your screen, not as a colored halo on top.

Upgrade

Wallpaper bundle re-import required. Tray → Re-import wallpaper bundles.

Beta — no winget submission, GitHub Releases only.