{-# LINE 1 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LINE 2 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}
module Graphics.Rendering.FreeType.Internal.Face
( FT_FaceRec_
, FT_Face
, num_faces
, face_index
, face_flags
, style_flags
, num_glyphs
, family_name
, style_name
, num_fixed_sizes
, available_sizes
, num_charmaps
, charmaps
, generic
, bbox
, units_per_EM
, ascender
, descender
, height
, max_advance_width
, max_advance_height
, underline_position
, underline_thickness
, glyph
, size
, charmap
, ft_HAS_HORIZONTAL
, ft_HAS_VERTICAL
, ft_HAS_KERNING
, ft_IS_SCALABLE
, ft_IS_SFNT
, ft_IS_FIXED_WIDTH
, ft_HAS_FIXED_SIZES
, ft_HAS_FAST_GLYPHS
, ft_HAS_GLYPH_NAMES
, ft_HAS_MULTIPLE_MASTERS
, ft_IS_CID_KEYED
, ft_IS_TRICKY
, ft_STYLE_FLAG_ITALIC
, ft_STYLE_FLAG_BOLD
) where

import Foreign
import Foreign.C.String

import Graphics.Rendering.FreeType.Internal.FaceType
import Graphics.Rendering.FreeType.Internal.PrimitiveTypes
import qualified Graphics.Rendering.FreeType.Internal.Generic as G
import qualified Graphics.Rendering.FreeType.Internal.GlyphSlot as GS
import qualified Graphics.Rendering.FreeType.Internal.Size as S
import qualified Graphics.Rendering.FreeType.Internal.BitmapSize as BS
import qualified Graphics.Rendering.FreeType.Internal.CharMap as CM
import qualified Graphics.Rendering.FreeType.Internal.BBox as BB


{-# LINE 58 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

{-# LINE 59 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

num_faces :: FT_Face -> Ptr FT_Long
num_faces = (\hsc_ptr -> hsc_ptr `plusPtr` 0)
{-# LINE 62 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

face_index :: FT_Face -> Ptr FT_Long
face_index = (\hsc_ptr -> hsc_ptr `plusPtr` 4)
{-# LINE 65 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

face_flags :: FT_Face -> Ptr FT_Long
face_flags = (\hsc_ptr -> hsc_ptr `plusPtr` 8)
{-# LINE 68 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

style_flags :: FT_Face -> Ptr FT_Long
style_flags = (\hsc_ptr -> hsc_ptr `plusPtr` 12)
{-# LINE 71 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

num_glyphs :: FT_Face -> Ptr FT_Long
num_glyphs = (\hsc_ptr -> hsc_ptr `plusPtr` 16)
{-# LINE 74 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

family_name :: FT_Face -> Ptr CString
family_name = (\hsc_ptr -> hsc_ptr `plusPtr` 20)
{-# LINE 77 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

style_name :: FT_Face -> Ptr CString
style_name = (\hsc_ptr -> hsc_ptr `plusPtr` 24)
{-# LINE 80 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

num_fixed_sizes :: FT_Face -> Ptr FT_Int
num_fixed_sizes = (\hsc_ptr -> hsc_ptr `plusPtr` 28)
{-# LINE 83 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

available_sizes :: FT_Face -> Ptr (Ptr BS.FT_Bitmap_Size)
available_sizes = (\hsc_ptr -> hsc_ptr `plusPtr` 32)
{-# LINE 86 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

num_charmaps :: FT_Face -> Ptr FT_Int
num_charmaps = (\hsc_ptr -> hsc_ptr `plusPtr` 36)
{-# LINE 89 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

charmaps :: FT_Face -> Ptr (Ptr CM.FT_CharMap)
charmaps = (\hsc_ptr -> hsc_ptr `plusPtr` 40)
{-# LINE 92 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

generic :: FT_Face -> Ptr G.FT_Generic
generic = (\hsc_ptr -> hsc_ptr `plusPtr` 44)
{-# LINE 95 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

bbox :: FT_Face -> Ptr BB.FT_BBox
bbox = (\hsc_ptr -> hsc_ptr `plusPtr` 52)
{-# LINE 98 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

units_per_EM :: FT_Face -> Ptr FT_UShort
units_per_EM = (\hsc_ptr -> hsc_ptr `plusPtr` 68)
{-# LINE 101 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

ascender :: FT_Face -> Ptr FT_Short
ascender = (\hsc_ptr -> hsc_ptr `plusPtr` 70)
{-# LINE 104 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

descender :: FT_Face -> Ptr FT_Short
descender = (\hsc_ptr -> hsc_ptr `plusPtr` 72)
{-# LINE 107 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

height :: FT_Face -> Ptr FT_Short
height = (\hsc_ptr -> hsc_ptr `plusPtr` 74)
{-# LINE 110 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

max_advance_width :: FT_Face -> Ptr FT_Short
max_advance_width = (\hsc_ptr -> hsc_ptr `plusPtr` 76)
{-# LINE 113 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

max_advance_height :: FT_Face -> Ptr FT_Short
max_advance_height = (\hsc_ptr -> hsc_ptr `plusPtr` 78)
{-# LINE 116 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

underline_position :: FT_Face -> Ptr FT_Short
underline_position = (\hsc_ptr -> hsc_ptr `plusPtr` 80)
{-# LINE 119 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

underline_thickness :: FT_Face -> Ptr FT_Short
underline_thickness = (\hsc_ptr -> hsc_ptr `plusPtr` 82)
{-# LINE 122 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

glyph :: FT_Face -> Ptr GS.FT_GlyphSlot
glyph = (\hsc_ptr -> hsc_ptr `plusPtr` 84)
{-# LINE 125 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

size :: FT_Face -> Ptr S.FT_Size
size = (\hsc_ptr -> hsc_ptr `plusPtr` 88)
{-# LINE 128 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

charmap :: FT_Face -> Ptr CM.FT_CharMap
charmap = (\hsc_ptr -> hsc_ptr `plusPtr` 92)
{-# LINE 131 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

ft_HAS :: FT_FACE_FLAG -> FT_Face -> IO Bool
ft_HAS flag face = do
  f <- peek $ face_flags face
  return $ 0 /= (f .&. fromIntegral flag)

ft_HAS_HORIZONTAL :: FT_Face -> IO Bool
ft_HAS_HORIZONTAL = ft_HAS ft_FACE_FLAG_HORIZONTAL

ft_HAS_VERTICAL :: FT_Face -> IO Bool
ft_HAS_VERTICAL = ft_HAS ft_FACE_FLAG_VERTICAL

ft_HAS_KERNING :: FT_Face -> IO Bool
ft_HAS_KERNING = ft_HAS ft_FACE_FLAG_KERNING

ft_IS_SCALABLE :: FT_Face -> IO Bool
ft_IS_SCALABLE = ft_HAS ft_FACE_FLAG_SCALABLE

ft_IS_SFNT :: FT_Face -> IO Bool
ft_IS_SFNT = ft_HAS ft_FACE_FLAG_SFNT

ft_IS_FIXED_WIDTH :: FT_Face -> IO Bool
ft_IS_FIXED_WIDTH = ft_HAS ft_FACE_FLAG_FIXED_WIDTH

ft_HAS_FIXED_SIZES :: FT_Face -> IO Bool
ft_HAS_FIXED_SIZES = ft_HAS ft_FACE_FLAG_FIXED_SIZES

ft_HAS_FAST_GLYPHS :: FT_Face -> IO Bool
ft_HAS_FAST_GLYPHS = ft_HAS ft_FACE_FLAG_FAST_GLYPHS

ft_HAS_GLYPH_NAMES :: FT_Face -> IO Bool
ft_HAS_GLYPH_NAMES = ft_HAS ft_FACE_FLAG_GLYPH_NAMES

ft_HAS_MULTIPLE_MASTERS :: FT_Face -> IO Bool
ft_HAS_MULTIPLE_MASTERS = ft_HAS ft_FACE_FLAG_MULTIPLE_MASTERS

ft_IS_CID_KEYED :: FT_Face -> IO Bool
ft_IS_CID_KEYED = ft_HAS ft_FACE_FLAG_CID_KEYED

ft_IS_TRICKY :: FT_Face -> IO Bool
ft_IS_TRICKY = ft_HAS ft_FACE_FLAG_TRICKY

ft_STYLE_FLAG_ITALIC :: FT_Long
ft_STYLE_FLAG_ITALIC = 1
{-# LINE 175 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}

ft_STYLE_FLAG_BOLD :: FT_Long
ft_STYLE_FLAG_BOLD = 2
{-# LINE 178 "Graphics/Rendering/FreeType/Internal/Face.hsc" #-}