packages feed

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

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

module FreeType.Support.Scanline.Types where

import           FreeType.Core.Types.Types

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

#include "ft2build.h"
#include FT_FREETYPE_H

data FT_RasterRec
type FT_Raster = Ptr FT_RasterRec



data FT_Span = FT_Span
                 { sX        :: CShort
                 , sLen      :: CUShort
                 , sCoverage :: CUChar
                 }
instance Storable FT_Span where
  sizeOf    _ = #size      struct FT_Span_
  alignment _ = #alignment struct FT_Span_

  peek ptr =
    FT_Span
      <$> #{peek struct FT_Span_, x       } ptr
      <*> #{peek struct FT_Span_, len     } ptr
      <*> #{peek struct FT_Span_, coverage} ptr

  poke ptr val = do
    #{poke struct FT_Span_, x       } ptr $ val & sX
    #{poke struct FT_Span_, len     } ptr $ val & sLen
    #{poke struct FT_Span_, coverage} ptr $ val & sCoverage



type FT_SpanFunc = #{type int} -- ^ y
                -> #{type int} -- ^ count
                -> Ptr FT_Span -- ^ spans
                -> Ptr ()      -- ^ user
                -> IO ()

foreign import ccall "wrapper"
  ft_SpanFunc :: FT_SpanFunc -> IO (FunPtr FT_SpanFunc)

foreign import ccall "dynamic"
  ft_SpanFunc' :: FunPtr FT_SpanFunc -> FT_SpanFunc



data FT_Raster_Params = FT_Raster_Params
                          { rpTarget      :: Ptr FT_Bitmap
                          , rpSource      :: Ptr ()
                          , rpFlags       :: #type int
                          , rpGray_spans  :: FunPtr FT_SpanFunc
                          , rpBlack_spans :: FunPtr FT_SpanFunc
                          , rpBit_test    :: FunPtr FT_Raster_BitTest_Func
                          , rpBit_set     :: FunPtr FT_Raster_BitSet_Func
                          , rpUser        :: Ptr ()
                          , rpClip_box    :: FT_BBox
                          }

instance Storable FT_Raster_Params where
  sizeOf    _ = #size      struct FT_Raster_Params_
  alignment _ = #alignment struct FT_Raster_Params_

  peek ptr =
    FT_Raster_Params
      <$> #{peek struct FT_Raster_Params_, target     } ptr
      <*> #{peek struct FT_Raster_Params_, source     } ptr
      <*> #{peek struct FT_Raster_Params_, flags      } ptr
      <*> #{peek struct FT_Raster_Params_, gray_spans } ptr
      <*> #{peek struct FT_Raster_Params_, black_spans} ptr
      <*> #{peek struct FT_Raster_Params_, bit_test   } ptr
      <*> #{peek struct FT_Raster_Params_, bit_set    } ptr
      <*> #{peek struct FT_Raster_Params_, user       } ptr
      <*> #{peek struct FT_Raster_Params_, clip_box   } ptr

  poke ptr val = do
    #{poke struct FT_Raster_Params_, target     } ptr $ val & rpTarget
    #{poke struct FT_Raster_Params_, source     } ptr $ val & rpSource
    #{poke struct FT_Raster_Params_, flags      } ptr $ val & rpFlags
    #{poke struct FT_Raster_Params_, gray_spans } ptr $ val & rpGray_spans
    #{poke struct FT_Raster_Params_, black_spans} ptr $ val & rpBlack_spans
    #{poke struct FT_Raster_Params_, bit_test   } ptr $ val & rpBit_test
    #{poke struct FT_Raster_Params_, bit_set    } ptr $ val & rpBit_set
    #{poke struct FT_Raster_Params_, user       } ptr $ val & rpUser
    #{poke struct FT_Raster_Params_, clip_box   } ptr $ val & rpClip_box



type FT_Raster_NewFunc = Ptr ()        -- ^ raster
                      -> Ptr FT_Raster -- ^ memory
                      -> IO #type int

foreign import ccall "wrapper"
  ft_Raster_NewFunc :: FT_Raster_NewFunc -> IO (FunPtr FT_Raster_NewFunc)

foreign import ccall "dynamic"
  ft_Raster_NewFunc' :: FunPtr FT_Raster_NewFunc -> FT_Raster_NewFunc



type FT_Raster_DoneFunc = FT_Raster -- ^ raster
                       -> IO ()

foreign import ccall "wrapper"
  ft_Raster_DoneFunc :: FT_Raster_DoneFunc -> IO (FunPtr FT_Raster_DoneFunc)

foreign import ccall "dynamic"
  ft_Raster_DoneFunc' :: FunPtr FT_Raster_DoneFunc -> FT_Raster_DoneFunc



