{-# LANGUAGE TypeApplications #-}
-----------------------------------------------------------------------------
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-----------------------------------------------------------------------------
module THREE.EventDispatcher
  ( -- * Types
    EventDispatcher (..)
  ) where
-----------------------------------------------------------------------------
import           Miso
-----------------------------------------------------------------------------
import           THREE.Internal as THREE
-----------------------------------------------------------------------------
-- | https://threejs.org/docs/#api/en/core/EventDispatcher
class (ToObject object, ToJSVal object) => EventDispatcher object where
  addEventListener :: Method object (MisoString, Function) ()
  -- ^ Adds a listener to an event type.
  addEventListener = MisoString -> Method object (MisoString, Function) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"addEventListener"

  hasEventListener :: Method object (MisoString, Function) ()
  -- ^ Checks if listener is added to an event type.
  hasEventListener = MisoString -> Method object (MisoString, Function) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"hasEventListener"

  removeEventListener :: Method object (MisoString, Function) ()
  -- ^ Removes a listener from an event type.
  removeEventListener = MisoString -> Method object (MisoString, Function) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"removeEventListener"

  dispatchEvent :: Method object Object ()
  -- ^ Dispatches an Event
  dispatchEvent = MisoString -> Method object Object ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"dispatchEvent"
-----------------------------------------------------------------------------
instance EventDispatcher JSVal
-----------------------------------------------------------------------------