{-# LINE 1 "FreeType/Core/Size.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}

{- | Please refer to the    
     [Core API > Size Management](https://www.freetype.org/freetype2/docs/reference/ft2-sizes_management.html)
     chapter of the reference.    
    
     Internal: "FreeType.Core.Size.Internal".    
-}

module FreeType.Core.Size
  ( -- ** FT_New_Size
    ft_New_Size
  , ft_With_Size
    -- ** FT_Done_Size
  , ft_Done_Size
    -- ** FT_Activate_Size
  , ft_Activate_Size
  ) where

import           FreeType.Core.Base.Types
import           FreeType.Core.Size.Internal
import           FreeType.Exception.Internal

import           Control.Exception



ft_New_Size
  :: FT_Face    -- ^ face
  -> IO FT_Size -- ^ size
ft_New_Size =
  autoAllocaError "ft_New_Size" ft_New_Size'



-- | 'bracket' over 'ft_New_Size' and 'ft_Done_Size'.
--
--   The provided 'FT_Size' should not be used after this function terminates.
ft_With_Size
  :: FT_Face           -- ^ face
  -> (FT_Size -> IO a)
  -> IO a
ft_With_Size face = bracket (ft_New_Size face) ft_Done_Size



ft_Done_Size
  :: FT_Size -- ^ size
  -> IO ()
ft_Done_Size =
  autoError "ft_Done_Size" ft_Done_Size'



ft_Activate_Size
  :: FT_Size -- ^ size
  -> IO ()
ft_Activate_Size =
  autoError "ft_Activate_Size" ft_Activate_Size'