module Termbox.Bindings.Hs.Internal.Attrs
  ( Tb_attrs (Tb_attrs),
    _TB_DEFAULT,
    _TB_BLACK,
    _TB_BLUE,
    _TB_CYAN,
    _TB_GREEN,
    _TB_MAGENTA,
    _TB_RED,
    _TB_WHITE,
    _TB_YELLOW,
    _TB_BOLD,
    _TB_REVERSE,
    _TB_UNDERLINE,
  )
where

import Data.Bits ((.|.))
import Data.Coerce (coerce)
import Data.Word (Word16)
import qualified Termbox.Bindings.C as Termbox

-- | Cell attributes.
newtype Tb_attrs
  = Tb_attrs Word16
  deriving stock (Tb_attrs -> Tb_attrs -> Bool
(Tb_attrs -> Tb_attrs -> Bool)
-> (Tb_attrs -> Tb_attrs -> Bool) -> Eq Tb_attrs
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Tb_attrs -> Tb_attrs -> Bool
== :: Tb_attrs -> Tb_attrs -> Bool
$c/= :: Tb_attrs -> Tb_attrs -> Bool
/= :: Tb_attrs -> Tb_attrs -> Bool
Eq, Int -> Tb_attrs -> ShowS
[Tb_attrs] -> ShowS
Tb_attrs -> String
(Int -> Tb_attrs -> ShowS)
-> (Tb_attrs -> String) -> ([Tb_attrs] -> ShowS) -> Show Tb_attrs
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Tb_attrs -> ShowS
showsPrec :: Int -> Tb_attrs -> ShowS
$cshow :: Tb_attrs -> String
show :: Tb_attrs -> String
$cshowList :: [Tb_attrs] -> ShowS
showList :: [Tb_attrs] -> ShowS
Show)

instance Monoid Tb_attrs where
  mempty :: Tb_attrs
mempty = Word16 -> Tb_attrs
Tb_attrs Word16
0

instance Semigroup Tb_attrs where
  <> :: Tb_attrs -> Tb_attrs -> Tb_attrs
(<>) = forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @(Word16 -> Word16 -> Word16) Word16 -> Word16 -> Word16
forall a. Bits a => a -> a -> a
(.|.)

_TB_DEFAULT :: Tb_attrs
_TB_DEFAULT :: Tb_attrs
_TB_DEFAULT =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_DEFAULT

_TB_BLACK :: Tb_attrs
_TB_BLACK :: Tb_attrs
_TB_BLACK =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_BLACK

_TB_BLUE :: Tb_attrs
_TB_BLUE :: Tb_attrs
_TB_BLUE =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_BLUE

_TB_CYAN :: Tb_attrs
_TB_CYAN :: Tb_attrs
_TB_CYAN =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_CYAN

_TB_GREEN :: Tb_attrs
_TB_GREEN :: Tb_attrs
_TB_GREEN =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_GREEN

_TB_MAGENTA :: Tb_attrs
_TB_MAGENTA :: Tb_attrs
_TB_MAGENTA =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_MAGENTA

_TB_RED :: Tb_attrs
_TB_RED :: Tb_attrs
_TB_RED =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_RED

_TB_WHITE :: Tb_attrs
_TB_WHITE :: Tb_attrs
_TB_WHITE =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_WHITE

_TB_YELLOW :: Tb_attrs
_TB_YELLOW :: Tb_attrs
_TB_YELLOW =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_YELLOW

_TB_BOLD :: Tb_attrs
_TB_BOLD :: Tb_attrs
_TB_BOLD =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_BOLD

_TB_REVERSE :: Tb_attrs
_TB_REVERSE :: Tb_attrs
_TB_REVERSE =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_REVERSE

_TB_UNDERLINE :: Tb_attrs
_TB_UNDERLINE :: Tb_attrs
_TB_UNDERLINE =
  Word16 -> Tb_attrs
Tb_attrs Word16
Termbox._TB_UNDERLINE