mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 13:33:27 -04:00
23617f43b4
CLOSES #2290, CLOSES #2338, CLOSES #2186, CLOSES #2305, CLOSES #2332, CLOSES #2320, CLOSES #2344, CLOSES #2291, CLOSES #2335, CLOSES #2340, CLOSES #2385, CLOSES #2352, CLOSES #2378, CLOSES #2403, CLOSES #2404, CLOSES #2405, CLOSES #2367, CLOSES #2037, CLOSES #2177, CLOSES #2368, CLOSES #2382, CLOSES #1951
110 lines
4.0 KiB
Lua
110 lines
4.0 KiB
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 TouchSkin = require("src.core.TouchSkin")
|
|
local FaithfulRes = require("src.core.FaithfulRes")
|
|
local Renderer = require("src.render.Renderer")
|
|
local Zoom = require("src.render.Zoom")
|
|
local Game = require("src.core.Game")
|
|
local TitleState = require("src.ui.TitleState")
|
|
local IntroMovie = require("src.ui.IntroMovie")
|
|
|
|
local function setWindow(w, h)
|
|
love.graphics.getDimensions = function() return w, h end
|
|
love.graphics.getPixelDimensions = function() return w, h end
|
|
end
|
|
|
|
local function cfg(viewport)
|
|
local vp = viewport and ('overlay0_viewport = "%s"\n'):format(viewport) or ""
|
|
return ([[
|
|
overlays = 1
|
|
overlay0_name = "bezel"
|
|
overlay0_full_screen = true
|
|
overlay0_normalized = true
|
|
%soverlay0_descs = 1
|
|
overlay0_desc0 = "nul,0.5,0.5,rect,0.02,0.02"
|
|
]]):format(vp)
|
|
end
|
|
|
|
local function useSkin(viewport)
|
|
local skin = assert(TouchSkin.parse(cfg(viewport)))
|
|
TouchSkin.setActive(skin)
|
|
TouchSkin.setOverlayLive(false)
|
|
return skin
|
|
end
|
|
|
|
local title = setmetatable({}, { __index = TitleState })
|
|
local intro = setmetatable({}, { __index = IntroMovie })
|
|
local function stack(...) return { states = { ... } } end
|
|
|
|
TouchSkin.setActive(nil)
|
|
FaithfulRes.locked = false
|
|
eq(TitleState.wantsFillScale(nil), true, "no skin, no lock: the title fills")
|
|
eq(IntroMovie.wantsFillScale(nil), true, "no skin, no lock: the intro fills")
|
|
|
|
useSkin("0.15,0.08,0.7,0.84")
|
|
eq(TitleState.wantsFillScale(nil), false, "a skin with a cutout: the title stays integer")
|
|
eq(IntroMovie.wantsFillScale(nil), false, "a skin with a cutout: the intro stays integer")
|
|
eq(Game.fillScaleInStack(stack(title, {})), false,
|
|
"a menu over the title inside a skin does not fill")
|
|
|
|
useSkin(nil)
|
|
eq(TitleState.wantsFillScale(nil), false, "a full-window bezel: the title stays integer")
|
|
eq(IntroMovie.wantsFillScale(nil), false, "a full-window bezel: the intro stays integer")
|
|
|
|
TouchSkin.setActive(nil)
|
|
eq(TitleState.wantsFillScale(nil), true, "clearing the skin restores the title fill")
|
|
eq(IntroMovie.wantsFillScale(nil), true, "clearing the skin restores the intro fill")
|
|
|
|
FaithfulRes.locked = true
|
|
eq(title:wantsFillScale(), false, "FAITHFUL RATIO locked: the title stays integer")
|
|
eq(intro:wantsFillScale(), false, "FAITHFUL RATIO locked: the intro stays integer")
|
|
check(FaithfulRes.scaleCap() == nil,
|
|
"and that holds where scaleCap is nil (desktop / linux handheld)")
|
|
FaithfulRes.locked = false
|
|
|
|
local function frame(states, worldActive)
|
|
Renderer.uiFill = Game.fillScaleInStack(stack(unpack(states)))
|
|
Renderer.uiCentered = true
|
|
Renderer.worldActive = worldActive
|
|
return Renderer:frameRects()
|
|
end
|
|
|
|
setWindow(1024, 768)
|
|
Zoom.offset = 0
|
|
useSkin("0.15,0.08,0.7,0.84")
|
|
Renderer:init()
|
|
Renderer:setUISize(160, 144)
|
|
local tr = frame({ title }, false)
|
|
local ir = frame({ intro }, false)
|
|
local mr = frame({ title, {} }, false)
|
|
local ow = frame({ {} }, true)
|
|
eq(tr.cut, true, "1024x768 with a bezel cutout")
|
|
eq(tr.Up, Renderer:fitScale(), "title inside the bezel draws at the integer fit")
|
|
eq(tr.Up, math.floor(tr.Up), "and that scale is whole")
|
|
eq(ir.Up, ow.Up, "intro matches the overworld scale inside the bezel")
|
|
eq(tr.Up, ow.Up, "title matches the overworld scale inside the bezel")
|
|
eq(mr.Up, ow.Up, "main menu over the title matches the overworld scale")
|
|
check(tr.uvph <= tr.vuh and tr.uvpw <= tr.vuw, "title leaves a margin inside the cutout")
|
|
|
|
useSkin(nil)
|
|
local br = frame({ title }, false)
|
|
local bw = frame({ {} }, true)
|
|
eq(br.Up, bw.Up, "full-window bezel: title matches the overworld scale")
|
|
|
|
TouchSkin.setActive(nil)
|
|
local nr = frame({ title }, false)
|
|
local nw = frame({ {} }, true)
|
|
eq(nw.Up, 5, "no skin at 1024x768: the overworld fits 5x")
|
|
check(nr.Up > Renderer:fitScale(), "no skin: the title still fills past the integer fit")
|
|
|
|
FaithfulRes.locked = true
|
|
local lr = frame({ title }, false)
|
|
eq(lr.Up, 5, "FAITHFUL RATIO on a fixed linux panel: title back to whole pixels")
|
|
FaithfulRes.locked = false
|
|
|
|
T.finish("title_fill_skin_lock")
|