mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
quickshell and hyprland additions
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user