mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
81 lines
3.0 KiB
Lua
81 lines
3.0 KiB
Lua
-- Per-orientation touch layouts and the button size setting (#633). The
|
|
-- overlay used to keep exactly one positions table, so laying the pad out
|
|
-- in landscape rewrote the portrait layout; now each orientation owns a
|
|
-- {positions, scale} bucket picked from the safe rect's aspect, and the
|
|
-- editor's -/+ scales every control in the active one. No pokered cite:
|
|
-- the on-screen pad is a port-only affordance (Xelu CC0 art).
|
|
-- luajit tests/engine/touch_orientation_bug633.lua
|
|
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.harness")
|
|
local check, eq = T.check, T.eq
|
|
love = love or require("tests.love_stub")
|
|
|
|
local TC = require("src.core.TouchControls")
|
|
|
|
-- per-orientation buckets round-trip independently, scale is clamped
|
|
local cfg = TC.normalizeConfig({
|
|
layouts = {
|
|
portrait = { positions = { dpad = { x = 0.2, y = 0.9 } }, scale = 1.25 },
|
|
landscape = { positions = { dpad = { x = 0.1, y = 0.5 } }, scale = 99 },
|
|
},
|
|
})
|
|
eq(cfg.layouts.portrait.positions.dpad.x, 0.2, "portrait bucket kept")
|
|
eq(cfg.layouts.landscape.positions.dpad.x, 0.1, "landscape bucket kept")
|
|
eq(cfg.layouts.portrait.scale, 1.25, "portrait scale kept")
|
|
eq(cfg.layouts.landscape.scale, TC.SCALE_MAX, "out-of-range scale clamps")
|
|
|
|
-- steer the safe rect by hand: tall = portrait, wide = landscape
|
|
love.window = love.window or {}
|
|
local oldSafe = love.window.getSafeArea
|
|
local function setRect(w, h)
|
|
love.window.getSafeArea = function() return 0, 0, w, h end
|
|
-- getDimensions bounds the safe rect (SafeArea clamps to the drawable
|
|
-- window), so keep both in step
|
|
love.graphics.getDimensions = function() return w, h end
|
|
TC.layoutW, TC.layoutH, TC.layoutOx, TC.layoutOy, TC.L = nil, nil, nil, nil, nil
|
|
end
|
|
|
|
TC:init()
|
|
setRect(380, 720)
|
|
TC:applyOptions({
|
|
touchControls = {
|
|
enabled = true,
|
|
positions = { dpad = { x = 0.25, y = 0.75 } },
|
|
},
|
|
})
|
|
|
|
-- the size setting scales every control in the active (portrait) bucket
|
|
TC:setScale(1.5)
|
|
setRect(380, 720)
|
|
local big = TC:layout()
|
|
eq(TC.orientation, "portrait", "tall safe rect is portrait")
|
|
check(big.a.w > TC.defaultLayout(380, 720).a.w, "scale grows buttons")
|
|
|
|
-- rotating swaps buckets, and a landscape drag leaves portrait alone
|
|
TC:setScale(1)
|
|
setRect(800, 400)
|
|
TC:layout()
|
|
eq(TC.orientation, "landscape", "wide safe rect is landscape")
|
|
TC:setControlCenter("dpad", 700, 300)
|
|
eq(TC.layouts.portrait.positions.dpad.x, 0.25,
|
|
"landscape drag leaves the portrait layout alone (#633)")
|
|
|
|
-- Reset clears only the orientation on screen
|
|
TC:clearPositions()
|
|
check(TC.layouts.landscape.positions == nil,
|
|
"Reset wipes the landscape overrides")
|
|
eq(TC.layouts.portrait.positions.dpad.x, 0.25,
|
|
"and the portrait layout survives it (#633)")
|
|
|
|
-- config() snapshots both buckets for the editor's save path
|
|
local snap = TC:config()
|
|
eq(snap.layouts.portrait.positions.dpad.x, 0.25, "config carries portrait")
|
|
check(snap.layouts.landscape.positions == nil, "config carries landscape")
|
|
|
|
if oldSafe then love.window.getSafeArea = oldSafe
|
|
else love.window.getSafeArea = nil end
|
|
|
|
T.finish("touch_orientation_bug633")
|