import QtQuick import QtQuick.Shapes import ZShell.Config import qs.Services Shape { id: root property real amplitude: 3 property color color: Colors.palette.m3surfaceContainer readonly property real waveHeight: amplitude * 2 property int waves: 4 asynchronous: true preferredRendererType: Shape.CurveRenderer ShapePath { fillColor: root.color strokeColor: "transparent" strokeWidth: 0 Behavior on fillColor { CAnim { } } PathSvg { path: { const w = root.width; const h = root.height; const a = root.amplitude; const n = Math.max(1, root.waves); const wl = w / n; const half = wl / 2; let d = `M 0,${a} `; for (let i = 0; i < n; ++i) { const x = i * wl; d += `Q ${x + half / 2},${-a} ${x + half},${a} `; d += `Q ${x + half + half / 2},${3 * a} ${x + wl},${a} `; } d += `L ${w},${h} L 0,${h} Z`; return d; } } } }