module Graphics.UI.SDL.Color
(Color (..)
,Pixel (..)
) where
import Foreign (castPtr,pokeArray)
import Data.Word (Word8,Word32)
import Foreign.Storable (Storable(..))
data Color
= Color
{ Color -> Word8
colorRed, Color -> Word8
colorGreen, Color -> Word8
colorBlue :: Word8 }
instance Storable Color where
sizeOf :: Color -> Int
sizeOf = Int -> Color -> Int
forall a b. a -> b -> a
const 4
alignment :: Color -> Int
alignment = Int -> Color -> Int
forall a b. a -> b -> a
const 1
peek :: Ptr Color -> IO Color
peek ptr :: Ptr Color
ptr
= do Word8
r <- Ptr Color -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr Color
ptr 0
Word8
g <- Ptr Color -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr Color
ptr 1
Word8
b <- Ptr Color -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr Color
ptr 2
Color -> IO Color
forall (m :: * -> *) a. Monad m => a -> m a
return (Word8 -> Word8 -> Word8 -> Color
Color Word8
r Word8
g Word8
b)
poke :: Ptr Color -> Color -> IO ()
poke ptr :: Ptr Color
ptr (Color r :: Word8
r g :: Word8
g b :: Word8
b) = Ptr Word8 -> [Word8] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeArray (Ptr Color -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr Color
ptr) [Word8
r,Word8
g,Word8
b,0]
newtype Pixel = Pixel Word32 deriving (Int -> Pixel -> ShowS
[Pixel] -> ShowS
Pixel -> String
(Int -> Pixel -> ShowS)
-> (Pixel -> String) -> ([Pixel] -> ShowS) -> Show Pixel
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Pixel] -> ShowS
$cshowList :: [Pixel] -> ShowS
show :: Pixel -> String
$cshow :: Pixel -> String
showsPrec :: Int -> Pixel -> ShowS
$cshowsPrec :: Int -> Pixel -> ShowS
Show,Pixel -> Pixel -> Bool
(Pixel -> Pixel -> Bool) -> (Pixel -> Pixel -> Bool) -> Eq Pixel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Pixel -> Pixel -> Bool
$c/= :: Pixel -> Pixel -> Bool
== :: Pixel -> Pixel -> Bool
$c== :: Pixel -> Pixel -> Bool
Eq,Eq Pixel
Eq Pixel =>
(Pixel -> Pixel -> Ordering)
-> (Pixel -> Pixel -> Bool)
-> (Pixel -> Pixel -> Bool)
-> (Pixel -> Pixel -> Bool)
-> (Pixel -> Pixel -> Bool)
-> (Pixel -> Pixel -> Pixel)
-> (Pixel -> Pixel -> Pixel)
-> Ord Pixel
Pixel -> Pixel -> Bool
Pixel -> Pixel -> Ordering
Pixel -> Pixel -> Pixel
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
min :: Pixel -> Pixel -> Pixel
$cmin :: Pixel -> Pixel -> Pixel
max :: Pixel -> Pixel -> Pixel
$cmax :: Pixel -> Pixel -> Pixel
>= :: Pixel -> Pixel -> Bool
$c>= :: Pixel -> Pixel -> Bool
> :: Pixel -> Pixel -> Bool
$c> :: Pixel -> Pixel -> Bool
<= :: Pixel -> Pixel -> Bool
$c<= :: Pixel -> Pixel -> Bool
< :: Pixel -> Pixel -> Bool
$c< :: Pixel -> Pixel -> Bool
compare :: Pixel -> Pixel -> Ordering
$ccompare :: Pixel -> Pixel -> Ordering
$cp1Ord :: Eq Pixel
Ord)
instance Storable Pixel where
sizeOf :: Pixel -> Int
sizeOf (Pixel v :: Word32
v) = Word32 -> Int
forall a. Storable a => a -> Int
sizeOf Word32
v
alignment :: Pixel -> Int
alignment (Pixel v :: Word32
v) = Word32 -> Int
forall a. Storable a => a -> Int
alignment Word32
v
peek :: Ptr Pixel -> IO Pixel
peek p :: Ptr Pixel
p
= do Word32
v <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek (Ptr Pixel -> Ptr Word32
forall a b. Ptr a -> Ptr b
castPtr Ptr Pixel
p)
Pixel -> IO Pixel
forall (m :: * -> *) a. Monad m => a -> m a
return (Pixel -> IO Pixel) -> Pixel -> IO Pixel
forall a b. (a -> b) -> a -> b
$ Word32 -> Pixel
Pixel Word32
v
poke :: Ptr Pixel -> Pixel -> IO ()
poke p :: Ptr Pixel
p (Pixel v :: Word32
v) = Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Pixel -> Ptr Word32
forall a b. Ptr a -> Ptr b
castPtr Ptr Pixel
p) Word32
v