forked from Shinonome/dots-hyprland
92 lines
2.4 KiB
QML
92 lines
2.4 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import qs
|
|
import qs.services
|
|
import qs.modules.common
|
|
import qs.modules.common.functions
|
|
import qs.modules.waffle.looks
|
|
import qs.modules.waffle.actionCenter
|
|
import qs.modules.waffle.actionCenter.volumeControl
|
|
|
|
ColumnLayout {
|
|
id: root
|
|
property var screen: root.QsWindow.window?.screen
|
|
property var brightnessMonitor: Brightness.getMonitorForScreen(screen)
|
|
spacing: 12
|
|
|
|
RowLayout {
|
|
spacing: 4
|
|
|
|
WPanelIconButton {
|
|
color: colBackground
|
|
property real animationValue: root.brightnessMonitor?.brightness ?? 0
|
|
rotation: animationValue * 180
|
|
scale: 0.8 + animationValue * 0.2
|
|
iconName: "weather-sunny"
|
|
|
|
Behavior on animationValue {
|
|
animation: Looks.transition.longMovement.createObject(this)
|
|
}
|
|
}
|
|
|
|
WSlider {
|
|
Layout.fillWidth: true
|
|
value: root.brightnessMonitor?.brightness ?? 0
|
|
scrollable: true
|
|
onMoved: {
|
|
root.brightnessMonitor?.setBrightness(value)
|
|
}
|
|
}
|
|
|
|
WPanelIconButton {
|
|
opacity: 0
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
spacing: 4
|
|
|
|
WPanelIconButton {
|
|
iconName: WIcons.volumeIcon
|
|
onClicked: Audio.toggleMute();
|
|
}
|
|
|
|
WSlider {
|
|
Layout.fillWidth: true
|
|
value: Audio.sink.audio.volume
|
|
scrollable: true
|
|
onMoved: {
|
|
Audio.sink.audio.volume = value;
|
|
}
|
|
}
|
|
|
|
WPanelIconButton {
|
|
Component {
|
|
id: volumeControlComp
|
|
VolumeControl {}
|
|
}
|
|
onClicked: {
|
|
ActionCenterContext.push(volumeControlComp)
|
|
}
|
|
contentItem: Item {
|
|
anchors.centerIn: parent
|
|
Row {
|
|
anchors.centerIn: parent
|
|
spacing: -1
|
|
FluentIcon {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
implicitSize: 18
|
|
icon: "options"
|
|
}
|
|
FluentIcon {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
implicitSize: 12
|
|
icon: "chevron-right"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} |