packages feed

freetype2-0.2.0: FreeType/Cache/Types.hsc

{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# OPTIONS_HADDOCK hide #-}

module FreeType.Cache.Types where

import           FreeType.Core.Base.Types
import           FreeType.Core.Types.Types

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

#include "ft2build.h"
#include FT_CACHE_H

data FTC_ManagerRec
type FTC_Manager = Ptr FTC_ManagerRec



type FTC_FaceID = FT_Pointer



type FTC_Face_Requester = FunPtr (FTC_FaceID -> FT_Library -> FT_Pointer -> Ptr FT_Face -> IO FT_Error)



data FTC_NodeRec
type FTC_Node = Ptr FTC_NodeRec



data FTC_ImageCacheRec
type FTC_ImageCache = Ptr FTC_ImageCacheRec



type FTC_SBit = Ptr FTC_SBitRec



data FTC_SBitCacheRec
type FTC_SBitCache = Ptr FTC_SBitCacheRec



data FTC_CMapCacheRec
type FTC_CMapCache = Ptr FTC_CMapCacheRec



data FTC_ScalerRec = FTC_ScalerRec
                       { srFace_id :: FTC_FaceID
                       , srWidth   :: FT_UInt
                       , srHeight  :: FT_UInt
                       , srPixel   :: FT_Int
                       , srX_res   :: FT_UInt
                       , srY_res   :: FT_UInt
                       }

instance Storable FTC_ScalerRec where
  sizeOf _    = #size      struct FTC_ScalerRec_
  alignment _ = #alignment struct FTC_ScalerRec_

  peek ptr =
    FTC_ScalerRec
      <$> #{peek struct FTC_ScalerRec_, face_id} ptr
      <*> #{peek struct FTC_ScalerRec_, width  } ptr
      <*> #{peek struct FTC_ScalerRec_, height } ptr
      <*> #{peek struct FTC_ScalerRec_, pixel  } ptr
      <*> #{peek struct FTC_ScalerRec_, x_res  } ptr
      <*> #{peek struct FTC_ScalerRec_, y_res  } ptr

  poke ptr val = do
    #{poke struct FTC_ScalerRec_, face_id} ptr $ val & srFace_id
    #{poke struct FTC_ScalerRec_, width  } ptr $ val & srWidth
    #{poke struct FTC_ScalerRec_, height } ptr $ val & srHeight
    #{poke struct FTC_ScalerRec_, pixel  } ptr $ val & srPixel
    #{poke struct FTC_ScalerRec_, x_res  } ptr $ val & srX_res
    #{poke struct FTC_ScalerRec_, y_res  } ptr $ val & srY_res



type FTC_Scaler = Ptr FTC_ScalerRec



data FTC_ImageTypeRec = FTC_ImageTypeRec
                           { itrFace_id :: FTC_FaceID
                           , itrWidth   :: FT_UInt
                           , itrHeight  :: FT_UInt
                           , itrFlags   :: FT_Int32
                           }

instance Storable FTC_ImageTypeRec where
  sizeOf _    = #size      struct FTC_ImageTypeRec_
  alignment _ = #alignment struct FTC_ImageTypeRec_

  peek ptr =
    FTC_ImageTypeRec
      <$> #{peek struct FTC_ImageTypeRec_, face_id} ptr
      <*> #{peek struct FTC_ImageTypeRec_, width  } ptr
      <*> #{peek struct FTC_ImageTypeRec_, height } ptr
      <*> #{peek struct FTC_ImageTypeRec_, flags  } ptr

  poke ptr val = do
    #{poke struct FTC_ImageTypeRec_, face_id} ptr $ val & itrFace_id
    #{poke struct FTC_ImageTypeRec_, width  } ptr $ val & itrWidth
    #{poke struct FTC_ImageTypeRec_, height } ptr $ val & itrHeight
    #{poke struct FTC_ImageTypeRec_, flags  } ptr $ val & itrFlags


type FTC_ImageType = Ptr FTC_ImageTypeRec


data FTC_SBitRec = FTC_SBitRec
                     { sbrWidth     :: FT_Byte
                     , sbrHeight    :: FT_Byte
                     , sbrLeft      :: FT_Char
                     , sbrTop       :: FT_Char
                     , sbrFormat    :: FT_Byte
                     , sbrMax_grays :: FT_Byte
                     , sbrPitch     :: FT_Short
                     , sbrXadvance  :: FT_Char
                     , sbrYadvance  :: FT_Char
                     , sbrBuffer    :: Ptr FT_Byte
                     }

instance Storable FTC_SBitRec where
  sizeOf _    = #size      struct FTC_SBitRec_
  alignment _ = #alignment struct FTC_SBitRec_

  peek ptr =
    FTC_SBitRec
      <$> #{peek struct FTC_SBitRec_, width    } ptr
      <*> #{peek struct FTC_SBitRec_, height   } ptr
      <*> #{peek struct FTC_SBitRec_, left     } ptr
      <*> #{peek struct FTC_SBitRec_, top      } ptr
      <*> #{peek struct FTC_SBitRec_, format   } ptr
      <*> #{peek struct FTC_SBitRec_, max_grays} ptr
      <*> #{peek struct FTC_SBitRec_, pitch    } ptr
      <*> #{peek struct FTC_SBitRec_, xadvance } ptr
      <*> #{peek struct FTC_SBitRec_, yadvance } ptr
      <*> #{peek struct FTC_SBitRec_, buffer   } ptr

  poke ptr val = do
    #{poke struct FTC_SBitRec_, width    } ptr $ val & sbrWidth
    #{poke struct FTC_SBitRec_, height   } ptr $ val & sbrHeight
    #{poke struct FTC_SBitRec_, left     } ptr $ val & sbrLeft
    #{poke struct FTC_SBitRec_, top      } ptr $ val & sbrTop
    #{poke struct FTC_SBitRec_, format   } ptr $ val & sbrFormat
    #{poke struct FTC_SBitRec_, max_grays} ptr $ val & sbrMax_grays
    #{poke struct FTC_SBitRec_, pitch    } ptr $ val & sbrPitch
    #{poke struct FTC_SBitRec_, xadvance } ptr $ val & sbrXadvance
    #{poke struct FTC_SBitRec_, yadvance } ptr $ val & sbrYadvance
    #{poke struct FTC_SBitRec_, buffer   } ptr $ val & sbrBuffer