.changelog/3352.md
touchpadPrimary each frame in the thin libretro core forwards swipe gestures as relative mouse movement when the current system supports a mouse (iOS/tvOS 14.5+)supportBySystemIdentifier entry upgraded from keyboard-only to keyboard+mouseRETRO_DEVICE_POINTER now receives touch input; leftMouseDown/Up manage apple->touch_count and mouseMovedAt: writes apple->touches[0].screen_x/y so cocoa_input_poll can convert to libretro pointer coordinatesmouseMoved(atPoint:) now routes DS through setPointerX with proper [-0x7fff, 0x7fff] normalisation and tracks the pressed state during dragsmouseMoved(atPoint:) was treating the incoming normalised [0, 1] cursor position directly as an Int16 delta (always ~0). Now computes per-event delta from the previous normalised position, scaled by 300 (matching the RetroArch Atari ST / Doom implementation)supportBySystemIdentifier so the virtual trackpad activates for Shuttle Mouse and PlayStation Mouse gamesmouseMoved(atPoint:) now uses #if os(tvOS) to forward Siri Remote pan deltas directly; iOS uses the normalised-position differencing path; eliminates the fragile unit-square + magnitude heuristic that mis-classified top-left corner touches as relative deltasRETRO_DEVICE_POINTER (absolute coordinates), not RETRO_DEVICE_MOUSE (relative deltas)rightMouseDown/Up are now no-ops for DS since DS uses RETRO_DEVICE_POINTER and forwarding right-mouse events to a pointer-only core produced unintended input