type FT_Raster_ResetFunc = FT_Raster                 -- ^ raster
                        -> Ptr #{type unsigned char} -- ^ pool_base
                        -> Ptr #{type unsigned long} -- ^ pool_size
                        -> IO ()

foreign import ccall "wrapper"
  ft_Raster_ResetFunc :: FT_Raster_ResetFunc -> IO (FunPtr FT_Raster_ResetFunc)

foreign import ccall "dynamic"
  ft_Raster_ResetFunc' :: FunPtr FT_Raster_ResetFunc -> FT_Raster_ResetFunc



type FT_Raster_SetModeFunc = FT_Raster             -- ^ raster
                          -> #{type unsigned long} -- ^ mode
                          -> Ptr ()                -- ^ args
                          -> IO #type int

foreign import ccall "wrapper"
  ft_Raster_SetModeFunc :: FT_Raster_SetModeFunc -> IO (FunPtr FT_Raster_SetModeFunc)

foreign import ccall "dynamic"
  ft_Raster_SetModeFunc' :: FunPtr FT_Raster_SetModeFunc -> FT_Raster_SetModeFunc



type FT_Raster_RenderFunc = FT_Raster            -- ^ raster
                         -> Ptr FT_Raster_Params -- ^ params
                         -> IO #type int

foreign import ccall "wrapper"
  ft_Raster_RenderFunc :: FT_Raster_RenderFunc -> IO (FunPtr FT_Raster_RenderFunc)

foreign import ccall "dynamic"
  ft_Raster_RenderFunc' :: FunPtr FT_Raster_RenderFunc -> FT_Raster_RenderFunc



data FT_Raster_Funcs = FT_Raster_Funcs
                         { rfGlyph_format    :: FT_Glyph_Format
                         , rfRaster_new      :: FunPtr FT_Raster_NewFunc
                         , rfRaster_reset    :: FunPtr FT_Raster_ResetFunc
                         , rfRaster_set_mode :: FunPtr FT_Raster_SetModeFunc
                         , rfRaster_render   :: FunPtr FT_Raster_RenderFunc
                         , rfRaster_done     :: FunPtr FT_Raster_DoneFunc
                         }

instance Storable FT_Raster_Funcs where
  sizeOf    _ = #size      struct FT_Raster_Funcs_
  alignment _ = #alignment struct FT_Raster_Funcs_

  peek ptr =
    FT_Raster_Funcs
      <$> #{peek struct FT_Raster_Funcs_, glyph_format   } ptr
      <*> #{peek struct FT_Raster_Funcs_, raster_new     } ptr
      <*> #{peek struct FT_Raster_Funcs_, raster_reset   } ptr
      <*> #{peek struct FT_Raster_Funcs_, raster_set_mode} ptr
      <*> #{peek struct FT_Raster_Funcs_, raster_render  } ptr
      <*> #{peek struct FT_Raster_Funcs_, raster_done    } ptr

  poke ptr val = do
    #{poke struct FT_Raster_Funcs_, glyph_format   } ptr $ val & rfGlyph_format
    #{poke struct FT_Raster_Funcs_, raster_new     } ptr $ val & rfRaster_new
    #{poke struct FT_Raster_Funcs_, raster_reset   } ptr $ val & rfRaster_reset
    #{poke struct FT_Raster_Funcs_, raster_set_mode} ptr $ val & rfRaster_set_mode
    #{poke struct FT_Raster_Funcs_, raster_render  } ptr $ val & rfRaster_render
    #{poke struct FT_Raster_Funcs_, raster_done    } ptr $ val & rfRaster_done



type FT_Raster_BitTest_Func = #{type int} -- ^ y
                           -> #{type int} -- ^ x
                           -> Ptr ()      -- ^ user
                           -> IO #type int

foreign import ccall "wrapper"
  ft_Raster_BitTest_Func :: FT_Raster_BitTest_Func -> IO (FunPtr FT_Raster_BitTest_Func)

foreign import ccall "dynamic"
  ft_Raster_BitTest_Func' :: FunPtr FT_Raster_BitTest_Func -> FT_Raster_BitTest_Func



type FT_Raster_BitSet_Func = #{type int} -- ^ y
                          -> #{type int} -- ^ x
                          -> Ptr ()      -- ^ user
                          -> IO ()

foreign import ccall "wrapper"
  ft_Raster_BitSet_Func :: FT_Raster_BitSet_Func -> IO (FunPtr FT_Raster_BitSet_Func)

foreign import ccall "dynamic"
  ft_Raster_BitSet_Func' :: FunPtr FT_Raster_BitSet_Func -> FT_Raster_BitSet_Func