The top bar's back/search icons (24dp in a 32dp bar) and the bottom
bar's wrap toggle (a text label in a 24dp bar) were fiddly to hit.
Top bar: 32 -> 42dp (new TopBarHeight const, which buildFindBar and
the editor text area already hang off); its icons 24 -> 31dp (new
TopBarIconSize; the find bar keeps the smaller ui.IconSize). Bottom
bar: BottomBarHeight 24 -> 31dp, labels re-centred.
While verifying, a relaunch into an app-unreadable saved directory
(/storage/emulated is media_rw:media_rw 0750 on device; only
/storage/emulated/0 is app-exposed) showed an empty browser: os.Stat
passes for such dirs, so the restore guard now probes with a real
os.ReadDir — the same operation the browser index does.
Test expectations that hard-coded the old 32dp top bar now use
TopBarHeight. Verified on emulator and phone: back/search/wrap all
tappable, find bar still docks under the taller top bar.
The tree was formatted with an older gofmt; go1.27's gofmt additionally
wants: EOF exactly one newline (no trailing blank lines), imports sorted
alphabetically within a block, mixed-precedence binary expressions
re-spaced for grouping ((a+b)/c), single-field composite literals
un-aligned, adjacent one-line method signatures aligned, and one-line
bodies containing a compound statement expanded. Applied repo-wide
(31 files under internal/); pure formatting, no semantic changes —
build and the full test suite pass.
- Renderer computes word wrap via single LayoutString pass with
WrapHeuristically policy; glyphs drawn inline at FlagLineBreak
- Fixed line height (fontSize * 1.2), independent of glyph metrics
- Two-finger trackpad scroll via gesture.Scroll with vertical axis
- Display line feedback: renderer reports last glyph Y after each
Draw; logic uses it to clamp scroll offset so last line stops
at bottom of viewport with lineHeight/2 padding
- ScrollRange fix: {Min: -(1<<30), Max: 1<<30} ensures scroll
delta is consumed (empty range consumes nothing via clampSplit)
- Line counting fix: only FlagLineBreak increments count; buffer
flushes (32-glyph cap) draw but don't count
- Add ui.Dp and ui.Px as distinct named types
- Logic layer works exclusively in Dp (positions, sizes, regions)
- Renderer converts Dp→Px at Gio interop boundaries
- Capture gtx.Constraints once at start of Draw() for consistent positioning
- main.go converts app.ConfigEvent pixels to Dp before passing to logic layer
- Update documentation with new coordinate system architecture
Elements implemented:
- StatusBar (top bar with filename, action icons, conflict/search icons)
- BottomBar (bottom bar with cursor position, byte position, word wrap button)
- Button (interactive button element)
- AlphaIndex, SearchBar, Cursor, MergeHunk, Toast, Spacer (stubs)
Layout:
- EditorLayout function computes regions for StatusBar and BottomBar
- Filename truncation with ellipsis (mocked filename for testing)
- Mocked data: "very_long_filename...", "Ln 47, Col 12", "1024 / 50000"
Renderer:
- drawStatusBar: draws filename line + icon line
- drawBottomBar: draws cursor pos, byte pos, word wrap button
- drawButton: draws button text
- drawIconButton: draws icon buttons
Window resize:
- configChan setup in main.go
- ConfigEvent handling in event loop
- Layout recomputation on resize
Builds and runs successfully.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>