packages feed

freetype2-0.2.0: FreeType/Support/Module/Types.hsc

{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}

module FreeType.Support.Module.Types
  ( module FreeType.Support.Module.Types
  , FT_Module
  , FT_ModuleRec
  , FT_Driver
  , FT_DriverRec
  ) where

import           FreeType.Circular.Types ( FT_ModuleRec, FT_Module
                                         , FT_DriverRec, FT_Driver
                                         )
import           FreeType.Core.Types.Types
import           FreeType.Support.Scanline.Types

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

#include "ft2build.h"
#include FT_MODULE_H
#include FT_RENDER_H

type FT_Module_Constructor = FT_Module   -- ^ module
                          -> IO FT_Error

foreign import ccall "wrapper"
  ft_Module_Constructor :: FT_Module_Constructor -> IO (FunPtr FT_Module_Constructor)

foreign import ccall "dynamic"
  ft_Module_Constructor' :: FunPtr FT_Module_Constructor -> FT_Module_Constructor



type FT_Module_Destructor = FT_Module -- ^ module
                         -> IO ()

foreign import ccall "wrapper"
  ft_Module_Destructor :: FT_Module_Destructor -> IO (FunPtr FT_Module_Destructor)

foreign import ccall "dynamic"
  ft_Module_Destructor' :: FunPtr FT_Module_Destructor -> FT_Module_Destructor




type FT_Module_Interface = FT_Pointer

type FT_Module_Requester = FT_Module              -- ^ module
                        -> Ptr #{type char}       -- ^ name
                        -> IO FT_Module_Interface

foreign import ccall "wrapper"
  ft_Module_Requester :: FT_Module_Requester -> IO (FunPtr FT_Module_Requester)

foreign import ccall "dynamic"
  ft_Module_Requester' :: FunPtr FT_Module_Requester -> FT_Module_Requester




data FT_Module_Class = FT_Module_Class
                         { mcModule_flags     :: FT_ULong
                         , mcModule_size      :: FT_Long
                         , mcModule_name      :: Ptr FT_String
                         , mcModule_version   :: FT_Fixed
                         , mcModule_requires  :: FT_Fixed
                         , mcModule_interface :: Ptr ()
                         , mcModule_init      :: FunPtr FT_Module_Constructor
                         , mcModule_done      :: FunPtr FT_Module_Destructor
                         , mcGet_interface    :: FunPtr FT_Module_Requester
                         }

instance Storable FT_Module_Class where
  sizeOf _    = #size      struct FT_Module_Class_
  alignment _ = #alignment struct FT_Module_Class_

  peek ptr =
    FT_Module_Class
      <$> #{peek struct FT_Module_Class_, module_flags    } ptr
      <*> #{peek struct FT_Module_Class_, module_size     } ptr
      <*> #{peek struct FT_Module_Class_, module_name     } ptr
      <*> #{peek struct FT_Module_Class_, module_version  } ptr
      <*> #{peek struct FT_Module_Class_, module_requires } ptr
      <*> #{peek struct FT_Module_Class_, module_interface} ptr
      <*> #{peek struct FT_Module_Class_, module_init     } ptr
      <*> #{peek struct FT_Module_Class_, module_done     } ptr
      <*> #{peek struct FT_Module_Class_, get_interface   } ptr

  poke ptr val = do
    #{poke struct FT_Module_Class_, module_flags    } ptr $ val & mcModule_flags
    #{poke struct FT_Module_Class_, module_size     } ptr $ val & mcModule_size
    #{poke struct FT_Module_Class_, module_name     } ptr $ val & mcModule_name
    #{poke struct FT_Module_Class_, module_version  } ptr $ val & mcModule_version
    #{poke struct FT_Module_Class_, module_requires } ptr $ val & mcModule_requires
    #{poke struct FT_Module_Class_, module_interface} ptr $ val & mcModule_interface
    #{poke struct FT_Module_Class_, module_init     } ptr $ val & mcModule_init
    #{poke struct FT_Module_Class_, module_done     } ptr $ val & mcModule_done
    #{poke struct FT_Module_Class_, get_interface   } ptr $ val & mcGet_interface



data FT_RendererRec
type FT_Renderer = Ptr FT_RendererRec



data FT_Renderer_RenderFunc

data FT_Renderer_TransformFunc

data FT_Renderer_GetCBoxFunc

data FT_Renderer_SetModeFunc

data FT_Renderer_Class = FT_Renderer_Class
                           { rcRoot            :: FT_Module_Class
                           , rcGlyph_format    :: FT_Glyph_Format
                           , rcRender_glyph    :: FunPtr FT_Renderer_RenderFunc
                           , rcTransform_glyph :: FunPtr FT_Renderer_TransformFunc
                           , rcGet_glyph_cbox  :: FunPtr FT_Renderer_GetCBoxFunc
                           , rcSet_mode        :: FunPtr FT_Renderer_SetModeFunc
                           , rcRaster_class    :: Ptr FT_Raster_Funcs
                           }

instance Storable FT_Renderer_Class where
  sizeOf _    = #size      struct FT_Renderer_Class_
  alignment _ = #alignment struct FT_Renderer_Class_

  peek ptr =
    FT_Renderer_Class
      <$> #{peek struct FT_Renderer_Class_, root           } ptr
      <*> #{peek struct FT_Renderer_Class_, glyph_format   } ptr
      <*> #{peek struct FT_Renderer_Class_, render_glyph   } ptr
      <*> #{peek struct FT_Renderer_Class_, transform_glyph} ptr
      <*> #{peek struct FT_Renderer_Class_, get_glyph_cbox } ptr
      <*> #{peek struct FT_Renderer_Class_, set_mode       } ptr
      <*> #{peek struct FT_Renderer_Class_, raster_class   } ptr

  poke ptr val = do
    #{poke struct FT_Renderer_Class_, root           } ptr $ val & rcRoot
    #{poke struct FT_Renderer_Class_, glyph_format   } ptr $ val & rcGlyph_format
    #{poke struct FT_Renderer_Class_, render_glyph   } ptr $ val & rcRender_glyph
    #{poke struct FT_Renderer_Class_, transform_glyph} ptr $ val & rcTransform_glyph
    #{poke struct FT_Renderer_Class_, get_glyph_cbox } ptr $ val & rcGet_glyph_cbox
    #{poke struct FT_Renderer_Class_, set_mode       } ptr $ val & rcSet_mode
    #{poke struct FT_Renderer_Class_, raster_class   } ptr $ val & rcRaster_class



type FT_DebugHook_Func = Ptr ()      -- ^ arg
                      -> IO FT_Error

foreign import ccall "wrapper"
  ft_DebugHook_Func :: FT_DebugHook_Func -> IO (FunPtr FT_DebugHook_Func)

foreign import ccall "dynamic"
  ft_DebugHook_Func' :: FunPtr FT_DebugHook_Func -> FT_DebugHook_Func