iris: keyboard-wipe fix, dp unit for crisp text, header background (2026-09-06)

This commit is contained in:
iris committed 2026-09-06 00:57:56 -04:00
1 parent a9232ac938
commit ad5a0c5b26
2 files changed
+47

No files matched your search

+47
View File
@@ -151,3 +151,50 @@ report -- "copy this and send it to Iris" via the existing Copy button.
Full account, including what's still unverified on a real phone, in
`docs/RUST.md`'s P0 box in the `ai-app-2` repo (`rustify` branch).
## 2026-09-06, later still: keyboard-wipe fix, a density unit for crisp text, header background
Iris's report on the previous rebuild, with screenshots: text now the
right size but **blurry**; opening the keyboard still **wipes every
glyph** (rectangles stay, only text disappears); the **header buttons
have nothing behind them and overlap the transcript text**.
- **Keyboard wipe**: `surface_changed` fires on every surface resize, not
only a genuinely new surface -- showing the keyboard under
`adjustResize` is exactly such a resize. It was rebuilding the whole
renderer (a fresh, empty glyph atlas) every time, while the CPU-side
glyph cache kept coordinates into the *old* atlas. Fixed: reuse the
existing renderer's device/atlas/buffers and only reconfigure the
surface when one is already live. Confirmed on this checkout's own
emulator two ways (a forced display resize and an actual soft-keyboard
open) -- text stayed on screen both times.
- **Blur**: the previous fix's global "logical size" stretch (window
divided by density, then displayed stretched back up) rasterised each
glyph small and displayed it bigger than it had texels for. Fixed with
the density-independent length unit Iris asked for the same day (a new
`dp` alongside the existing physical-pixel and relative lengths,
resolved against the display's density at layout time) -- text now
rasterises at the display's real physical resolution.
- **Header**: only each button's own coloured rect painted anything, so
gaps between/around them showed the black clear colour one layer back,
and the row's reserved height did not match the (now density-correct)
transcript below it. Fixed with an opaque panel behind the whole row
and every header size moved onto the new `dp` unit.
- **New**: the bench build now auto-captures a diagnostics report ~500ms
after the keyboard opens (logged, copied to the clipboard, and shown in
a plain overlay with Copy/Close over the running app) -- so a report
can come back even if a keyboard-triggered regression is still
happening.
**Not fully verified.** This build has not been run on Iris's actual
phone. It was verified end to end on this checkout's own emulator
(`run-bench.sh`, no crash, 24/24 swipes, 400/400 streamed events;
before/after screenshots for the two keyboard-resize tests above). While
verifying, a **separate, not-yet-fixed issue turned up**: after a
keyboard-triggered resize, the header row appeared to render a second
time, out of place, inside the transcript area, and a tap meant for the
message field below landed on a header button instead (a benchmark run
started unexpectedly). Not root-caused, and not confirmed to be caused by
this pass's changes rather than something pre-existing -- worth watching
for on the phone and reporting back if seen. Full account in
`docs/RUST.md`'s P0 box in the `ai-app-2` repo (`rustify` branch).
Binary file not shown.