mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 12:52:06 -04:00
100 lines
2.7 KiB
QML
100 lines
2.7 KiB
QML
import QtQuick
|
|
import qs.Common
|
|
import qs.Widgets
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
property string text: ""
|
|
property string iconName: ""
|
|
property int iconSize: Theme.iconSizeSmall
|
|
property bool enabled: true
|
|
property bool hovered: mouseArea.containsMouse
|
|
property bool pressed: mouseArea.pressed
|
|
property color backgroundColor: Theme.buttonBg
|
|
property color textColor: Theme.buttonText
|
|
property int buttonHeight: 40
|
|
property int horizontalPadding: Theme.spacingL
|
|
property bool enableScaleAnimation: false
|
|
property bool enableRipple: typeof SettingsData !== "undefined" ? (SettingsData.enableRippleEffects ?? true) : true
|
|
|
|
signal clicked
|
|
|
|
width: Math.max(contentRow.implicitWidth + horizontalPadding * 2, 64)
|
|
height: buttonHeight
|
|
radius: Theme.cornerRadius
|
|
color: backgroundColor
|
|
opacity: enabled ? 1 : 0.4
|
|
scale: (enableScaleAnimation && pressed) ? 0.98 : 1.0
|
|
|
|
Behavior on scale {
|
|
enabled: enableScaleAnimation && Theme.currentAnimationSpeed !== SettingsData.AnimationSpeed.None
|
|
DankAnim {
|
|
duration: 100
|
|
easing.bezierCurve: Theme.expressiveCurves.standard
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: stateLayer
|
|
anchors.fill: parent
|
|
radius: parent.radius
|
|
color: {
|
|
if (pressed)
|
|
return Theme.withAlpha(root.textColor, 0.20);
|
|
if (hovered)
|
|
return Theme.withAlpha(root.textColor, 0.12);
|
|
return "transparent";
|
|
}
|
|
|
|
Behavior on color {
|
|
ColorAnimation {
|
|
duration: Theme.shorterDuration
|
|
easing.type: Theme.standardEasing
|
|
}
|
|
}
|
|
}
|
|
|
|
DankRipple {
|
|
id: rippleLayer
|
|
rippleColor: root.textColor
|
|
cornerRadius: root.radius
|
|
enableRipple: root.enableRipple
|
|
}
|
|
|
|
Row {
|
|
id: contentRow
|
|
anchors.centerIn: parent
|
|
spacing: Theme.spacingS
|
|
|
|
DankIcon {
|
|
name: root.iconName
|
|
size: root.iconSize
|
|
color: root.textColor
|
|
visible: root.iconName !== ""
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
|
|
StyledText {
|
|
text: root.text
|
|
font.pixelSize: Theme.fontSizeMedium
|
|
font.weight: Font.Medium
|
|
color: root.textColor
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
id: mouseArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
enabled: root.enabled
|
|
onPressed: mouse => {
|
|
if (root.enableRipple)
|
|
rippleLayer.trigger(mouse.x, mouse.y);
|
|
}
|
|
onClicked: root.clicked()
|
|
}
|
|
}
|