58 lines
1.0 KiB
Lua
58 lines
1.0 KiB
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(
|
|
self.x or 0,
|
|
self.y or 0,
|
|
self.w or love.graphics.getWidth(),
|
|
self.h or 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 |