2023-03-24 20:44:38 +08:00
|
|
|
|
import QtQuick
|
|
|
|
|
import QtQuick.Controls
|
|
|
|
|
import Qt5Compat.GraphicalEffects
|
2023-02-27 18:46:39 +08:00
|
|
|
|
|
2023-02-28 18:29:00 +08:00
|
|
|
|
Item{
|
|
|
|
|
id:root
|
|
|
|
|
property var radius:[0,0,0,0]
|
|
|
|
|
property color color : "#FFFFFF"
|
2023-03-03 18:19:48 +08:00
|
|
|
|
property bool shadow: true
|
2023-03-15 14:49:33 +08:00
|
|
|
|
default property alias contentItem: container.data
|
2023-02-28 18:29:00 +08:00
|
|
|
|
|
|
|
|
|
Rectangle{
|
|
|
|
|
id:container
|
|
|
|
|
width: root.width
|
|
|
|
|
height: root.height
|
2023-03-02 23:58:50 +08:00
|
|
|
|
opacity: 0
|
2023-02-28 18:29:00 +08:00
|
|
|
|
color:root.color
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-03 18:19:48 +08:00
|
|
|
|
FluShadow{
|
|
|
|
|
anchors.fill: container
|
|
|
|
|
radius: root.radius[0]
|
|
|
|
|
visible: {
|
|
|
|
|
if(root.radius[0] === root.radius[1] && root.radius[0] === root.radius[2] && root.radius[0] === root.radius[3] && root.shadow){
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-01 11:58:30 +08:00
|
|
|
|
Canvas {
|
|
|
|
|
id: canvas
|
|
|
|
|
anchors.fill: parent
|
2023-02-28 18:29:00 +08:00
|
|
|
|
visible: false
|
2023-03-01 11:58:30 +08:00
|
|
|
|
onPaint: {
|
|
|
|
|
var ctx = getContext("2d");
|
|
|
|
|
var x = 0;
|
|
|
|
|
var y = 0;
|
|
|
|
|
var w = root.width;
|
|
|
|
|
var h = root.height;
|
|
|
|
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
|
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
|
|
|
ctx.save();
|
|
|
|
|
ctx.beginPath();
|
|
|
|
|
ctx.moveTo(x + radius[0], y);
|
|
|
|
|
ctx.lineTo(x + w - radius[1], y);
|
|
|
|
|
ctx.arcTo(x + w, y, x + w, y + radius[1], radius[1]);
|
|
|
|
|
ctx.lineTo(x + w, y + h - radius[2]);
|
|
|
|
|
ctx.arcTo(x + w, y + h, x + w - radius[2], y + h, radius[2]);
|
|
|
|
|
ctx.lineTo(x + radius[3], y + h);
|
|
|
|
|
ctx.arcTo(x, y + h, x, y + h - radius[3], radius[3]);
|
|
|
|
|
ctx.lineTo(x, y + radius[0]);
|
|
|
|
|
ctx.arcTo(x, y, x + radius[0], y, radius[0]);
|
|
|
|
|
ctx.closePath();
|
|
|
|
|
ctx.fillStyle = root.color;
|
|
|
|
|
ctx.fill();
|
|
|
|
|
ctx.restore();
|
2023-02-28 18:29:00 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
OpacityMask {
|
|
|
|
|
anchors.fill: container
|
|
|
|
|
source: container
|
2023-03-01 11:58:30 +08:00
|
|
|
|
maskSource: canvas
|
2023-02-28 18:29:00 +08:00
|
|
|
|
}
|
2023-02-27 18:46:39 +08:00
|
|
|
|
|
|
|
|
|
}
|