-- GENERATED by C->Haskell Compiler, version 0.13.13 (gtk2hs branch) "Bin IO", 27 May 2012 (Haskell)
-- Edit the ORIGINAL .chs file instead!


{-# LINE 1 "./Graphics/Rendering/Pango/Description.chs" #-}
{-# OPTIONS_HADDOCK hide #-}
-- -*-haskell-*-
--  GIMP Toolkit (GTK) - text layout functions: Font Descriptions
--
--  Author : Axel Simon
--
--  Created: 8 February 2003
--
--  Copyright (C) 1999-2005 Axel Simon
--
--  This library is free software; you can redistribute it and/or
--  modify it under the terms of the GNU Lesser General Public
--  License as published by the Free Software Foundation; either
--  version 2.1 of the License, or (at your option) any later version.
--
--  This library is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--  Lesser General Public License for more details.
--
-- #hide

-- |
-- Maintainer  : gtk2hs-users@lists.sourceforge.net
-- Stability   : provisional
-- Portability : portable (depends on GHC)
--
-- Functions to manage font descriptions.
--
-- * Font descriptions provide a way to query and state requirements on
--   fonts. This data structure has several fields describing different
--   characteristics of a font. Each of these fields can be set of left
--   unspecified.
--
module Graphics.Rendering.Pango.Description (
  FontDescription,
  fontDescriptionNew,
  fontDescriptionCopy,
  fontDescriptionSetFamily,
  fontDescriptionGetFamily,
  fontDescriptionSetStyle,
  fontDescriptionGetStyle,
  fontDescriptionSetVariant,
  fontDescriptionGetVariant,
  fontDescriptionSetWeight,
  fontDescriptionGetWeight,
  fontDescriptionSetStretch,
  fontDescriptionGetStretch,
  fontDescriptionSetSize,
  fontDescriptionGetSize,
  FontMask(..),
  fontDescriptionUnsetFields,
  fontDescriptionMerge,
  fontDescriptionBetterMatch,
  fontDescriptionFromString,
  fontDescriptionToString
  ) where

import Control.Monad    (liftM)

import System.Glib.FFI
import System.Glib.Flags                (Flags, fromFlags)
import System.Glib.UTFString
import Graphics.Rendering.Pango.Types
{-# LINE 64 "./Graphics/Rendering/Pango/Description.chs" #-}
import Graphics.Rendering.Pango.Enums
{-# LINE 65 "./Graphics/Rendering/Pango/Description.chs" #-}
import Graphics.Rendering.Pango.Structs ( puToInt, intToPu )
import Graphics.Rendering.Pango.BasicTypes


{-# LINE 69 "./Graphics/Rendering/Pango/Description.chs" #-}

-- | Create a new font description.
--
-- * All field are unset.
--
fontDescriptionNew :: IO FontDescription
fontDescriptionNew :: IO FontDescription
fontDescriptionNew = IO (Ptr FontDescription)
pango_font_description_new IO (Ptr FontDescription)
-> (Ptr FontDescription -> IO FontDescription)
-> IO FontDescription
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Ptr FontDescription -> IO FontDescription
makeNewFontDescription

-- | Make a deep copy of a font description.
--
fontDescriptionCopy :: FontDescription -> IO FontDescription
fontDescriptionCopy :: FontDescription -> IO FontDescription
fontDescriptionCopy FontDescription
fd = (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO (Ptr FontDescription))
-> IO (Ptr FontDescription)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO (Ptr FontDescription))
 -> IO (Ptr FontDescription))
-> (Ptr FontDescription -> IO (Ptr FontDescription))
-> IO (Ptr FontDescription)
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO (Ptr FontDescription)
pango_font_description_copy Ptr FontDescription
argPtr1) FontDescription
fd IO (Ptr FontDescription)
-> (Ptr FontDescription -> IO FontDescription)
-> IO FontDescription
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Ptr FontDescription -> IO FontDescription
makeNewFontDescription

-- | Set the font famliy.
--
-- * A font family is a name designating the design of the font (e.g. Sans
--   or Times) without the variant.
--
-- * In some contexts a comma separated list of font families can be used.
--
fontDescriptionSetFamily :: GlibString string => FontDescription -> string -> IO ()
fontDescriptionSetFamily :: forall string.
GlibString string =>
FontDescription -> string -> IO ()
fontDescriptionSetFamily FontDescription
fd string
family = string -> (CString -> IO ()) -> IO ()
forall a. string -> (CString -> IO a) -> IO a
forall s a. GlibString s => s -> (CString -> IO a) -> IO a
withUTFString string
family ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \CString
strPtr ->
  (\(FontDescription ForeignPtr FontDescription
arg1) CString
arg2 -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO ()) -> IO ())
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> CString -> IO ()
pango_font_description_set_family Ptr FontDescription
argPtr1 CString
arg2) FontDescription
fd CString
strPtr

