{-# LINE 1 "src/NanoVG/Internal/GlobalComposite.chs" #-}
module NanoVG.Internal.GlobalComposite where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import NanoVG.Internal.Context
{-# LINE 7 "src/NanoVG/Internal/GlobalComposite.chs" #-}
data BlendFactor = Zero
| One
| SrcColor
| OneMinusSrcColor
| DstColor
| OneMinusDstColor
| SrcAlpha
| OneMinusSrcAlpha
| DstAlpha
| OneMinusDstAlpha
| SrcAlphaSaturate
deriving (Show,Read,Eq,Ord)
instance Enum BlendFactor where
succ :: BlendFactor -> BlendFactor
succ BlendFactor
Zero = BlendFactor
One
succ BlendFactor
One = BlendFactor
SrcColor
succ BlendFactor
SrcColor = BlendFactor
OneMinusSrcColor
succ OneMinusSrcColor = DstColor
succ DstColor = OneMinusDstColor
succ OneMinusDstColor = SrcAlpha
succ SrcAlpha = OneMinusSrcAlpha
succ OneMinusSrcAlpha = DstAlpha
succ DstAlpha = OneMinusDstAlpha
succ BlendFactor
OneMinusDstAlpha = SrcAlphaSaturate
succ BlendFactor
SrcAlphaSaturate = String -> BlendFactor
forall a. HasCallStack => String -> a
error String
"BlendFactor.succ: SrcAlphaSaturate has no successor"
pred One = Zero
pred SrcColor = One
pred OneMinusSrcColor = SrcColor
pred DstColor = OneMinusSrcColor
pred OneMinusDstColor = DstColor
pred SrcAlpha = OneMinusDstColor
pred OneMinusSrcAlpha = SrcAlpha
pred DstAlpha = OneMinusSrcAlpha
pred OneMinusDstAlpha = DstAlpha
pred SrcAlphaSaturate = OneMinusDstAlpha
pred Zero = error "BlendFactor.pred: Zero has no predecessor"
enumFromTo :: BlendFactor -> BlendFactor -> [BlendFactor]
enumFromTo BlendFactor
from BlendFactor
to = BlendFactor -> [BlendFactor]
forall t. Enum t => t -> [t]
go BlendFactor
from
where
end :: Int
end = BlendFactor -> Int
forall a. Enum a => a -> Int
fromEnum BlendFactor
to
go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
Ordering
EQ -> [t
v]
Ordering
GT -> []
enumFrom :: BlendFactor -> [BlendFactor]
enumFrom BlendFactor
from = BlendFactor -> BlendFactor -> [BlendFactor]
forall a. Enum a => a -> a -> [a]
enumFromTo BlendFactor
from BlendFactor
SrcAlphaSaturate
fromEnum :: BlendFactor -> Int
fromEnum BlendFactor
Zero = Int
1
fromEnum BlendFactor
One = Int
2
fromEnum BlendFactor
SrcColor = Int
4
fromEnum BlendFactor
OneMinusSrcColor = Int
8
fromEnum BlendFactor
DstColor = Int
16
fromEnum BlendFactor
OneMinusDstColor = Int
32
fromEnum BlendFactor
SrcAlpha = Int
64
fromEnum BlendFactor
OneMinusSrcAlpha = Int
128
fromEnum BlendFactor
DstAlpha = Int
256
fromEnum BlendFactor
OneMinusDstAlpha = Int
512
fromEnum BlendFactor
SrcAlphaSaturate = Int
1024
toEnum :: Int -> BlendFactor
toEnum Int
1 = BlendFactor
Zero
toEnum Int
2 = BlendFactor
One
toEnum Int
4 = BlendFactor
SrcColor
toEnum Int
8 = BlendFactor
OneMinusSrcColor
toEnum Int
16 = BlendFactor
DstColor
toEnum Int
32 = BlendFactor
OneMinusDstColor
toEnum Int
64 = BlendFactor
SrcAlpha
toEnum Int
128 = BlendFactor
OneMinusSrcAlpha
toEnum Int
256 = BlendFactor
DstAlpha
toEnum Int
512 = BlendFactor
OneMinusDstAlpha
toEnum Int
1024 = BlendFactor
SrcAlphaSaturate
toEnum Int
unmatched = String -> BlendFactor
forall a. HasCallStack => String -> a
error (String
"BlendFactor.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)
{-# LINE 11 "src/NanoVG/Internal/GlobalComposite.chs" #-}
data CompositeOperation = SourceOver
| SourceIn
| SourceOut
| Atop
| DestinationOver
| DestinationIn
| DestinationOut
| DestinationAtop
| Lighter
| Copy
| Xor
deriving (Enum,Show,Read,Eq,Ord)
{-# LINE 15 "src/NanoVG/Internal/GlobalComposite.chs" #-}
globalCompositeOperation :: (Context) -> (CompositeOperation) -> IO ()
globalCompositeOperation a1 a2 =
let {a1' = id a1} in
let {a2' = (fromIntegral . fromEnum) a2} in
globalCompositeOperation'_ a1' a2' >>
return ()
{-# LINE 26 "src/NanoVG/Internal/GlobalComposite.chs" #-}
globalCompositeBlendFunc :: (Context) -> (BlendFactor) -> (BlendFactor) -> IO ()
globalCompositeBlendFunc a1 a2 a3 =
let {a1' = id a1} in
let {a2' = (fromIntegral . fromEnum) a2} in
let {a3' = (fromIntegral . fromEnum) a3} in
globalCompositeBlendFunc'_ a1' a2' a3' >>
return ()
{-# LINE 31 "src/NanoVG/Internal/GlobalComposite.chs" #-}
globalCompositeBlendFuncSeparate :: (Context) -> (BlendFactor) -> (BlendFactor) -> (BlendFactor) -> (BlendFactor) -> IO ()
globalCompositeBlendFuncSeparate a1 a2 a3 a4 a5 =
let {a1' = id a1} in
let {a2' = (fromIntegral . fromEnum) a2} in
let {a3' = (fromIntegral . fromEnum) a3} in
let {a4' = (fromIntegral . fromEnum) a4} in
let {a5' = (fromIntegral . fromEnum) a5} in
globalCompositeBlendFuncSeparate'_ a1' a2' a3' a4' a5' >>
return ()
{-# LINE 36 "src/NanoVG/Internal/GlobalComposite.chs" #-}
foreign import ccall unsafe "NanoVG/Internal/GlobalComposite.chs.h nvgGlobalCompositeOperation"
globalCompositeOperation'_ :: ((Context) -> (C2HSImp.CInt -> (IO ())))
foreign import ccall unsafe "NanoVG/Internal/GlobalComposite.chs.h nvgGlobalCompositeBlendFunc"
globalCompositeBlendFunc'_ :: ((Context) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))
foreign import ccall unsafe "NanoVG/Internal/GlobalComposite.chs.h nvgGlobalCompositeBlendFuncSeparate"
globalCompositeBlendFuncSeparate'_ :: ((Context) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ()))))))