quickshell and hyprland additions

This commit is contained in:
2026-03-15 13:56:00 +02:00
parent c9c27d1554
commit 1ad06b82a6
509 changed files with 68371 additions and 19 deletions

View File

@@ -0,0 +1,185 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import qs.config
import qs.modules.functions
Control {
id: root
property alias text: label.text
property string icon: ""
property int iconSize: Metrics.iconSize(20)
property alias radius: background.radius
property alias topLeftRadius: background.topLeftRadius
property alias topRightRadius: background.topRightRadius
property alias bottomLeftRadius: background.bottomLeftRadius
property alias bottomRightRadius: background.bottomRightRadius
property bool checkable: false
property bool checked: true
property bool secondary: false
property string tooltipText: ""
property bool usePrimary: secondary ? false : checked
property color base_bg: usePrimary ? Appearance.m3colors.m3primary : Appearance.m3colors.m3secondaryContainer
property color base_fg: usePrimary ? Appearance.m3colors.m3onPrimary : Appearance.m3colors.m3onSecondaryContainer
property color disabled_bg: ColorUtils.transparentize(base_bg, 0.4)
property color disabled_fg: ColorUtils.transparentize(base_fg, 0.4)
property color hover_bg: Qt.lighter(base_bg, 1.1)
property color pressed_bg: Qt.darker(base_bg, 1.2)
property color backgroundColor: !root.enabled ? disabled_bg : mouse_area.pressed ? pressed_bg : mouse_area.containsMouse ? hover_bg : base_bg
property color textColor: !root.enabled ? disabled_fg : base_fg
property bool beingHovered: mouse_area.containsMouse
signal clicked()
signal toggled(bool checked)
implicitWidth: (label.text === "" && icon !== "") ? implicitHeight : row.implicitWidth + implicitHeight
implicitHeight: 40
MouseArea {
id: mouse_area
anchors.fill: parent
hoverEnabled: root.enabled
cursorShape: root.enabled ? Qt.PointingHandCursor : Qt.ForbiddenCursor
onClicked: {
if (!root.enabled)
return ;
if (root.checkable) {
root.checked = !root.checked;
root.toggled(root.checked);
}
root.clicked();
}
}
HoverHandler {
id: hover
enabled: root.tooltipText !== ""
}
LazyLoader {
active: root.tooltipText !== ""
StyledPopout {
hoverTarget: hover
hoverDelay: Metrics.chronoDuration(500)
Component {
StyledText {
text: root.tooltipText
}
}
}
}
contentItem: Item {
anchors.fill: parent
Row {
id: row
anchors.centerIn: parent
spacing: root.icon !== "" && label.text !== "" ? 5 : 0
MaterialSymbol {
visible: root.icon !== ""
icon: root.icon
font.pixelSize: root.iconSize
color: root.textColor
anchors.verticalCenter: parent.verticalCenter
Behavior on color {
ColorAnimation {
duration: Metrics.chronoDuration("small") / 2
easing.type: Appearance.animation.easing
}
}
}
StyledText {
id: label
color: root.textColor
anchors.verticalCenter: parent.verticalCenter
elide: Text.ElideRight
Behavior on color {
ColorAnimation {
duration: Metrics.chronoDuration("small") / 2
easing.type: Appearance.animation.easing
}
}
}
}
}
background: Rectangle {
id: background
radius: Metrics.radius("large")
color: root.backgroundColor
Behavior on color {
ColorAnimation {
duration: Metrics.chronoDuration("small") / 2
easing.type: Appearance.animation.easing
}
}
Behavior on radius {
NumberAnimation {
duration: Metrics.chronoDuration("small") / 2
easing.type: Appearance.animation.easing
}
}
Behavior on topLeftRadius {
NumberAnimation {
duration: Metrics.chronoDuration("small")
easing.type: Appearance.animation.easing
}
}
Behavior on topRightRadius {
NumberAnimation {
duration: Metrics.chronoDuration("small")
easing.type: Appearance.animation.easing
}
}
Behavior on bottomLeftRadius {
NumberAnimation {
duration: Metrics.chronoDuration("small")
easing.type: Appearance.animation.easing
}
}
Behavior on bottomRightRadius {
NumberAnimation {
duration: Metrics.chronoDuration("small")
easing.type: Appearance.animation.easing
}
}
}
}