-- | Get the font family.
--
-- * 'Nothing' is returned if the font family is not set.
--
fontDescriptionGetFamily :: GlibString string => FontDescription -> IO (Maybe string)
fontDescriptionGetFamily :: forall string.
GlibString string =>
FontDescription -> IO (Maybe string)
fontDescriptionGetFamily FontDescription
fd = do
  strPtr <- (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CString) -> IO CString
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CString) -> IO CString)
-> (Ptr FontDescription -> IO CString) -> IO CString
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO CString
pango_font_description_get_family Ptr FontDescription
argPtr1) FontDescription
fd
  if strPtr==nullPtr then return Nothing else
    liftM Just $ peekUTFString strPtr

-- | Flags denoting which fields in a font description are set.
data FontMask = PangoFontMaskFamily
              | PangoFontMaskStyle
              | PangoFontMaskVariant
              | PangoFontMaskWeight
              | PangoFontMaskStretch
              | PangoFontMaskSize
              | PangoFontMaskGravity
              | PangoFontMaskVariations
              deriving (FontMask
FontMask -> FontMask -> Bounded FontMask
forall a. a -> a -> Bounded a
$cminBound :: FontMask
minBound :: FontMask
$cmaxBound :: FontMask
maxBound :: FontMask
Bounded)
instance Enum FontMask where
  fromEnum PangoFontMaskFamily = 1
  fromEnum PangoFontMaskStyle = 2
  fromEnum PangoFontMaskVariant = 4
  fromEnum PangoFontMaskWeight = 8
  fromEnum PangoFontMaskStretch = 16
  fromEnum PangoFontMaskSize = 32
  fromEnum PangoFontMaskGravity = 64
  fromEnum PangoFontMaskVariations = 128

  toEnum 1 = PangoFontMaskFamily
  toEnum 2 = PangoFontMaskStyle
  toEnum 4 = PangoFontMaskVariant
  toEnum 8 = PangoFontMaskWeight
  toEnum 16 = PangoFontMaskStretch
  toEnum 32 = PangoFontMaskSize
  toEnum 64 = PangoFontMaskGravity
  toEnum 128 = PangoFontMaskVariations
  toEnum unmatched = error ("FontMask.toEnum: Cannot match " ++ show unmatched)

  succ PangoFontMaskFamily = PangoFontMaskStyle
  succ PangoFontMaskStyle = PangoFontMaskVariant
  succ PangoFontMaskVariant = PangoFontMaskWeight
  succ PangoFontMaskWeight = PangoFontMaskStretch
  succ PangoFontMaskStretch = PangoFontMaskSize
  succ PangoFontMaskSize = PangoFontMaskGravity
  succ PangoFontMaskGravity = PangoFontMaskVariations
  succ _ = undefined

  pred :: FontMask -> FontMask
pred FontMask
PangoFontMaskStyle = FontMask
PangoFontMaskFamily
  pred PangoFontMaskVariant = PangoFontMaskStyle
  pred PangoFontMaskWeight = PangoFontMaskVariant
  pred PangoFontMaskStretch = PangoFontMaskWeight
  pred FontMask
PangoFontMaskSize = FontMask
PangoFontMaskStretch
  pred PangoFontMaskGravity = PangoFontMaskSize
  pred PangoFontMaskVariations = PangoFontMaskGravity
  pred FontMask
_ = FontMask
forall a. HasCallStack => a
undefined

  enumFromTo :: FontMask -> FontMask -> [FontMask]
