{-# LINE 1 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}

module FreeType.Miscellaneous.Incremental.Types where

import           FreeType.Core.Types.Types

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




data FT_IncrementalRec
type FT_Incremental = Ptr FT_IncrementalRec



data FT_Incremental_MetricsRec = FT_Incremental_MetricsRec
                                   { imrBearing_x :: FT_Long
                                   , imrBearing_y :: FT_Long
                                   , imrAdvance   :: FT_Long
                                   , imrAdvance_v :: FT_Long
                                   }

instance Storable FT_Incremental_MetricsRec where
  sizeOf _    = (32)
{-# LINE 29 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
  alignment _ = 8
{-# LINE 30 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}

  peek ptr =
    FT_Incremental_MetricsRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 34 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 35 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 36 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 37 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & imrBearing_x
{-# LINE 40 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & imrBearing_y
{-# LINE 41 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & imrAdvance
{-# LINE 42 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & imrAdvance_v
{-# LINE 43 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}



type FT_Incremental_Metrics = Ptr FT_Incremental_MetricsRec



type FT_Incremental_GetGlyphDataFunc = FT_Incremental -- ^ incremental
                                    -> FT_UInt        -- ^ glyph_index
                                    -> Ptr FT_Data    -- ^ data
                                    -> IO FT_Error

foreign import ccall "wrapper"
  ft_Incremental_GetGlyphDataFunc :: FT_Incremental_GetGlyphDataFunc -> IO (FunPtr FT_Incremental_GetGlyphDataFunc)

foreign import ccall "dynamic"
  ft_Incremental_GetGlyphDataFunc' :: FunPtr FT_Incremental_GetGlyphDataFunc -> FT_Incremental_GetGlyphDataFunc



type FT_Incremental_FreeGlyphDataFunc = FT_Incremental -- ^ incremental
                                     -> Ptr FT_Data    -- ^ data
                                     -> IO ()

foreign import ccall "wrapper"
  ft_Incremental_FreeGlyphDataFunc :: FT_Incremental_FreeGlyphDataFunc -> IO (FunPtr FT_Incremental_FreeGlyphDataFunc)

foreign import ccall "dynamic"
  ft_Incremental_FreeGlyphDataFunc' :: FunPtr FT_Incremental_FreeGlyphDataFunc -> FT_Incremental_FreeGlyphDataFunc



type FT_Incremental_GetGlyphMetricsFunc = FT_Incremental                -- ^ incremental
                                       -> FT_UInt                       -- ^ glyph_index
                                       -> FT_Bool                       -- ^ vertical
                                       -> Ptr FT_Incremental_MetricsRec -- ^ metrics
                                       -> IO FT_Error

foreign import ccall "wrapper"
  ft_Incremental_GetGlyphMetricsFunc :: FT_Incremental_GetGlyphMetricsFunc -> IO (FunPtr FT_Incremental_GetGlyphMetricsFunc)

foreign import ccall "dynamic"
  ft_Incremental_GetGlyphMetricsFunc' :: FunPtr FT_Incremental_GetGlyphMetricsFunc -> FT_Incremental_GetGlyphMetricsFunc



data FT_Incremental_FuncsRec = FT_Incremental_FuncsRec
                                 { ifrGet_glyph_data    :: FunPtr FT_Incremental_GetGlyphDataFunc
                                 , ifrFree_glyph_data   :: FunPtr FT_Incremental_FreeGlyphDataFunc
                                 , ifrGet_glyph_metrics :: FunPtr FT_Incremental_GetGlyphMetricsFunc
                                 }

instance Storable FT_Incremental_FuncsRec where
  sizeOf _    = (24)
{-# LINE 97 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
  alignment _ = 8
{-# LINE 98 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}

  peek ptr =
    FT_Incremental_FuncsRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 102 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 103 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 104 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & ifrGet_glyph_data
{-# LINE 107 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & ifrFree_glyph_data
{-# LINE 108 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & ifrGet_glyph_metrics
{-# LINE 109 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}



data FT_Incremental_InterfaceRec = FT_Incremental_InterfaceRec
                                 { iirFuncs  :: Ptr (FunPtr FT_Incremental_FuncsRec)
                                 , iirObject :: FT_Incremental
                                 }

instance Storable FT_Incremental_InterfaceRec where
  sizeOf _    = (16)
{-# LINE 119 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
  alignment _ = 8
{-# LINE 120 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}

  peek ptr =
    FT_Incremental_InterfaceRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 124 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 125 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & iirFuncs
{-# LINE 128 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & iirObject
{-# LINE 129 "FreeType/Miscellaneous/Incremental/Types.hsc" #-}




type FT_Incremental_Interface = Ptr FT_Incremental_InterfaceRec