Launcher: a grid of App tiles with icons #9

Open
opened 2026-10-05 09:50:55 +00:00 by twisla · 0 comments
Owner

Idea

Replace the Launcher's plain list with a grid of tiles. Each App gets an icon and its name, and the selected tile is clearly highlighted. You move around with the arrow keys and press Enter to open, as now. It should look like the home screen of a small device, not a menu.

Why

The Launcher is the first thing you see. A list worked while there were four Apps. With SSH (#2), Files (#3) and Issues (#4) on the way, a grid scans faster and looks the part.

What's known

  • Space.
    • The content area is 240 × about 120 pixels below the status bar.
    • 4 × 2 tiles of about 56 × 56, or 3 × 2 of about 76 × 56, fit on one page.
    • With more Apps than that, it needs pages (with page dots) or vertical scrolling.
  • Colour. The canvas is 8-bit RGB332 (Q46 in M1 saved 32 KB of RAM). That's 256 colours: smooth gradients band, and the icons have to be designed for this palette. Flat colours, outlines and a few shades look fine; photos and gradients don't.
  • Icons.
    • Stored in flash, not RAM. A 32 × 32 icon is 128 bytes at 1 bit per pixel, or 512 bytes with 16 colours from a palette.
    • A small converter script (PNG → C array) keeps them editable as images.
    • Each App provides its icon when it's registered (registerApp in src/main.cpp).
  • Movement. The Launcher uses a ListModel today. A grid needs its own small model (2D movement, wrapping, pages), and that can be host-tested.
  • Polish to consider:
    • Showing state on a tile, like a badge for unread IRC messages, a GNSS fix or a VPN being up.
    • A short animation when moving the selection, if it can be drawn fast enough on the SPI display. Measure the frame time.
  • Hidden Apps (the Widget demo and Setup) stay hidden, as now.

Questions for the design round

  1. Which layout: 4 × 2, 3 × 2, or something else? What when there are more Apps than tiles: pages, or scrolling?
  2. Should the icon style be monochrome with the theme's accent colour, or full colour per App? Who draws them: by hand in an editor, or from an existing open icon set with a compatible licence (the project is GPL-3.0)?
  3. Should tiles show live state (badges, small status text), or just icon and name?
  4. Should the order be fixed, user-arranged, or most recently used first?
  5. Should keyboard shortcuts open an App directly from the Launcher, for example the first letter or 1 to 9?
  6. Should the list view stay as an option in Settings?

Related

src/apps/launcher_app.cpp, src/ui/screen.cpp (the RGB332 canvas), src/ui/theme.h, lib/ui/src/list_model.h, docs/milestones/M1.md (Q46).

## Idea Replace the Launcher's plain list with a grid of tiles. Each App gets an icon and its name, and the selected tile is clearly highlighted. You move around with the arrow keys and press Enter to open, as now. It should look like the home screen of a small device, not a menu. ## Why The Launcher is the first thing you see. A list worked while there were four Apps. With SSH (#2), Files (#3) and Issues (#4) on the way, a grid scans faster and looks the part. ## What's known - **Space.** - The content area is 240 × about 120 pixels below the status bar. - 4 × 2 tiles of about 56 × 56, or 3 × 2 of about 76 × 56, fit on one page. - With more Apps than that, it needs pages (with page dots) or vertical scrolling. - **Colour.** The canvas is 8-bit RGB332 (Q46 in M1 saved 32 KB of RAM). That's 256 colours: smooth gradients band, and the icons have to be designed for this palette. Flat colours, outlines and a few shades look fine; photos and gradients don't. - **Icons.** - Stored in flash, not RAM. A 32 × 32 icon is 128 bytes at 1 bit per pixel, or 512 bytes with 16 colours from a palette. - A small converter script (PNG → C array) keeps them editable as images. - Each App provides its icon when it's registered (`registerApp` in `src/main.cpp`). - **Movement.** The Launcher uses a `ListModel` today. A grid needs its own small model (2D movement, wrapping, pages), and that can be host-tested. - **Polish to consider:** - Showing state on a tile, like a badge for unread IRC messages, a GNSS fix or a VPN being up. - A short animation when moving the selection, if it can be drawn fast enough on the SPI display. Measure the frame time. - **Hidden Apps** (the Widget demo and Setup) stay hidden, as now. ## Questions for the design round 1. Which layout: 4 × 2, 3 × 2, or something else? What when there are more Apps than tiles: pages, or scrolling? 2. Should the icon style be monochrome with the theme's accent colour, or full colour per App? Who draws them: by hand in an editor, or from an existing open icon set with a compatible licence (the project is GPL-3.0)? 3. Should tiles show live state (badges, small status text), or just icon and name? 4. Should the order be fixed, user-arranged, or most recently used first? 5. Should keyboard shortcuts open an App directly from the Launcher, for example the first letter or 1 to 9? 6. Should the list view stay as an option in Settings? ## Related `src/apps/launcher_app.cpp`, `src/ui/screen.cpp` (the RGB332 canvas), `src/ui/theme.h`, `lib/ui/src/list_model.h`, `docs/milestones/M1.md` (Q46).
twisla added the
kind
feature
area/appsarea/ui
status
needs-design
priority
medium
labels 2026-10-05 09:50:55 +00:00
twisla added this to the U1 Look and feel milestone 2026-10-05 20:14:07 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: twisla/roro9stack#9