enumFromTo FontMask
x FontMask
y | FontMask -> Int
forall a. Enum a => a -> Int
fromEnum FontMask
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== FontMask -> Int
forall a. Enum a => a -> Int
fromEnum FontMask
y = [ FontMask
y ]
                 | Bool
otherwise = FontMask
x FontMask -> [FontMask] -> [FontMask]
forall a. a -> [a] -> [a]
: FontMask -> FontMask -> [FontMask]
forall a. Enum a => a -> a -> [a]
enumFromTo (FontMask -> FontMask
forall a. Enum a => a -> a
succ FontMask
x) FontMask
y
  enumFrom :: FontMask -> [FontMask]
enumFrom FontMask
x = FontMask -> FontMask -> [FontMask]
forall a. Enum a => a -> a -> [a]
enumFromTo FontMask
x FontMask
PangoFontMaskVariations
  enumFromThen :: FontMask -> FontMask -> [FontMask]
enumFromThen FontMask
_ FontMask
_ =     [Char] -> [FontMask]
forall a. HasCallStack => [Char] -> a
error [Char]
"Enum FontMask: enumFromThen not implemented"
  enumFromThenTo :: FontMask -> FontMask -> FontMask -> [FontMask]
enumFromThenTo FontMask
_ FontMask
_ FontMask
_ =     [Char] -> [FontMask]
forall a. HasCallStack => [Char] -> a
error [Char]
"Enum FontMask: enumFromThenTo not implemented"

{-# LINE 105 "./Graphics/Rendering/Pango/Description.chs" #-}

instance Flags FontMask

-- | Set the style field.
--
-- * Most fonts will have either a 'StyleItalic' or 'StyleOblique'
--   but rarely both.
--
fontDescriptionSetStyle :: FontDescription -> FontStyle -> IO ()
fontDescriptionSetStyle fd p =
    (\(FontDescription arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_set_style argPtr1 arg2) fd (fromIntegral (fromEnum p))

-- | Get the style field.
fontDescriptionGetStyle :: FontDescription -> IO (Maybe FontStyle)
fontDescriptionGetStyle fd = do
  fields <- (\(FontDescription arg1) -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_get_set_fields argPtr1) fd
  if (fromEnum PangoFontMaskStyle) .&. (fromIntegral fields) /=0
     then liftM (Just . toEnum . fromIntegral) $
              (\(FontDescription arg1) -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_get_style argPtr1) fd
     else return Nothing

-- | Set the variant field.
--
fontDescriptionSetVariant :: FontDescription -> Variant -> IO ()
fontDescriptionSetVariant fd p =
    (\(FontDescription arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_set_variant argPtr1 arg2) fd (fromIntegral (fromEnum p))

-- | Get the variant field.
fontDescriptionGetVariant :: FontDescription -> IO (Maybe Variant)
fontDescriptionGetVariant fd = do
  fields <- (\(FontDescription arg1) -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_get_set_fields argPtr1) fd
  if (fromEnum PangoFontMaskVariant) .&. (fromIntegral fields) /=0
     then liftM (Just . toEnum . fromIntegral) $
              (\(FontDescription arg1) -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_get_variant argPtr1) fd
     else return Nothing

-- | Set the weight field.
--
fontDescriptionSetWeight :: FontDescription -> Weight -> IO ()
fontDescriptionSetWeight fd p =
  (\(FontDescription arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_set_weight argPtr1 arg2) fd (fromIntegral (fromEnum p))

-- | Get the weight field.
fontDescriptionGetWeight :: FontDescription -> IO (Maybe Weight)
fontDescriptionGetWeight fd = do
  fields <- (\(FontDescription arg1) -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_get_set_fields argPtr1) fd
  if (fromEnum PangoFontMaskWeight) .&. (fromIntegral fields) /=0
     then liftM (Just . toEnum . fromIntegral) $
              (\(FontDescription arg1) -> withForeignPtr arg1 $ \argPtr1 ->pango_font_description_get_weight argPtr1) fd
     else return Nothing

-- | Set the stretch field.
--
fontDescriptionSetStretch :: FontDescription -> Stretch -> IO ()
fontDescriptionSetStretch :: FontDescription -> Stretch -> IO ()
fontDescriptionSetStretch FontDescription
fd Stretch
p =
  (\(FontDescription ForeignPtr FontDescription
arg1) CInt
arg2 -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO ()) -> IO ())
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> CInt -> IO ()
pango_font_description_set_stretch Ptr FontDescription
argPtr1 CInt
arg2) FontDescription
fd (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Stretch -> Int
forall a. Enum a => a -> Int
fromEnum Stretch
p))

-- | Get the stretch field.
fontDescriptionGetStretch :: FontDescription -> IO (Maybe Stretch)
fontDescriptionGetStretch :: FontDescription -> IO (Maybe Stretch)
fontDescriptionGetStretch FontDescription
fd = do
  fields <- (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO CInt
pango_font_description_get_set_fields Ptr FontDescription
argPtr1) FontDescription
fd
  if (fromEnum PangoFontMaskStretch) .&. (fromIntegral fields) /=0
     then liftM (Just . toEnum . fromIntegral) $
              (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO CInt
pango_font_description_get_stretch Ptr FontDescription
argPtr1) fd
     else return Nothing

-- | Set the size field.
--
-- * The given size is in points (pts). One point is 1\/72 inch.
--
fontDescriptionSetSize :: FontDescription -> Double -> IO ()
fontDescriptionSetSize :: FontDescription -> Double -> IO ()
fontDescriptionSetSize FontDescription
fd Double
p =
  (\(FontDescription ForeignPtr FontDescription
arg1) CInt
arg2 -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO ()) -> IO ())
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> CInt -> IO ()
pango_font_description_set_size Ptr FontDescription
argPtr1 CInt
arg2) FontDescription
fd (Double -> CInt
puToInt Double
p)

