-- | Non interactive applications only need to pass configuration defined here
-- into GPipe's 'runContextT' and 'newWindow'.
--
-- Interactive applications will need "Graphics.GPipe.Context.GLFW.Input".
module Graphics.GPipe.Context.GLFW (
-- * GPipe context handler for GLFW
Handle(),
GLFWWindow(),
-- ** Configuration
-- *** Default configs
defaultHandleConfig,
defaultWindowConfig,
-- *** Custom configs
ContextHandlerParameters(HandleConfig, configErrorCallback, configEventPolicy),
-- | Configuration for the GLFW handle.
--
-- [@'HandleConfig'@] Constructor
--
-- [@'configErrorCallback' ::  'Error' -> String -> IO () @] Specify a callback to handle errors emitted by GLFW.
--
-- [@'configEventPolicy' :: Maybe 'EventPolicy'@] Specify the 'EventPolicy' to use for automatic GLFW event processing. If 'Nothing' then automatic event processing is disabled and you'll need to call 'mainloop' or 'mainstep' somewhere.
WindowConfig(..),
WindowHint(..),
EventPolicy(..),
-- ** Exceptions
InitException(..),
CreateWindowException(..),
UnsafeWindowHintsException(..),
-- ** Mainthread hooks
mainloop,
mainstep,
-- ** Reexports
module Graphics.GPipe.Context.GLFW.Input,
module Graphics.GPipe.Context.GLFW.Window,
module Graphics.GPipe.Context.GLFW.Misc
) where

-- internal
import           Graphics.GPipe.Context.GLFW.Format
import           Graphics.GPipe.Context.GLFW.Handler
import           Graphics.GPipe.Context.GLFW.Resource
-- reexports
import           Graphics.GPipe.Context.GLFW.Input
import           Graphics.GPipe.Context.GLFW.Misc
import           Graphics.GPipe.Context.GLFW.Window
-- GLFW reexports
import           Graphics.UI.GLFW                     (WindowHint (..))