quickshell-toki-night/modules/osd/Content.qml

161 lines
4.6 KiB
QML

pragma ComponentBehavior: Bound
import qs.config
import qs.custom
import qs.services
import qs.util
import QtQuick
import QtQuick.Layouts
Item {
id: root
required property var uiState
required property Brightness.Monitor monitor
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
implicitWidth: layout.implicitWidth + 30
implicitHeight: layout.implicitHeight + sunset.height + 40
RowLayout {
id: layout
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 15
spacing: 10
// Speaker volume
CustomMouseArea {
implicitWidth: Config.osd.sliderWidth
implicitHeight: Config.osd.sliderLength
function onWheel(event: WheelEvent) {
if (event.angleDelta.y > 0)
Audio.increaseVolume();
else if (event.angleDelta.y < 0)
Audio.decreaseVolume();
}
acceptedButtons: Qt.RightButton
onClicked: Audio.sink.audio.muted = !Audio.muted
CustomFilledSlider {
anchors.fill: parent
color: Audio.muted ? Config.colors.error : Config.colors.volume
icon: Icons.getVolumeIcon(value, Audio.muted)
value: Audio.volume
onMoved: Audio.setVolume(value)
Behavior on color {
CAnim {
duration: Config.anim.durations.small
}
}
}
}
// Microphone
CustomMouseArea {
implicitWidth: Config.osd.sliderWidth
implicitHeight: Config.osd.sliderLength
function onWheel(event: WheelEvent) {
if (event.angleDelta.y > 0)
Audio.incrementSourceVolume();
else if (event.angleDelta.y < 0)
Audio.decrementSourceVolume();
}
acceptedButtons: Qt.RightButton
onClicked: Audio.source.audio.muted = !Audio.sourceMuted
CustomFilledSlider {
anchors.fill: parent
color: Audio.sourceMuted ? Config.colors.error : Config.colors.mic
icon: Icons.getMicVolumeIcon(value, Audio.sourceMuted)
value: Audio.sourceVolume
onMoved: Audio.setSourceVolume(value)
Behavior on color {
CAnim {
duration: Config.anim.durations.small
}
}
}
}
// Brightness
CustomMouseArea {
implicitWidth: Config.osd.sliderWidth
implicitHeight: Config.osd.sliderLength
function onWheel(event: WheelEvent) {
const monitor = root.monitor;
if (!monitor)
return;
if (event.angleDelta.y > 0)
monitor.setBrightness(monitor.brightness + 0.1);
else if (event.angleDelta.y < 0)
monitor.setBrightness(monitor.brightness - 0.1);
}
CustomFilledSlider {
anchors.fill: parent
color: Config.colors.brightness
icon: Icons.getBrightnessIcon(value)
value: root.monitor?.brightness ?? 0
onMoved: root.monitor?.setBrightness(value)
}
}
}
CustomRect {
id: sunset
anchors.top: layout.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 10
width: layout.width
height: 40
color: Hyprsunset.active ? Config.colors.brightness : Config.colors.container
radius: 7
Behavior on color {
CAnim { duration: Config.anim.durations.small }
}
StateLayer {
anchors.fill: parent
radius: parent.radius
color: Config.colors.secondary
function onClicked() {
if (Hyprsunset.active)
Hyprsunset.disable();
else
Hyprsunset.enable();
}
}
MaterialIcon {
anchors.centerIn: parent
text: "dark_mode"
font.pointSize: Config.font.size.large
color: Hyprsunset.active ? Config.colors.primaryDark : Config.colors.secondary
fill: Hyprsunset.active ? 1 : 0
Behavior on color {
CAnim { duration: Config.anim.durations.small }
}
}
}
}