From b4c8eeed2c320281fb98b8abdb6dfe6029602481 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Wed, 20 Aug 2025 08:48:07 -0700 Subject: [PATCH 1/3] settings --- Commons/Settings.qml | 2 ++ Modules/SettingsPanel/Tabs/AudioTab.qml | 41 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/Commons/Settings.qml b/Commons/Settings.qml index bc5d6c4..a65e6bd 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -213,6 +213,8 @@ Singleton { property JsonObject audio audio: JsonObject { + property bool showMiniplayerAlbumArt: false + property bool showMiniplayerAlbumArt: false property string visualizerType: "linear" } diff --git a/Modules/SettingsPanel/Tabs/AudioTab.qml b/Modules/SettingsPanel/Tabs/AudioTab.qml index 98fba12..4a86aec 100644 --- a/Modules/SettingsPanel/Tabs/AudioTab.qml +++ b/Modules/SettingsPanel/Tabs/AudioTab.qml @@ -198,6 +198,47 @@ ColumnLayout { } } } + + // Divider + NDivider { + Layout.fillWidth: true + Layout.topMargin: Style.marginL * scaling + Layout.bottomMargin: Style.marginM * scaling + } + + // AudioService Visualizer Category + ColumnLayout { + spacing: Style.marginS * scaling + Layout.fillWidth: true + + NText { + text: "Bar Miniplayer" + font.pointSize: Style.fontSizeXXL * scaling + font.weight: Style.fontWeightBold + color: Color.mOnSurface + Layout.bottomMargin: Style.marginS * scaling + } + + // Miniplayer section + NToggle { + label: "Show Album Art In Miniplayer" + description: "Show the album art of the currently playing song next to the title." + checked: Settings.data.audio.showMiniplayerAlbumArt + onToggled: checked => { + Settings.data.audio.showMiniplayerAlbumArt = checked + } + } + + NToggle { + label: "Show Audio Visualizer In Miniplayer" + description: "Shows an audio visualizer in the background of the miniplayer." + checked: Settings.data.audio.showMiniplayerCava + onToggled: checked => { + Settings.data.audio.showMiniplayerCava = checked + } + } + } + } // Divider NDivider { From 4ae65a2a0e47f6edeb96faf246d96f9e6e49491c Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Wed, 20 Aug 2025 08:49:32 -0700 Subject: [PATCH 2/3] better labels --- Modules/SettingsPanel/Tabs/AudioTab.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/SettingsPanel/Tabs/AudioTab.qml b/Modules/SettingsPanel/Tabs/AudioTab.qml index 4a86aec..14b6432 100644 --- a/Modules/SettingsPanel/Tabs/AudioTab.qml +++ b/Modules/SettingsPanel/Tabs/AudioTab.qml @@ -212,7 +212,7 @@ ColumnLayout { Layout.fillWidth: true NText { - text: "Bar Miniplayer" + text: "Bar Media Player" font.pointSize: Style.fontSizeXXL * scaling font.weight: Style.fontWeightBold color: Color.mOnSurface @@ -221,7 +221,7 @@ ColumnLayout { // Miniplayer section NToggle { - label: "Show Album Art In Miniplayer" + label: "Show Album Art In Bar Media Player" description: "Show the album art of the currently playing song next to the title." checked: Settings.data.audio.showMiniplayerAlbumArt onToggled: checked => { @@ -230,7 +230,7 @@ ColumnLayout { } NToggle { - label: "Show Audio Visualizer In Miniplayer" + label: "Show Audio Visualizer In Bar Media Player" description: "Shows an audio visualizer in the background of the miniplayer." checked: Settings.data.audio.showMiniplayerCava onToggled: checked => { From dd12e6ab2a52d4a602e7759f4b55024cbd9f1259 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Wed, 20 Aug 2025 08:57:02 -0700 Subject: [PATCH 3/3] add the stuff --- Commons/Settings.qml | 2 +- Modules/Bar/MediaMini.qml | 98 +++++++++++++++++++++++-- Modules/SettingsPanel/Tabs/AudioTab.qml | 2 +- Services/CavaService.qml | 4 +- 4 files changed, 95 insertions(+), 11 deletions(-) diff --git a/Commons/Settings.qml b/Commons/Settings.qml index a65e6bd..dd3507a 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -214,7 +214,7 @@ Singleton { audio: JsonObject { property bool showMiniplayerAlbumArt: false - property bool showMiniplayerAlbumArt: false + property bool showMiniplayerCava: false property string visualizerType: "linear" } diff --git a/Modules/Bar/MediaMini.qml b/Modules/Bar/MediaMini.qml index d41451f..680a381 100644 --- a/Modules/Bar/MediaMini.qml +++ b/Modules/Bar/MediaMini.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Quickshell +import qs.Modules.Audio import qs.Commons import qs.Services import qs.Widgets @@ -42,19 +43,102 @@ Row { anchors.leftMargin: Style.marginS * scaling anchors.rightMargin: Style.marginS * scaling + Loader { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + active: Settings.data.audio.showMiniplayerCava && Settings.data.audio.visualizerType == "linear" && MediaService.isPlaying + z: 0 + + sourceComponent: LinearSpectrum { + width: mainContainer.width - Style.marginS * scaling + height: 20 * scaling + values: CavaService.values + fillColor: Color.mPrimary + opacity: 0.4 + } + + Loader { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + active: Settings.data.audio.showMiniplayerCava && Settings.data.audio.visualizerType == "mirrored" && MediaService.isPlaying + z: 0 + + sourceComponent: MirroredSpectrum { + width: mainContainer.width - Style.marginS * scaling + height: mainContainer.height - Style.marginS * scaling + values: CavaService.values + fillColor: Color.mPrimary + opacity: 0.4 + } + } + + Loader { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + active: Settings.data.audio.showMiniplayerCava && Settings.data.audio.visualizerType == "wave" && MediaService.isPlaying + z: 0 + + sourceComponent: WaveSpectrum { + width: mainContainer.width - Style.marginS * scaling + height: mainContainer.height - Style.marginS * scaling + values: CavaService.values + fillColor: Color.mPrimary + opacity: 0.4 + } + } + } + Row { id: row anchors.verticalCenter: parent.verticalCenter spacing: Style.marginXS * scaling + z: 1 // Above the visualizer - // Window icon NIcon { - id: windowIcon - text: MediaService.isPlaying ? "pause" : "play_arrow" - font.pointSize: Style.fontSizeL * scaling - verticalAlignment: Text.AlignVCenter - anchors.verticalCenter: parent.verticalCenter - visible: getTitle() !== "" + id: windowIcon + text: MediaService.isPlaying ? "pause" : "play_arrow" + font.pointSize: Style.fontSizeL * scaling + verticalAlignment: Text.AlignVCenter + anchors.verticalCenter: parent.verticalCenter + visible: !Settings.data.audio.showMiniplayerAlbumArt && getTitle() !== "" && !trackArt.visible + } + + Column { + anchors.verticalCenter: parent.verticalCenter + visible: Settings.data.audio.showMiniplayerAlbumArt + + Rectangle { + width: 16 * scaling + height: 16 * scaling + radius: width * 0.5 + color: Color.transparent + antialiasing: true + clip: true + + NImageRounded { + id: trackArt + visible: MediaService.trackArtUrl.toString() !== "" + anchors.fill: parent + anchors.verticalCenter: parent.verticalCenter + anchors.margins: scaling + imagePath: MediaService.trackArtUrl + fallbackIcon: MediaService.isPlaying ? "pause" : "play_arrow" + borderWidth: 0 + border.color: Color.transparent + imageRadius: width + antialiasing: true + } + + // Fallback icon when no album art available + NIcon { + id: windowIconFallback + text: MediaService.isPlaying ? "pause" : "play_arrow" + font.pointSize: Style.fontSizeL * scaling + verticalAlignment: Text.AlignVCenter + anchors.verticalCenter: parent.verticalCenter + visible: getTitle() !== "" && !trackArt.visible + } + } } NText { diff --git a/Modules/SettingsPanel/Tabs/AudioTab.qml b/Modules/SettingsPanel/Tabs/AudioTab.qml index 14b6432..cbab92b 100644 --- a/Modules/SettingsPanel/Tabs/AudioTab.qml +++ b/Modules/SettingsPanel/Tabs/AudioTab.qml @@ -238,7 +238,7 @@ ColumnLayout { } } } - } + // Divider NDivider { diff --git a/Services/CavaService.qml b/Services/CavaService.qml index b58e09a..e821009 100644 --- a/Services/CavaService.qml +++ b/Services/CavaService.qml @@ -9,7 +9,7 @@ Singleton { id: root property var values: Array(barsCount).fill(0) - property int barsCount: 32 + property int barsCount: 24 property var config: ({ "general": { @@ -37,7 +37,7 @@ Singleton { Process { id: process stdinEnabled: true - running: (Settings.data.audio.visualizerType !== "none") && PanelService.sidePanel.isLoaded + running: (Settings.data.audio.visualizerType !== "none") && (PanelService.sidePanel.isLoaded || Settings.data.audio.showMiniplayerCava) command: ["cava", "-p", "/dev/stdin"] onExited: { stdinEnabled = true