iOS input: pointer routing, GameController gamepads, text input #808

Merged
SakulFlee merged 5 commits from feat/ios-input into main 2026-09-24 20:04:36 +00:00
Owner

objc2 path-lookup fix; modifier_supplement gated out on iOS (pairs with orbital-iced PR #1); winit pin bumped to 13ed4eaa (iOS pointer touches → mouse events); GameController gamepad provider polled per frame; orbital-iced submodule bumped to master.

objc2 path-lookup fix; modifier_supplement gated out on iOS (pairs with orbital-iced PR #1); winit pin bumped to 13ed4eaa (iOS pointer touches → mouse events); GameController gamepad provider polled per frame; orbital-iced submodule bumped to master.
The Documents/Caches path lookups built a msg_send![class!(...), args]
invocation around a free Foundation function with no class and no
selector, which the objc2 0.6 macro rejects outright (and which could
never have worked at runtime). objc2-foundation already wraps the
function, complete with typed NSSearchPathDirectory/NSSearchPathDomainMask
constants, so call it directly and read firstObject from the result.
winit only provides KeyEventExtModifierSupplement for Windows, macOS,
X11, Wayland, and Redox. iOS joins Android and Wasm on the fallback
that uses the logical key and plain text, in both iced_winit's
conversion and orbital_iced's renderer (orbital-iced submodule
bumped to fix/ios-input).
orbital-input now stacks the iOS pointer-touch routing (13ed4eaa) on
top of the Android input work (af2218c9).
Desktop gamepads come from gilrs and Android's from the winit fork's
device-event translation; on iOS winit does not link GameController at
all, so the engine becomes the platform provider itself.

Each frame before the input snapshot, enumerate GCController's
extended profiles, diff buttons/sticks/triggers against the previous
report, and feed the changes through the same backend-neutral
InputEvents as every other backend:

- face buttons follow the Xbox layout (A South, B East, X West,
  Y North); shoulders, menu/options and thumbstick clicks map onto
  the semantic set, d-pad buttons come across verbatim,
- triggers are button elements carrying an analog value: the press
  becomes Left/RightTrigger2, the value the GamepadTrigger axis
  (left on x, right on y, matching gilrs),
- sticks apply a radial 0.15 dead zone and report per-component
  deltas, and controllers appear/disappear as
  GamepadConnected/Disconnected under stable engine-side ids.
chore: bump orbital-iced submodule to merged iOS gating + check CI
All checks were successful
Lint / lint (pull_request) Successful in 4m34s
5077f0a23c
Points at orbital-iced master after PR #1 merged: modifier_supplement
gating (b348cb79) plus the .forgejo cargo check workflow (cee70d4b).
SakulFlee changed title from feat/ios-input to iOS input: pointer routing, GameController gamepads, text input 2026-09-24 19:58:49 +00:00
SakulFlee changed target branch from fix/android-input to main 2026-09-24 20:03:26 +00:00
Sign in to join this conversation.
No description provided.