----------------------------- -- Levak ©2011 -------------- -- http://levak.free.fr/ ---- -- levak92@gmail.com -------- ----------------------------- ------ Screen Manager Screen = {} Screen.__index = Screen function Screen:paint(gc) end function Screen:charIn(ch) end function Screen:arrowKey(key) end function Screen:escapeKey() end function Screen:enterKey() end function Screen:tabKey() end function Screen:mouseDown(x, y) end function Screen:help() end local Screens = {} function PushScreen(screen) table.insert(Screens, screen) platform.window:invalidate() end function PullScreen() if #Screens > 1 then table.remove(Screens) platform.window:invalidate() end end function DrawSreens(gc) if not init then initConstants() end for _, screen in ipairs(Screens) do screen:paint(gc) end if isWideScreen then for _,button in pairs(Buttons) do button:paint(gc) end end end function activeScreen() return Screens[#Screens] end -- Link events to ScreenManager function on.paint(gc) DrawSreens(gc) end function on.charIn(ch) activeScreen():charIn(ch) end function on.arrowKey(key) activeScreen():arrowKey(key) end function on.escapeKey() activeScreen():escapeKey() end function on.enterKey() activeScreen():enterKey() end function on.tabKey() activeScreen():tabKey() end function on.contextMenu() activeScreen():contextMenu() end function on.backtabKey() activeScreen():backtabKey() end function on.backspaceKey() activeScreen():backspaceKey() end function on.clearKey() activeScreen():clearKey() end function on.mouseDown(x, y) -- tricky part of optimisation. -- I love this way of mind for _, button in pairs(Buttons) do if button:isActive(x, y) then button.fun(activeScreen()) end end activeScreen():mouseDown(x, y) end function on.mouseUp() activeScreen():mouseUp() end function on.help() activeScreen():help() end function on.resize() initFonts(); initView(); end function on.timer() timer.stop() timeSpan = timeSpan + 1 platform.window:invalidate() end