Files
2025-07-17 20:24:01 +07:00

59 lines
1.7 KiB
QML

import qs.modules.common
import qs.modules.common.widgets
import QtQuick
import QtQuick.Layouts
RippleButton {
id: button
property string buttonIcon
property string buttonText
property bool keyboardDown: false
property real size: 120
buttonRadius: (button.focus || button.down) ? size / 2 : Appearance.rounding.verylarge
colBackground: button.keyboardDown ? Appearance.colors.colSecondaryContainerActive :
button.focus ? Appearance.colors.colPrimary :
Appearance.colors.colSecondaryContainer
colBackgroundHover: Appearance.colors.colPrimary
colRipple: Appearance.colors.colPrimaryActive
property color colText: (button.down || button.keyboardDown || button.focus || button.hovered) ?
Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer0
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
background.implicitHeight: size
background.implicitWidth: size
Behavior on buttonRadius {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
}
Keys.onPressed: (event) => {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
keyboardDown = true
button.clicked()
event.accepted = true;
}
}
Keys.onReleased: (event) => {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
keyboardDown = false
event.accepted = true;
}
}
contentItem: MaterialSymbol {
id: icon
anchors.fill: parent
color: button.colText
horizontalAlignment: Text.AlignHCenter
iconSize: 45
text: buttonIcon
}
StyledToolTip {
content: buttonText
}
}