feat(display): boot icon carousel
On power-up, after the title splash the screen clears and each weather icon slides in from the right to centre with its colour-coded label, then slides out to the left — Fine, Fair, Changeable, Rain, Storm. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -99,6 +99,46 @@ static void drawIcon(WxCategory c, int x, int y, int W, int H) {
|
||||
}
|
||||
|
||||
// Layout for landscape 160 x 80.
|
||||
// Boot demo: each weather icon slides in from the right to centre, with its
|
||||
// category label below in the matching colour.
|
||||
void displayDemo() {
|
||||
WxCategory cats[5] = {WX_FINE, WX_FAIR, WX_CHANGEABLE, WX_RAIN, WX_STORM};
|
||||
const char* names[5] = {"Fine", "Fair", "Changeable", "Rain", "Storm"};
|
||||
const int W = 64, H = 52, y = 4;
|
||||
const int cxc = (160 - W) / 2; // centred icon x
|
||||
tft.fillScreen(ST77XX_BLACK); // clear the splash before the carousel
|
||||
for (int k = 0; k < 5; k++) {
|
||||
// slide in from the right edge to centre
|
||||
int px = 160 + 12;
|
||||
for (int x = 160; x >= cxc; x -= 12) {
|
||||
tft.fillRect(px, y, W, H, ST77XX_BLACK);
|
||||
drawIcon(cats[k], x, y, W, H);
|
||||
px = x;
|
||||
delay(26);
|
||||
}
|
||||
tft.fillRect(px, y, W, H, ST77XX_BLACK);
|
||||
drawIcon(cats[k], cxc, y, W, H);
|
||||
// label centred below in the category colour
|
||||
int len = 0; while (names[k][len]) len++; // size 2 = 12 px/char
|
||||
tft.setTextSize(2);
|
||||
tft.setTextColor(catColor(cats[k]));
|
||||
tft.setCursor((160 - len * 12) / 2, 60);
|
||||
tft.print(names[k]);
|
||||
delay(360);
|
||||
tft.fillRect(0, 60, 160, 20, ST77XX_BLACK); // drop the label before it leaves
|
||||
// slide out to the left edge
|
||||
px = cxc;
|
||||
for (int x = cxc - 12; x >= -W; x -= 12) {
|
||||
tft.fillRect(px, y, W, H, ST77XX_BLACK);
|
||||
drawIcon(cats[k], x, y, W, H);
|
||||
px = x;
|
||||
delay(24);
|
||||
}
|
||||
tft.fillRect(px, y, W, H, ST77XX_BLACK); // clear the last remnant
|
||||
}
|
||||
tft.setTextColor(ST77XX_WHITE);
|
||||
}
|
||||
|
||||
void displayRender(const AppState& s) {
|
||||
tft.fillScreen(ST77XX_BLACK);
|
||||
tft.setTextColor(ST77XX_WHITE);
|
||||
|
||||
Reference in New Issue
Block a user