dcearth/ui/modal.lua

58 lines
1.0 KiB
Lua
Raw Normal View History

2024-04-29 01:21:32 +00:00
local love = assert( love )
local button = require( "ui.button" )
2024-04-29 01:21:32 +00:00
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())
2024-04-29 01:21:32 +00:00
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()
2024-04-29 01:21:32 +00:00
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
2024-04-29 01:21:32 +00:00
until b == button
t[i] = nil
i = i - 1
end
function t.new( modal )
return setmetatable( modal or {}, t )
end
return t