    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.UI.SDL.Color
    -- Copyright   :  (c) David Himmelstrup 2005
    -- License     :  BSD-like
    --
    -- Maintainer  :  lemmih@gmail.com
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -----------------------------------------------------------------------------
    module Graphics.UI.SDL.Color
        (Color (..)
        ,Pixel (..)
        ) where

    import Foreign (castPtr,pokeArray)
    import Data.Word (Word8,Word32)
    import Foreign.Storable (Storable(..))

    data Color
        = Color
        { colorRed, colorGreen, colorBlue :: Word8 }

    instance Storable Color where
        sizeOf = const 4
        alignment = const 1
        peek ptr
            = do r <- peekByteOff ptr 0
                 g <- peekByteOff ptr 1
                 b <- peekByteOff ptr 2
                 return (Color r g b)
        poke ptr (Color r g b) = pokeArray (castPtr ptr) [r,g,b,0]

    newtype Pixel = Pixel Word32 deriving (Show,Eq,Ord)

    instance Storable Pixel where
        sizeOf    (Pixel v) = sizeOf v
        alignment (Pixel v) = alignment v
        peek p
            = do v <- peek (castPtr p)
                 return $ Pixel v
        poke p (Pixel v) = poke (castPtr p) v