packages feed

freetype2-0.0.1: Graphics/Rendering/FreeType/Internal/Bitmap.hsc

{-# LANGUAGE ForeignFunctionInterface #-}
module Graphics.Rendering.FreeType.Internal.Bitmap
( FT_Bitmap(..)
) where

import Foreign
import Foreign.C.Types
import Foreign.Storable

#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)

#include "ft2build.h"
#include FT_FREETYPE_H

data FT_Bitmap = FT_Bitmap
  { rows         :: CInt
  , width        :: CInt
  , pitch        :: CInt
  , buffer       :: Ptr CChar
  , num_grays    :: CShort
  , pixel_mode   :: CChar
  , palette_mode :: CChar
  , palette      :: Ptr ()
  }

instance Storable FT_Bitmap where
  sizeOf _    = #size FT_Bitmap
  alignment _ = #alignment FT_Bitmap
  peek ptr = do
    rows'         <- (#peek FT_Bitmap, rows) ptr
    width'        <- (#peek FT_Bitmap, width) ptr
    pitch'        <- (#peek FT_Bitmap, pitch) ptr
    buffer'       <- (#peek FT_Bitmap, buffer) ptr
    num_grays'    <- (#peek FT_Bitmap, num_grays) ptr
    pixel_mode'   <- (#peek FT_Bitmap, pixel_mode) ptr
    palette_mode' <- (#peek FT_Bitmap, palette_mode) ptr
    palette'      <- (#peek FT_Bitmap, palette) ptr
    return $ FT_Bitmap
      { rows = rows'
      , width = width'
      , pitch = pitch'
      , buffer = buffer'
      , num_grays = num_grays'
      , pixel_mode = pixel_mode'
      , palette_mode = palette_mode'
      , palette = palette'
      }
  poke ptr val = do
    (#poke FT_Bitmap, rows) ptr (rows val)
    (#poke FT_Bitmap, width) ptr (width val)
    (#poke FT_Bitmap, pitch) ptr (pitch val)
    (#poke FT_Bitmap, buffer) ptr (buffer val)
    (#poke FT_Bitmap, num_grays) ptr (num_grays val)
    (#poke FT_Bitmap, pixel_mode) ptr (pixel_mode val)
    (#poke FT_Bitmap, palette_mode) ptr (palette_mode val)
    (#poke FT_Bitmap, palette) ptr (palette val)