Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: boot animation — drifting triangles + animated W install prompt

Replace static bar with geometric triangle decorations that drift
across the screen. W install prompt now pulses with a background
pill and triangle arrow indicator.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+51 -6
+51 -6
fedac/native/src/ac-native.c
··· 1676 1676 } 1677 1677 } 1678 1678 1679 - // Bottom: shrinking time bar + W hint 1679 + // Animated triangles — geometric decoration 1680 + if (alpha > 30) { 1681 + int tri_alpha = (int)(alpha * 0.15); 1682 + int W = screen->width; 1683 + int H = screen->height; 1684 + // Drifting triangles based on frame counter 1685 + for (int ti = 0; ti < 6; ti++) { 1686 + double phase = (double)f * 0.02 + ti * 1.047; // 60° apart 1687 + int cx = (int)(W * 0.5 + W * 0.35 * sin(phase + 1.5708)); 1688 + int cy = (int)(H * 0.5 + H * 0.3 * sin(phase * 0.7)); 1689 + int sz = 8 + ti * 3 + (int)(4.0 * sin(f * 0.05 + ti)); 1690 + ACColor tc = is_day 1691 + ? (ACColor){180 - ti*15, 140 - ti*10, 120, (uint8_t)tri_alpha} 1692 + : (ACColor){80 + ti*20, 60 + ti*15, 120 + ti*10, (uint8_t)tri_alpha}; 1693 + graph_ink(graph, tc); 1694 + // Draw triangle as 3 lines 1695 + int x0 = cx, y0 = cy - sz; 1696 + int x1 = cx - sz, y1 = cy + sz/2; 1697 + int x2 = cx + sz, y2 = cy + sz/2; 1698 + graph_line(graph, x0, y0, x1, y1); 1699 + graph_line(graph, x1, y1, x2, y2); 1700 + graph_line(graph, x2, y2, x0, y0); 1701 + } 1702 + } 1703 + 1704 + // Bottom: shrinking time bar 1680 1705 int bar_full = screen->width - 40; 1681 1706 int bar_remaining = (int)((1.0 - t) * bar_full); 1682 1707 if (bar_remaining > 0) { ··· 1684 1709 graph_box(graph, 20, screen->height - 6, bar_remaining, 3, 1); 1685 1710 } 1686 1711 1687 - // Show W hint after initial fade 1712 + // Animated W install prompt 1688 1713 if (alpha > 100 && show_install) { 1689 - graph_ink(graph, (ACColor){140, 100, 120, (uint8_t)(alpha / 3)}); 1714 + // Pulsing box behind the text 1715 + double pulse = 0.5 + 0.5 * sin(f * 0.1); 1716 + int pa = (int)(40 + 30 * pulse); 1690 1717 const char *hint = is_installed_on_hd() 1691 - ? "W: update disk install" : "W: install to disk"; 1718 + ? "W: update" : "W: install to disk"; 1692 1719 int hw = font_measure_matrix(hint, 1); 1693 - font_draw_matrix(graph, hint, 1694 - (screen->width - hw) / 2, screen->height - 18, 1); 1720 + int hx = (screen->width - hw) / 2; 1721 + int hy = screen->height - 20; 1722 + // Pulsing background pill 1723 + graph_ink(graph, is_day 1724 + ? (ACColor){200, 160, 120, (uint8_t)pa} 1725 + : (ACColor){60, 40, 80, (uint8_t)pa}); 1726 + graph_box(graph, hx - 4, hy - 2, hw + 8, 12, 1); 1727 + // Triangle arrow pointing down at the text 1728 + int ax = hx - 10; 1729 + int ay = hy + 3; 1730 + graph_ink(graph, is_day 1731 + ? (ACColor){180, 120, 60, (uint8_t)(alpha / 2)} 1732 + : (ACColor){200, 150, 255, (uint8_t)(alpha / 2)}); 1733 + graph_line(graph, ax, ay - 3, ax, ay + 3); 1734 + graph_line(graph, ax, ay + 3, ax - 3, ay); 1735 + // Text with higher contrast 1736 + graph_ink(graph, is_day 1737 + ? (ACColor){120, 60, 0, (uint8_t)(alpha * 2 / 3)} 1738 + : (ACColor){220, 180, 255, (uint8_t)(alpha * 2 / 3)}); 1739 + font_draw_matrix(graph, hint, hx, hy, 1); 1695 1740 } 1696 1741 1697 1742 ac_display_present(display, screen, pixel_scale);