v0.7.0: CPU temperature tray icon, and fix unreadable two-digit icons
Adds a second tray icon showing CPU temperature in Celsius next to the usage one, updated every 5 seconds and toggleable from the right-click menu (on by default, persisted in HKCU). Reads the `Thermal Zone Information` performance counters via PDH rather than the usual `MSAcpi_ThermalZoneTemperature` WMI class, because that one requires administrator rights and this app is deliberately unelevated. Going through PDH instead of WMI-over-COM also means no new dependencies -- just a `Win32_System_Performance` feature on the `windows-sys` already in the tree. Counter names are localized, so the counter is bound with `PdhAddEnglishCounterW`; using the plain path would have worked here and silently failed on non-English Windows. Zone naming is firmware-specific, so rather than hardcoding `\_TZ.CPUZ`, implausible readings are filtered out (unwired zones report absolute zero), a CPU-named zone is preferred when present, and otherwise the hottest plausible zone wins. Machines with no usable zone -- most VMs -- get the same gray icon the usage side already uses for missing data. Also fixes two bugs found while verifying this on a real tray screenshot: * Two-digit numbers were unreadable. Digit boxes were sized to fit the square canvas, but the badge drawn on it is a circle, so the corners of the segment bars fell outside it and were painted onto transparent background -- invisible against a dark taskbar, which is what turned "60" into a blob. The pre-existing test passed throughout, because fitting the square is a strictly weaker condition than fitting the circle. Digits are now sized to the circle, with a test and a debug_assert on the render path enforcing it. They are smaller and read better, since nothing is being cut off. * Only the first tray icon was promoted out of the overflow area. Windows keeps one NotifyIconSettings entry per icon and the promotion loop returned at the first match for this exe, which would have left the temperature icon behind the chevron. Verified against the live tray: reading matches an independent WMI query exactly (60 C vs 3332 deciKelvin), and tracks a sustained all-core load from 59 C to 66 C degree-for-degree. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TVx3iTxPQ1MhVggjB2f3B4
A
Arsen Apostolov committed
0b05576ccf355e8faecfbb7776ed42b006dec048
Parent: 08005c3