47 lines
1.2 KiB
QML
47 lines
1.2 KiB
QML
import QtQuick
|
|
import QtQuick.Shapes
|
|
import qs.components
|
|
import qs.services
|
|
|
|
Shape {
|
|
id: root
|
|
|
|
property color color: Colours.palette.m3surfaceContainer
|
|
property int waves: 4
|
|
property real amplitude: 3
|
|
|
|
readonly property real waveHeight: amplitude * 2
|
|
|
|
preferredRendererType: Shape.CurveRenderer
|
|
asynchronous: true
|
|
|
|
ShapePath {
|
|
strokeWidth: 0
|
|
strokeColor: "transparent"
|
|
fillColor: root.color
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
Behavior on fillColor {
|
|
CAnim {}
|
|
}
|
|
}
|
|
}
|