60 lines
1.8 KiB
QML
60 lines
1.8 KiB
QML
import QtQuick
|
|
import "root:/config"
|
|
|
|
// A segmented load meter — slanted ticks that light up left to right. Reads as
|
|
// a gauge at a glance and keeps the panel language consistent.
|
|
Item {
|
|
id: root
|
|
|
|
property real value: 0 // 0..100
|
|
property int segments: 14
|
|
property real segmentWidth: 4
|
|
property real spacing: 3
|
|
property color activeColor: Theme.heat(value)
|
|
property color idleColor: Theme.alpha(Theme.outline, 0.55)
|
|
property real lean: Theme.skew
|
|
|
|
readonly property int litCount: Math.round(Math.max(0, Math.min(100, value)) / 100 * segments)
|
|
|
|
implicitWidth: segments * segmentWidth + (segments - 1) * spacing
|
|
implicitHeight: 14
|
|
|
|
Row {
|
|
anchors.fill: parent
|
|
spacing: root.spacing
|
|
|
|
Repeater {
|
|
model: root.segments
|
|
|
|
Item {
|
|
required property int index
|
|
width: root.segmentWidth
|
|
height: root.height
|
|
|
|
Rectangle {
|
|
width: root.segmentWidth
|
|
height: root.height
|
|
color: parent.index < root.litCount ? root.activeColor : root.idleColor
|
|
|
|
// Peak segments glow, so a pegged CPU is visible peripherally.
|
|
opacity: parent.index < root.litCount
|
|
? (parent.index >= root.segments - 2 ? 1.0 : 0.9)
|
|
: 1.0
|
|
|
|
transform: Matrix4x4 {
|
|
matrix: Qt.matrix4x4(
|
|
1, -root.lean, 0, root.height * root.lean,
|
|
0, 1, 0, 0,
|
|
0, 0, 1, 0,
|
|
0, 0, 0, 1)
|
|
}
|
|
|
|
Behavior on color {
|
|
ColorAnimation { duration: Theme.durBase }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|