initial commit
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import QtQuick
|
||||
import qs.config
|
||||
|
||||
// Shared hover/press surface used by every clickable thing on the panel.
|
||||
//
|
||||
// Content is placed at its natural size inside `holder`, which then drives the
|
||||
// button's implicit size. Content must not anchor to the holder or the size
|
||||
// binding becomes circular.
|
||||
Rectangle {
|
||||
id: root
|
||||
|
||||
property bool active: false
|
||||
property int minContentWidth: 0
|
||||
property alias acceptedButtons: mouse.acceptedButtons
|
||||
property alias containsMouse: mouse.containsMouse
|
||||
property color activeColor: Theme.surfaceActive
|
||||
|
||||
default property alias content: holder.data
|
||||
|
||||
// Decorations that should stretch across the whole button (underlines,
|
||||
// badges) go here instead of `content`, so they stay out of the size
|
||||
// calculation above.
|
||||
property alias overlay: overlayHolder.data
|
||||
|
||||
signal clicked(var event)
|
||||
|
||||
implicitWidth: Math.max(root.minContentWidth, holder.childrenRect.width) + Theme.padding * 2
|
||||
implicitHeight: holder.childrenRect.height + Theme.padding
|
||||
|
||||
radius: Theme.radius
|
||||
color: root.active ? root.activeColor : mouse.containsMouse ? Theme.surfaceHover : "transparent"
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Theme.animDuration
|
||||
easing.type: Theme.animEasing
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: holder
|
||||
|
||||
anchors.centerIn: parent
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
}
|
||||
|
||||
Item {
|
||||
id: overlayHolder
|
||||
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouse
|
||||
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton
|
||||
onClicked: event => root.clicked(event)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user