packages feed

freetype2-0.1.0: Graphics/Rendering/FreeType/Internal/Stream.hsc

{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls #-}
module Graphics.Rendering.FreeType.Internal.Stream
( FT_StreamRec_
, FT_Stream
, FT_StreamDesc
, FT_Stream_IoFunc
, FT_Stream_CloseFunc
, base
, size
, pos
, descriptor
, read
, close
, memory
, cursor
, limit
) where

import Prelude hiding (read)

import Foreign
import Foreign.C.Types

import Graphics.Rendering.FreeType.Internal.Memory

#include <stddef.h>
#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)

#include "ft2build.h"
#include FT_FREETYPE_H

#include "freetype/ftsystem.h"

-- We don't have FILE* in Haskell, so we cheat and only
-- consider the long part of the FT_StreamDesc union...
type FT_StreamDesc = CLong

type FT_Stream_IoFunc = FunPtr
  (FT_Stream -> CULong -> Ptr CUChar -> CULong -> IO CULong)

type FT_Stream_CloseFunc = FunPtr (FT_Stream -> IO ())

data FT_StreamRec_
type FT_Stream = Ptr FT_StreamRec_

base :: FT_Stream -> Ptr (Ptr CUChar)
base = #ptr struct FT_StreamRec_, base

size :: FT_Stream -> Ptr CULong
size = #ptr struct FT_StreamRec_, size

pos :: FT_Stream -> Ptr CULong
pos = #ptr struct FT_StreamRec_, pos 

descriptor :: FT_Stream -> Ptr FT_StreamDesc
descriptor = #ptr struct FT_StreamRec_, descriptor

read :: FT_Stream -> Ptr FT_Stream_IoFunc
read = #ptr struct FT_StreamRec_, read

close :: FT_Stream -> Ptr FT_Stream_CloseFunc
close = #ptr struct FT_StreamRec_, close

memory :: FT_Stream -> Ptr FT_Memory
memory = #ptr struct FT_StreamRec_, memory

cursor :: FT_Stream -> Ptr (Ptr CUChar)
cursor = #ptr struct FT_StreamRec_, cursor

limit :: FT_Stream -> Ptr (Ptr CUChar)
limit = #ptr struct FT_StreamRec_, limit