-- | Get the size field.
fontDescriptionGetSize :: FontDescription -> IO (Maybe Double)
fontDescriptionGetSize :: FontDescription -> IO (Maybe Double)
fontDescriptionGetSize FontDescription
fd = do
  fields <- (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO CInt
pango_font_description_get_set_fields Ptr FontDescription
argPtr1) FontDescription
fd
  if (fromEnum PangoFontMaskSize) .&. (fromIntegral fields) /=0
     then liftM (\CInt
x -> Double -> Maybe Double
forall a. a -> Maybe a
Just (CInt -> Double
intToPu CInt
x)) $
              (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO CInt
pango_font_description_get_size Ptr FontDescription
argPtr1) fd
     else return Nothing

-- | Reset fields in a font description.
--
fontDescriptionUnsetFields :: FontDescription -> [FontMask] -> IO ()
fontDescriptionUnsetFields :: FontDescription -> [FontMask] -> IO ()
fontDescriptionUnsetFields FontDescription
fd [FontMask]
mask =
  (\(FontDescription ForeignPtr FontDescription
arg1) CInt
arg2 -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO ()) -> IO ())
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> CInt -> IO ()
pango_font_description_unset_fields Ptr FontDescription
argPtr1 CInt
arg2) FontDescription
fd (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral ([FontMask] -> Int
forall a. Flags a => [a] -> Int
fromFlags [FontMask]
mask))

-- | Merge two font descriptions.
--
-- * Copy fields from the second description to the first. If the boolean
--   parameter is set, existing fields in the first description will be
--   replaced.
--
fontDescriptionMerge :: FontDescription -> FontDescription -> Bool -> IO ()
fontDescriptionMerge :: FontDescription -> FontDescription -> Bool -> IO ()
fontDescriptionMerge FontDescription
fd1 FontDescription
fd2 Bool
replace =
  (\(FontDescription ForeignPtr FontDescription
arg1) (FontDescription ForeignPtr FontDescription
arg2) CInt
arg3 -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO ()) -> IO ())
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->ForeignPtr FontDescription
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg2 ((Ptr FontDescription -> IO ()) -> IO ())
-> (Ptr FontDescription -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr2 ->Ptr FontDescription -> Ptr FontDescription -> CInt -> IO ()
pango_font_description_merge Ptr FontDescription
argPtr1 Ptr FontDescription
argPtr2 CInt
arg3) FontDescription
fd1 FontDescription
fd2 (Bool -> CInt
forall a. Num a => Bool -> a
fromBool Bool
replace)

