{-# LINE 1 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
{-# LANGUAGE CPP, ForeignFunctionInterface, NoMonomorphismRestriction, RankNTypes #-}
{-# LINE 2 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module Graphics.ImageMagick.MagickWand.FFI.Types
  where


{-# LINE 8 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

import Control.Monad

import Foreign
import Foreign.C.Types

data PixelIterator
data MagickWand
data PixelWand
data DrawingWand
data Image
data PointInfo = PointInfo {piX, piY :: CDouble}
               deriving (Eq, Show)

instance Storable PointInfo where
  sizeOf = const (16)
{-# LINE 24 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
  alignment _ = 1
  poke p foo  = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) p $ piX foo
{-# LINE 27 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) p $ piY foo
{-# LINE 28 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

  peek p = return PointInfo
              `ap` ((\hsc_ptr -> peekByteOff hsc_ptr 0) p)
{-# LINE 31 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
              `ap` ((\hsc_ptr -> peekByteOff hsc_ptr 8) p)
{-# LINE 32 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}


newtype MagickBooleanType = MagickBooleanType { unMagickBooleanType :: CInt}
  deriving (Eq, Show, Storable)

mFalse  :: MagickBooleanType
mFalse  = MagickBooleanType 0
mTrue   :: MagickBooleanType
mTrue   = MagickBooleanType 1

{-# LINE 41 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

newtype ClassType = ClassType { unClassType :: CInt}
  deriving (Eq, Show)

undefinedClass  :: ClassType
undefinedClass  = ClassType 0
directClass     :: ClassType
directClass     = ClassType 1
pseudoClass     :: ClassType
pseudoClass     = ClassType 2

{-# LINE 50 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

newtype LineCap = LineCap { unLineCap :: CInt }
udefinedCap  :: LineCap
udefinedCap  = LineCap 0
buttCap  :: LineCap
buttCap  = LineCap 1
roundCap  :: LineCap
roundCap  = LineCap 2
squareCap  :: LineCap
squareCap  = LineCap 3

{-# LINE 58 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

newtype LineJoin = LineJoin { unLineJoin :: CInt }
undefinedJoin  :: LineJoin
undefinedJoin  = LineJoin 0
mitterJoin  :: LineJoin
mitterJoin  = LineJoin 1
roundJoin  :: LineJoin
roundJoin  = LineJoin 2
bevelJoin  :: LineJoin
bevelJoin  = LineJoin 3

{-# LINE 66 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

newtype FillRule = FillRule { unFillRule :: CInt }
undefinedRule  :: FillRule
undefinedRule  = FillRule 0
evenOddRule  :: FillRule
evenOddRule  = FillRule 1
nonZeroRule  :: FillRule
nonZeroRule  = FillRule 2

{-# LINE 73 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

data MagickPixelPacket 

instance Storable MagickPixelPacket where
  sizeOf = const (56)
{-# LINE 78 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
  alignment _ = 1
  peek = error "not yet implemented"
  poke = error "not yet implemented"

getPixelRed, getPixelGreen, getPixelBlue, getPixelIndex
  :: Storable a => Ptr b -> IO a

getPixelRed   = (\hsc_ptr -> peekByteOff hsc_ptr 32)
{-# LINE 86 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
getPixelGreen = (\hsc_ptr -> peekByteOff hsc_ptr 36)
{-# LINE 87 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
getPixelBlue  = (\hsc_ptr -> peekByteOff hsc_ptr 40)
{-# LINE 88 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
getPixelIndex = (\hsc_ptr -> peekByteOff hsc_ptr 48)
{-# LINE 89 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}

setPixelRed, setPixelGreen, setPixelBlue, setPixelIndex
  :: Storable a => Ptr b -> a -> IO ()
  
setPixelRed   = (\hsc_ptr -> pokeByteOff hsc_ptr 32)
{-# LINE 94 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
setPixelGreen = (\hsc_ptr -> pokeByteOff hsc_ptr 36)
{-# LINE 95 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
setPixelBlue  = (\hsc_ptr -> pokeByteOff hsc_ptr 40)
{-# LINE 96 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}
setPixelIndex = (\hsc_ptr -> pokeByteOff hsc_ptr 48)
{-# LINE 97 "src/Graphics/ImageMagick/MagickWand/FFI/Types.hsc" #-}