87 lines
2.5 KiB
QML
87 lines
2.5 KiB
QML
import "root:/config"
|
|
import Quickshell.Widgets
|
|
import QtQuick
|
|
|
|
ClippingRectangle {
|
|
id: root
|
|
|
|
property bool vertical: false
|
|
property bool homogenous: false
|
|
property bool animated: false
|
|
property int spacing: Appearance.spacing.small
|
|
property var padding: 0
|
|
|
|
readonly property int paddingTop: getRealPadding().top
|
|
readonly property int paddingRight: getRealPadding().right
|
|
readonly property int paddingBottom: getRealPadding().bottom
|
|
readonly property int paddingLeft: getRealPadding().left
|
|
readonly property int paddingX: getRealPadding().x
|
|
readonly property int paddingY: getRealPadding().y
|
|
|
|
function getRealPadding() {
|
|
const pad = {};
|
|
|
|
if (Array.isArray(padding)) {
|
|
if (padding.length === 2) {
|
|
pad.top = pad.bottom = padding[0];
|
|
pad.left = pad.right = padding[1];
|
|
} else if (padding.length === 3) {
|
|
pad.top = padding[0];
|
|
pad.left = pad.right = padding[1];
|
|
pad.bottom = padding[2];
|
|
} else if (padding.length === 4) {
|
|
pad.top = padding[0];
|
|
pad.right = padding[1];
|
|
pad.bottom = padding[2];
|
|
pad.left = padding[3];
|
|
}
|
|
} else {
|
|
pad.top = pad.bottom = pad.left = pad.right = padding;
|
|
}
|
|
|
|
pad.x = pad.left + pad.right;
|
|
pad.y = pad.top + pad.bottom;
|
|
|
|
return pad;
|
|
}
|
|
|
|
color: "transparent"
|
|
|
|
implicitWidth: childrenRect.width + paddingX
|
|
implicitHeight: childrenRect.height + paddingY
|
|
|
|
onChildrenChanged: {
|
|
for (const child of children) {
|
|
child.x = Qt.binding(() => paddingLeft);
|
|
child.y = Qt.binding(() => paddingTop);
|
|
}
|
|
}
|
|
|
|
Behavior on color {
|
|
ColorAnimation {
|
|
duration: Appearance.anim.durations.normal
|
|
easing.type: Easing.BezierSpline
|
|
easing.bezierCurve: Appearance.anim.curves.standard
|
|
}
|
|
}
|
|
|
|
Behavior on implicitWidth {
|
|
enabled: root.animated
|
|
|
|
NumberAnimation {
|
|
duration: Appearance.anim.durations.normal
|
|
easing.type: Easing.BezierSpline
|
|
easing.bezierCurve: Appearance.anim.curves.emphasized
|
|
}
|
|
}
|
|
|
|
Behavior on implicitHeight {
|
|
enabled: root.animated
|
|
|
|
NumberAnimation {
|
|
duration: Appearance.anim.durations.normal
|
|
easing.type: Easing.BezierSpline
|
|
easing.bezierCurve: Appearance.anim.curves.emphasized
|
|
}
|
|
}
|
|
}
|