mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-14 23:31:27 +02:00
launcher: pad cursor edge-scroll for stickless handhelds
The launcher's SHORT-WINDOW SCROLL engages correctly on a 480px-tall panel, but _pageScroll has only three inputs -- mouse wheel, touch drag, and the right analog stick -- and a device with none of them cannot reach anything below the fold. On an RG35XXSP (muOS, 640x480) /proc/bus/input/devices lists one gpio-keys-polled device reporting the D-pad as a hat: no analog axes exist. There is also no scroll-to-focus anywhere, so moving the pad cursor never touches _pageScroll. The pad cursor already computes the motion: it is clamped to the safe area and discarded. Spend that overshoot on the existing wheel path instead -- the same one the right stick feeds a few lines below. Only the overshoot scrolls, so parking the cursor at the edge does nothing; it has to be actively pushed. The enclosing block runs only on non-zero pad input, so a real mouse never reaches it and desktop behaviour is unchanged. Tested on an RG35XXSP at stock Kit.lua scale (0.9): the pager and footer become reachable, pushing up at the top scrolls back, and parking at the edge does nothing. Refs #1142.
This commit is contained in:
@@ -2345,6 +2345,20 @@ function RomImporter:_updatePadCursor(dt)
|
||||
local ny = self._padCursor.y + dy * speed * dt
|
||||
self._padCursor.x = math.max(ox, math.min(ox + w, nx))
|
||||
self._padCursor.y = math.max(oy, math.min(oy + h, ny))
|
||||
-- Pushing INTO the top/bottom edge scrolls the page instead of stalling.
|
||||
-- The cursor is clamped to the safe area above, so on a short window the
|
||||
-- rows below the fold are unreachable on a stickless handheld: no mouse
|
||||
-- wheel, no touchscreen, and no right stick to feed the existing wheel
|
||||
-- path. Only the OVERSHOOT scrolls -- parking the cursor at the edge does
|
||||
-- nothing, it has to be actively pushed -- and this block only runs on pad
|
||||
-- input, so a real mouse is unaffected. /48 matches the pixels-per-notch
|
||||
-- LauncherView.draw multiplies back out.
|
||||
local overY = 0
|
||||
if ny > oy + h then overY = ny - (oy + h)
|
||||
elseif ny < oy then overY = ny - oy end
|
||||
if overY ~= 0 and self._flex then
|
||||
require("src.import.LauncherView").wheelmoved(self, 0, -overY / 48)
|
||||
end
|
||||
-- Desktop: FlexLove polls the real mouse, so warp it with the pad pointer.
|
||||
-- NX: the getPosition bridge already returns pad coords — skip setPosition.
|
||||
if not self.isNX and love.mouse.setPosition then
|
||||
|
||||
Reference in New Issue
Block a user