module Termbox.Bindings.Hs.Internal.Attr
  ( Tb_attr
      ( Tb_attr,
        TB_BOLD,
        TB_REVERSE,
        TB_UNDERLINE
      ),
  )
where

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

-- | An attribute.
newtype Tb_attr
  = Tb_attr Word16
  deriving stock (Tb_attr -> Tb_attr -> Bool
(Tb_attr -> Tb_attr -> Bool)
-> (Tb_attr -> Tb_attr -> Bool) -> Eq Tb_attr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Tb_attr -> Tb_attr -> Bool
== :: Tb_attr -> Tb_attr -> Bool
$c/= :: Tb_attr -> Tb_attr -> Bool
/= :: Tb_attr -> Tb_attr -> Bool
Eq, Eq Tb_attr
Eq Tb_attr =>
(Tb_attr -> Tb_attr -> Ordering)
-> (Tb_attr -> Tb_attr -> Bool)
-> (Tb_attr -> Tb_attr -> Bool)
-> (Tb_attr -> Tb_attr -> Bool)
-> (Tb_attr -> Tb_attr -> Bool)
-> (Tb_attr -> Tb_attr -> Tb_attr)
-> (Tb_attr -> Tb_attr -> Tb_attr)
-> Ord Tb_attr
Tb_attr -> Tb_attr -> Bool
Tb_attr -> Tb_attr -> Ordering
Tb_attr -> Tb_attr -> Tb_attr
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Tb_attr -> Tb_attr -> Ordering
compare :: Tb_attr -> Tb_attr -> Ordering
$c< :: Tb_attr -> Tb_attr -> Bool
< :: Tb_attr -> Tb_attr -> Bool
$c<= :: Tb_attr -> Tb_attr -> Bool
<= :: Tb_attr -> Tb_attr -> Bool
$c> :: Tb_attr -> Tb_attr -> Bool
> :: Tb_attr -> Tb_attr -> Bool
$c>= :: Tb_attr -> Tb_attr -> Bool
>= :: Tb_attr -> Tb_attr -> Bool
$cmax :: Tb_attr -> Tb_attr -> Tb_attr
max :: Tb_attr -> Tb_attr -> Tb_attr
$cmin :: Tb_attr -> Tb_attr -> Tb_attr
min :: Tb_attr -> Tb_attr -> Tb_attr
Ord, Int -> Tb_attr -> ShowS
[Tb_attr] -> ShowS
Tb_attr -> String
(Int -> Tb_attr -> ShowS)
-> (Tb_attr -> String) -> ([Tb_attr] -> ShowS) -> Show Tb_attr
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Tb_attr -> ShowS
showsPrec :: Int -> Tb_attr -> ShowS
$cshow :: Tb_attr -> String
show :: Tb_attr -> String
$cshowList :: [Tb_attr] -> ShowS
showList :: [Tb_attr] -> ShowS
Show)

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

instance Semigroup Tb_attr where
  Tb_attr Word16
cx <> :: Tb_attr -> Tb_attr -> Tb_attr
<> Tb_attr Word16
cy =
    Word16 -> Tb_attr
Tb_attr (Word16
cx Word16 -> Word16 -> Word16
forall a. Bits a => a -> a -> a
.|. Word16
cy)

pattern TB_BOLD :: Tb_attr
pattern $mTB_BOLD :: forall {r}. Tb_attr -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_BOLD :: Tb_attr
TB_BOLD <-
  ((== Tb_attr Termbox.Bindings.C._TB_BOLD) -> True)
  where
    TB_BOLD = Word16 -> Tb_attr
Tb_attr Word16
Termbox.Bindings.C._TB_BOLD

pattern TB_REVERSE :: Tb_attr
pattern $mTB_REVERSE :: forall {r}. Tb_attr -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_REVERSE :: Tb_attr
TB_REVERSE <-
  ((== Tb_attr Termbox.Bindings.C._TB_REVERSE) -> True)
  where
    TB_REVERSE = Word16 -> Tb_attr
Tb_attr Word16
Termbox.Bindings.C._TB_REVERSE

pattern TB_UNDERLINE :: Tb_attr
pattern $mTB_UNDERLINE :: forall {r}. Tb_attr -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_UNDERLINE :: Tb_attr
TB_UNDERLINE <-
  ((== Tb_attr Termbox.Bindings.C._TB_UNDERLINE) -> True)
  where
    TB_UNDERLINE = Word16 -> Tb_attr
Tb_attr Word16
Termbox.Bindings.C._TB_UNDERLINE