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

import Data.Int (Int32)
import GHC.Generics (Generic)
import qualified Termbox.Bindings.C as Termbox
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
  { Tb_event -> Tb_event_type
type_ :: {-# UNPACK #-} !Tb_event_type,
    Tb_event -> Maybe Tb_event_mod
mod :: !(Maybe Tb_event_mod),
    Tb_event -> Tb_key
key :: {-# UNPACK #-} !Tb_key,
    Tb_event -> Char
ch :: {-# UNPACK #-} !Char,
    Tb_event -> Int32
w :: {-# UNPACK #-} !Int32,
    Tb_event -> Int32
h :: {-# UNPACK #-} !Int32,
    Tb_event -> Int32
x :: {-# UNPACK #-} !Int32,
    Tb_event -> Int32
y :: {-# UNPACK #-} !Int32
  }
  deriving stock (Tb_event -> Tb_event -> Bool
(Tb_event -> Tb_event -> Bool)
-> (Tb_event -> Tb_event -> Bool) -> Eq Tb_event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Tb_event -> Tb_event -> Bool
== :: Tb_event -> Tb_event -> Bool
$c/= :: Tb_event -> Tb_event -> Bool
/= :: Tb_event -> Tb_event -> Bool
Eq, (forall x. Tb_event -> Rep Tb_event x)
-> (forall x. Rep Tb_event x -> Tb_event) -> Generic Tb_event
forall x. Rep Tb_event x -> Tb_event
forall x. Tb_event -> Rep Tb_event x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Tb_event -> Rep Tb_event x
from :: forall x. Tb_event -> Rep Tb_event x
$cto :: forall x. Rep Tb_event x -> Tb_event
to :: forall x. Rep Tb_event x -> Tb_event
Generic, Int -> Tb_event -> ShowS
[Tb_event] -> ShowS
Tb_event -> String
(Int -> Tb_event -> ShowS)
-> (Tb_event -> String) -> ([Tb_event] -> ShowS) -> Show Tb_event
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Tb_event -> ShowS
showsPrec :: Int -> Tb_event -> ShowS
$cshow :: Tb_event -> String
show :: Tb_event -> String
$cshowList :: [Tb_event] -> ShowS
showList :: [Tb_event] -> ShowS
Show)

ceventToEvent :: Termbox.Tb_event -> Tb_event
ceventToEvent :: Tb_event -> Tb_event
ceventToEvent Termbox.Tb_event {Word8
type_ :: Word8
$sel:type_:Tb_event :: Tb_event -> Word8
type_, Word8
mod :: Word8
$sel:mod:Tb_event :: Tb_event -> Word8
mod, Word16
key :: Word16
$sel:key:Tb_event :: Tb_event -> Word16
key, Word32
ch :: Word32
$sel:ch:Tb_event :: Tb_event -> Word32
ch, Int32
w :: Int32
$sel:w:Tb_event :: Tb_event -> Int32
w, Int32
h :: Int32
$sel:h:Tb_event :: Tb_event -> Int32
h, Int32
x :: Int32
$sel:x:Tb_event :: Tb_event -> Int32
x, Int32
y :: Int32
$sel:y:Tb_event :: Tb_event -> Int32
y} =
  Tb_event
    { $sel:type_:Tb_event :: Tb_event_type
type_ = Word8 -> Tb_event_type
Tb_event_type Word8
type_,
      $sel:mod:Tb_event :: Maybe Tb_event_mod
mod = if Word8
mod Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0 then Maybe Tb_event_mod
forall a. Maybe a
Nothing else Tb_event_mod -> Maybe Tb_event_mod
forall a. a -> Maybe a
Just (Word8 -> Tb_event_mod
Tb_event_mod Word8
mod),
      $sel:key:Tb_event :: Tb_key
key = Word16 -> Tb_key
Tb_key Word16
key,
      $sel:ch:Tb_event :: Char
ch = Word32 -> Char
word32ToChar Word32
ch,
      Int32
$sel:w:Tb_event :: Int32
w :: Int32
w,
      Int32
$sel:h:Tb_event :: Int32
h :: Int32
h,
      Int32
$sel:x:Tb_event :: Int32
x :: Int32
x,
      Int32
$sel:y:Tb_event :: Int32
y :: Int32
y
    }
{-# INLINE ceventToEvent #-}