# 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.