diff --git a/shell/applets/CpuApplet.qml b/shell/applets/CpuApplet.qml index d6e590a..82528d6 100644 --- a/shell/applets/CpuApplet.qml +++ b/shell/applets/CpuApplet.qml @@ -12,6 +12,14 @@ Column { property bool active: true + function _loadColor(pct) { + const t = Math.max(0, Math.min(100, pct)) / 100; + const a = t < 0.5 ? S.Theme.base0B : S.Theme.base0A; + const b = t < 0.5 ? S.Theme.base0A : S.Theme.base08; + const u = t < 0.5 ? t * 2 : (t - 0.5) * 2; + return Qt.rgba(a.r + (b.r - a.r) * u, a.g + (b.g - a.g) * u, a.b + (b.b - a.b) * u, 1); + } + // Per-core rows Repeater { model: root.cores.length @@ -22,7 +30,7 @@ Column { readonly property int _u: root.cores[index]?.usage ?? 0 readonly property real _f: root.cores[index]?.freq_ghz ?? 0 - readonly property color _barColor: S.Theme.loadColor(_u) + readonly property color _barColor: root._loadColor(_u) readonly property bool _throttled: { const maxF = root.coreMaxFreq[index] ?? 0; return maxF > 0 && _f < maxF * 0.85 && _u >= 60; @@ -210,7 +218,7 @@ Column { anchors.rightMargin: 12 anchors.verticalCenter: parent.verticalCenter text: modelData.cpu.toFixed(1) + "%" - color: S.Theme.loadColor(modelData.cpu) + color: root._loadColor(modelData.cpu) font.pixelSize: S.Theme.fontSize - 2 font.family: S.Theme.fontFamily width: 36 diff --git a/shell/applets/DiskApplet.qml b/shell/applets/DiskApplet.qml index 40ca390..16dee79 100644 --- a/shell/applets/DiskApplet.qml +++ b/shell/applets/DiskApplet.qml @@ -17,6 +17,14 @@ Column { return bytes + "B"; } + function _barColor(pct) { + const t = Math.max(0, Math.min(100, pct)) / 100; + const a = t < 0.5 ? S.Theme.base0B : S.Theme.base0A; + const b = t < 0.5 ? S.Theme.base0A : S.Theme.base08; + const u = t < 0.5 ? t * 2 : (t - 0.5) * 2; + return Qt.rgba(a.r + (b.r - a.r) * u, a.g + (b.g - a.g) * u, a.b + (b.b - a.b) * u, 1); + } + Repeater { model: root.mounts @@ -56,7 +64,7 @@ Column { Rectangle { width: parent.width * (modelData.pct / 100) height: parent.height - color: S.Theme.loadColor(modelData.pct) + color: root._barColor(modelData.pct) radius: 2 Behavior on width { NumberAnimation { diff --git a/shell/applets/GpuApplet.qml b/shell/applets/GpuApplet.qml index 3a313fb..7b2272f 100644 --- a/shell/applets/GpuApplet.qml +++ b/shell/applets/GpuApplet.qml @@ -8,6 +8,14 @@ Column { property bool active: true + function _loadColor(pct) { + const t = Math.max(0, Math.min(100, pct)) / 100; + const a = t < 0.5 ? S.Theme.base0B : S.Theme.base0A; + const b = t < 0.5 ? S.Theme.base0A : S.Theme.base08; + const u = t < 0.5 ? t * 2 : (t - 0.5) * 2; + return Qt.rgba(a.r + (b.r - a.r) * u, a.g + (b.g - a.g) * u, a.b + (b.b - a.b) * u, 1); + } + function _fmt(gb) { return gb >= 10 ? gb.toFixed(1) + "G" : gb.toFixed(2) + "G"; } @@ -33,7 +41,7 @@ Column { anchors.rightMargin: 12 anchors.verticalCenter: parent.verticalCenter text: S.SystemStats.gpuUsage + "%" - color: S.Theme.loadColor(S.SystemStats.gpuUsage) + color: root._loadColor(S.SystemStats.gpuUsage) font.pixelSize: S.Theme.fontSize font.family: S.Theme.fontFamily font.bold: true @@ -62,7 +70,7 @@ Column { Rectangle { width: parent.width * Math.min(1, S.SystemStats.gpuUsage / 100) height: parent.height - color: S.Theme.loadColor(S.SystemStats.gpuUsage) + color: root._loadColor(S.SystemStats.gpuUsage) radius: 3 Behavior on width { enabled: root.active @@ -105,7 +113,7 @@ Column { const offset = maxSamples - d.length; for (let i = 0; i < d.length; i++) { const barH = Math.max(1, height * d[i] / 100); - const col = S.Theme.loadColor(d[i]); + const col = root._loadColor(d[i]); ctx.fillStyle = col.toString(); ctx.fillRect((offset + i) * bw, height - barH, Math.max(1, bw - 0.5), barH); } diff --git a/shell/applets/TemperatureApplet.qml b/shell/applets/TemperatureApplet.qml index 7ff7e44..bc7ed73 100644 --- a/shell/applets/TemperatureApplet.qml +++ b/shell/applets/TemperatureApplet.qml @@ -21,6 +21,14 @@ Column { } } + function _tempColor(celsius) { + const t = Math.max(0, Math.min(100, celsius)) / 100; + const a = t < 0.5 ? S.Theme.base0B : S.Theme.base0A; + const b = t < 0.5 ? S.Theme.base0A : S.Theme.base08; + const u = t < 0.5 ? t * 2 : (t - 0.5) * 2; + return Qt.rgba(a.r + (b.r - a.r) * u, a.g + (b.g - a.g) * u, a.b + (b.b - a.b) * u, 1); + } + // Header - current temp Item { width: root.width @@ -242,7 +250,7 @@ Column { anchors.rightMargin: 12 anchors.verticalCenter: parent.verticalCenter text: modelData.celsius + "\u00B0C" - color: S.Theme.loadColor(modelData.celsius) + color: root._tempColor(modelData.celsius) font.pixelSize: S.Theme.fontSize - 2 font.family: S.Theme.fontFamily font.bold: _isActive diff --git a/shell/lock/LockSurface.qml b/shell/lock/LockSurface.qml index 6c1620d..9520fde 100644 --- a/shell/lock/LockSurface.qml +++ b/shell/lock/LockSurface.qml @@ -239,27 +239,6 @@ WlSessionLockSurface { } } - // Clear password after idle - wiggle then clear - Timer { - id: _clearTimer - interval: 30000 - running: _keyInput.text.length > 0 && root.auth.state !== "busy" - onTriggered: { - if (!S.Theme.reducedMotion) - _shakeAnim.restart(); - _keyInput.text = ""; - } - } - - // Restart clear timer on each keystroke - Connections { - target: _keyInput - function onTextChanged() { - if (_keyInput.text.length > 0) - _clearTimer.restart(); - } - } - // Unlock animation property bool _unlocking: false diff --git a/shell/services/Theme.qml b/shell/services/Theme.qml index 05311e2..c806a10 100644 --- a/shell/services/Theme.qml +++ b/shell/services/Theme.qml @@ -39,15 +39,6 @@ QtObject { property bool _reducedMotionConfig: false readonly property bool reducedMotion: _reducedMotionConfig || PowerProfileService.powerSaver - // Green -> yellow -> red gradient for 0-100% load/usage values - function loadColor(pct) { - const t = Math.max(0, Math.min(100, pct)) / 100; - const a = t < 0.5 ? root.base0B : root.base0A; - const b = t < 0.5 ? root.base0A : root.base08; - const u = t < 0.5 ? t * 2 : (t - 0.5) * 2; - return Qt.rgba(a.r + (b.r - a.r) * u, a.g + (b.g - a.g) * u, a.b + (b.b - a.b) * u, 1); - } - property FileView _themeFile: FileView { path: (Quickshell.env("XDG_CONFIG_HOME") || (Quickshell.env("HOME") + "/.config")) + "/nova-shell/theme.json" watchChanges: true