60 lines
2.1 KiB
QML
60 lines
2.1 KiB
QML
// FloatingActionButton.qml from end-4 https://github.com/end-4/dots-hyprland/blob/eac4ab3e3c249008d9596023f79dbc2d31012600/.config/quickshell/ii/modules/common/widgets/FloatingActionButton.qml
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import qs.common
|
|
import qs.common.widgets
|
|
|
|
/**
|
|
* Material 3 FAB.
|
|
*/
|
|
RippleButton {
|
|
id: root
|
|
property string iconText: "add"
|
|
property bool expanded: false
|
|
property real baseSize: 56
|
|
property real elementSpacing: 5
|
|
implicitWidth: Math.max(contentRowLayout.implicitWidth + 10 * 2, baseSize)
|
|
implicitHeight: baseSize
|
|
buttonRadius: Appearance.rounding.small
|
|
colBackground: Appearance.colors.colPrimaryContainer
|
|
colBackgroundHover: Appearance.colors.colPrimaryContainerHover
|
|
colRipple: Appearance.colors.colPrimaryContainerActive
|
|
contentItem: RowLayout {
|
|
id: contentRowLayout
|
|
property real horizontalMargins: (root.baseSize - icon.width) / 2
|
|
anchors {
|
|
verticalCenter: parent?.verticalCenter
|
|
left: parent?.left
|
|
leftMargin: contentRowLayout.horizontalMargins
|
|
}
|
|
spacing: 0
|
|
|
|
MaterialSymbol {
|
|
id: icon
|
|
Layout.fillWidth: true
|
|
horizontalAlignment: Text.AlignHCenter
|
|
iconSize: 24
|
|
color: Appearance.colors.colOnPrimaryContainer
|
|
text: root.iconText
|
|
}
|
|
Loader {
|
|
active: true
|
|
sourceComponent: Revealer {
|
|
visible: root.expanded || implicitWidth > 0
|
|
reveal: root.expanded
|
|
implicitWidth: reveal ? (buttonText.implicitWidth + root.elementSpacing + contentRowLayout.horizontalMargins) : 0
|
|
StyledText {
|
|
id: buttonText
|
|
anchors {
|
|
left: parent.left
|
|
leftMargin: root.elementSpacing
|
|
}
|
|
text: root.buttonText
|
|
color: Appearance.colors.colOnPrimaryContainer
|
|
font.pixelSize: 14
|
|
font.weight: 450
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |