Compare commits

..

No commits in common. "e96ddbef65ed5c804108ec2ff943163fef38c4fe" and "d3b1789b99684ce344c1c208cda92e40a9468aa0" have entirely different histories.

10 changed files with 169 additions and 181 deletions

View File

@ -3,24 +3,24 @@ import QtQuick
QtObject { QtObject {
// --- The Backgrounds (Darkest to Lightest) --- // --- The Backgrounds (Darkest to Lightest) ---
readonly property string base00: "#1d2021" // Default Background readonly property string base00: "#1d1f21" // Default Background
readonly property string base01: "#3c3836" // Lighter Background (Status bars, panels) readonly property string base01: "#282a2e" // Lighter Background (Status bars, panels)
readonly property string base02: "#504945" // Selection Background readonly property string base02: "#373b41" // Selection Background
readonly property string base03: "#665c54" // Comments, Invisibles, line highlighting readonly property string base03: "#969896" // Comments, Invisibles, line highlighting
// --- The Foregrounds (Darkest to Lightest) --- // --- The Foregrounds (Darkest to Lightest) ---
readonly property string base04: "#bdae93" // Dark Foreground (Used for status bars) readonly property string base04: "#b4b7b4" // Dark Foreground (Used for status bars)
readonly property string base05: "#d5c4a1" // Default Foreground, Caret readonly property string base05: "#c5c8c6" // Default Foreground, Caret
readonly property string base06: "#ebdbb2" // Light Foreground (Rarely used) readonly property string base06: "#e0e0e0" // Light Foreground (Rarely used)
readonly property string base07: "#fbf1c7" // Lightest Foreground readonly property string base07: "#ffffff" // Lightest Foreground
// --- The Accent Colors --- // --- The Accent Colors ---
readonly property string base08: "#fb4934" // Red (Variables, errors) readonly property string base08: "#cc6666" // Red (Variables, errors)
readonly property string base09: "#fe8019" // Orange (Integers, booleans, constants) readonly property string base09: "#de935f" // Orange (Integers, booleans, constants)
readonly property string base0A: "#fabd2f" // Yellow (Classes, search text bg, warnings) readonly property string base0A: "#f0c674" // Yellow (Classes, search text bg, warnings)
readonly property string base0B: "#b8bb26" // Green (Strings, success states) readonly property string base0B: "#b5bd68" // Green (Strings, success states)
readonly property string base0C: "#8ec07c" // Cyan (Support, regex, escape chars) readonly property string base0C: "#8abeb7" // Cyan (Support, regex, escape chars)
readonly property string base0D: "#83a598" // Blue (Functions, methods, headings) readonly property string base0D: "#81a2be" // Blue (Functions, methods, headings)
readonly property string base0E: "#d3869b" // Purple/Mauve (Keywords, storage, selectors) readonly property string base0E: "#b294bb" // Purple/Mauve (Keywords, storage, selectors)
readonly property string base0F: "#d65d0e" // Brown/Flamingo (Deprecated, embedded tags) readonly property string base0F: "#a3685a" // Brown/Flamingo (Deprecated, embedded tags)
} }

View File

@ -12,7 +12,7 @@ WrapperRectangle {
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base01
radius: 4 radius: 4
verticalOffset: 2 verticalOffset: 2
horizontalOffset: 2 horizontalOffset: 2

View File

@ -15,7 +15,7 @@ WrapperRectangle {
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base01
radius: 4 radius: 4
verticalOffset: 2 verticalOffset: 2
horizontalOffset: 2 horizontalOffset: 2

View File

@ -14,7 +14,7 @@ WrapperRectangle {
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base01
radius: 4 radius: 4
verticalOffset: 2 verticalOffset: 2
horizontalOffset: 2 horizontalOffset: 2

View File

@ -14,7 +14,7 @@ WrapperRectangle {
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base01
radius: 4 radius: 4
verticalOffset: 2 verticalOffset: 2
horizontalOffset: 2 horizontalOffset: 2

View File

@ -12,7 +12,7 @@ WrapperRectangle {
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base01
radius: 4 radius: 4
verticalOffset: 2 verticalOffset: 2
horizontalOffset: 2 horizontalOffset: 2

View File

@ -31,10 +31,10 @@ WrapperRectangle {
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base01
radius: 0 radius: 8
verticalOffset: 2 verticalOffset: 1
horizontalOffset: 2 horizontalOffset: 1
samples: 16 samples: 16
} }
} }

View File

@ -2,28 +2,26 @@ import Quickshell
import Quickshell.Widgets import Quickshell.Widgets
import QtQuick import QtQuick
import Qt5Compat.GraphicalEffects import Qt5Compat.GraphicalEffects
import Quickshell.Io
import qs import qs
import qs.settings import qs.settings
import qs.widgets import qs.widgets
Item { Item {
id: root id: root
property int gaps: 30 implicitWidth: wrapper.width
implicitWidth: wrapper.width + gaps implicitHeight: wrapper.height
implicitHeight: wrapper.height + gaps
ClippingWrapperRectangle { ClippingWrapperRectangle {
id: wrapper layer {
layer { enabled: true
enabled: true effect: DropShadow {
effect: DropShadow { color: Colors.base00
color: "#111111" horizontalOffset: 2
horizontalOffset: 8 verticalOffset: 2
verticalOffset: 8 radius: 8
radius: 8 samples: 16
samples: 16 }
} }
} id: wrapper
SystemClock { SystemClock {
id: clock id: clock
precision: SystemClock.Minutes precision: SystemClock.Minutes
@ -32,7 +30,6 @@ Item {
radius: Settings.config.rounding radius: Settings.config.rounding
anchors.centerIn: parent anchors.centerIn: parent
margin: 10 margin: 10
rightMargin: 15
child: Column { child: Column {
id: dataLayout id: dataLayout
spacing: 0 spacing: 0

View File

@ -11,21 +11,21 @@ import qs.widgets
Rectangle { Rectangle {
id: root id: root
color: Colors.base00 color: Colors.base01
radius: Settings.config.rounding * 1.5 radius: Settings.config.rounding
implicitWidth: 600 implicitWidth: 600
implicitHeight: 200 implicitHeight: 200
visible: getSpotify() != null visible: getSpotify() != null
layer { layer {
enabled: true enabled: true
effect: DropShadow { effect: DropShadow {
color: "#111111" color: Colors.base00
horizontalOffset: 8 horizontalOffset: 2
verticalOffset: 8 verticalOffset: 2
radius: 8 radius: 8
samples: 16 samples: 16
} }
} }
MouseArea { MouseArea {
id: hoverDetect id: hoverDetect
hoverEnabled: true hoverEnabled: true
@ -53,158 +53,149 @@ Rectangle {
anchors.margins: 10 anchors.margins: 10
margin: 0 margin: 0
anchors.fill: parent anchors.fill: parent
color: Colors.base00 color: "transparent"
RowLayout { RowLayout {
id: songLayout id: songLayout
spacing: 10 spacing: 0
ClippingWrapperRectangle { ClippingWrapperRectangle {
id: coverRounder id: coverRounder
Layout.fillWidth: true Layout.leftMargin: 10
Layout.fillHeight: true radius: 16
Layout.maximumWidth: songCover.sourceSize.width
radius: Settings.config.rounding
Image { Image {
id: songCover id: songCover
source: root.art source: root.art
sourceSize { sourceSize {
width: 180 width: 160
height: 180 height: 160
} }
} }
} }
WrapperRectangle { ColumnLayout {
color: Colors.base01 id: songInfo
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
radius: Settings.config.rounding Layout.leftMargin: 20
margin: 20 Layout.topMargin: 2
child: ColumnLayout { Item {
id: songInfo id: titleContainer
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true x: 0
Layout.leftMargin: 20 implicitHeight: title.implicitHeight
Layout.topMargin: 2 clip: true // Keeps the text inside this "window"
Item {
id: titleContainer
Layout.fillWidth: true
x: 0
implicitHeight: title.implicitHeight
clip: true // Keeps the text inside this "window"
CText {
id: title
Layout.maximumWidth: 300
text: root.title
font.pixelSize: 30
SequentialAnimation on x {
id: scrollAnimation
running: hoverDetect.containsMouse && title.width > titleContainer.width
loops: Animation.Infinite
// Scroll to the end
NumberAnimation {
to: titleContainer.width - title.width
duration: Math.max(2000, (title.width - titleContainer.width) * 30)
easing.type: Easing.InOutQuad
}
// Scroll back to the start
NumberAnimation {
to: 0
duration: Math.max(2000, (title.width - titleContainer.width) * 30)
easing.type: Easing.InOutQuad
}
}
}
}
CText { CText {
id: album id: title
text: root.album + " - " + root.artist Layout.maximumWidth: 300
opacity: 0.6 text: root.title
Layout.maximumWidth: 250 font.pixelSize: 30
elide: Text.ElideRight SequentialAnimation on x {
} id: scrollAnimation
ProgressBar { running: hoverDetect.containsMouse && title.width > titleContainer.width
id: songProgress loops: Animation.Infinite
FrameAnimation {
// only emit the signal when the position is actually changing.
running: root.spotify ? root.spotify.playbackState == MprisPlaybackState.Playing || root.visible : false
// emit the positionChanged signal every frame.
onTriggered: root.spotify.positionChanged()
}
implicitWidth: 200
implicitHeight: 10
from: 0
to: root.spotify != null ? root.spotify.length : 0
value: root.spotify != null ? root.spotify.position : 0
background: Rectangle {
implicitWidth: 200
implicitHeight: 6
color: Colors.base02
radius: Settings.config.rounding
}
contentItem: Item {
implicitWidth: 200
implicitHeight: 4
// Progress indicator for determinate state. // Scroll to the end
Rectangle { NumberAnimation {
width: songProgress.visualPosition * parent.width to: titleContainer.width - title.width
height: parent.height duration: Math.max(2000, (title.width - titleContainer.width) * 30)
radius: Settings.config.rounding easing.type: Easing.InOutQuad
color: Colors.base07 }
visible: !songProgress.indeterminate
// Scroll back to the start
NumberAnimation {
to: 0
duration: Math.max(2000, (title.width - titleContainer.width) * 30)
easing.type: Easing.InOutQuad
} }
} }
} }
RowLayout { }
id: playerControls CText {
Layout.maximumWidth: 200 id: album
CIcon { text: root.album + " - " + root.artist
id: previous opacity: 0.6
text: "\ue045" Layout.maximumWidth: 250
Layout.alignment: Qt.AlignLeft elide: Text.ElideRight
MouseArea { }
id: prevHandler ProgressBar {
anchors.fill: parent id: songProgress
acceptedButtons: Qt.LeftButton FrameAnimation {
cursorShape: Qt.PointingHandCursor // only emit the signal when the position is actually changing.
onClicked: { running: root.spotify ? root.spotify.playbackState == MprisPlaybackState.Playing || root.visible : false
root.spotify.previous(); // emit the positionChanged signal every frame.
title.x = 0; onTriggered: root.spotify.positionChanged()
} }
implicitWidth: 200
implicitHeight: 10
from: 0
to: root.spotify != null ? root.spotify.length : 0
value: root.spotify != null ? root.spotify.position : 0
background: Rectangle {
implicitWidth: 200
implicitHeight: 6
color: Colors.base02
radius: 32
}
contentItem: Item {
implicitWidth: 200
implicitHeight: 4
// Progress indicator for determinate state.
Rectangle {
width: songProgress.visualPosition * parent.width
height: parent.height
radius: 32
color: Colors.base07
visible: !songProgress.indeterminate
}
}
}
RowLayout {
id: playerControls
Layout.maximumWidth: 200
CIcon {
id: previous
text: "\ue045"
Layout.alignment: Qt.AlignLeft
MouseArea {
id: prevHandler
anchors.fill: parent
acceptedButtons: Qt.LeftButton
cursorShape: Qt.PointingHandCursor
onClicked: {
root.spotify.previous();
title.x = 0;
} }
} }
CIcon { }
id: pause CIcon {
text: root.spotify ? root.spotify.isPlaying ? "\ue034" : "\ue037" : "" id: pause
Layout.alignment: Qt.AlignHCenter text: root.spotify ? root.spotify.isPlaying ? "\ue034" : "\ue037" : ""
MouseArea { Layout.alignment: Qt.AlignHCenter
id: pauseHandler MouseArea {
anchors.fill: parent id: pauseHandler
acceptedButtons: Qt.LeftButton anchors.fill: parent
cursorShape: Qt.PointingHandCursor acceptedButtons: Qt.LeftButton
onClicked: { cursorShape: Qt.PointingHandCursor
root.spotify.togglePlaying(); onClicked: {
title.x = 0; root.spotify.togglePlaying();
} title.x = 0;
} }
} }
CIcon { }
id: next CIcon {
Layout.alignment: Qt.AlignRight id: next
text: "\ue044" Layout.alignment: Qt.AlignRight
MouseArea { text: "\ue044"
id: nextHandler MouseArea {
anchors.fill: parent id: nextHandler
acceptedButtons: Qt.LeftButton anchors.fill: parent
cursorShape: Qt.PointingHandCursor acceptedButtons: Qt.LeftButton
onClicked: { cursorShape: Qt.PointingHandCursor
root.spotify.next(); onClicked: {
title.x = 0; root.spotify.next();
} title.x = 0;
} }
} }
} }

View File

@ -2,9 +2,9 @@
"barHeight": 32, "barHeight": 32,
"barSpacing": 10, "barSpacing": 10,
"barmargins": 6, "barmargins": 6,
"currentWall": "/home/lucy/.walls/lance_of_longinus.png", "currentWall": "/home/lucy/.walls/frierensuff.png",
"floating": true, "floating": true,
"font": "Maple Mono", "font": "Lora",
"fontSize": 14, "fontSize": 14,
"margins": 10, "margins": 10,
"rounding": 26, "rounding": 26,