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

module FreeType.Core.Glyph.Types where

import           FreeType.Core.Base.Types
import           FreeType.Core.Types.Types
import           FreeType.Support.Outline.Types

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




type FT_Glyph = Ptr FT_GlyphRec



data FT_Glyph_Class

data FT_GlyphRec = FT_GlyphRec
                     { grLibrary :: FT_Library
                     , grClazz   :: Ptr FT_Glyph_Class
                     , grFormat  :: FT_Glyph_Format
                     , grAdvance :: FT_Vector
                     }

instance Storable FT_GlyphRec where
  sizeOf _    = (40)
{-# LINE 33 "FreeType/Core/Glyph/Types.hsc" #-}
  alignment _ = 8
{-# LINE 34 "FreeType/Core/Glyph/Types.hsc" #-}

  peek ptr =
    FT_GlyphRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 38 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 39 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 40 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 41 "FreeType/Core/Glyph/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & grLibrary
{-# LINE 44 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & grClazz
{-# LINE 45 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ val & grFormat
{-# LINE 46 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ val & grAdvance
{-# LINE 47 "FreeType/Core/Glyph/Types.hsc" #-}



type FT_BitmapGlyph = Ptr FT_BitmapGlyphRec

data FT_BitmapGlyphRec = FT_BitmapGlyphRec
                           { bgrRoot   :: FT_GlyphRec
                           , bgrLeft   :: FT_Int
                           , bgrTop    :: FT_Int
                           , bgrBitmap :: FT_Bitmap
                           }

instance Storable FT_BitmapGlyphRec where
  sizeOf _    = (88)
{-# LINE 61 "FreeType/Core/Glyph/Types.hsc" #-}
  alignment _ = 8
{-# LINE 62 "FreeType/Core/Glyph/Types.hsc" #-}

  peek ptr =
    FT_BitmapGlyphRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 66 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 67 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 44) ptr
{-# LINE 68 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
{-# LINE 69 "FreeType/Core/Glyph/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & bgrRoot
{-# LINE 72 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 40) ptr $ val & bgrLeft
{-# LINE 73 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 44) ptr $ val & bgrTop
{-# LINE 74 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 48) ptr $ val & bgrBitmap
{-# LINE 75 "FreeType/Core/Glyph/Types.hsc" #-}



newtype FT_OutlineGlyph = Ptr FT_OutlineGlyphRec

data FT_OutlineGlyphRec = FT_OutlineGlyphRec
                            { ogrRoot    :: FT_GlyphRec
                            , ogrOutline :: FT_Outline
                            }

instance Storable FT_OutlineGlyphRec where
  sizeOf _    = (80)
{-# LINE 87 "FreeType/Core/Glyph/Types.hsc" #-}
  alignment _ = 8
{-# LINE 88 "FreeType/Core/Glyph/Types.hsc" #-}

  peek ptr =
    FT_OutlineGlyphRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 92 "FreeType/Core/Glyph/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 93 "FreeType/Core/Glyph/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & ogrRoot
{-# LINE 96 "FreeType/Core/Glyph/Types.hsc" #-}
    (\hsc_ptr -> pokeByteOff hsc_ptr 40) ptr $ val & ogrOutline
{-# LINE 97 "FreeType/Core/Glyph/Types.hsc" #-}