65 lines
1.7 KiB
QML
65 lines
1.7 KiB
QML
import QtQuick
|
|
import "../../../config" as Cfg
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
property string icon: ""
|
|
property bool enabled: true
|
|
property bool primary: false
|
|
signal clicked()
|
|
|
|
property bool _hovered: false
|
|
|
|
readonly property var t: Cfg.Config.theme
|
|
|
|
width: primary ? 44 : 36
|
|
height: width
|
|
radius: width / 2
|
|
|
|
border.width: 1
|
|
scale: _hovered && enabled ? 1.08 : 1
|
|
|
|
readonly property color _bgDefault: enabled
|
|
? (primary ? t.accent : t.mprisBtnBg)
|
|
: "transparent"
|
|
readonly property color _bgHovered: primary
|
|
? Qt.lighter(t.accent, 1.2)
|
|
: t.mprisBtnBgHover
|
|
|
|
color: _hovered && enabled ? _bgHovered : _bgDefault
|
|
border.color: primary ? color : (
|
|
enabled
|
|
? (_hovered ? t.mprisBtnBorderHover : t.mprisBtnBorder)
|
|
: t.mprisBtnBorder
|
|
)
|
|
|
|
Behavior on color { ColorAnimation { duration: 150 } }
|
|
Behavior on border.color { ColorAnimation { duration: 150 } }
|
|
Behavior on scale { NumberAnimation { duration: 150; easing.type: Easing.OutBack } }
|
|
|
|
Text {
|
|
anchors.centerIn: parent
|
|
text: root.icon
|
|
color: root.primary ? root.t.mprisButtonText : (
|
|
root.enabled
|
|
? (root._hovered ? root.t.mprisBtnIconHover : root.t.mprisBtnIcon)
|
|
: root.t.mprisTextDim
|
|
)
|
|
font.pixelSize: primary ? 22 : 18
|
|
font.weight: Font.Bold
|
|
Behavior on color { ColorAnimation { duration: 150 } }
|
|
}
|
|
|
|
HoverHandler {
|
|
cursorShape: root.enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
onHoveredChanged: root._hovered = hovered
|
|
}
|
|
|
|
TapHandler {
|
|
onTapped: {
|
|
if (root.enabled) root.clicked()
|
|
}
|
|
}
|
|
}
|