diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-04-28 00:21:53 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-04-28 00:21:53 +1000 |
| commit | cba440bcfced79eda2764e441c68239b6c594457 (patch) | |
| tree | 15e72a41a47015a1440a7c6b54c51d8f182ebe24 /widgets/BoxLayout.qml | |
| parent | hyprland: use qs hyprland service (diff) | |
| download | caelestia-shell-cba440bcfced79eda2764e441c68239b6c594457.tar.gz caelestia-shell-cba440bcfced79eda2764e441c68239b6c594457.tar.bz2 caelestia-shell-cba440bcfced79eda2764e441c68239b6c594457.zip | |
feat: anims + box padding
box provide padding and animate size and colour
provide box and boxlayout for with/without layout
provide clippingbox
provide label for anim + rendertype
configure QtQuick controls
Diffstat (limited to 'widgets/BoxLayout.qml')
| -rw-r--r-- | widgets/BoxLayout.qml | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/widgets/BoxLayout.qml b/widgets/BoxLayout.qml new file mode 100644 index 0000000..12aa4f7 --- /dev/null +++ b/widgets/BoxLayout.qml @@ -0,0 +1,97 @@ +import "root:/config" +import QtQuick +import QtQuick.Layouts + +Rectangle { + 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 + + color: "transparent" + + implicitWidth: layout.implicitWidth + paddingX + implicitHeight: layout.implicitHeight + paddingY + + 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; + } + + default property alias children: layout.children + + GridLayout { + id: layout + + x: root.paddingLeft + y: root.paddingTop + + flow: root.vertical ? GridLayout.TopToBottom : GridLayout.LeftToRight + uniformCellWidths: root.homogenous || root.vertical + uniformCellHeights: root.homogenous || !root.vertical + rows: root.vertical ? -1 : 1 + columns: root.vertical ? 1 : -1 + rowSpacing: root.spacing + columnSpacing: root.spacing + } + + 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 + } + } +} |