From a4ce97d7449d38a75e1ca89be1ac19405bf4e1ee Mon Sep 17 00:00:00 2001 From: MangaValk Date: Mon, 19 Oct 2026 17:57:22 +0200 Subject: [PATCH] Divergence meter: keep digits inside the tubes, close the domes The tube was 56 px wide while its dome (radius 28) spans 57, so the dome overshot the right wall by a pixel; tubes are now 57 px. The Nixie digits at size 110 were up to 60 px wide (plus the 1 px glow) in a 55 px tube; size 90 fits, and each digit is clipped to the inside of its glass. Co-Authored-By: Claude Opus 5.5 --- components/el512/steins.cpp | 8 ++++++-- docs/images/pages/sg_meter.png | Bin 8551 -> 8164 bytes esphome/el512-panel.yaml | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/components/el512/steins.cpp b/components/el512/steins.cpp index 7301cea..3b2a93f 100644 --- a/components/el512/steins.cpp +++ b/components/el512/steins.cpp @@ -98,7 +98,8 @@ constexpr int WORLD_LINE_COUNT = sizeof(WORLD_LINES) / sizeof(WORLD_LINES[0]); // One Nixie tube: glass outline, anode mesh, socket, and the lit digit. void tube(Display &it, const Fonts &f, int x, int y, char digit) { - constexpr int TW = 56, TH = 176, R = 28; + // Odd width so the dome (radius R, 2R + 1 pixels across) meets both walls. + constexpr int TW = 57, TH = 176, R = 28; const int cx = x + TW / 2; arc(it, cx, y + R, R, -90, 90); it.vertical_line(x, y + R, TH - R - 14); @@ -111,9 +112,12 @@ void tube(Display &it, const Fonts &f, int x, int y, char digit) { it.draw_pixel_at(mx, my); if (digit != ' ') { const char s[2] = {digit, 0}; - // Twice, one pixel apart, so the thin filament reads as glowing. + // Twice, one pixel apart, so the thin filament reads as glowing; kept + // inside the glass. + it.start_clipping(x + 2, y + 2, x + TW - 2, y + TH - 14); it.print(cx, y + TH / 2 - 8, f.nixie, TextAlign::CENTER, s); it.print(cx + 1, y + TH / 2 - 8, f.nixie, TextAlign::CENTER, s); + it.end_clipping(); } } diff --git a/docs/images/pages/sg_meter.png b/docs/images/pages/sg_meter.png index 69b2232794aeaee0f9699387b7d1354bc778bd96..afd94ae9d84a4c27f085e83fb354745662bb6af4 100644 GIT binary patch literal 8164 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