Skip to content

feat: responsive layout for handheld, desktop and TV screens - #129

Merged
nextestudios merged 3 commits into
mainfrom
feature/36-responsive-layout
Sep 27, 2026
Merged

nextestudios merged 3 commits into
mainfrom
feature/36-responsive-layout

Conversation

@nextestudios

Copy link
Copy Markdown
Owner

Summary

Responsive layout for handhelds, desktops and TVs (#36), plus a dev-only screenshot mode that provides the visual evidence for #36 and #33.

  • Breakpoints (ControlFS.Core/Layout/LayoutBreakpoints, pure and unit-tested): tier chosen from the effective size (pixels ÷ Windows scale), the rasterization scale and the Windows text-size factor.
    • Compact: below 900 effective height or 1360 width "in text units" (1280×720/800 handhelds, 1080p at 150%, 4K at 300%, or 1080p with 150% text): tighter spacing, smaller logo, 44 px keys.
    • Regular: 1080p at 100%, 4K at 200% (reference tokens).
    • Large: from 1300 effective height (4K at 100–125%): fonts, spacing, icons and focus ring scale up to 2× so a 4K TV at 100% keeps 1080p proportions (readable at ~3 m).
    • Windows text scaling is respected: WinUI still scales every text; the text factor only reduces the space available, so layout switches to compact instead of clipping.
  • Theme tokens are now derived from the current profile; MainWindow recomputes it on resize, DPI change and UISettings.TextScaleFactorChanged, and rebuilds header, list template and footer.
  • No essential action hidden at 1280×720: footer prompts wrap (new WrapPanel) instead of a horizontal scroller the controller can't reach; menus/dialogs/keyboard never grow taller than the window, and the focused item is brought into view (the app menu's lower items were previously invisible even at 1080p); status text in the header trims instead of squeezing the path.
  • Compact list: fixed-width state column so marked and unmarked rows stay aligned; the type column drops below 1200 effective width.
  • Glyphs (feat: create original vector button glyphs for Xbox, PlayStation, Nintendo and generic layouts #33): after reviewing the gallery, single-direction D-pad glyphs now dim the unused arms (the small arrows alone were unreadable at 100%), and L3/R3 differ from the plain stick (solid disc + press arrow).
  • --render-screens <dir> (dev only, documented in docs/TESTING.md and docs/build-and-release.md): lays out the real views (home, folder, compact list, app menu scrolled below the fold, on-screen keyboard) at 1280×720, 1280×800 (+150% text), 1920×1080 (100%/150%) and 3840×2160 (100%/200%/300%), renders a glyph gallery (all families, dark/light, 100/200/300%), saves PNGs via RenderTargetBitmap plus a report.txt of measured heights, and exits. Uses a temp data folder, no update service/network. Without the switch the app behaves as before.
  • smoke.yml (manual only, no new triggers): new step runs the portable exe with --render-screens and uploads the smoke-screens artifact.

Testing

  • CI: unit tests for the breakpoint boundaries (720p/800p/1080p/4K at their usual scales, compact thresholds, text scaling, width-limited growth).
  • Smoke run on this branch: screenshots reviewed for all four acceptance sizes (details in the PR comment).
  • Manual (docs/TESTING.md → "Layout responsivo (enhancement: responsive layout for TV, desktop and handheld screens #36)"): real handheld, TV at ~3 m, live text-size change, moving between monitors with different DPI.

Closes #36

🤖 Generated with Claude Code

nextestudios and others added 3 commits September 27, 2026 00:59
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nextestudios
nextestudios force-pushed the feature/36-responsive-layout branch from ada10d1 to 88542e3 Compare September 27, 2026 03:59
@nextestudios

Copy link
Copy Markdown
Owner Author

Screenshot evidence — Smoke run https://github.com/nextestudios/ControlFS/actions/runs/36293033501 (artifact smoke-screens, after rebase on main).

Reviewed PNGs (home, folder, compact list, app menu scrolled below the fold, on-screen keyboard):

  • 1280×720 @100% (Compact): header/list/footer all visible; all footer prompts on one line (keyboard context wraps where needed); app menu fits the window and the focused item near the end is scrolled into view; keyboard card 631×469 fits.
  • 1280×800 @100% and 1280×800 with 150% text: same; with larger text the footer wraps to two lines instead of hiding prompts; keyboard card 927×523 fits.
  • 1920×1080 @100%/150%: Regular / Compact tiers; nothing clipped.
  • 3840×2160 @100% (Large, 2× fonts/spacing/ring: 1080p proportions), @200% (Regular), @300% (Compact): nothing clipped.
  • report.txt: 40 captures, no "NÃO CABE" (modal taller than window) and no squeezed list.

Found and fixed while reviewing: compact rows had misaligned date/size columns between marked and unmarked rows (state column now fixed width); single-direction D-pad glyphs and L3/R3 were ambiguous at 100% (see #33).

@nextestudios
nextestudios merged commit da65650 into main Sep 27, 2026
3 checks passed
@nextestudios
nextestudios deleted the feature/36-responsive-layout branch September 27, 2026 04:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

enhancement: responsive layout for TV, desktop and handheld screens

1 participant