simple-pango-0.1.0.1: src/Graphics/Pango/Basic/Fonts/PangoFontDescription/Variations.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments, LambdaCase, OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables, TypeApplications #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Graphics.Pango.Basic.Fonts.PangoFontDescription.Variations (
-- * SET AND GET AXIS
pangoFontDescriptionSetAxis, pangoFontDescriptionGetAxis,
-- * SET AND GET VARIATIONS
Variations,
pangoFontDescriptionSetVariationsMap,
pangoFontDescriptionGetVariationsMap,
-- * DEFAULT AXES
Weight(..), Width(..), Slant(..), Italic(..), OpticalSize(..)
) where
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.String
import Control.Monad.Primitive
import Graphics.Pango.Basic.Fonts.PangoFontDescription.Type
import qualified Data.ByteString as BS
import System.IO.Unsafe
import Data.Font.VariationAxis
pangoFontDescriptionSetAxis :: forall a m .
(FontDescriptionAxis a, PrimMonad m) =>
PangoFontDescriptionPrim (PrimState m) -> a -> m ()
pangoFontDescriptionSetAxis fd a = do
as <- pangoFontDescriptionGetVariationsMap fd
pangoFontDescriptionSetVariationsMap fd $ variationsSetAxis a as
pangoFontDescriptionGetAxis ::
forall a . FontDescriptionAxis a => PangoFontDescription -> Maybe a
pangoFontDescriptionGetAxis fd = unsafePerformIO do
pangoFontDescriptionThaw fd >>= \case
fd' -> do
as <- pangoFontDescriptionGetVariationsMap fd'
pure $ variationsGetAxis as
pangoFontDescriptionSetVariationsMap :: PrimMonad m =>
PangoFontDescriptionPrim (PrimState m) -> Variations -> m ()
pangoFontDescriptionSetVariationsMap (PangoFontDescriptionPrim ffd) v = unsafeIOToPrim
$ withForeignPtr ffd \pfd -> BS.useAsCString (showVariations v) \cv ->
c_pango_font_description_set_variations pfd cv
foreign import ccall "pango_font_description_set_variations"
c_pango_font_description_set_variations ::
Ptr PangoFontDescription -> CString -> IO ()
pangoFontDescriptionGetVariationsMap :: PrimMonad m =>
PangoFontDescriptionPrim (PrimState m) -> m Variations
pangoFontDescriptionGetVariationsMap (PangoFontDescriptionPrim ffd) = unsafeIOToPrim
$ withForeignPtr ffd \pfd -> readVariations <$>
(myPackCString =<< c_pango_font_description_get_variations pfd)
myPackCString :: CString -> IO BS.ByteString
myPackCString cs | cs == nullPtr = pure "" | otherwise = BS.packCString cs
foreign import ccall "pango_font_description_get_variations"
c_pango_font_description_get_variations ::
Ptr PangoFontDescription -> IO CString