{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) The 'GI.Pango.Objects.FontFace.FontFace' structure is used to represent a group of fonts with the same family, slant, weight, width, but varying sizes. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Pango.Objects.FontFace ( -- * Exported types FontFace(..) , IsFontFace , toFontFace , noFontFace , -- * Methods -- ** describe #method:describe# #if ENABLE_OVERLOADING FontFaceDescribeMethodInfo , #endif fontFaceDescribe , -- ** getFaceName #method:getFaceName# #if ENABLE_OVERLOADING FontFaceGetFaceNameMethodInfo , #endif fontFaceGetFaceName , -- ** isSynthesized #method:isSynthesized# #if ENABLE_OVERLOADING FontFaceIsSynthesizedMethodInfo , #endif fontFaceIsSynthesized , -- ** listSizes #method:listSizes# #if ENABLE_OVERLOADING FontFaceListSizesMethodInfo , #endif fontFaceListSizes , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.GObject.Objects.Object as GObject.Object import {-# SOURCE #-} qualified GI.Pango.Structs.FontDescription as Pango.FontDescription -- | Memory-managed wrapper type. newtype FontFace = FontFace (ManagedPtr FontFace) foreign import ccall "pango_font_face_get_type" c_pango_font_face_get_type :: IO GType instance GObject FontFace where gobjectType = c_pango_font_face_get_type -- | Type class for types which can be safely cast to `FontFace`, for instance with `toFontFace`. class (GObject o, O.IsDescendantOf FontFace o) => IsFontFace o instance (GObject o, O.IsDescendantOf FontFace o) => IsFontFace o instance O.HasParentTypes FontFace type instance O.ParentTypes FontFace = '[GObject.Object.Object] -- | Cast to `FontFace`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toFontFace :: (MonadIO m, IsFontFace o) => o -> m FontFace toFontFace = liftIO . unsafeCastTo FontFace -- | A convenience alias for `Nothing` :: `Maybe` `FontFace`. noFontFace :: Maybe FontFace noFontFace = Nothing #if ENABLE_OVERLOADING type family ResolveFontFaceMethod (t :: Symbol) (o :: *) :: * where ResolveFontFaceMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveFontFaceMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveFontFaceMethod "describe" o = FontFaceDescribeMethodInfo ResolveFontFaceMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveFontFaceMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveFontFaceMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolveFontFaceMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveFontFaceMethod "isSynthesized" o = FontFaceIsSynthesizedMethodInfo ResolveFontFaceMethod "listSizes" o = FontFaceListSizesMethodInfo ResolveFontFaceMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveFontFaceMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveFontFaceMethod "ref" o = GObject.Object.ObjectRefMethodInfo ResolveFontFaceMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveFontFaceMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveFontFaceMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveFontFaceMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveFontFaceMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveFontFaceMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo ResolveFontFaceMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveFontFaceMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveFontFaceMethod "getFaceName" o = FontFaceGetFaceNameMethodInfo ResolveFontFaceMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveFontFaceMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveFontFaceMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveFontFaceMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveFontFaceMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveFontFaceMethod t FontFace, O.MethodInfo info FontFace p) => OL.IsLabel t (FontFace -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif #if ENABLE_OVERLOADING instance O.HasAttributeList FontFace type instance O.AttributeList FontFace = FontFaceAttributeList type FontFaceAttributeList = ('[ ] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING #endif #if ENABLE_OVERLOADING type instance O.SignalList FontFace = FontFaceSignalList type FontFaceSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) #endif -- method FontFace::describe -- method type : OrdinaryMethod -- Args : [Arg {argCName = "face", argType = TInterface (Name {namespace = "Pango", name = "FontFace"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontFace", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontDescription"})) -- throws : False -- Skip return : False foreign import ccall "pango_font_face_describe" pango_font_face_describe :: Ptr FontFace -> -- face : TInterface (Name {namespace = "Pango", name = "FontFace"}) IO (Ptr Pango.FontDescription.FontDescription) {- | Returns the family, style, variant, weight and stretch of a 'GI.Pango.Objects.FontFace.FontFace'. The size field of the resulting font description will be unset. -} fontFaceDescribe :: (B.CallStack.HasCallStack, MonadIO m, IsFontFace a) => a {- ^ /@face@/: a 'GI.Pango.Objects.FontFace.FontFace' -} -> m Pango.FontDescription.FontDescription {- ^ __Returns:__ a newly-created 'GI.Pango.Structs.FontDescription.FontDescription' structure holding the description of the face. Use 'GI.Pango.Structs.FontDescription.fontDescriptionFree' to free the result. -} fontFaceDescribe face = liftIO $ do face' <- unsafeManagedPtrCastPtr face result <- pango_font_face_describe face' checkUnexpectedReturnNULL "fontFaceDescribe" result result' <- (wrapBoxed Pango.FontDescription.FontDescription) result touchManagedPtr face return result' #if ENABLE_OVERLOADING data FontFaceDescribeMethodInfo instance (signature ~ (m Pango.FontDescription.FontDescription), MonadIO m, IsFontFace a) => O.MethodInfo FontFaceDescribeMethodInfo a signature where overloadedMethod _ = fontFaceDescribe #endif -- method FontFace::get_face_name -- method type : OrdinaryMethod -- Args : [Arg {argCName = "face", argType = TInterface (Name {namespace = "Pango", name = "FontFace"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontFace.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TUTF8) -- throws : False -- Skip return : False foreign import ccall "pango_font_face_get_face_name" pango_font_face_get_face_name :: Ptr FontFace -> -- face : TInterface (Name {namespace = "Pango", name = "FontFace"}) IO CString {- | Gets a name representing the style of this face among the different faces in the 'GI.Pango.Objects.FontFamily.FontFamily' for the face. This name is unique among all faces in the family and is suitable for displaying to users. -} fontFaceGetFaceName :: (B.CallStack.HasCallStack, MonadIO m, IsFontFace a) => a {- ^ /@face@/: a 'GI.Pango.Objects.FontFace.FontFace'. -} -> m T.Text {- ^ __Returns:__ the face name for the face. This string is owned by the face object and must not be modified or freed. -} fontFaceGetFaceName face = liftIO $ do face' <- unsafeManagedPtrCastPtr face result <- pango_font_face_get_face_name face' checkUnexpectedReturnNULL "fontFaceGetFaceName" result result' <- cstringToText result touchManagedPtr face return result' #if ENABLE_OVERLOADING data FontFaceGetFaceNameMethodInfo instance (signature ~ (m T.Text), MonadIO m, IsFontFace a) => O.MethodInfo FontFaceGetFaceNameMethodInfo a signature where overloadedMethod _ = fontFaceGetFaceName #endif -- method FontFace::is_synthesized -- method type : OrdinaryMethod -- Args : [Arg {argCName = "face", argType = TInterface (Name {namespace = "Pango", name = "FontFace"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontFace", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "pango_font_face_is_synthesized" pango_font_face_is_synthesized :: Ptr FontFace -> -- face : TInterface (Name {namespace = "Pango", name = "FontFace"}) IO CInt {- | Returns whether a 'GI.Pango.Objects.FontFace.FontFace' is synthesized by the underlying font rendering engine from another face, perhaps by shearing, emboldening, or lightening it. /Since: 1.18/ -} fontFaceIsSynthesized :: (B.CallStack.HasCallStack, MonadIO m, IsFontFace a) => a {- ^ /@face@/: a 'GI.Pango.Objects.FontFace.FontFace' -} -> m Bool {- ^ __Returns:__ whether /@face@/ is synthesized. -} fontFaceIsSynthesized face = liftIO $ do face' <- unsafeManagedPtrCastPtr face result <- pango_font_face_is_synthesized face' let result' = (/= 0) result touchManagedPtr face return result' #if ENABLE_OVERLOADING data FontFaceIsSynthesizedMethodInfo instance (signature ~ (m Bool), MonadIO m, IsFontFace a) => O.MethodInfo FontFaceIsSynthesizedMethodInfo a signature where overloadedMethod _ = fontFaceIsSynthesized #endif -- method FontFace::list_sizes -- method type : OrdinaryMethod -- Args : [Arg {argCName = "face", argType = TInterface (Name {namespace = "Pango", name = "FontFace"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontFace.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sizes", argType = TCArray False (-1) 2 (TBasicType TInt), direction = DirectionOut, mayBeNull = True, argDoc = Documentation {rawDocText = Just "\n location to store a pointer to an array of int. This array\n should be freed with g_free().", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "n_sizes", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location to store the number of elements in @sizes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [Arg {argCName = "n_sizes", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location to store the number of elements in @sizes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_font_face_list_sizes" pango_font_face_list_sizes :: Ptr FontFace -> -- face : TInterface (Name {namespace = "Pango", name = "FontFace"}) Ptr (Ptr Int32) -> -- sizes : TCArray False (-1) 2 (TBasicType TInt) Ptr Int32 -> -- n_sizes : TBasicType TInt IO () {- | List the available sizes for a font. This is only applicable to bitmap fonts. For scalable fonts, stores 'Nothing' at the location pointed to by /@sizes@/ and 0 at the location pointed to by /@nSizes@/. The sizes returned are in Pango units and are sorted in ascending order. /Since: 1.4/ -} fontFaceListSizes :: (B.CallStack.HasCallStack, MonadIO m, IsFontFace a) => a {- ^ /@face@/: a 'GI.Pango.Objects.FontFace.FontFace'. -} -> m ((Maybe [Int32])) fontFaceListSizes face = liftIO $ do face' <- unsafeManagedPtrCastPtr face sizes <- allocMem :: IO (Ptr (Ptr Int32)) nSizes <- allocMem :: IO (Ptr Int32) pango_font_face_list_sizes face' sizes nSizes nSizes' <- peek nSizes sizes' <- peek sizes maybeSizes' <- convertIfNonNull sizes' $ \sizes'' -> do sizes''' <- (unpackStorableArrayWithLength nSizes') sizes'' freeMem sizes'' return sizes''' touchManagedPtr face freeMem sizes freeMem nSizes return maybeSizes' #if ENABLE_OVERLOADING data FontFaceListSizesMethodInfo instance (signature ~ (m ((Maybe [Int32]))), MonadIO m, IsFontFace a) => O.MethodInfo FontFaceListSizesMethodInfo a signature where overloadedMethod _ = fontFaceListSizes #endif