-- | Determine if two descriptions are similar.
--
-- * Returns 'True' if the two descriptions only differ in weight or style.
--
fontDescriptionIsMatch :: FontDescription -> FontDescription -> Bool
fontDescriptionIsMatch :: FontDescription -> FontDescription -> Bool
fontDescriptionIsMatch FontDescription
fdA FontDescription
fdB = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (CInt -> Bool) -> IO CInt -> IO Bool
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM CInt -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool (IO CInt -> IO Bool) -> IO CInt -> IO Bool
forall a b. (a -> b) -> a -> b
$
  (\(FontDescription ForeignPtr FontDescription
arg1) (FontDescription ForeignPtr FontDescription
arg2) (FontDescription ForeignPtr FontDescription
arg3) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg2 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr2 ->ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg3 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr3 ->Ptr FontDescription
-> Ptr FontDescription -> Ptr FontDescription -> IO CInt
pango_font_description_better_match Ptr FontDescription
argPtr1 Ptr FontDescription
argPtr2 Ptr FontDescription
argPtr3) FontDescription
fdA (ForeignPtr FontDescription -> FontDescription
FontDescription ForeignPtr FontDescription
forall a. ForeignPtr a
nullForeignPtr) FontDescription
fdB

-- | Determine which of two descriptions matches a given description better.
--
-- * Returns @True@ if the last description is a better match to the first
--   argument than the middle one.
--
-- * Approximate matching is done on weight and style. If the other
--   attributes do not match, the function returns @False@.
--
fontDescriptionBetterMatch :: FontDescription -> FontDescription ->
                              FontDescription -> Bool
