-- | Display mode is for drawing a static picture.
module Graphics.Gloss.Interface.IO.Interact
        ( module Graphics.Gloss.Data.Display
        , module Graphics.Gloss.Data.Picture
        , module Graphics.Gloss.Data.Color
        , interactIO
        , Controller    (..)
        , Event(..), Key(..), SpecialKey(..), MouseButton(..), KeyState(..), Modifiers(..))
where
import Graphics.Gloss.Data.Display
import Graphics.Gloss.Data.Controller
import Graphics.Gloss.Data.Picture
import Graphics.Gloss.Data.Color
import Graphics.Gloss.Internals.Interface.Event
import Graphics.Gloss.Internals.Interface.Interact
import Graphics.Gloss.Internals.Interface.Backend


-- | Open a new window and interact with an infrequently updated picture.
--
--   Similar to `displayIO`, except that you manage your own events.
--
interactIO
        :: Display                      -- ^ Display mode.
        -> Color                        -- ^ Background color.
        -> world                        -- ^ Initial world state.
        -> (world -> IO Picture)        -- ^ A function to produce the current picture.
        -> (Event -> world -> IO world) -- ^ A function to handle input events.
        -> (Controller -> IO ())        -- ^ Callback to take the display controller.
        -> IO ()

interactIO :: Display
-> Color
-> world
-> (world -> IO Picture)
-> (Event -> world -> IO world)
-> (Controller -> IO ())
-> IO ()
interactIO Display
dis Color
backColor world
worldInit world -> IO Picture
makePicture Event -> world -> IO world
handleEvent Controller -> IO ()
eatController
 =      GLUTState
-> Display
-> Color
-> world
-> (world -> IO Picture)
-> (Event -> world -> IO world)
-> (Controller -> IO ())
-> IO ()
forall a world.
Backend a =>
a
-> Display
-> Color
-> world
-> (world -> IO Picture)
-> (Event -> world -> IO world)
-> (Controller -> IO ())
-> IO ()
interactWithBackend
                GLUTState
defaultBackendState
                Display
dis
                Color
backColor
                world
worldInit
                world -> IO Picture
makePicture
                Event -> world -> IO world
handleEvent
                Controller -> IO ()
eatController