Files
crosspoint-reader-mod/chat-summaries/2026-03-09_04-30-summary.md

27 lines
1.7 KiB
Markdown
Raw Permalink Normal View History

# BookInfo: Landscape Side-by-Side Layout
**Date**: 2026-03-09
**Task**: Implement a side-by-side layout for BookInfo in landscape orientation -- cover fixed on the left, scrollable metadata fields on the right. Portrait layout unchanged.
## Changes Made
### `src/activities/home/BookInfoActivity.h`
- Added `bool isLandscape` and `int coverPanelWidth` member variables.
### `src/activities/home/BookInfoActivity.cpp`
- **`onEnter()`**: Detects orientation via `renderer.getOrientation()`. In landscape, the cover thumbnail height fills the full content area (between header and button hints) instead of 2/5 of screen height.
- **`buildLayout()`**: Reads cover bitmap dimensions first. In landscape with a cover, computes `coverPanelWidth` (cover width + padding, capped at 40% of screen). Text fields are wrapped to the narrower right-panel width. Cover height is excluded from `contentHeight` (it sits beside, not above, the fields).
- **`render()`**: In landscape, draws the cover at a fixed position in the left panel (unaffected by scroll). Fields render in the right panel at `x = coverPanelWidth`. In portrait, existing behavior is preserved (cover above fields, both scroll together). The header fill + draw-on-top pattern continues to prevent content bleeding into the header zone.
## Behavior Summary
- **Portrait** (480x800): Cover on top, fields below, everything scrolls vertically (no change).
- **Landscape** (800x480): Cover pinned on left (centered vertically, fills content height), metadata fields scroll independently on the right.
- If no cover exists in landscape, the full screen width is used for fields (same as portrait but in landscape dimensions).
## Follow-up
None -- ready for hardware testing in all 4 orientations.