{-# LINE 1 "FreeType/Format/BDF/Types.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE PatternSynonyms #-}

module FreeType.Format.BDF.Types where

import           FreeType.Core.Types.Types

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




type BDF_PropertyType = Word32
{-# LINE 18 "FreeType/Format/BDF/Types.hsc" #-}

pattern BDF_PROPERTY_TYPE_NONE
      , BDF_PROPERTY_TYPE_ATOM
      , BDF_PROPERTY_TYPE_INTEGER
      , BDF_PROPERTY_TYPE_CARDINAL
     :: (Eq a, Num a) => a
pattern BDF_PROPERTY_TYPE_NONE     = 0
{-# LINE 25 "FreeType/Format/BDF/Types.hsc" #-}
pattern BDF_PROPERTY_TYPE_ATOM     = 1
{-# LINE 26 "FreeType/Format/BDF/Types.hsc" #-}
pattern BDF_PROPERTY_TYPE_INTEGER  = 2
{-# LINE 27 "FreeType/Format/BDF/Types.hsc" #-}
pattern BDF_PROPERTY_TYPE_CARDINAL = 3
{-# LINE 28 "FreeType/Format/BDF/Types.hsc" #-}



type BDF_Property = Ptr BDF_PropertyRec



data BDF_PropertyRec = BDF_PropertyRec
                         { prType     :: BDF_PropertyType
                         , prAtom     :: Ptr Int8
{-# LINE 38 "FreeType/Format/BDF/Types.hsc" #-}
                         , prInteger  :: FT_Int32
                         , prCardinal :: FT_UInt32
                         }

instance Storable BDF_PropertyRec where
  sizeOf _    = (16)
{-# LINE 44 "FreeType/Format/BDF/Types.hsc" #-}
  alignment _ = (16)
{-# LINE 45 "FreeType/Format/BDF/Types.hsc" #-}

  peek ptr =
    BDF_PropertyRec
      <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 49 "FreeType/Format/BDF/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 50 "FreeType/Format/BDF/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 51 "FreeType/Format/BDF/Types.hsc" #-}
      <*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 52 "FreeType/Format/BDF/Types.hsc" #-}

  poke ptr val = do
    (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ val & prType
{-# LINE 55 "FreeType/Format/BDF/Types.hsc" #-}
    case prType val of
      BDF_PROPERTY_TYPE_ATOM     -> (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & prAtom
{-# LINE 57 "FreeType/Format/BDF/Types.hsc" #-}
      BDF_PROPERTY_TYPE_INTEGER  -> (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & prInteger
{-# LINE 58 "FreeType/Format/BDF/Types.hsc" #-}
      BDF_PROPERTY_TYPE_CARDINAL -> (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ val & prCardinal
{-# LINE 59 "FreeType/Format/BDF/Types.hsc" #-}
      _                          -> return ()