dcearth/ui/modal.lua

54 lines
982 B
Lua

local love = assert( love )
local button = require( "ui.button" )
local t = {}
t.__index = t
local i = 0
function t.start( self )
love.graphics.setScissor( 0, 0, love.graphics.getDimensions() )
i = i + 1
t[i] = t[i] or {}
--store callbacks
for name in pairs( self ) do
if love[name] then
t[i][name] = love[name]
love[name] = self[name]
end
end
--store menus
local b = button.next
repeat
t[i][b] = b.visible
b = b.next
until b == button
end
function t.stop( self )
--restore callbacks
for name in pairs( self ) do
if love[name] then
love[name] = t[i][name]
end
end
--restore menus
local b = button
button.deselect()
repeat
b = b.next
b.visible = t[i][b] or false --accessing a button's nil field is an error, so make sure that b.visible is a boolean
until b == button
t[i] = nil
i = i - 1
end
function t.new( modal )
return setmetatable( modal or {}, t )
end
return t