{-# LINE 1 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LINE 2 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
module Graphics.Rendering.FreeType.Internal.Outline
( FT_Outline(..)
, FT_Outline_MoveToFunc
, FT_Outline_LineToFunc
, FT_Outline_ConicToFunc
, FT_Outline_CubicToFunc
, FT_Outline_Funcs(..)
) where

import Foreign hiding (shift)
import Foreign.C.Types
import Foreign.C.String
import Foreign.Storable

import Graphics.Rendering.FreeType.Internal.Vector
import Graphics.Rendering.FreeType.Internal.PrimitiveTypes


{-# LINE 20 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}

{-# LINE 21 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}


{-# LINE 23 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}

{-# LINE 24 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}


{-# LINE 26 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}

data FT_Outline = FT_Outline
  { n_contours :: CShort
  , n_points   :: CShort
  , points     :: Ptr FT_Vector
  , tags       :: CString
  , contours   :: Ptr CShort
  , flags      :: FT_OUTLINE_FLAGS
  }

instance Storable FT_Outline where
  sizeOf    _ = (20)
{-# LINE 38 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
  alignment _ = 4
{-# LINE 39 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
  peek ptr = do
    n_contours' <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
{-# LINE 41 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    n_points'   <- ((\hsc_ptr -> peekByteOff hsc_ptr 2))   ptr
{-# LINE 42 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    points'     <- ((\hsc_ptr -> peekByteOff hsc_ptr 4))     ptr
{-# LINE 43 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    tags'       <- ((\hsc_ptr -> peekByteOff hsc_ptr 8))       ptr
{-# LINE 44 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    contours'   <- ((\hsc_ptr -> peekByteOff hsc_ptr 12))   ptr
{-# LINE 45 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    flags'      <- ((\hsc_ptr -> peekByteOff hsc_ptr 16))      ptr
{-# LINE 46 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    return $ FT_Outline
      { n_contours = n_contours'
      , n_points   = n_points'
      , points     = points'
      , tags       = tags'
      , contours   = contours'
      , flags      = flags'
      }
  poke ptr val = do
    ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) ptr (n_contours val)
{-# LINE 56 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 2))   ptr (n_points   val)
{-# LINE 57 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 4))     ptr (points     val)
{-# LINE 58 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 8))       ptr (tags       val)
{-# LINE 59 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 12))   ptr (contours   val)
{-# LINE 60 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 16))      ptr (flags      val)
{-# LINE 61 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}

type FT_Outline_MoveToFunc = FunPtr
  (Ptr FT_Vector -> Ptr () -> IO CInt)

type FT_Outline_LineToFunc = FunPtr
  (Ptr FT_Vector -> Ptr () -> IO CInt)

type FT_Outline_ConicToFunc = FunPtr
  (Ptr FT_Vector -> Ptr FT_Vector -> Ptr () -> IO CInt)

type FT_Outline_CubicToFunc = FunPtr
  (Ptr FT_Vector -> Ptr FT_Vector -> Ptr FT_Vector -> Ptr () -> IO CInt)

data FT_Outline_Funcs = FT_Outline_Funcs
  { move_to  :: FT_Outline_MoveToFunc
  , line_to  :: FT_Outline_LineToFunc
  , conic_to :: FT_Outline_ConicToFunc
  , cubic_to :: FT_Outline_CubicToFunc
  , shift    :: CInt
  , delta    :: FT_Pos
  }

instance Storable FT_Outline_Funcs where
  sizeOf    _ = (24)
{-# LINE 85 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
  alignment _ = 4
{-# LINE 86 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
  peek ptr = do
    move_to'  <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
{-# LINE 88 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    line_to'  <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) ptr
{-# LINE 89 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    conic_to' <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
{-# LINE 90 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    cubic_to' <- ((\hsc_ptr -> peekByteOff hsc_ptr 12)) ptr
{-# LINE 91 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    shift'    <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) ptr
{-# LINE 92 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    delta'    <- ((\hsc_ptr -> peekByteOff hsc_ptr 20)) ptr
{-# LINE 93 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    return $ FT_Outline_Funcs
      { move_to  = move_to'
      , line_to  = line_to'
      , conic_to = conic_to'
      , cubic_to = cubic_to'
      , shift    = shift'
      , delta    = delta'
      }
  poke ptr val = do
    ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) ptr (move_to val)
{-# LINE 103 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 4)) ptr (line_to val)
{-# LINE 104 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 8)) ptr (conic_to val)
{-# LINE 105 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 12)) ptr (cubic_to val)
{-# LINE 106 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 16)) ptr (shift val)
{-# LINE 107 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 20)) ptr (delta val)
{-# LINE 108 "Graphics/Rendering/FreeType/Internal/Outline.hsc" #-}