-- | This module holds low-level implementation details of reflex-sdl2
-- that are not meant to be dealt with by the user of the library.
-- None-the-less these details are exported here just in case you
-- need them :)
module Reflex.SDL2.Internal where

import           Control.Concurrent (MVar)
import           Data.Word          (Word32)
import           Reflex             (Event)
import           SDL                hiding (Event)

------------------------------------------------------------------------------
-- | Holds a slot of 'Event' for each kind of SDL2 event plus a couple extras:
--
-- An event for *any* SDL2 event payload.
--
-- An event for reflex's post network build event.
--
-- An event for each frame tick.
data SystemEvents t = SystemEvents
  { forall t. SystemEvents t -> Event t ()
sysPostBuildEvent                 :: Event t ()
  -- ^ Fired just after the FRP network is built.
  , forall t. SystemEvents t -> Event t Word32
sysTicksEvent                     :: Event t Word32
  -- ^ Fired once per frame tick, contains the number of
  -- milliseconds since SDL library initialization.
  , forall t. SystemEvents t -> Event t EventPayload
sysAnySDLEvent                    :: Event t EventPayload
  -- ^ Fired when SDL receives any event.
  , forall t. SystemEvents t -> Event t WindowShownEventData
sysWindowShownEvent               :: Event t WindowShownEventData
  , forall t. SystemEvents t -> Event t WindowHiddenEventData
sysWindowHiddenEvent              :: Event t WindowHiddenEventData
  , forall t. SystemEvents t -> Event t WindowExposedEventData
sysWindowExposedEvent             :: Event t WindowExposedEventData
  , forall t. SystemEvents t -> Event t WindowMovedEventData
sysWindowMovedEvent               :: Event t WindowMovedEventData
  , forall t. SystemEvents t -> Event t WindowResizedEventData
sysWindowResizedEvent             :: Event t WindowResizedEventData
  , forall t. SystemEvents t -> Event t WindowSizeChangedEventData
sysWindowSizeChangedEvent         :: Event t WindowSizeChangedEventData
  , forall t. SystemEvents t -> Event t WindowMinimizedEventData
sysWindowMinimizedEvent           :: Event t WindowMinimizedEventData
  , forall t. SystemEvents t -> Event t WindowMaximizedEventData
sysWindowMaximizedEvent           :: Event t WindowMaximizedEventData
  , forall t. SystemEvents t -> Event t WindowRestoredEventData
sysWindowRestoredEvent            :: Event t WindowRestoredEventData
  , forall t. SystemEvents t -> Event t WindowGainedMouseFocusEventData
sysWindowGainedMouseFocusEvent    :: Event t WindowGainedMouseFocusEventData
  , forall t. SystemEvents t -> Event t WindowLostMouseFocusEventData
sysWindowLostMouseFocusEvent      :: Event t WindowLostMouseFocusEventData
  , forall t.
SystemEvents t -> Event t WindowGainedKeyboardFocusEventData
sysWindowGainedKeyboardFocusEvent :: Event t WindowGainedKeyboardFocusEventData
  , forall t.
SystemEvents t -> Event t WindowLostKeyboardFocusEventData
sysWindowLostKeyboardFocusEvent   :: Event t WindowLostKeyboardFocusEventData
  , forall t. SystemEvents t -> Event t WindowClosedEventData
sysWindowClosedEvent              :: Event t WindowClosedEventData
  , forall t. SystemEvents t -> Event t KeyboardEventData
sysKeyboardEvent                  :: Event t KeyboardEventData
  , forall t. SystemEvents t -> Event t TextEditingEventData
sysTextEditingEvent               :: Event t TextEditingEventData
  , forall t. SystemEvents t -> Event t TextInputEventData
sysTextInputEvent                 :: Event t TextInputEventData
  , forall t. SystemEvents t -> Event t ()
sysKeymapChangedEvent             :: Event t ()
  , forall t. SystemEvents t -> Event t MouseMotionEventData
sysMouseMotionEvent               :: Event t MouseMotionEventData
  , forall t. SystemEvents t -> Event t MouseButtonEventData
sysMouseButtonEvent               :: Event t MouseButtonEventData
  , forall t. SystemEvents t -> Event t MouseWheelEventData
sysMouseWheelEvent                :: Event t MouseWheelEventData
  , forall t. SystemEvents t -> Event t JoyAxisEventData
sysJoyAxisEvent                   :: Event t JoyAxisEventData
  , forall t. SystemEvents t -> Event t JoyBallEventData
sysJoyBallEvent                   :: Event t JoyBallEventData
  , forall t. SystemEvents t -> Event t JoyHatEventData
sysJoyHatEvent                    :: Event t JoyHatEventData
  , forall t. SystemEvents t -> Event t JoyButtonEventData
sysJoyButtonEvent                 :: Event t JoyButtonEventData
  , forall t. SystemEvents t -> Event t JoyDeviceEventData
sysJoyDeviceEvent                 :: Event t JoyDeviceEventData
  , forall t. SystemEvents t -> Event t ControllerAxisEventData
sysControllerAxisEvent            :: Event t ControllerAxisEventData
  , forall t. SystemEvents t -> Event t ControllerButtonEventData
sysControllerButtonEvent          :: Event t ControllerButtonEventData
  , forall t. SystemEvents t -> Event t ControllerDeviceEventData
sysControllerDeviceEvent          :: Event t ControllerDeviceEventData
  , forall t. SystemEvents t -> Event t AudioDeviceEventData
sysAudioDeviceEvent               :: Event t AudioDeviceEventData
  , forall t. SystemEvents t -> Event t ()
sysQuitEvent                      :: Event t ()
  , forall t. SystemEvents t -> Event t UserEventData
sysUserEvent                      :: Event t UserEventData
  , forall t. SystemEvents t -> Event t SysWMEventData
sysSysWMEvent                     :: Event t SysWMEventData
  , forall t. SystemEvents t -> Event t TouchFingerEventData
sysTouchFingerEvent               :: Event t TouchFingerEventData
  , forall t. SystemEvents t -> Event t TouchFingerMotionEventData
sysTouchFingerMotionEvent         :: Event t TouchFingerMotionEventData
  , forall t. SystemEvents t -> Event t MultiGestureEventData
sysMultiGestureEvent              :: Event t MultiGestureEventData
  , forall t. SystemEvents t -> Event t DollarGestureEventData
sysDollarGestureEvent             :: Event t DollarGestureEventData
  , forall t. SystemEvents t -> Event t DropEventData
sysDropEvent                      :: Event t DropEventData
  , forall t. SystemEvents t -> Event t ()
sysClipboardUpdateEvent           :: Event t ()
  , forall t. SystemEvents t -> Event t UnknownEventData
sysUnknownEvent                   :: Event t UnknownEventData
  , forall t. SystemEvents t -> MVar ()
sysQuitVar                        :: MVar ()
  -- ^ A var to sync quitting.
  }