mirror of
https://github.com/emilk/egui.git
synced 2026-08-29 04:40:03 -04:00
* Follow-up to #8296, part of <https://github.com/emilk/egui/issues/8295> * [x] I have followed the instructions in the PR template Stacked on #8296 (base branch), kept as a separate PR so it can be reverted independently. The hidden text-agent `<input>` is now inserted as a *sibling of the canvas* (instead of appended to `document.body`) and positioned with `offsetLeft`/`offsetTop` instead of `getBoundingClientRect`. Since the input and the canvas share the same containing block, the input stays anchored to the canvas top-left corner no matter how the page is scrolled or how the canvas is embedded. Consequences: * Fixes the IME popup position when the host page is scrolled — `move_to` previously wrote *viewport* coordinates from `getBoundingClientRect` into document-absolute `left`/`top`. * Subsumes the mobile Safari virtual-keyboard workaround (it replaced the flapping `getBoundingClientRect` y with `offsetTop`, which is now used everywhere), so `is_mobile_safari()` is removed. * Removes the special-casing of document vs shadow DOM roots — sibling insertion works uniformly in both. * The input is `position: absolute`, so it does not participate in flex/grid layout of the canvas' parent and causes no layout shift. Caveat: host CSS selectors like `div > canvas:only-child` would no longer match. Verified with `cargo clippy -p eframe --target wasm32-unknown-unknown --all-features` and `cargo fmt --all`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>