Files
dotfiles/.config/quickshell/nucleus-shell/modules/interface/bar/content/BatteryIndicatorModule.qml

58 lines
1.8 KiB
QML

import QtQuick
import QtQuick.Layouts
import qs.config
import qs.modules.components
import qs.services
Item {
id: batteryIndicatorModuleContainer
visible: UPower.batteryPresent
Layout.alignment: Qt.AlignVCenter
// Determine if bar is isVertical
property bool isVertical: ConfigResolver.bar(screen?.name ?? "").position === "left" || ConfigResolver.bar(screen?.name ?? "").position === "right"
implicitWidth: bgRect.implicitWidth
implicitHeight: bgRect.implicitHeight
Rectangle {
id: bgRect
color: isVertical ? Appearance.m3colors.m3primary : Appearance.m3colors.m3paddingContainer
radius: ConfigResolver.bar(screen?.name ?? "").modules.radius * Config.runtime.appearance.rounding.factor // No need to use metrics here...
implicitWidth: child.implicitWidth + Appearance.margin.large - (isVertical ? 10 : 0)
implicitHeight: ConfigResolver.bar(screen?.name ?? "").modules.height
}
RowLayout {
id: child
anchors.centerIn: parent
spacing: isVertical ? 0 : Metrics.spacing(8)
// Icon for isVertical bars
MaterialSymbol {
visible: isVertical
icon: UPower.battIcon
iconSize: Metrics.iconSize(20)
}
// Battery percentage text
StyledText {
animate: false
font.pixelSize: Metrics.fontSize(16)
rotation: isVertical ? 270 : 0
text: (isVertical ? UPower.percentage : UPower.percentage + "%")
}
// Circular progress for horizontal bars
CircularProgressBar {
visible: !isVertical
value: UPower.percentage / 100
icon: UPower.battIcon
iconSize: Metrics.iconSize(18)
Layout.bottomMargin: Metrics.margin(2)
}
}
}