feat(l1): one soft-cornered frame for popups, alerts and bubbles; small screen fixes

DisplayDriver gets drawSoftRect / fillSoftRect / drawPanel (the unread badge's
corner knockout; a panel also clears a 1 px moat so lines below stop short of
its border). Used by alerts, popups, the accent picker, the lock hint, chat
bubbles and the send button.

Fixes: no "Msg:" toast for a message landing in the open thread; Nodes scan
text fits the screen; the PIN pad skips the blanks beside 0; Auto-Advert is a
plain value row; the Admin picker says what it needs when empty; the GPS page
shows "-" instead of 999 before a first fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-10-01 22:13:11 +02:00
co-authored by Claude Opus 5.5
parent a6612ee2b0
commit 1580de53f5
7 changed files with 72 additions and 49 deletions
@@ -459,10 +459,10 @@ class MessagesScreen : public UIScreen {
static void drawHistRowFrame(DisplayDriver& d, int box_x, int box_w, int y, int bh, int lh, bool sel) {
d.setColor(DisplayDriver::LIGHT);
if (sel) {
d.fillRect(box_x, y, box_w, bh);
d.fillSoftRect(box_x, y, box_w, bh);
d.setColor(DisplayDriver::DARK);
} else {
d.drawRect(box_x, y, box_w, bh);
d.drawSoftRect(box_x, y, box_w, bh);
}
}
@@ -519,8 +519,8 @@ class MessagesScreen : public UIScreen {
int bw = ctw + 4;
int bx = d.width() - bw;
d.setColor(DisplayDriver::LIGHT);
if (sel) { d.fillRect(bx, cby, bw, lh); d.setColor(DisplayDriver::DARK); }
else d.drawRect(bx, cby, bw, lh);
if (sel) { d.fillSoftRect(bx, cby, bw, lh); d.setColor(DisplayDriver::DARK); }
else d.drawSoftRect(bx, cby, bw, lh);
d.setCursor(bx + 2, cby);
d.print(ctxt);
d.setColor(DisplayDriver::LIGHT);