fontDescriptionBetterMatch :: FontDescription -> FontDescription -> FontDescription -> Bool
fontDescriptionBetterMatch FontDescription
fd FontDescription
fdA FontDescription
fdB = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (CInt -> Bool) -> IO CInt -> IO Bool
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM CInt -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool (IO CInt -> IO Bool) -> IO CInt -> IO Bool
forall a b. (a -> b) -> a -> b
$
  (\(FontDescription ForeignPtr FontDescription
arg1) (FontDescription ForeignPtr FontDescription
arg2) (FontDescription ForeignPtr FontDescription
arg3) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg2 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr2 ->ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg3 ((Ptr FontDescription -> IO CInt) -> IO CInt)
-> (Ptr FontDescription -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr3 ->Ptr FontDescription
-> Ptr FontDescription -> Ptr FontDescription -> IO CInt
pango_font_description_better_match Ptr FontDescription
argPtr1 Ptr FontDescription
argPtr2 Ptr FontDescription
argPtr3) FontDescription
fd FontDescription
fdA FontDescription
fdB

-- | Create a font description from a string.
--
-- * The given argument must have the form
--   @[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]@ where @FAMILY_LIST@ is a comma
--   separated list of font families optionally terminated by a comma,
--   @STYLE_OPTIONS@ is a whitespace separated list of words where each
--   word describes one of style, variant, weight or stretch. @SIZE@ is
--   a decimal number giving the size of the font in points. If any of
--   these fields is absent, the resulting 'FontDescription' will have
--   the corresponding fields unset.
--
fontDescriptionFromString :: GlibString string => string -> IO FontDescription
fontDescriptionFromString :: forall string. GlibString string => string -> IO FontDescription
fontDescriptionFromString string
descr = string -> (CString -> IO FontDescription) -> IO FontDescription
forall a. string -> (CString -> IO a) -> IO a
forall s a. GlibString s => s -> (CString -> IO a) -> IO a
withUTFString string
descr ((CString -> IO FontDescription) -> IO FontDescription)
-> (CString -> IO FontDescription) -> IO FontDescription
forall a b. (a -> b) -> a -> b
$ \CString
strPtr ->
  CString -> IO (Ptr FontDescription)
pango_font_description_from_string CString
strPtr IO (Ptr FontDescription)
-> (Ptr FontDescription -> IO FontDescription)
-> IO FontDescription
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Ptr FontDescription -> IO FontDescription
makeNewFontDescription

-- | Convert a font description to a string.
--
-- * Creates a string representation of a font description. See
--   'fontDescriptionFromString' for the format of the string.
--
fontDescriptionToString :: GlibString string => FontDescription -> IO string
fontDescriptionToString :: forall string. GlibString string => FontDescription -> IO string
fontDescriptionToString FontDescription
fd = do
  strPtr <- (\(FontDescription ForeignPtr FontDescription
arg1) -> ForeignPtr FontDescription
-> (Ptr FontDescription -> IO CString) -> IO CString
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr FontDescription
arg1 ((Ptr FontDescription -> IO CString) -> IO CString)
-> (Ptr FontDescription -> IO CString) -> IO CString
forall a b. (a -> b) -> a -> b
$ \Ptr FontDescription
argPtr1 ->Ptr FontDescription -> IO CString
pango_font_description_to_string Ptr FontDescription
argPtr1) FontDescription
fd
  str <- peekUTFString strPtr
  g_free (castPtr strPtr)
  return str




foreign import ccall unsafe "pango_font_description_new"
  pango_font_description_new :: (IO (Ptr FontDescription))

foreign import ccall unsafe "pango_font_description_copy"
  pango_font_description_copy :: ((Ptr FontDescription) -> (IO (Ptr FontDescription)))

foreign import ccall unsafe "pango_font_description_set_family"
  pango_font_description_set_family :: ((Ptr FontDescription) -> ((Ptr CChar) -> (IO ())))

foreign import ccall unsafe "pango_font_description_get_family"
  pango_font_description_get_family :: ((Ptr FontDescription) -> (IO (Ptr CChar)))

foreign import ccall unsafe "pango_font_description_set_style"
  pango_font_description_set_style :: ((Ptr FontDescription) -> (CInt -> (IO ())))

foreign import ccall unsafe "pango_font_description_get_set_fields"
  pango_font_description_get_set_fields :: ((Ptr FontDescription) -> (IO CInt))

foreign import ccall unsafe "pango_font_description_get_style"
  pango_font_description_get_style :: ((Ptr FontDescription) -> (IO CInt))

foreign import ccall unsafe "pango_font_description_set_variant"
  pango_font_description_set_variant :: ((Ptr FontDescription) -> (CInt -> (IO ())))

foreign import ccall unsafe "pango_font_description_get_variant"
  pango_font_description_get_variant :: ((Ptr FontDescription) -> (IO CInt))

foreign import ccall unsafe "pango_font_description_set_weight"
  pango_font_description_set_weight :: ((Ptr FontDescription) -> (CInt -> (IO ())))

foreign import ccall unsafe "pango_font_description_get_weight"
  pango_font_description_get_weight :: ((Ptr FontDescription) -> (IO CInt))

foreign import ccall unsafe "pango_font_description_set_stretch"
  pango_font_description_set_stretch :: ((Ptr FontDescription) -> (CInt -> (IO ())))

foreign import ccall unsafe "pango_font_description_get_stretch"
  pango_font_description_get_stretch :: ((Ptr FontDescription) -> (IO CInt))

foreign import ccall unsafe "pango_font_description_set_size"
  pango_font_description_set_size :: ((Ptr FontDescription) -> (CInt -> (IO ())))

foreign import ccall unsafe "pango_font_description_get_size"
  pango_font_description_get_size :: ((Ptr FontDescription) -> (IO CInt))

foreign import ccall unsafe "pango_font_description_unset_fields"
  pango_font_description_unset_fields :: ((Ptr FontDescription) -> (CInt -> (IO ())))

foreign import ccall unsafe "pango_font_description_merge"
  pango_font_description_merge :: ((Ptr FontDescription) -> ((Ptr FontDescription) -> (CInt -> (IO ()))))

foreign import ccall unsafe "pango_font_description_better_match"
  pango_font_description_better_match :: ((Ptr FontDescription) -> ((Ptr FontDescription) -> ((Ptr FontDescription) -> (IO CInt))))

foreign import ccall unsafe "pango_font_description_from_string"
  pango_font_description_from_string :: ((Ptr CChar) -> (IO (Ptr FontDescription)))

foreign import ccall unsafe "pango_font_description_to_string"
  pango_font_description_to_string :: ((Ptr FontDescription) -> (IO (Ptr CChar)))

foreign import ccall unsafe "g_free"
  g_free :: ((Ptr ()) -> (IO ()))