Add showing level of value through bar

This commit is contained in:
Sem
2026-04-03 19:52:27 +02:00
parent 406b8eb628
commit 506aeeff43
4 changed files with 72 additions and 19 deletions

View File

@@ -10,13 +10,13 @@ Item {
// ===================== // =====================
property int cpuUsage: 0 property int cpuUsage: 0
property int memUsage: 0 property int memUsage: 0
property int gpuUsage: 0
property var lastCpuIdle: 0 property var lastCpuIdle: 0
property var lastCpuTotal: 0 property var lastCpuTotal: 0
Process { Process {
id: cpuProc id: cpuProc
// get cpu usage, first line of /proc/stat
command: ["cat", "/proc/stat"] command: ["cat", "/proc/stat"]
stdout: StdioCollector { stdout: StdioCollector {
onStreamFinished: { onStreamFinished: {
@@ -56,12 +56,29 @@ Item {
var parts = data.trim().split(/\s+/); var parts = data.trim().split(/\s+/);
var total = parseInt(parts[1]) || 1; var total = parseInt(parts[1]) || 1;
var used = parseInt(parts[2]) || 0; var used = parseInt(parts[2]) || 0;
memUsage = Math.round(100 * used / total); root.memUsage = Math.round(100 * used / total);
} }
} }
Component.onCompleted: running = true Component.onCompleted: running = true
} }
Process {
id: gpuProc
command: ["cat", "/sys/class/drm/card1/device/gpu_busy_percent"]
stdout: StdioCollector {
onStreamFinished: {
console.log("GPU usage data:", this.text);
if (!this.text) {
return;
}
var gpuUsage = parseInt(this.text.trim()) || 0;
root.gpuUsage = gpuUsage;
}
}
}
// Update loop // Update loop
Timer { Timer {
interval: 2000 interval: 2000
@@ -70,6 +87,7 @@ Item {
onTriggered: { onTriggered: {
cpuProc.running = true; cpuProc.running = true;
memProc.running = true; memProc.running = true;
gpuProc.running = true;
} }
} }
} }

View File

@@ -48,6 +48,7 @@ ShellRoot {
cpuUsage: stats.cpuUsage cpuUsage: stats.cpuUsage
memUsage: stats.memUsage memUsage: stats.memUsage
gpuUsage: stats.gpuUsage
} }
} }

37
quickshell/ui/BarText.qml Normal file
View File

@@ -0,0 +1,37 @@
import QtQuick
import Quickshell
import "../constants"
Item {
id: root
property int value: 0
property string prefix: ""
property string separator: "-"
property int valuePadding: 3
property int padding: 4
property string paddingChar: "0"
width: textItem.implicitWidth + padding
height: textItem.implicitHeight + padding
Rectangle {
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
height: Math.max(1, root.value / 100 * parent.height)
color: Colors.md3.on_secondary
opacity: 1.0
}
Text {
id: textItem
anchors.centerIn: parent
z: 1
text: root.prefix + root.separator + String(root.value).padStart(root.valuePadding, root.paddingChar)
color: Colors.md3.inverse_primary
font.pixelSize: Constants.fontSize
font.family: Constants.fontFamily
font.bold: true
}
}

View File

@@ -16,6 +16,7 @@ Item {
property int cpuUsage: 0 property int cpuUsage: 0
property int memUsage: 0 property int memUsage: 0
property int gpuUsage: 0
RowLayout { RowLayout {
anchors.fill: parent anchors.fill: parent
@@ -71,35 +72,31 @@ Item {
RowLayout { RowLayout {
spacing: 10 spacing: 10
//TODO put this in separate component BarText {
Text { prefix: "C"
id: cpuText value: cpuUsage
text: "CPU: " + cpuUsage + "%"
color: Constants.colYellow
font.pixelSize: Constants.fontSize
font.family: Constants.fontFamily
font.bold: true
} }
Rectangle { Rectangle {
width: 1 width: 1
height: 16 height: 16
color: Constants.colMuted color: Colors.md3.on_background
} }
Text { BarText {
id: memText prefix: "M"
text: "Mem: " + memUsage + "%" value: memUsage
color: Constants.colCyan
font.pixelSize: Constants.fontSize
font.family: Constants.fontFamily
font.bold: true
} }
Rectangle { Rectangle {
width: 1 width: 1
height: 16 height: 16
color: Constants.colMuted color: Colors.md3.on_background
}
BarText {
prefix: "G"
value: gpuUsage
} }
Clock {} Clock {}