{-# LANGUAGE DeriveGeneric #-}
module Data.STBImage.ColorTypes (YColor(..), YAColor(..), RGBColor(..), RGBAColor(..)) where

import           Foreign
import           Foreign.C.Types
import           GHC.Generics

{-# ANN module ("HLint: ignore Reduce duplication"::String) #-}

data YColor = YColor { YColor -> Word8
_yGreyscale :: Word8 }
            deriving (YColor -> YColor -> Bool
(YColor -> YColor -> Bool)
-> (YColor -> YColor -> Bool) -> Eq YColor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: YColor -> YColor -> Bool
$c/= :: YColor -> YColor -> Bool
== :: YColor -> YColor -> Bool
$c== :: YColor -> YColor -> Bool
Eq, (forall x. YColor -> Rep YColor x)
-> (forall x. Rep YColor x -> YColor) -> Generic YColor
forall x. Rep YColor x -> YColor
forall x. YColor -> Rep YColor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep YColor x -> YColor
$cfrom :: forall x. YColor -> Rep YColor x
Generic)

instance Storable YColor where
    sizeOf :: YColor -> Int
sizeOf _ = 1
    alignment :: YColor -> Int
alignment _ = 1
    peek :: Ptr YColor -> IO YColor
peek ptr :: Ptr YColor
ptr = do
        let ptr' :: Ptr Word8
ptr' = Ptr YColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr YColor
ptr :: Ptr Word8
        Word8
y <- Ptr Word8 -> IO Word8
forall a. Storable a => Ptr a -> IO a
peek Ptr Word8
ptr'
        YColor -> IO YColor
forall (m :: * -> *) a. Monad m => a -> m a
return (YColor -> IO YColor) -> YColor -> IO YColor
forall a b. (a -> b) -> a -> b
$ Word8 -> YColor
YColor Word8
y
    poke :: Ptr YColor -> YColor -> IO ()
poke ptr :: Ptr YColor
ptr (YColor y :: Word8
y) = Ptr Word8 -> Word8 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr YColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr YColor
ptr :: Ptr Word8) Word8
y

data YAColor = YAColor { YAColor -> Word8
_yaGreyscale :: Word8, YAColor -> Word8
_yaAlpha :: Word8 }
             deriving (YAColor -> YAColor -> Bool
(YAColor -> YAColor -> Bool)
-> (YAColor -> YAColor -> Bool) -> Eq YAColor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: YAColor -> YAColor -> Bool
$c/= :: YAColor -> YAColor -> Bool
== :: YAColor -> YAColor -> Bool
$c== :: YAColor -> YAColor -> Bool
Eq, (forall x. YAColor -> Rep YAColor x)
-> (forall x. Rep YAColor x -> YAColor) -> Generic YAColor
forall x. Rep YAColor x -> YAColor
forall x. YAColor -> Rep YAColor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep YAColor x -> YAColor
$cfrom :: forall x. YAColor -> Rep YAColor x
Generic)

instance Storable YAColor where
    sizeOf :: YAColor -> Int
sizeOf _ = 2
    alignment :: YAColor -> Int
alignment _ = 1
    peek :: Ptr YAColor -> IO YAColor
peek ptr :: Ptr YAColor
ptr = do
        let ptr' :: Ptr Word8
ptr' = Ptr YAColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr YAColor
ptr :: Ptr Word8
        Word8
y <- Ptr Word8 -> IO Word8
forall a. Storable a => Ptr a -> IO a
peek Ptr Word8
ptr'
        Word8
a <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 1
        YAColor -> IO YAColor
forall (m :: * -> *) a. Monad m => a -> m a
return (YAColor -> IO YAColor) -> YAColor -> IO YAColor
forall a b. (a -> b) -> a -> b
$ Word8 -> Word8 -> YAColor
YAColor Word8
y Word8
a
    poke :: Ptr YAColor -> YAColor -> IO ()
poke ptr :: Ptr YAColor
ptr (YAColor y :: Word8
y a :: Word8
a) = do
        let ptr' :: Ptr Word8
ptr' = Ptr YAColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr YAColor
ptr :: Ptr Word8
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 0 Word8
y
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 1 Word8
a

data RGBColor = RGBColor { RGBColor -> Word8
_rgbRed :: Word8, RGBColor -> Word8
_rgbGreen :: Word8, RGBColor -> Word8
_rgbBlue :: Word8 }
               deriving (RGBColor -> RGBColor -> Bool
(RGBColor -> RGBColor -> Bool)
-> (RGBColor -> RGBColor -> Bool) -> Eq RGBColor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RGBColor -> RGBColor -> Bool
$c/= :: RGBColor -> RGBColor -> Bool
== :: RGBColor -> RGBColor -> Bool
$c== :: RGBColor -> RGBColor -> Bool
Eq, (forall x. RGBColor -> Rep RGBColor x)
-> (forall x. Rep RGBColor x -> RGBColor) -> Generic RGBColor
forall x. Rep RGBColor x -> RGBColor
forall x. RGBColor -> Rep RGBColor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RGBColor x -> RGBColor
$cfrom :: forall x. RGBColor -> Rep RGBColor x
Generic)

instance Storable RGBColor where
    sizeOf :: RGBColor -> Int
sizeOf _ = 3
    alignment :: RGBColor -> Int
alignment _ = 1
    peek :: Ptr RGBColor -> IO RGBColor
peek ptr :: Ptr RGBColor
ptr = do
        let ptr' :: Ptr Word8
ptr' = Ptr RGBColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr RGBColor
ptr :: Ptr Word8
        Word8
r <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 0
        Word8
g <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 1
        Word8
b <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 2
        RGBColor -> IO RGBColor
forall (m :: * -> *) a. Monad m => a -> m a
return (RGBColor -> IO RGBColor) -> RGBColor -> IO RGBColor
forall a b. (a -> b) -> a -> b
$ Word8 -> Word8 -> Word8 -> RGBColor
RGBColor Word8
r Word8
g Word8
b
    poke :: Ptr RGBColor -> RGBColor -> IO ()
poke ptr :: Ptr RGBColor
ptr (RGBColor r :: Word8
r g :: Word8
g b :: Word8
b) = do
        let ptr' :: Ptr Word8
ptr' = Ptr RGBColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr RGBColor
ptr :: Ptr Word8
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 0 Word8
r
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 1 Word8
g
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 2 Word8
b

data RGBAColor = RGBAColor { RGBAColor -> Word8
_rgbaRed :: Word8, RGBAColor -> Word8
_rgbaGreen :: Word8, RGBAColor -> Word8
_rgbaBlue :: Word8, RGBAColor -> Word8
_rgbaAlpha :: Word8 }
               deriving (RGBAColor -> RGBAColor -> Bool
(RGBAColor -> RGBAColor -> Bool)
-> (RGBAColor -> RGBAColor -> Bool) -> Eq RGBAColor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RGBAColor -> RGBAColor -> Bool
$c/= :: RGBAColor -> RGBAColor -> Bool
== :: RGBAColor -> RGBAColor -> Bool
$c== :: RGBAColor -> RGBAColor -> Bool
Eq, (forall x. RGBAColor -> Rep RGBAColor x)
-> (forall x. Rep RGBAColor x -> RGBAColor) -> Generic RGBAColor
forall x. Rep RGBAColor x -> RGBAColor
forall x. RGBAColor -> Rep RGBAColor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RGBAColor x -> RGBAColor
$cfrom :: forall x. RGBAColor -> Rep RGBAColor x
Generic)

instance Storable RGBAColor where
    sizeOf :: RGBAColor -> Int
sizeOf _ = 4
    alignment :: RGBAColor -> Int
alignment _ = 1
    peek :: Ptr RGBAColor -> IO RGBAColor
peek ptr :: Ptr RGBAColor
ptr = do
        let ptr' :: Ptr Word8
ptr' = Ptr RGBAColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr RGBAColor
ptr :: Ptr Word8
        Word8
r <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 0
        Word8
g <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 1
        Word8
b <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 2
        Word8
a <- Ptr Word8 -> Int -> IO Word8
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr Word8
ptr' 3
        RGBAColor -> IO RGBAColor
forall (m :: * -> *) a. Monad m => a -> m a
return (RGBAColor -> IO RGBAColor) -> RGBAColor -> IO RGBAColor
forall a b. (a -> b) -> a -> b
$ Word8 -> Word8 -> Word8 -> Word8 -> RGBAColor
RGBAColor Word8
r Word8
g Word8
b Word8
a
    poke :: Ptr RGBAColor -> RGBAColor -> IO ()
poke ptr :: Ptr RGBAColor
ptr (RGBAColor r :: Word8
r g :: Word8
g b :: Word8
b a :: Word8
a) = do
        let ptr' :: Ptr Word8
ptr' = Ptr RGBAColor -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr RGBAColor
ptr :: Ptr Word8
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 0 Word8
r
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 1 Word8
g
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 2 Word8
b
        Ptr Word8 -> Int -> Word8 -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr Word8
ptr' 3 Word8
a