diff --git a/modules/bar/modules/StatusIcons.qml b/modules/bar/modules/StatusIcons.qml index f5bff04..8041009 100644 --- a/modules/bar/modules/StatusIcons.qml +++ b/modules/bar/modules/StatusIcons.qml @@ -1,6 +1,7 @@ import Quickshell import Quickshell.Services.UPower import QtQuick +import QtQuick.Effects import QtQuick.Layouts import qs.services import qs.config @@ -84,7 +85,7 @@ Container { } } - MaterialIcon { + Item { id: battery objectName: "battery" @@ -92,47 +93,66 @@ Container { Layout.leftMargin: hasBattery ? -2 : 0 Layout.topMargin: hasBattery ? 0.5 : 2 + implicitWidth: batteryIcon.width + implicitHeight: batteryIcon.height + readonly property bool hasBattery: UPower.displayDevice.isLaptopBattery - readonly property real percentage: UPower.displayDevice.percentage + readonly property real percentage: 0.5 // Power.displayDevice.percentage readonly property bool charging: !UPower.onBattery && batteryText.text !== "100" readonly property bool warning: UPower.onBattery && percentage < Config.services.batteryWarning + 0.01 - text: { - if (!hasBattery) { - if (PowerProfiles.profile === PowerProfile.PowerSaver) - return "energy_savings_leaf"; - if (PowerProfiles.profile === PowerProfile.Performance) - return "rocket_launch"; - return "balance"; - } - return `battery_android_full`; - } - fill: 1 - font.pointSize: hasBattery ? 18 : Config.font.size.normal - grade: 50 - font.weight: 100 - color: !hasBattery ? Config.colors.secondary : - warning ? Config.colors.errorBg : - batteryText.text === "100" ? Config.colors.battery : - Color.mute(Config.colors.battery, 0.6, 1.5) + MaterialIcon { + id: batteryIcon + anchors.centerIn: parent - CustomRect { - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.topMargin: 9 - anchors.bottomMargin: 9 - anchors.leftMargin: 3 - width: (battery.width - 7) * battery.percentage - radius: 2 + text: { + if (!battery.hasBattery) { + if (PowerProfiles.profile === PowerProfile.PowerSaver) + return "energy_savings_leaf"; + if (PowerProfiles.profile === PowerProfile.Performance) + return "rocket_launch"; + return "balance"; + } + return `battery_android_full`; + } + fill: 1 + font.pointSize: battery.hasBattery ? 18 : Config.font.size.normal + grade: 50 + font.weight: 100 + color: !battery.hasBattery ? Config.colors.secondary : + battery.warning ? Config.colors.errorBg : + batteryText.text === "100" ? Config.colors.battery : + Color.mute(Config.colors.battery, 0.6, 1.5) + + layer.enabled: true + } + + Item { + id: meter + anchors.fill: batteryIcon + visible: false + + CustomRect { + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + width: battery.width * battery.percentage + color: battery.warning ? Config.colors.batteryWarning : Config.colors.battery + } + } + + MultiEffect { + anchors.fill: batteryIcon visible: battery.hasBattery - color: battery.warning ? Config.colors.batteryWarning : Config.colors.battery + source: meter + maskEnabled: true + maskSource: batteryIcon } Row { anchors.centerIn: parent - anchors.horizontalCenterOffset: battery.charging ? width / 20 : -width / 15 + anchors.horizontalCenterOffset: battery.charging ? 0 : -width / 10 visible: battery.hasBattery spacing: -1 @@ -155,7 +175,7 @@ Container { visible: battery.charging text: "bolt" fill: 1 - color: Config.colors.bg + color: battery.warning ? Config.colors.batteryWarning : Config.colors.bg font.pointSize: 7 font.weight: 300 }