{-# LINE 1 "FreeType/Core/Types/Types.hsc" #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE PatternSynonyms #-}

module FreeType.Core.Types.Types
  ( module FreeType.Core.Types.Types
  , FT_Error
  ) where

import           FreeType.Exception.Types (FT_Error)

import           Data.Function ((&))
import           Foreign





type FT_Byte    = Word8
{-# LINE 19 "FreeType/Core/Types/Types.hsc" #-}

type FT_Bytes   = Ptr FT_Byte

type FT_Char    = Int8
{-# LINE 23 "FreeType/Core/Types/Types.hsc" #-}

type FT_Int     = Int32
{-# LINE 25 "FreeType/Core/Types/Types.hsc" #-}

type FT_UInt    = Word32
{-# LINE 27 "FreeType/Core/Types/Types.hsc" #-}

type FT_Int16   = Int16
{-# LINE 29 "FreeType/Core/Types/Types.hsc" #-}

type FT_UInt16  = Word16
{-# LINE 31 "FreeType/Core/Types/Types.hsc" #-}

type FT_Int32   = Int32
{-# LINE 33 "FreeType/Core/Types/Types.hsc" #-}

type FT_UInt32  = Word32
{-# LINE 35 "FreeType/Core/Types/Types.hsc" #-}

{-# LINE 36 "FreeType/Core/Types/Types.hsc" #-}
type FT_Int64   = Int64
{-# LINE 37 "FreeType/Core/Types/Types.hsc" #-}

type FT_UInt64  = Word64
{-# LINE 39 "FreeType/Core/Types/Types.hsc" #-}

{-# LINE 44 "FreeType/Core/Types/Types.hsc" #-}
type FT_Short   = Int16
{-# LINE 45 "FreeType/Core/Types/Types.hsc" #-}

type FT_UShort  = Word16
{-# LINE 47 "FreeType/Core/Types/Types.hsc" #-}

type FT_Long    = Int64
{-# LINE 49 "FreeType/Core/Types/Types.hsc" #-}

type FT_ULong   = Word64
{-# LINE 51 "FreeType/Core/Types/Types.hsc" #-}

type FT_Bool    = Word8
{-# LINE 53 "FreeType/Core/Types/Types.hsc" #-}

type FT_Offset  = Word64
{-# LINE 55 "FreeType/Core/Types/Types.hsc" #-}

type FT_PtrDist = Int64
{-# LINE 57 "FreeType/Core/Types/Types.hsc" #-}

type FT_String  = Int8
{-# LINE 59 "FreeType/Core/Types/Types.hsc" #-}

type FT_Tag     = FT_UInt32

type FT_Fixed   = Int64
{-# LINE 63 "FreeType/Core/Types/Types.hsc" #-}

type FT_Pointer = Ptr ()

type FT_Pos     = Int64
{-# LINE 67 "FreeType/Core/Types/Types.hsc" #-}



data FT_Vector = FT_Vector
                   { vX :: FT_Pos
                   , vY :: FT_Pos
                   }

instance Storable FT_Vector where
  sizeOf _    = (16)
{-# LINE 77 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 8
{-# LINE 78 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr =
    FT_Vector
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 82 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 83 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & vX
{-# LINE 86 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & vY
{-# LINE 87 "FreeType/Core/Types/Types.hsc" #-}



data FT_BBox = FT_BBox
                 { bbXMin :: FT_Pos
                 , bbYMin :: FT_Pos
                 , bbXMax :: FT_Pos
                 , bbYMax :: FT_Pos
                 }

instance Storable FT_BBox where
  sizeOf    _ = (32)
{-# LINE 99 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 8
{-# LINE 100 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr =
    FT_BBox
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 104 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 105 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 106 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 107 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & bbXMin
{-# LINE 110 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & bbYMin
{-# LINE 111 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & bbXMax
{-# LINE 112 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & bbYMax
{-# LINE 113 "FreeType/Core/Types/Types.hsc" #-}



data FT_Matrix = FT_Matrix
                   { mXx :: FT_Fixed
                   , mXy :: FT_Fixed
                   , mYx :: FT_Fixed
                   , mYy :: FT_Fixed
                   }

instance Storable FT_Matrix where
  sizeOf _    = (32)
{-# LINE 125 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 8
{-# LINE 126 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr =
    FT_Matrix
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 130 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 131 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 132 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 133 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & mXx
{-# LINE 136 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & mXy
{-# LINE 137 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & mYx
{-# LINE 138 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & mYy
{-# LINE 139 "FreeType/Core/Types/Types.hsc" #-}



type FT_FWord   = Int16
{-# LINE 143 "FreeType/Core/Types/Types.hsc" #-}

type FT_UFWord  = Word16
{-# LINE 145 "FreeType/Core/Types/Types.hsc" #-}

type FT_F2Dot14 = Int16
{-# LINE 147 "FreeType/Core/Types/Types.hsc" #-}



data FT_UnitVector = FT_UnitVector
                       { uvX :: FT_F2Dot14
                       , uvY :: FT_F2Dot14
                       }

instance Storable FT_UnitVector where
  sizeOf _    = (4)
{-# LINE 157 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 2
{-# LINE 158 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr =
    FT_UnitVector
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 162 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 2) ptr
{-# LINE 163 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & uvX
{-# LINE 166 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 2) ptr $ val & uvY
{-# LINE 167 "FreeType/Core/Types/Types.hsc" #-}


type FT_F26Dot6 = Int64
{-# LINE 170 "FreeType/Core/Types/Types.hsc" #-}



data FT_Data = FT_Data
                 { dPointer :: Ptr FT_Byte
                 , dLength  :: FT_Int
                 }

instance Storable FT_Data where
  sizeOf _    = (16)
{-# LINE 180 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 8
{-# LINE 181 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr =
    FT_Data
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 185 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 186 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & dPointer
{-# LINE 189 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & dLength
{-# LINE 190 "FreeType/Core/Types/Types.hsc" #-}



pattern FT_MAKE_TAG :: Char -> Char -> Char -> Char -> FT_Tag
pattern FT_MAKE_TAG <- _
  where
    FT_MAKE_TAG a b c d =
      fromIntegral $  (fromEnum a `shiftL` 24)
                  .|. (fromEnum b `shiftL` 16)
                  .|. (fromEnum c `shiftL`  8)
                  .|. (fromEnum d)



data FT_Generic = FT_Generic
                    { gData      :: Ptr ()
                    , gFinalizer :: FT_Generic_Finalizer
                    }

instance Storable FT_Generic where
  sizeOf    _ = (16)
{-# LINE 211 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 8
{-# LINE 212 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr = do
    FT_Generic
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 216 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 217 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & gData
{-# LINE 220 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & gFinalizer
{-# LINE 221 "FreeType/Core/Types/Types.hsc" #-}



type FT_Generic_Finalizer = FunPtr (Ptr () -> IO ())



data FT_Bitmap = FT_Bitmap
                   { bRows         :: Word32
{-# LINE 230 "FreeType/Core/Types/Types.hsc" #-}
                   , bWidth        :: Word32
{-# LINE 231 "FreeType/Core/Types/Types.hsc" #-}
                   , bPitch        :: Int32
{-# LINE 232 "FreeType/Core/Types/Types.hsc" #-}
                   , bBuffer       :: Ptr Word8
{-# LINE 233 "FreeType/Core/Types/Types.hsc" #-}
                   , bNum_grays    :: Word16
{-# LINE 234 "FreeType/Core/Types/Types.hsc" #-}
                   , bPixel_mode   :: Word8
{-# LINE 235 "FreeType/Core/Types/Types.hsc" #-}
                   , bPalette_mode :: Word8
{-# LINE 236 "FreeType/Core/Types/Types.hsc" #-}
                   , bPalette      :: Ptr ()
                   }

instance Storable FT_Bitmap where
  sizeOf _    = (40)
{-# LINE 241 "FreeType/Core/Types/Types.hsc" #-}
  alignment _ = 8
{-# LINE 242 "FreeType/Core/Types/Types.hsc" #-}

  peek ptr =
    FT_Bitmap
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 246 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 247 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 248 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 249 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 250 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 26) ptr
{-# LINE 251 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 27) ptr
{-# LINE 252 "FreeType/Core/Types/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 253 "FreeType/Core/Types/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & bRows
{-# LINE 256 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr $ val & bWidth
{-# LINE 257 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & bPitch
{-# LINE 258 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & bBuffer
{-# LINE 259 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & bNum_grays
{-# LINE 260 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 26) ptr $ val & bPixel_mode
{-# LINE 261 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 27) ptr $ val & bPalette_mode
{-# LINE 262 "FreeType/Core/Types/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 32) ptr $ val & bPalette
{-# LINE 263 "FreeType/Core/Types/Types.hsc" #-}



type FT_Glyph_Format = Word32
{-# LINE 267 "FreeType/Core/Types/Types.hsc" #-}