{-# LINE 1 "FreeType/Core/Base/Types.hsc" #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE PatternSynonyms #-}

module FreeType.Core.Base.Types
  ( FT_Library
  , FT_LibraryRec
  , FT_Face
  , FT_Size
  , FT_GlyphSlot
  , FT_CharMap
  , FT_Encoding
  , pattern FT_ENCODING_NONE
  , pattern FT_ENCODING_MS_SYMBOL
  , pattern FT_ENCODING_UNICODE
  , pattern FT_ENCODING_SJIS
  , pattern FT_ENCODING_PRC
  , pattern FT_ENCODING_BIG5
  , pattern FT_ENCODING_WANSUNG
  , pattern FT_ENCODING_JOHAB
  , pattern FT_ENCODING_ADOBE_STANDARD
  , pattern FT_ENCODING_ADOBE_EXPERT
  , pattern FT_ENCODING_ADOBE_CUSTOM
  , pattern FT_ENCODING_ADOBE_LATIN_1
  , pattern FT_ENCODING_OLD_LATIN_2
  , pattern FT_ENCODING_APPLE_ROMAN
  , FT_FaceRec (..)
  , FT_SizeRec (..)
  , FT_Size_Metrics (..)
  , FT_GlyphSlotRec (..)
  , FT_Glyph_Metrics (..)
  , FT_SubGlyph
  , FT_SubGlyphRec
  , FT_Bitmap_Size (..)
  , FT_Open_Args (..)
  , FT_Parameter (..)
  , FT_Size_Request_Type
  , FT_Size_RequestRec (..)
  , FT_Size_Request
  , FT_Render_Mode
  , FT_Kerning_Mode
  , FT_CharMapRec (..)
  , FT_Face_Internal
  , FT_Face_InternalRec
  , FT_Size_Internal
  , FT_Size_InternalRec
  , FT_Slot_Internal
  , FT_Slot_InternalRec
  ) where

import           FreeType.Circular.Types
import           FreeType.Core.Types.Types

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




data FT_Open_Args = FT_Open_Args
                      { oaFlags       :: FT_UInt
                      , oaMemory_base :: Ptr FT_Byte
                      , oaMemory_size :: FT_Long
                      , oaPathname    :: Ptr FT_String
                      , oaStream      :: FT_Stream
                      , oaDriver      :: FT_Module
                      , oaNum_params  :: FT_Int
                      , oaParams      :: Ptr FT_Parameter
                      }

instance Storable FT_Open_Args where
  sizeOf _    = (64)
{-# LINE 75 "FreeType/Core/Base/Types.hsc" #-}
  alignment _ = 8
{-# LINE 76 "FreeType/Core/Base/Types.hsc" #-}

  peek ptr =
    FT_Open_Args
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 80 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 81 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 82 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 83 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 84 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 85 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
{-# LINE 86 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr
{-# LINE 87 "FreeType/Core/Base/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & oaFlags
{-# LINE 90 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & oaMemory_base
{-# LINE 91 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & oaMemory_size
{-# LINE 92 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & oaPathname
{-# LINE 93 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 32) ptr $ val & oaStream
{-# LINE 94 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 40) ptr $ val & oaDriver
{-# LINE 95 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 48) ptr $ val & oaNum_params
{-# LINE 96 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 56) ptr $ val & oaParams
{-# LINE 97 "FreeType/Core/Base/Types.hsc" #-}



data FT_Parameter = FT_Parameter
                      { pTag  :: FT_ULong
                      , pData :: FT_Pointer
                      }

instance Storable FT_Parameter where
  sizeOf _    = (16)
{-# LINE 107 "FreeType/Core/Base/Types.hsc" #-}
  alignment _ = 8
{-# LINE 108 "FreeType/Core/Base/Types.hsc" #-}

  peek ptr =
    FT_Parameter
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 112 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 113 "FreeType/Core/Base/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & pTag
{-# LINE 116 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & pData
{-# LINE 117 "FreeType/Core/Base/Types.hsc" #-}



type FT_Size_Request_Type = Word32
{-# LINE 121 "FreeType/Core/Base/Types.hsc" #-}



data FT_Size_RequestRec = FT_Size_RequestRec
                            { srrType           :: FT_Size_Request_Type
                            , srrWidth          :: FT_Long
                            , srrHeight         :: FT_Long
                            , srrHoriResolution :: FT_UInt
                            , srrVertResolution :: FT_UInt
                            }

instance Storable FT_Size_RequestRec where
  sizeOf _    = (32)
{-# LINE 134 "FreeType/Core/Base/Types.hsc" #-}
  alignment _ = 8
{-# LINE 135 "FreeType/Core/Base/Types.hsc" #-}

  peek ptr =
    FT_Size_RequestRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 139 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 140 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 141 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 142 "FreeType/Core/Base/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr
{-# LINE 143 "FreeType/Core/Base/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & srrType
{-# LINE 146 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & srrWidth
{-# LINE 147 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & srrHeight
{-# LINE 148 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & srrHoriResolution
{-# LINE 149 "FreeType/Core/Base/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 28) ptr $ val & srrVertResolution
{-# LINE 150 "FreeType/Core/Base/Types.hsc" #-}


type FT_Size_Request = Ptr FT_Size_RequestRec



type FT_Render_Mode = Word32
{-# LINE 157 "FreeType/Core/Base/Types.hsc" #-}



type FT_Kerning_Mode = Word32
{-# LINE 161 "FreeType/Core/Base/Types.hsc" #-}