forked from Shinonome/dots-hyprland
40 lines
1.4 KiB
QML
40 lines
1.4 KiB
QML
import QtQuick
|
|
import QtQuick.Shapes
|
|
import Quickshell
|
|
import qs.modules.common
|
|
import qs.modules.common.widgets.shapes
|
|
import "shapes/geometry/offset.js" as Offset
|
|
import "shapes/shapes/corner-rounding.js" as CornerRounding
|
|
import "shapes/shapes/rounded-polygon.js" as RoundedPolygon
|
|
import "shapes/material-shapes.js" as MaterialShapes
|
|
|
|
Item {
|
|
id: root
|
|
property int sides: 12
|
|
property int implicitSize: 100
|
|
property alias color: shapeCanvas.color
|
|
|
|
implicitWidth: implicitSize
|
|
implicitHeight: implicitSize
|
|
|
|
property var cornerRounding: new CornerRounding.CornerRounding((sides < 17 ? 1.5 : 1.1) / Math.max(sides, 1))
|
|
|
|
ShapeCanvas {
|
|
id: shapeCanvas
|
|
anchors.fill: parent
|
|
roundedPolygon: switch(sides) {
|
|
case 0: return MaterialShapes.getCircle();
|
|
case 1: return MaterialShapes.getCircle();
|
|
case 4: return MaterialShapes.getCookie4Sided();
|
|
case 6: return MaterialShapes.getCookie6Sided();
|
|
case 7: return MaterialShapes.getCookie7Sided();
|
|
case 9: return MaterialShapes.getCookie9Sided();
|
|
case 12: return MaterialShapes.getCookie12Sided();
|
|
default: return RoundedPolygon.RoundedPolygon.star(sides, 1, 0.8, root.cornerRounding)
|
|
.transformed((x, y) => MaterialShapes.rotate30.map(new Offset.Offset(x, y)))
|
|
.normalized();
|
|
}
|
|
}
|
|
}
|
|
|