packages feed

termbox-bindings-hs-0.1.1: src/Termbox/Bindings/Hs/Internal/Event.hs

module Termbox.Bindings.Hs.Internal.Event
  ( Tb_event (..),
    ceventToEvent,
  )
where

import Data.Int (Int32)
import GHC.Generics (Generic)
import qualified Termbox.Bindings.C
import Termbox.Bindings.Hs.Internal.EventMod (Tb_event_mod (..))
import Termbox.Bindings.Hs.Internal.EventType (Tb_event_type (..))
import Termbox.Bindings.Hs.Internal.Key (Tb_key (..))
import Termbox.Bindings.Hs.Internal.Prelude (word32ToChar)
import Prelude hiding (mod)

-- | An event.
data Tb_event = Tb_event
  { type_ :: {-# UNPACK #-} !Tb_event_type,
    mod :: {-# UNPACK #-} !Tb_event_mod,
    key :: {-# UNPACK #-} !Tb_key,
    ch :: {-# UNPACK #-} !Char,
    w :: {-# UNPACK #-} !Int32,
    h :: {-# UNPACK #-} !Int32,
    x :: {-# UNPACK #-} !Int32,
    y :: {-# UNPACK #-} !Int32
  }
  deriving stock (Eq, Generic, Ord, Show)

ceventToEvent :: Termbox.Bindings.C.Tb_event -> Tb_event
ceventToEvent Termbox.Bindings.C.Tb_event {type_, mod, key, ch, w, h, x, y} =
  Tb_event
    { type_ = Tb_event_type type_,
      mod = Tb_event_mod mod,
      key = Tb_key key,
      ch = word32ToChar ch,
      w,
      h,
      x,
      y
    }
{-# INLINE ceventToEvent #-}