SIGN IN SIGN UP

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