forked from Shinonome/dots-hyprland
82 lines
2.3 KiB
QML
82 lines
2.3 KiB
QML
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
import qs.modules.common
|
|
import qs.modules.common.functions
|
|
import qs.modules.waffle.looks
|
|
|
|
Button {
|
|
id: root
|
|
|
|
property var altAction: () => {}
|
|
property var middleClickAction: () => {}
|
|
|
|
property color colBackground: ColorUtils.transparentize(Looks.colors.bg1)
|
|
property color colBackgroundHover: Looks.colors.bg1Hover
|
|
property color colBackgroundActive: Looks.colors.bg1Active
|
|
property color colBackgroundBorder
|
|
property color color
|
|
Layout.fillHeight: true
|
|
topInset: 4
|
|
bottomInset: 4
|
|
|
|
signal hoverTimedOut()
|
|
property bool shouldShowTooltip: false
|
|
property Timer hoverTimer: Timer {
|
|
id: hoverTimer
|
|
running: root.hovered
|
|
interval: 400
|
|
onTriggered: {
|
|
root.hoverTimedOut()
|
|
}
|
|
}
|
|
onHoverTimedOut: {
|
|
root.shouldShowTooltip = true
|
|
}
|
|
onHoveredChanged: {
|
|
if (!root.hovered) {
|
|
root.shouldShowTooltip = false
|
|
root.hoverTimer.stop()
|
|
}
|
|
}
|
|
|
|
colBackgroundBorder: ColorUtils.transparentize(Looks.colors.bg1Border, (root.checked || root.hovered) ? Looks.contentTransparency : 1)
|
|
color: {
|
|
if (root.down) {
|
|
return root.colBackgroundActive
|
|
} else if ((root.hovered && !root.down) || root.checked) {
|
|
return root.colBackgroundHover
|
|
} else {
|
|
return root.colBackground
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
|
onPressed: (event) => {
|
|
root.down = true;
|
|
}
|
|
onReleased: (event) => {
|
|
root.down = false;
|
|
}
|
|
onClicked: (event) => {
|
|
if (event.button === Qt.LeftButton) root.clicked();
|
|
if (event.button === Qt.RightButton) root.altAction();
|
|
if (event.button === Qt.MiddleButton) root.middleClickAction();
|
|
}
|
|
}
|
|
|
|
background: AcrylicRectangle {
|
|
shiny: ((root.hovered && !root.down) || root.checked)
|
|
color: root.color
|
|
radius: Looks.radius.medium
|
|
border.width: 1
|
|
border.color: root.colBackgroundBorder
|
|
|
|
Behavior on border.color {
|
|
animation: Looks.transition.color.createObject(this)
|
|
}
|
|
}
|
|
}
|