#118: flashing lamps draw ON TOP of the MFD imagery -- the invite is visible

The glass windows paint buttons UNDER the display surface (only a sliver of
edge protrudes), so the RIO flash commands were arriving ([lamp] 0xb <- 0x37
FLASHING in every trace) while the operator "never saw it flash" -- the
blink was a few masked pixels.  Lamps carrying RIO flash bits (state & 3)
now re-draw their full face above the surface with the tick-phased shade:
the gotoEngineering / engEject invites read like the pod's backlit keys.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-03 20:36:57 -05:00
co-authored by Claude Fable 5
parent fa3d634ed3
commit 5f79dcee3b
+26
View File
@@ -809,6 +809,32 @@ static void
SelectObject(dc, oldBrush);
SelectObject(dc, oldPen);
DeleteObject(pen);
// FLASHING lamps re-draw ON TOP of the surface (#118): the alarm
// invites (gotoEngineering / engEject, RIO flash bits state&3) were
// invisible under the imagery -- only the few protruding edge pixels
// blinked, and the operator "never saw it flash". The pod's keys
// were physical backlit buttons BESIDE the screen; when one carries
// a FLASH state, give it its full face back so the invite reads.
for (int i = 0; i < w->buttonCount; ++i)
{
const GButton &b = w->buttons[i];
int state = PadRIO::GetLampState(b.address);
if ((state & 3) == 0)
continue; // not flashing
int shade = LampBrightnessOf(state, tick);
COLORREF bright = (b.color == ClrYellow) ? RGB(245, 210, 60)
: (b.color == ClrBlue) ? RGB(205, 228, 255)
: RGB(230, 70, 70);
COLORREF dim = (b.color == ClrYellow) ? RGB(70, 60, 24)
: (b.color == ClrBlue) ? RGB(70, 86, 120)
: RGB(64, 40, 40);
HBRUSH face = CreateSolidBrush((shade >= 2) ? bright : dim);
RECT r = b.rect;
FillRect(dc, &r, face);
DeleteObject(face);
FrameRect(dc, &r, (HBRUSH)GetStockObject(WHITE_BRUSH));
}
}
BitBlt(winDC, 0, 0, client.right - client.left, client.bottom - client.top,