In landscape orientation the cover is pinned on the left panel (filling the content height) while metadata fields scroll independently on the right. Portrait layout is unchanged. Made-with: Cursor
1.7 KiB
1.7 KiB
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 isLandscapeandint coverPanelWidthmember variables.
src/activities/home/BookInfoActivity.cpp
onEnter(): Detects orientation viarenderer.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, computescoverPanelWidth(cover width + padding, capped at 40% of screen). Text fields are wrapped to the narrower right-panel width. Cover height is excluded fromcontentHeight(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 atx = 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.