module Graphics.Blank.Context where
import Control.Concurrent
import qualified Data.Set as Set
import Data.Set (Set)
import Data.Char
import Graphics.Blank.Events
data Context = Context
{ theSize :: (Float,Float)
, theDraw :: MVar String
, eventRegs :: MVar (Set EventName)
, eventQueue :: EventQueue
, sessionNo :: Int
}
events :: Context -> IO EventQueue
events = return . eventQueue
register :: Context -> [EventName] -> IO ()
register cxt@(Context _ _ regs _ num) nms = do
db <- takeMVar regs
let new = Set.difference (Set.fromList nms) db
sequence_ [ sendToCanvas cxt (("register('" ++ map toLower (show nm) ++ "'," ++ show num ++ ");") ++)
| nm <- Set.toList new
]
if Set.null new
then putMVar regs $ db
else putMVar regs $ (db `Set.union` new)
sendToCanvas :: Context -> ShowS -> IO ()
sendToCanvas (Context _ var _ _ num) cmds = putMVar var $ "if (session == " ++ show num ++ "){var c = getContext();" ++ cmds "}"