{-# LINE 1 "FreeType/Support/Module/Types.hsc" #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}

module FreeType.Support.Module.Types
  ( module FreeType.Support.Module.Types
  , FT_Module
  , FT_ModuleRec
  , FT_Driver
  , FT_DriverRec
  ) where

import           FreeType.Circular.Types ( FT_ModuleRec, FT_Module
                                         , FT_DriverRec, FT_Driver
                                         )
import           FreeType.Core.Types.Types
import           FreeType.Support.Scanline.Types

import           Data.Int
import           Data.Function ((&))
import           Foreign.Ptr
import           Foreign.Storable





type FT_Module_Constructor = FT_Module   -- ^ module
                          -> IO FT_Error

foreign import ccall "wrapper"
  ft_Module_Constructor :: FT_Module_Constructor -> IO (FunPtr FT_Module_Constructor)

foreign import ccall "dynamic"
  ft_Module_Constructor' :: FunPtr FT_Module_Constructor -> FT_Module_Constructor



type FT_Module_Destructor = FT_Module -- ^ module
                         -> IO ()

foreign import ccall "wrapper"
  ft_Module_Destructor :: FT_Module_Destructor -> IO (FunPtr FT_Module_Destructor)

foreign import ccall "dynamic"
  ft_Module_Destructor' :: FunPtr FT_Module_Destructor -> FT_Module_Destructor




type FT_Module_Interface = FT_Pointer

type FT_Module_Requester = FT_Module              -- ^ module
                        -> Ptr Int8       -- ^ name
{-# LINE 54 "FreeType/Support/Module/Types.hsc" #-}
                        -> IO FT_Module_Interface

foreign import ccall "wrapper"
  ft_Module_Requester :: FT_Module_Requester -> IO (FunPtr FT_Module_Requester)

foreign import ccall "dynamic"
  ft_Module_Requester' :: FunPtr FT_Module_Requester -> FT_Module_Requester




data FT_Module_Class = FT_Module_Class
                         { mcModule_flags     :: FT_ULong
                         , mcModule_size      :: FT_Long
                         , mcModule_name      :: Ptr FT_String
                         , mcModule_version   :: FT_Fixed
                         , mcModule_requires  :: FT_Fixed
                         , mcModule_interface :: Ptr ()
                         , mcModule_init      :: FunPtr FT_Module_Constructor
                         , mcModule_done      :: FunPtr FT_Module_Destructor
                         , mcGet_interface    :: FunPtr FT_Module_Requester
                         }

instance Storable FT_Module_Class where
  sizeOf _    = (72)
{-# LINE 79 "FreeType/Support/Module/Types.hsc" #-}
  alignment _ = 8
{-# LINE 80 "FreeType/Support/Module/Types.hsc" #-}

  peek ptr =
    FT_Module_Class
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 84 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 85 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 86 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 87 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 88 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 89 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
{-# LINE 90 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr
{-# LINE 91 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr
{-# LINE 92 "FreeType/Support/Module/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & mcModule_flags
{-# LINE 95 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & mcModule_size
{-# LINE 96 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & mcModule_name
{-# LINE 97 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & mcModule_version
{-# LINE 98 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 32) ptr $ val & mcModule_requires
{-# LINE 99 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 40) ptr $ val & mcModule_interface
{-# LINE 100 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 48) ptr $ val & mcModule_init
{-# LINE 101 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 56) ptr $ val & mcModule_done
{-# LINE 102 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 64) ptr $ val & mcGet_interface
{-# LINE 103 "FreeType/Support/Module/Types.hsc" #-}



data FT_RendererRec
type FT_Renderer = Ptr FT_RendererRec



data FT_Renderer_RenderFunc

data FT_Renderer_TransformFunc

data FT_Renderer_GetCBoxFunc

data FT_Renderer_SetModeFunc

data FT_Renderer_Class = FT_Renderer_Class
                           { rcRoot            :: FT_Module_Class
                           , rcGlyph_format    :: FT_Glyph_Format
                           , rcRender_glyph    :: FunPtr FT_Renderer_RenderFunc
                           , rcTransform_glyph :: FunPtr FT_Renderer_TransformFunc
                           , rcGet_glyph_cbox  :: FunPtr FT_Renderer_GetCBoxFunc
                           , rcSet_mode        :: FunPtr FT_Renderer_SetModeFunc
                           , rcRaster_class    :: Ptr FT_Raster_Funcs
                           }

instance Storable FT_Renderer_Class where
  sizeOf _    = (120)
{-# LINE 131 "FreeType/Support/Module/Types.hsc" #-}
  alignment _ = 8
{-# LINE 132 "FreeType/Support/Module/Types.hsc" #-}

  peek ptr =
    FT_Renderer_Class
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 136 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr
{-# LINE 137 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 80) ptr
{-# LINE 138 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 88) ptr
{-# LINE 139 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 96) ptr
{-# LINE 140 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 104) ptr
{-# LINE 141 "FreeType/Support/Module/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 112) ptr
{-# LINE 142 "FreeType/Support/Module/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & rcRoot
{-# LINE 145 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 72) ptr $ val & rcGlyph_format
{-# LINE 146 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 80) ptr $ val & rcRender_glyph
{-# LINE 147 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 88) ptr $ val & rcTransform_glyph
{-# LINE 148 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 96) ptr $ val & rcGet_glyph_cbox
{-# LINE 149 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 104) ptr $ val & rcSet_mode
{-# LINE 150 "FreeType/Support/Module/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 112) ptr $ val & rcRaster_class
{-# LINE 151 "FreeType/Support/Module/Types.hsc" #-}



type FT_DebugHook_Func = Ptr ()      -- ^ arg
                      -> IO FT_Error

foreign import ccall "wrapper"
  ft_DebugHook_Func :: FT_DebugHook_Func -> IO (FunPtr FT_DebugHook_Func)

foreign import ccall "dynamic"
  ft_DebugHook_Func' :: FunPtr FT_DebugHook_Func -> FT_DebugHook_Func