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