Files
illogical-impulse/.config/quickshell/oo/modules/common/widgets/HexRect.qml
T
2025-07-27 08:52:38 +07:00

50 lines
2.1 KiB
QML

import QtQuick
import QtQuick.Shapes
/**
* Draws a hexagon when width == height.
* Otherwise the hexagon is extended
*/
Item {
id: root
property real radius: Math.min(width, height) / 2
property real cornerRounding: radius * 0.5
property color color: "#b7eb34"
property real borderWidth: cornerRounding
property color borderColor: color
Shape {
id: hexShape
anchors.fill: parent
preferredRendererType: Shape.CurveRenderer
ShapePath {
id: hexPath
fillColor: root.color
strokeColor: root.borderColor
strokeWidth: root.borderWidth
capStyle: ShapePath.RoundCap
joinStyle: ShapePath.RoundJoin
property real r: root.radius
property real r60: r * Math.sqrt(3) / 2
property real r30: r / 2
property real cr: root.cornerRounding
property real cr60: cr * Math.sqrt(3) / 2
property real cr30: cr / 2
property real lineWidthAdjustment: strokeWidth / 2
property real lineWidthAdjustment60: lineWidthAdjustment * Math.sqrt(3) / 2
property real lineWidthAdjustment30: lineWidthAdjustment / 2
startX: hexPath.r; startY: lineWidthAdjustment;
PathLine { x: hexPath.r + hexPath.r60 - hexPath.lineWidthAdjustment60; y: hexShape.height / 2 - hexPath.r30 + hexPath.lineWidthAdjustment30 }
PathLine { x: hexPath.r + hexPath.r60 - hexPath.lineWidthAdjustment60; y: hexShape.height / 2 + hexPath.r30 - hexPath.lineWidthAdjustment30 }
PathLine { x: hexPath.r; y: hexShape.height - hexPath.lineWidthAdjustment }
PathLine { x: hexPath.r - hexPath.r60 + hexPath.lineWidthAdjustment60; y: hexShape.height - hexPath.r30 - hexPath.lineWidthAdjustment30 }
PathLine { x: hexPath.r - hexPath.r60 + hexPath.lineWidthAdjustment60; y: hexPath.r30 + hexPath.lineWidthAdjustment30 }
// Close the path
PathLine { x: hexPath.r; y: hexPath.lineWidthAdjustment }
}
}
}