From 10627e6e18edc7fac43bec7a6cfbcc47c5c4a5d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Fri, 9 Oct 2026 23:23:20 +0200 Subject: [PATCH] Launcher: the selected icon in slate, the name in white The selected icon was dark blue on its cyan tile, which read as black: it is the Status Bar's slate now. The App's name under the grid is white instead of cyan. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk --- docs/milestones/U1.md | 2 +- site/content/dev/milestones/u1.md | 2 +- src/apps/launcher_app.cpp | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/milestones/U1.md b/docs/milestones/U1.md index 571ef5d..e1dc112 100644 --- a/docs/milestones/U1.md +++ b/docs/milestones/U1.md @@ -68,7 +68,7 @@ The Launcher was a list of names. It is now a grid of icons. |---|---| | Layout | **4 × 3** tiles of 60 × 36, so the 11 Apps are on one page. Only the selected App's name is written, on a line under the grid: a name under every tile doesn't fit 60 pixels ("LoRa Scanner"). More than 12 Apps: the rows scroll | | Icons | **The website's own**: its nine 16 × 16 pictures (`site/static/img/icons-dark.svg`), doubled to 32 × 32, and two drawn the same way for SSH and the Shell. 1 bit a pixel (128 bytes each, in flash). The pictures are PNGs in `assets/icons/`, named after the App's id; `scripts/make_icons.py` writes `src/ui/icons.cpp` from them and CI checks the two match | -| Colours | **The website's**: cyan (#00dbff) on black, and the selected tile dark blue (#000055) on a cyan fill with notched corners. Both are RGB332 colours. The name under the grid is cyan too | +| Colours | **The website's**: cyan (#00dbff) on black, and the selected tile slate (#494955, the Status Bar's) on a cyan fill with notched corners. Both are RGB332 colours. The name under the grid is white | | Live state | **A dot** on the tile, from `App::badge()`: IRC (unread messages), GNSS (a Track recording), the LoRa Scanner (a Capture running), SSH (a session open). The Launcher asks every App on each pass and redraws when an answer changes | | Order | As registered, as before | | Shortcuts | None for now | diff --git a/site/content/dev/milestones/u1.md b/site/content/dev/milestones/u1.md index a3c6397..11bbb2c 100644 --- a/site/content/dev/milestones/u1.md +++ b/site/content/dev/milestones/u1.md @@ -76,7 +76,7 @@ The Launcher was a list of names. It is now a grid of icons. |---|---| | Layout | **4 × 3** tiles of 60 × 36, so the 11 Apps are on one page. Only the selected App's name is written, on a line under the grid: a name under every tile doesn't fit 60 pixels ("LoRa Scanner"). More than 12 Apps: the rows scroll | | Icons | **The website's own**: its nine 16 × 16 pictures (`site/static/img/icons-dark.svg`), doubled to 32 × 32, and two drawn the same way for SSH and the Shell. 1 bit a pixel (128 bytes each, in flash). The pictures are PNGs in `assets/icons/`, named after the App's id; `scripts/make_icons.py` writes `src/ui/icons.cpp` from them and CI checks the two match | -| Colours | **The website's**: cyan (#00dbff) on black, and the selected tile dark blue (#000055) on a cyan fill with notched corners. Both are RGB332 colours. The name under the grid is cyan too | +| Colours | **The website's**: cyan (#00dbff) on black, and the selected tile slate (#494955, the Status Bar's) on a cyan fill with notched corners. Both are RGB332 colours. The name under the grid is white | | Live state | **A dot** on the tile, from `App::badge()`: IRC (unread messages), GNSS (a Track recording), the LoRa Scanner (a Capture running), SSH (a session open). The Launcher asks every App on each pass and redraws when an answer changes | | Order | As registered, as before | | Shortcuts | None for now | diff --git a/src/apps/launcher_app.cpp b/src/apps/launcher_app.cpp index a8d5ae7..5101bdf 100644 --- a/src/apps/launcher_app.cpp +++ b/src/apps/launcher_app.cpp @@ -70,8 +70,9 @@ void LauncherApp::drawGrid(Canvas& c) { if (i >= static_cast(apps.size())) break; int x = kContent.x + col * kTileW, y = kContent.y + row * kTileH; int ix = x + (kTileW - icons::kSize) / 2, iy = y + (kTileH - icons::kSize) / 2; - // As on the website: cyan on black, and the chosen one dark on a cyan tile with notched corners. - uint16_t ink = i == selected ? kOnAccent : kAccent; + // As on the website: cyan on black, and the chosen one on a cyan tile with notched corners, + // in the Status Bar's slate. + uint16_t ink = i == selected ? kFaint : kAccent; if (i == selected) { int tx = ix - 6, tw = icons::kSize + 12; c.fillRect(tx + 4, y, tw - 8, kTileH, kAccent); @@ -100,7 +101,7 @@ void LauncherApp::drawGrid(Canvas& c) { } if (selected >= 0) { c.setFont(&fonts::bold); - c.setTextColor(kAccent); + c.setTextColor(kText); c.setTextDatum(top_center); c.drawString(apps[selected]->title, kContent.x + kContent.w / 2, kContent.y + kRows * kTileH + 1); }