Build the Panama Hyprland desktop
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
// A GNOME-style quick-settings tile: big rounded button with an icon and a
|
||||
// label, filled with the accent colour when active.
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Widgets
|
||||
import qs.config
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
|
||||
property string icon: "" // freedesktop icon name
|
||||
property string label: ""
|
||||
property string sublabel: ""
|
||||
property bool active: false
|
||||
property bool enabled: true
|
||||
|
||||
signal toggled
|
||||
// Emitted on right-click / long press — used to open the relevant detail
|
||||
// panel (pick a wifi network, pick an output device).
|
||||
signal expanded
|
||||
|
||||
implicitWidth: 168
|
||||
implicitHeight: 56
|
||||
radius: Theme.cardRadius
|
||||
border.width: 0
|
||||
|
||||
opacity: enabled ? 1.0 : 0.45
|
||||
|
||||
color: {
|
||||
if (root.active)
|
||||
return mouse.containsMouse ? Qt.lighter(Theme.accent, 1.12) : Theme.accent;
|
||||
if (mouse.pressed)
|
||||
return Theme.alpha(Theme.fg, Theme.activeAlpha);
|
||||
if (mouse.containsMouse)
|
||||
return Theme.alpha(Theme.fg, Theme.hoverAlpha);
|
||||
return Theme.alpha(Theme.fg, 0.07);
|
||||
}
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Theme.durFast
|
||||
}
|
||||
}
|
||||
|
||||
readonly property color contentColor: root.active ? Theme.bgDark : Theme.fg
|
||||
|
||||
Row {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 12
|
||||
anchors.rightMargin: 12
|
||||
spacing: 10
|
||||
|
||||
// ThemedIcon, not a bare IconImage: Adwaita's symbolic SVGs carry a
|
||||
// hardcoded #2e3436 fill and Qt does not recolour them the way GTK
|
||||
// does, so drawn directly they are all but invisible on this palette.
|
||||
ThemedIcon {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
size: 22
|
||||
icon: root.icon
|
||||
tint: root.contentColor
|
||||
visible: root.icon !== ""
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 1
|
||||
|
||||
Text {
|
||||
text: root.label
|
||||
color: root.contentColor
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSize
|
||||
font.weight: Font.Medium
|
||||
elide: Text.ElideRight
|
||||
width: Math.min(implicitWidth, 108)
|
||||
}
|
||||
|
||||
Text {
|
||||
text: root.sublabel
|
||||
visible: root.sublabel !== ""
|
||||
color: root.active ? Theme.alpha(Theme.bgDark, 0.7) : Theme.fgDim
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
elide: Text.ElideRight
|
||||
width: Math.min(implicitWidth, 108)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouse
|
||||
anchors.fill: parent
|
||||
enabled: root.enabled
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: event => {
|
||||
if (event.button === Qt.RightButton)
|
||||
root.expanded();
|
||||
else
|
||||
root.toggled();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user