mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
164 lines
6.2 KiB
QML
164 lines
6.2 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Wayland
|
|
import qs.config
|
|
import qs.services
|
|
import qs.modules.components
|
|
|
|
Scope {
|
|
id: root
|
|
|
|
GothCorners {
|
|
opacity: ConfigResolver.bar(bar.displayName).gothCorners && !ConfigResolver.bar(bar.displayName).floating && ConfigResolver.bar(bar.displayName).enabled && !ConfigResolver.bar(bar.displayName).merged ? 1 : 0
|
|
}
|
|
|
|
Variants {
|
|
model: Quickshell.screens
|
|
|
|
PanelWindow {
|
|
// some exclusiveSpacing so it won't look like its sticking into the window when floating
|
|
|
|
id: bar
|
|
|
|
required property var modelData
|
|
property string displayName: modelData.name
|
|
property int rd: ConfigResolver.bar(displayName).radius * Config.runtime.appearance.rounding.factor // So it won't be modified when factor is 0
|
|
property int margin: ConfigResolver.bar(displayName).margins
|
|
property bool floating: ConfigResolver.bar(displayName).floating
|
|
property bool merged: ConfigResolver.bar(displayName).merged
|
|
property string pos: ConfigResolver.bar(displayName).position
|
|
property bool vertical: pos === "left" || pos === "right"
|
|
// Simple position properties
|
|
property bool attachedTop: pos === "top"
|
|
property bool attachedBottom: pos === "bottom"
|
|
property bool attachedLeft: pos === "left"
|
|
property bool attachedRight: pos === "right"
|
|
|
|
screen: modelData // Show bar on all screens
|
|
visible: ConfigResolver.bar(displayName).enabled && Config.initialized
|
|
WlrLayershell.namespace: "nucleus:bar"
|
|
exclusiveZone: ConfigResolver.bar(displayName).floating ? ConfigResolver.bar(displayName).density + Metrics.margin("tiny") : ConfigResolver.bar(displayName).density
|
|
implicitHeight: ConfigResolver.bar(displayName).density // density === height. (horizontal orientation)
|
|
implicitWidth: ConfigResolver.bar(displayName).density // density === width. (vertical orientation)
|
|
color: "transparent" // Keep panel window's color transparent, so that it can be modified by background rect
|
|
|
|
// This is probably a little weird way to set anchors but I think it's the best way. (and it works)
|
|
anchors {
|
|
top: ConfigResolver.bar(displayName).position === "top" || ConfigResolver.bar(displayName).position === "left" || ConfigResolver.bar(displayName).position === "right"
|
|
bottom: ConfigResolver.bar(displayName).position === "bottom" || ConfigResolver.bar(displayName).position === "left" || ConfigResolver.bar(displayName).position === "right"
|
|
left: ConfigResolver.bar(displayName).position === "left" || ConfigResolver.bar(displayName).position === "top" || ConfigResolver.bar(displayName).position === "bottom"
|
|
right: ConfigResolver.bar(displayName).position === "right" || ConfigResolver.bar(displayName).position === "top" || ConfigResolver.bar(displayName).position === "bottom"
|
|
}
|
|
|
|
margins {
|
|
top: {
|
|
if (floating)
|
|
return margin;
|
|
|
|
if (merged && vertical)
|
|
return margin;
|
|
|
|
return 0;
|
|
}
|
|
bottom: {
|
|
if (floating)
|
|
return margin;
|
|
|
|
if (merged && vertical)
|
|
return margin;
|
|
|
|
return 0;
|
|
}
|
|
left: {
|
|
if (floating)
|
|
return margin;
|
|
|
|
if (merged && !vertical)
|
|
return margin;
|
|
|
|
return 0;
|
|
}
|
|
right: {
|
|
if (floating)
|
|
return margin;
|
|
|
|
if (merged && !vertical)
|
|
return margin;
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
StyledRect {
|
|
id: background
|
|
color: Appearance.m3colors.m3background
|
|
anchors.fill: parent
|
|
topLeftRadius: {
|
|
if (floating)
|
|
return rd;
|
|
|
|
if (!merged)
|
|
return 0;
|
|
|
|
return attachedBottom || attachedRight ? rd : 0;
|
|
}
|
|
topRightRadius: {
|
|
if (floating)
|
|
return rd;
|
|
|
|
if (!merged)
|
|
return 0;
|
|
|
|
return attachedBottom || attachedLeft ? rd : 0;
|
|
}
|
|
bottomLeftRadius: {
|
|
if (floating)
|
|
return rd;
|
|
|
|
if (!merged)
|
|
return 0;
|
|
|
|
return attachedTop || attachedRight ? rd : 0;
|
|
}
|
|
bottomRightRadius: {
|
|
if (floating)
|
|
return rd;
|
|
|
|
if (!merged)
|
|
return 0;
|
|
|
|
return attachedTop || attachedLeft ? rd : 0;
|
|
}
|
|
|
|
BarContent {
|
|
anchors.fill: parent
|
|
}
|
|
|
|
Behavior on bottomLeftRadius {
|
|
enabled: Config.runtime.appearance.animations.enabled
|
|
animation: Appearance.animation.elementMove.numberAnimation.createObject(this)
|
|
}
|
|
|
|
Behavior on topLeftRadius {
|
|
enabled: Config.runtime.appearance.animations.enabled
|
|
animation: Appearance.animation.elementMove.numberAnimation.createObject(this)
|
|
}
|
|
|
|
Behavior on bottomRightRadius {
|
|
enabled: Config.runtime.appearance.animations.enabled
|
|
animation: Appearance.animation.elementMove.numberAnimation.createObject(this)
|
|
}
|
|
|
|
Behavior on topRightRadius {
|
|
enabled: Config.runtime.appearance.animations.enabled
|
|
animation: Appearance.animation.elementMove.numberAnimation.createObject(this)
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|