Added floaty bar mode, made sidebar texts and Crypto.qml module bold

This commit is contained in:
SomeElse
2026-05-30 06:49:36 +00:00
parent 042e219ed7
commit c28f00caf7
15 changed files with 133 additions and 45 deletions

View File

@@ -12,6 +12,9 @@ PanelWindow {
readonly property var cfg: Cfg.Config
readonly property real barEdgePad: cfg.frameVariant === "bar" ? (isTop ? cfg.frameBarPadTop : cfg.frameBarPadBottom) : 0
readonly property real barRoundPad: cfg.frameVariant === "bar" ? Math.min(cfg.radius, cfg.barHeight / 2) : 0
color: "transparent"
anchors {
top: isTop
@@ -19,15 +22,21 @@ PanelWindow {
left: true
right: true
}
implicitHeight: cfg.barHeight
implicitHeight: cfg.barHeight + barEdgePad
WlrLayershell.layer: WlrLayer.Top
WlrLayershell.namespace: "main-shell-bar"
WlrLayershell.exclusiveZone: cfg.barHeight
WlrLayershell.exclusiveZone: cfg.barHeight + barEdgePad
Item {
id: animatedWrapper
anchors.fill: parent
anchors {
fill: parent
topMargin: isTop ? barEdgePad : 0
bottomMargin: !isTop ? barEdgePad : 0
leftMargin: 0
rightMargin: 0
}
opacity: 0
scale: 0.95
@@ -66,8 +75,8 @@ PanelWindow {
Item {
id: barContent
anchors.fill: parent
anchors.leftMargin: cfg.margin
anchors.rightMargin: cfg.margin
anchors.leftMargin: cfg.margin + barRoundPad
anchors.rightMargin: cfg.margin + barRoundPad
function bindModule(item, side) {
item.height = Qt.binding(() => barContent.height - 12)
@@ -78,6 +87,7 @@ PanelWindow {
"targetScreen": barWindow.modelData,
"barHeight": cfg.barHeight,
"barMargin": cfg.margin,
"barEdgePad": barEdgePad,
"barSide": side,
"menuWindow": barWindow
}

View File

@@ -323,6 +323,7 @@ ModuleChip {
text: root.coinSymbol + "/" + root.displayCurrency.toUpperCase() + ": "
color: t.cryptoLabel
font.pixelSize: 12
font.bold: true
verticalAlignment: Text.AlignVCenter
}
@@ -339,6 +340,8 @@ ModuleChip {
text: root.change24h >= 0 ? "▲" : "▼"
color: root.change24h >= 0 ? (t.cryptoUp) : (t.cryptoDown)
font.pixelSize: 9
font.bold: true
renderType: Text.NativeRendering
verticalAlignment: Text.AlignVCenter
Layout.alignment: Qt.AlignVCenter
Layout.leftMargin: 4
@@ -495,6 +498,7 @@ ModuleChip {
color: root.change24h >= 0 ? (t.cryptoUp) : (t.cryptoDown)
font.pixelSize: 11
font.bold: true
renderType: Text.NativeRendering
}
}
}
@@ -516,7 +520,7 @@ ModuleChip {
property string value: ""
Layout.fillWidth: true
Text { text: label; color: t.cryptoPopupDim; font.pixelSize: 12; Layout.fillWidth: true }
Text { text: value; color: t.cryptoPopupText; font.pixelSize: 12; font.bold: true; font.family: "monospace" }
Text { text: value; color: t.cryptoPopupText; font.pixelSize: 12; font.bold: true; font.family: "monospace"; renderType: Text.NativeRendering }
}
StatRow { label: "Rank"; value: root.rank > 0 ? "#" + root.rank : "—" }
@@ -552,6 +556,7 @@ ModuleChip {
text: "24h Range"
color: t.cryptoPopupDim
font.pixelSize: 12
renderType: Text.NativeRendering
Layout.fillWidth: true
}
Text {
@@ -559,6 +564,7 @@ ModuleChip {
text: ((root.price - root.low24h) / (root.high24h - root.low24h) * 100).toFixed(1) + "% of range"
color: t.cryptoPopupDim
font.pixelSize: 11
renderType: Text.NativeRendering
}
}
@@ -595,6 +601,7 @@ ModuleChip {
color: t.cryptoDown
font.pixelSize: 10
font.family: "monospace"
renderType: Text.NativeRendering
}
Item { Layout.fillWidth: true }
Text {
@@ -602,6 +609,7 @@ ModuleChip {
color: t.cryptoUp
font.pixelSize: 10
font.family: "monospace"
renderType: Text.NativeRendering
}
}
}

View File

@@ -505,7 +505,7 @@ ModuleChip {
mask: Region { item: toastCol }
readonly property bool shareEdge: (root.isTop && !atBottom) || (!root.isTop && atBottom)
readonly property int edgeGap: shareEdge ? root.barMargin + root.barHeight + 10 : root.barMargin + 10
readonly property int edgeGap: shareEdge ? root.barMargin + root.barHeight + root.barEdgePad + 10 : root.barMargin + 10
readonly property int toastPad: root.barMargin + Cfg.Config.frameBorderWidth + Cfg.Config.notifToastEdgePad
Column {
@@ -577,9 +577,9 @@ ModuleChip {
anchors.top: root.isTop ? parent.top : undefined
anchors.bottom: root.isTop ? undefined : parent.bottom
anchors.topMargin: root.isTop ? (root.barHeight + 10) : 0
anchors.bottomMargin: root.isTop ? 0 : (root.barHeight + 10)
height: parent.height - root.barHeight - 10
anchors.topMargin: root.isTop ? (root.barHeight + root.barEdgePad + 10) : 0
anchors.bottomMargin: root.isTop ? 0 : (root.barHeight + root.barEdgePad + 10)
height: parent.height - root.barHeight - root.barEdgePad - 10
clip: true

View File

@@ -367,9 +367,9 @@ ModuleChip {
anchors.top: root.isTop ? parent.top : undefined
anchors.bottom: root.isTop ? undefined : parent.bottom
anchors.topMargin: root.isTop ? (Cfg.Config.barHeight + 8) : 0
anchors.bottomMargin: root.isTop ? 0 : (Cfg.Config.barHeight + 8)
height: parent.height - Cfg.Config.barHeight - 8
anchors.topMargin: root.isTop ? (Cfg.Config.barHeight + root.barEdgePad + 8) : 0
anchors.bottomMargin: root.isTop ? 0 : (Cfg.Config.barHeight + root.barEdgePad + 8)
height: parent.height - Cfg.Config.barHeight - root.barEdgePad - 8
PopupCard {
id: menuCard

View File

@@ -10,6 +10,7 @@ Rectangle {
property var targetScreen: null
property int barHeight: Cfg.Config.barHeight
property int barMargin: Cfg.Config.margin
property int barEdgePad: Cfg.Config.frameVariant === "bar" ? (Cfg.Config.barPosition === "top" ? Cfg.Config.frameBarPadTop : Cfg.Config.frameBarPadBottom) : 0
readonly property var t: Cfg.Config.theme
property bool moduleEnabled: true

View File

@@ -56,9 +56,9 @@ PanelWindow {
anchors.top: chipRoot && chipRoot.isTop ? parent.top : undefined
anchors.bottom: chipRoot && chipRoot.isTop ? undefined : parent.bottom
anchors.topMargin: chipRoot && chipRoot.isTop ? (chipRoot.barHeight + 10) : 0
anchors.bottomMargin: chipRoot && chipRoot.isTop ? 0 : (chipRoot.barHeight + 10)
height: chipRoot ? parent.height - chipRoot.barHeight - 10 : parent.height
anchors.topMargin: chipRoot && chipRoot.isTop ? (chipRoot.barHeight + chipRoot.barEdgePad + 10) : 0
anchors.bottomMargin: chipRoot && chipRoot.isTop ? 0 : (chipRoot.barHeight + chipRoot.barEdgePad + 10)
height: chipRoot ? parent.height - chipRoot.barHeight - chipRoot.barEdgePad - 10 : parent.height
clip: true
}

View File

@@ -6,7 +6,7 @@ import "themes"
QtObject {
id: root
readonly property var theme: Tranquil
readonly property var theme: Goldencity
// ────────────────────────────────────────────────────────────────────────
// Widgets
@@ -21,13 +21,20 @@ QtObject {
// ────────────────────────────────────────────────────────────────────────
// BAR
// ────────────────────────────────────────────────────────────────────────
// ── Position & Dimensions ─────────────────────────────────────────────────
property string barPosition: "bottom"
property string barPosition: "top"
property int barHeight: 35
property int margin: 15
property int radius: 20
// ────────────────────────────────────────────────────────────────────────
// FRAME
// ────────────────────────────────────────────────────────────────────────
property string frameVariant: "card" // "card" or "bar"
property int frameBorderWidth: 3
property int frameBarPadTop: 5 // bar variant: padding from top edge
property int frameBarPadBottom: 5 // bar variant: padding from bottom edge
// ── Module Lists ──────────────────────────────────────────────────────────
property var leftModules: ["Logo", "Stats", "Crypto"]
property var centerModules: ["Workspace"]
@@ -48,7 +55,7 @@ QtObject {
property int popupRadius: 18
property int popupBorderWidth: 1
property int popupAnimDuration: 250
property string popupAnimType: "slide" // "bubbleslide" or "slide"
property string popupAnimType: "bubbleslide" // "bubbleslide" or "slide"
// ── Clock Module ─────────────────────────────────────────────────────────
property bool clockExtendEnabled: true // seconds extension on hover for clock
@@ -91,10 +98,7 @@ QtObject {
property int volumeInputMax: 200
// ────────────────────────────────────────────────────────────────────────
// FRAME
// ────────────────────────────────────────────────────────────────────────
property int frameBorderWidth: 3
// ────────────────────────────────────────────────────────────────────────
// NOTIFICATIONS

View File

@@ -13,7 +13,8 @@ PanelWindow {
id: root
property bool isTop: true
property int barHeight: Cfg.Config.barHeight
readonly property int barEdgePad: Cfg.Config.frameVariant === "bar" ? (isTop ? Cfg.Config.frameBarPadTop : Cfg.Config.frameBarPadBottom) : 0
property int barHeight: Cfg.Config.barHeight + barEdgePad
property int barMargin: Cfg.Config.margin
readonly property var t: Cfg.Config.theme

View File

@@ -39,7 +39,7 @@ ShellRoot {
// ── Spacing Gap: Top / Bottom ────────────────────────────────────────
Variants {
model: Quickshell.screens
model: Cfg.Config.frameVariant === "bar" ? [] : Quickshell.screens
PanelWindow {
required property var modelData
screen: modelData
@@ -59,7 +59,7 @@ ShellRoot {
// ── Spacing Gap: Left ────────────────────────────────────────────────
Variants {
model: Quickshell.screens
model: Cfg.Config.frameVariant === "bar" ? [] : Quickshell.screens
PanelWindow {
required property var modelData
screen: modelData
@@ -74,7 +74,7 @@ ShellRoot {
// ── Spacing Gap: Right ───────────────────────────────────────────────
Variants {
model: Quickshell.screens
model: Cfg.Config.frameVariant === "bar" ? [] : Quickshell.screens
PanelWindow {
required property var modelData
screen: modelData
@@ -161,6 +161,36 @@ ShellRoot {
var ctx = getContext("2d")
ctx.clearRect(0, 0, width, height)
if (Cfg.Config.frameVariant === "bar") {
var barW = width - Cfg.Config.margin * 2
var barH = Cfg.Config.barHeight
var barX = Cfg.Config.margin
var barY = root.isTop ? Cfg.Config.frameBarPadTop : height - Cfg.Config.frameBarPadBottom - barH
var r = Math.min(Cfg.Config.radius, barH / 2)
ctx.fillStyle = root.frameBackground
ctx.beginPath()
ctx.moveTo(barX + r, barY)
ctx.lineTo(barX + barW - r, barY)
ctx.arcTo(barX + barW, barY, barX + barW, barY + r, r)
ctx.lineTo(barX + barW, barY + barH - r)
ctx.arcTo(barX + barW, barY + barH, barX + barW - r, barY + barH, r)
ctx.lineTo(barX + r, barY + barH)
ctx.arcTo(barX, barY + barH, barX, barY + barH - r, r)
ctx.lineTo(barX, barY + r)
ctx.arcTo(barX, barY, barX + r, barY, r)
ctx.closePath()
ctx.fill()
if (Cfg.Config.frameBorderWidth > 0) {
ctx.lineWidth = Cfg.Config.frameBorderWidth
ctx.strokeStyle = root.frameBorderColor
ctx.stroke()
}
return
}
var mT = root.isTop ? Cfg.Config.barHeight : Cfg.Config.margin
var mB = root.isTop ? Cfg.Config.margin : Cfg.Config.barHeight
var r = Cfg.Config.radius

View File

@@ -29,8 +29,9 @@ PanelWindow {
readonly property var t: Cfg.Config.theme
readonly property bool isTop: Cfg.Config.barPosition === "top"
readonly property int frameTop: isTop ? Cfg.Config.barHeight : Cfg.Config.margin
readonly property int frameBot: isTop ? Cfg.Config.margin : Cfg.Config.barHeight
readonly property int barEdgePad: Cfg.Config.frameVariant === "bar" ? (isTop ? Cfg.Config.frameBarPadTop : Cfg.Config.frameBarPadBottom) : 0
readonly property int frameTop: isTop ? Cfg.Config.barHeight + barEdgePad : Cfg.Config.margin
readonly property int frameBot: isTop ? Cfg.Config.margin : Cfg.Config.barHeight + barEdgePad
readonly property int inset: Cfg.Config.margin + Cfg.Config.frameBorderWidth + 8
readonly property int sbWidth: 260
readonly property bool isLeft: Cfg.Config.sideBarPosition === "left"

View File

@@ -47,6 +47,7 @@ Rectangle {
: root.t.mprisTextDim
)
font.pixelSize: primary ? 22 : 18
font.weight: Font.Bold
Behavior on color { ColorAnimation { duration: 150 } }
}

View File

@@ -132,6 +132,7 @@ Item {
text: "󰎆"
color: root.t.mprisAccent
font.pixelSize: 18
font.weight: Font.Bold
}
}
@@ -144,7 +145,7 @@ Item {
text: root.activePlayer ? root.formatIdentity(root.activePlayer.identity) : "No media"
color: root.t.mprisTextMain
font.pixelSize: 13
font.weight: Font.DemiBold
font.weight: Font.Bold
elide: Text.ElideRight
Layout.fillWidth: true
}
@@ -152,6 +153,7 @@ Item {
text: root.playbackStatusText()
color: root.t.mprisTextDim
font.pixelSize: 10
font.weight: Font.Bold
opacity: 0.75
}
}
@@ -204,6 +206,7 @@ Item {
text: "󰝚"
color: root.t.mprisAccent
font.pixelSize: 28
font.weight: Font.Bold
visible: root.activePlayer && (root.activePlayer.trackArtUrl === "" || !albumArt.visible)
}
}
@@ -217,7 +220,7 @@ Item {
text: root.activePlayer ? (root.activePlayer.trackTitle || "Unknown Title") : ""
color: root.t.mprisTextMain
font.pixelSize: 13
font.weight: Font.Medium
font.weight: Font.Bold
elide: Text.ElideRight
maximumLineCount: 2
wrapMode: Text.WordWrap
@@ -228,6 +231,7 @@ Item {
text: root.activePlayer ? (root.activePlayer.trackArtist || "Unknown Artist") : ""
color: root.t.mprisTextDim
font.pixelSize: 11
font.weight: Font.Bold
elide: Text.ElideRight
Layout.fillWidth: true
}
@@ -236,6 +240,7 @@ Item {
text: root.activePlayer ? (root.activePlayer.trackAlbum || "") : ""
color: root.t.mprisTextDim
font.pixelSize: 10
font.weight: Font.Bold
opacity: 0.7
elide: Text.ElideRight
visible: root.activePlayer && root.activePlayer.trackAlbum !== ""
@@ -277,6 +282,7 @@ Item {
text: root.activePlayer ? root.formatDuration(root.activePlayer.position) : "0:00"
color: root.t.mprisTextDim
font.pixelSize: 9
font.weight: Font.Bold
Layout.alignment: Qt.AlignLeft
}
@@ -286,6 +292,7 @@ Item {
text: root.activePlayer ? root.formatDuration(root.activePlayer.length) : "0:00"
color: root.t.mprisTextDim
font.pixelSize: 9
font.weight: Font.Bold
Layout.alignment: Qt.AlignRight
}
}
@@ -302,6 +309,7 @@ Item {
text: root.volumeIcon()
color: root.activePlayer && root.activePlayer.volume > 0 ? root.t.mprisAccent : root.t.mprisTextDim
font.pixelSize: 16
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}

View File

@@ -243,6 +243,7 @@ ColumnLayout {
text: "󰌽"
color: root.t.sysInfoAccent
font.pixelSize: 20
font.weight: Font.Bold
}
}
@@ -255,7 +256,7 @@ ColumnLayout {
text: root.osName
color: root.t.sysInfoTextMain
font.pixelSize: 13
font.weight: Font.DemiBold
font.weight: Font.Bold
elide: Text.ElideRight
Layout.fillWidth: true
}
@@ -263,6 +264,7 @@ ColumnLayout {
text: root.kernelVer
color: root.t.sysInfoTextDim
font.pixelSize: 10
font.weight: Font.Bold
opacity: 0.75
elide: Text.ElideRight
Layout.fillWidth: true
@@ -421,6 +423,7 @@ ColumnLayout {
text: "󰅐"
color: root.t.sysInfoAccent
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -428,6 +431,7 @@ ColumnLayout {
text: "Uptime"
color: root.t.sysInfoTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -436,7 +440,7 @@ ColumnLayout {
text: root.uptimeStr
color: root.t.sysInfoTextMain
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}
@@ -458,6 +462,7 @@ ColumnLayout {
text: ""
color: root.t.sysInfoAccent
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -465,6 +470,7 @@ ColumnLayout {
text: "Kernel"
color: root.t.sysInfoTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -473,7 +479,7 @@ ColumnLayout {
text: root.kernelVer
color: root.t.sysInfoTextMain
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}
@@ -515,6 +521,7 @@ ColumnLayout {
: "󰂃"
color: parent.battIconColor
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -522,6 +529,7 @@ ColumnLayout {
text: "Battery"
color: root.t.sysInfoTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -530,6 +538,7 @@ ColumnLayout {
text: Math.round(root.battPct) + "%"
color: root.t.sysInfoTextMain
font.pixelSize: 12
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}
@@ -575,6 +584,7 @@ ColumnLayout {
text: root.netOnline ? "󰤨" : "󰤭"
color: root.netOnline ? root.t.statusOk : root.t.sysInfoTextDim
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -582,6 +592,7 @@ ColumnLayout {
text: "Network"
color: root.t.sysInfoTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -590,7 +601,7 @@ ColumnLayout {
text: root.netOnline ? "Connected" : "Offline"
color: root.netOnline ? root.t.statusOk : root.t.statusErr
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}

View File

@@ -42,6 +42,7 @@ Item {
text: root.icon
color: root.iconColor
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -49,6 +50,7 @@ Item {
text: root.label
color: root.dimColor
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -57,7 +59,7 @@ Item {
text: root.value
color: root.textColor
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}

View File

@@ -88,6 +88,7 @@ Item {
text: root.icon
color: root.t.weatherAccent
font.pixelSize: 18
font.weight: Font.Bold
}
}
@@ -100,7 +101,7 @@ Item {
text: root.condition
color: root.t.weatherTextMain
font.pixelSize: 13
font.weight: Font.DemiBold
font.weight: Font.Bold
elide: Text.ElideRight
Layout.fillWidth: true
}
@@ -108,6 +109,7 @@ Item {
text: root.location
color: root.t.weatherTextDim
font.pixelSize: 10
font.weight: Font.Bold
opacity: 0.75
elide: Text.ElideRight
Layout.fillWidth: true
@@ -130,6 +132,7 @@ Item {
text: "󰑐"
color: refreshMouse.containsMouse ? root.t.weatherAccent : root.t.weatherTextDim
font.pixelSize: 14
font.weight: Font.Bold
Behavior on color { ColorAnimation { duration: 150 } }
RotationAnimator {
@@ -183,6 +186,7 @@ Item {
text: "󰔄"
color: root.t.weatherTempColor
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -190,6 +194,7 @@ Item {
text: "Temperature"
color: root.t.weatherTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -198,7 +203,7 @@ Item {
text: root.temp
color: root.t.weatherTextMain
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}
@@ -220,6 +225,7 @@ Item {
text: "󰔄"
color: root.t.weatherFeelsColor
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -227,6 +233,7 @@ Item {
text: "Feels like"
color: root.t.weatherTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -235,7 +242,7 @@ Item {
text: root.feelsLike
color: root.t.weatherTextMain
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}
@@ -257,6 +264,7 @@ Item {
text: "󰃚"
color: root.t.weatherHumidColor
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -264,6 +272,7 @@ Item {
text: "Humidity"
color: root.t.weatherTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -272,7 +281,7 @@ Item {
text: root.humidity
color: root.t.weatherTextMain
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}
@@ -294,6 +303,7 @@ Item {
text: "󰖝"
color: root.t.weatherWindColor
font.pixelSize: 12
font.weight: Font.Bold
}
}
@@ -301,6 +311,7 @@ Item {
text: "Wind"
color: root.t.weatherTextDim
font.pixelSize: 12
font.weight: Font.Bold
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
@@ -309,7 +320,7 @@ Item {
text: root.wind
color: root.t.weatherTextMain
font.pixelSize: 12
font.weight: Font.Medium
font.weight: Font.Bold
Layout.alignment: Qt.AlignVCenter
}
}