{-# LANGUAGE TypeApplications #-} -- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte -- License : LGPL-2.1 -- Maintainer : Iñaki García Etxebarria -- -- The t'GI.Pango.Structs.GlyphString.GlyphString' structure is used to store strings -- of glyphs with geometry and visual attribute information. -- The storage for the glyph information is owned -- by the structure which simplifies memory management. #if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__)) #define ENABLE_OVERLOADING #endif module GI.Pango.Structs.GlyphString ( -- * Exported types GlyphString(..) , newZeroGlyphString , noGlyphString , -- * Methods -- ** Overloaded methods #method:Overloaded methods# #if defined(ENABLE_OVERLOADING) ResolveGlyphStringMethod , #endif -- ** copy #method:copy# #if defined(ENABLE_OVERLOADING) GlyphStringCopyMethodInfo , #endif glyphStringCopy , -- ** extents #method:extents# #if defined(ENABLE_OVERLOADING) GlyphStringExtentsMethodInfo , #endif glyphStringExtents , -- ** extentsRange #method:extentsRange# #if defined(ENABLE_OVERLOADING) GlyphStringExtentsRangeMethodInfo , #endif glyphStringExtentsRange , -- ** free #method:free# #if defined(ENABLE_OVERLOADING) GlyphStringFreeMethodInfo , #endif glyphStringFree , -- ** getLogicalWidths #method:getLogicalWidths# #if defined(ENABLE_OVERLOADING) GlyphStringGetLogicalWidthsMethodInfo , #endif glyphStringGetLogicalWidths , -- ** getWidth #method:getWidth# #if defined(ENABLE_OVERLOADING) GlyphStringGetWidthMethodInfo , #endif glyphStringGetWidth , -- ** indexToX #method:indexToX# #if defined(ENABLE_OVERLOADING) GlyphStringIndexToXMethodInfo , #endif glyphStringIndexToX , -- ** new #method:new# glyphStringNew , -- ** setSize #method:setSize# #if defined(ENABLE_OVERLOADING) GlyphStringSetSizeMethodInfo , #endif glyphStringSetSize , -- ** xToIndex #method:xToIndex# #if defined(ENABLE_OVERLOADING) GlyphStringXToIndexMethodInfo , #endif glyphStringXToIndex , -- * Properties -- ** logClusters #attr:logClusters# -- | logical cluster info, indexed by the byte index -- within the text corresponding to the glyph string. getGlyphStringLogClusters , #if defined(ENABLE_OVERLOADING) glyphString_logClusters , #endif setGlyphStringLogClusters , -- ** numGlyphs #attr:numGlyphs# -- | number of the glyphs in this glyph string. getGlyphStringNumGlyphs , #if defined(ENABLE_OVERLOADING) glyphString_numGlyphs , #endif setGlyphStringNumGlyphs , ) 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.GI.Base.Signals as B.Signals 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 {-# SOURCE #-} qualified GI.Pango.Objects.Font as Pango.Font import {-# SOURCE #-} qualified GI.Pango.Structs.Analysis as Pango.Analysis import {-# SOURCE #-} qualified GI.Pango.Structs.Rectangle as Pango.Rectangle -- | Memory-managed wrapper type. newtype GlyphString = GlyphString (ManagedPtr GlyphString) deriving (Eq) foreign import ccall "pango_glyph_string_get_type" c_pango_glyph_string_get_type :: IO GType instance BoxedObject GlyphString where boxedType _ = c_pango_glyph_string_get_type -- | Convert 'GlyphString' to and from 'Data.GI.Base.GValue.GValue' with 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'. instance B.GValue.IsGValue GlyphString where toGValue o = do gtype <- c_pango_glyph_string_get_type B.ManagedPtr.withManagedPtr o (B.GValue.buildGValue gtype B.GValue.set_boxed) fromGValue gv = do ptr <- B.GValue.get_boxed gv :: IO (Ptr GlyphString) B.ManagedPtr.newBoxed GlyphString ptr -- | Construct a `GlyphString` struct initialized to zero. newZeroGlyphString :: MonadIO m => m GlyphString newZeroGlyphString = liftIO $ callocBoxedBytes 16 >>= wrapBoxed GlyphString instance tag ~ 'AttrSet => Constructible GlyphString tag where new _ attrs = do o <- newZeroGlyphString GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `GlyphString`. noGlyphString :: Maybe GlyphString noGlyphString = Nothing -- | Get the value of the “@num_glyphs@” field. -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to -- -- @ -- 'Data.GI.Base.Attributes.get' glyphString #numGlyphs -- @ getGlyphStringNumGlyphs :: MonadIO m => GlyphString -> m Int32 getGlyphStringNumGlyphs s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO Int32 return val -- | Set the value of the “@num_glyphs@” field. -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to -- -- @ -- 'Data.GI.Base.Attributes.set' glyphString [ #numGlyphs 'Data.GI.Base.Attributes.:=' value ] -- @ setGlyphStringNumGlyphs :: MonadIO m => GlyphString -> Int32 -> m () setGlyphStringNumGlyphs s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Int32) #if defined(ENABLE_OVERLOADING) data GlyphStringNumGlyphsFieldInfo instance AttrInfo GlyphStringNumGlyphsFieldInfo where type AttrBaseTypeConstraint GlyphStringNumGlyphsFieldInfo = (~) GlyphString type AttrAllowedOps GlyphStringNumGlyphsFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint GlyphStringNumGlyphsFieldInfo = (~) Int32 type AttrTransferTypeConstraint GlyphStringNumGlyphsFieldInfo = (~)Int32 type AttrTransferType GlyphStringNumGlyphsFieldInfo = Int32 type AttrGetType GlyphStringNumGlyphsFieldInfo = Int32 type AttrLabel GlyphStringNumGlyphsFieldInfo = "num_glyphs" type AttrOrigin GlyphStringNumGlyphsFieldInfo = GlyphString attrGet = getGlyphStringNumGlyphs attrSet = setGlyphStringNumGlyphs attrConstruct = undefined attrClear = undefined attrTransfer _ v = do return v glyphString_numGlyphs :: AttrLabelProxy "numGlyphs" glyphString_numGlyphs = AttrLabelProxy #endif -- XXX Skipped attribute for "GlyphString:glyphs" :: Not implemented: "Don't know how to unpack C array of type TCArray False (-1) 0 (TInterface (Name {namespace = \"Pango\", name = \"GlyphInfo\"}))" -- | Get the value of the “@log_clusters@” field. -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to -- -- @ -- 'Data.GI.Base.Attributes.get' glyphString #logClusters -- @ getGlyphStringLogClusters :: MonadIO m => GlyphString -> m Int32 getGlyphStringLogClusters s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO Int32 return val -- | Set the value of the “@log_clusters@” field. -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to -- -- @ -- 'Data.GI.Base.Attributes.set' glyphString [ #logClusters 'Data.GI.Base.Attributes.:=' value ] -- @ setGlyphStringLogClusters :: MonadIO m => GlyphString -> Int32 -> m () setGlyphStringLogClusters s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (val :: Int32) #if defined(ENABLE_OVERLOADING) data GlyphStringLogClustersFieldInfo instance AttrInfo GlyphStringLogClustersFieldInfo where type AttrBaseTypeConstraint GlyphStringLogClustersFieldInfo = (~) GlyphString type AttrAllowedOps GlyphStringLogClustersFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint GlyphStringLogClustersFieldInfo = (~) Int32 type AttrTransferTypeConstraint GlyphStringLogClustersFieldInfo = (~)Int32 type AttrTransferType GlyphStringLogClustersFieldInfo = Int32 type AttrGetType GlyphStringLogClustersFieldInfo = Int32 type AttrLabel GlyphStringLogClustersFieldInfo = "log_clusters" type AttrOrigin GlyphStringLogClustersFieldInfo = GlyphString attrGet = getGlyphStringLogClusters attrSet = setGlyphStringLogClusters attrConstruct = undefined attrClear = undefined attrTransfer _ v = do return v glyphString_logClusters :: AttrLabelProxy "logClusters" glyphString_logClusters = AttrLabelProxy #endif #if defined(ENABLE_OVERLOADING) instance O.HasAttributeList GlyphString type instance O.AttributeList GlyphString = GlyphStringAttributeList type GlyphStringAttributeList = ('[ '("numGlyphs", GlyphStringNumGlyphsFieldInfo), '("logClusters", GlyphStringLogClustersFieldInfo)] :: [(Symbol, *)]) #endif -- method GlyphString::new -- method type : Constructor -- Args: [] -- Lengths: [] -- returnType: Just -- (TInterface Name { namespace = "Pango" , name = "GlyphString" }) -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_new" pango_glyph_string_new :: IO (Ptr GlyphString) -- | Create a new t'GI.Pango.Structs.GlyphString.GlyphString'. glyphStringNew :: (B.CallStack.HasCallStack, MonadIO m) => m GlyphString -- ^ __Returns:__ the newly allocated t'GI.Pango.Structs.GlyphString.GlyphString', which -- should be freed with 'GI.Pango.Structs.GlyphString.glyphStringFree'. glyphStringNew = liftIO $ do result <- pango_glyph_string_new checkUnexpectedReturnNULL "glyphStringNew" result result' <- (wrapBoxed GlyphString) result return result' #if defined(ENABLE_OVERLOADING) #endif -- method GlyphString::copy -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "string" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString, may be %NULL" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Just -- (TInterface Name { namespace = "Pango" , name = "GlyphString" }) -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_copy" pango_glyph_string_copy :: Ptr GlyphString -> -- string : TInterface (Name {namespace = "Pango", name = "GlyphString"}) IO (Ptr GlyphString) -- | Copy a glyph string and associated storage. glyphStringCopy :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@string@/: a t'GI.Pango.Structs.GlyphString.GlyphString', may be 'P.Nothing' -> m (Maybe GlyphString) -- ^ __Returns:__ the newly allocated t'GI.Pango.Structs.GlyphString.GlyphString', -- which should be freed with 'GI.Pango.Structs.GlyphString.glyphStringFree', -- or 'P.Nothing' if /@string@/ was 'P.Nothing'. glyphStringCopy string = liftIO $ do string' <- unsafeManagedPtrGetPtr string result <- pango_glyph_string_copy string' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed GlyphString) result' return result'' touchManagedPtr string return maybeResult #if defined(ENABLE_OVERLOADING) data GlyphStringCopyMethodInfo instance (signature ~ (m (Maybe GlyphString)), MonadIO m) => O.MethodInfo GlyphStringCopyMethodInfo GlyphString signature where overloadedMethod = glyphStringCopy #endif -- method GlyphString::extents -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "glyphs" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "font" -- , argType = TInterface Name { namespace = "Pango" , name = "Font" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoFont" , sinceVersion = Nothing } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "ink_rect" -- , argType = -- TInterface Name { namespace = "Pango" , name = "Rectangle" } -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "rectangle used to store the extents of the glyph string\n as drawn or %NULL to indicate that the result is not needed." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = True -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "logical_rect" -- , argType = -- TInterface Name { namespace = "Pango" , name = "Rectangle" } -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "rectangle used to store the logical extents of the\n glyph string or %NULL to indicate that the result is not needed." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = True -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_extents" pango_glyph_string_extents :: Ptr GlyphString -> -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"}) Ptr Pango.Font.Font -> -- font : TInterface (Name {namespace = "Pango", name = "Font"}) Ptr Pango.Rectangle.Rectangle -> -- ink_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"}) Ptr Pango.Rectangle.Rectangle -> -- logical_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"}) IO () -- | Compute the logical and ink extents of a glyph string. See the documentation -- for 'GI.Pango.Objects.Font.fontGetGlyphExtents' for details about the interpretation -- of the rectangles. -- -- Examples of logical (red) and ink (green) rects: -- -- <<http://developer.gnome.org/pango/stable/rects1.png>> <<http://developer.gnome.org/pango/stable/rects2.png>> glyphStringExtents :: (B.CallStack.HasCallStack, MonadIO m, Pango.Font.IsFont a) => GlyphString -- ^ /@glyphs@/: a t'GI.Pango.Structs.GlyphString.GlyphString' -> a -- ^ /@font@/: a t'GI.Pango.Objects.Font.Font' -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle)) glyphStringExtents glyphs font = liftIO $ do glyphs' <- unsafeManagedPtrGetPtr glyphs font' <- unsafeManagedPtrCastPtr font inkRect <- callocBytes 16 :: IO (Ptr Pango.Rectangle.Rectangle) logicalRect <- callocBytes 16 :: IO (Ptr Pango.Rectangle.Rectangle) pango_glyph_string_extents glyphs' font' inkRect logicalRect inkRect' <- (wrapPtr Pango.Rectangle.Rectangle) inkRect logicalRect' <- (wrapPtr Pango.Rectangle.Rectangle) logicalRect touchManagedPtr glyphs touchManagedPtr font return (inkRect', logicalRect') #if defined(ENABLE_OVERLOADING) data GlyphStringExtentsMethodInfo instance (signature ~ (a -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle))), MonadIO m, Pango.Font.IsFont a) => O.MethodInfo GlyphStringExtentsMethodInfo GlyphString signature where overloadedMethod = glyphStringExtents #endif -- method GlyphString::extents_range -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "glyphs" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "start" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "start index" , sinceVersion = Nothing } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "end" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "end index (the range is the set of bytes with\n\t indices such that start <= index < end)" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "font" -- , argType = TInterface Name { namespace = "Pango" , name = "Font" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoFont" , sinceVersion = Nothing } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "ink_rect" -- , argType = -- TInterface Name { namespace = "Pango" , name = "Rectangle" } -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "rectangle used to\n store the extents of the glyph string range as drawn or\n %NULL to indicate that the result is not needed." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = True -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "logical_rect" -- , argType = -- TInterface Name { namespace = "Pango" , name = "Rectangle" } -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "rectangle used to\n store the logical extents of the glyph string range or\n %NULL to indicate that the result is not needed." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = True -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_extents_range" pango_glyph_string_extents_range :: Ptr GlyphString -> -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"}) Int32 -> -- start : TBasicType TInt Int32 -> -- end : TBasicType TInt Ptr Pango.Font.Font -> -- font : TInterface (Name {namespace = "Pango", name = "Font"}) Ptr Pango.Rectangle.Rectangle -> -- ink_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"}) Ptr Pango.Rectangle.Rectangle -> -- logical_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"}) IO () -- | Computes the extents of a sub-portion of a glyph string. The extents are -- relative to the start of the glyph string range (the origin of their -- coordinate system is at the start of the range, not at the start of the entire -- glyph string). glyphStringExtentsRange :: (B.CallStack.HasCallStack, MonadIO m, Pango.Font.IsFont a) => GlyphString -- ^ /@glyphs@/: a t'GI.Pango.Structs.GlyphString.GlyphString' -> Int32 -- ^ /@start@/: start index -> Int32 -- ^ /@end@/: end index (the range is the set of bytes with -- indices such that start \<= index \< end) -> a -- ^ /@font@/: a t'GI.Pango.Objects.Font.Font' -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle)) glyphStringExtentsRange glyphs start end font = liftIO $ do glyphs' <- unsafeManagedPtrGetPtr glyphs font' <- unsafeManagedPtrCastPtr font inkRect <- callocBytes 16 :: IO (Ptr Pango.Rectangle.Rectangle) logicalRect <- callocBytes 16 :: IO (Ptr Pango.Rectangle.Rectangle) pango_glyph_string_extents_range glyphs' start end font' inkRect logicalRect inkRect' <- (wrapPtr Pango.Rectangle.Rectangle) inkRect logicalRect' <- (wrapPtr Pango.Rectangle.Rectangle) logicalRect touchManagedPtr glyphs touchManagedPtr font return (inkRect', logicalRect') #if defined(ENABLE_OVERLOADING) data GlyphStringExtentsRangeMethodInfo instance (signature ~ (Int32 -> Int32 -> a -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle))), MonadIO m, Pango.Font.IsFont a) => O.MethodInfo GlyphStringExtentsRangeMethodInfo GlyphString signature where overloadedMethod = glyphStringExtentsRange #endif -- method GlyphString::free -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "string" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString, may be %NULL" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_free" pango_glyph_string_free :: Ptr GlyphString -> -- string : TInterface (Name {namespace = "Pango", name = "GlyphString"}) IO () -- | Free a glyph string and associated storage. glyphStringFree :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@string@/: a t'GI.Pango.Structs.GlyphString.GlyphString', may be 'P.Nothing' -> m () glyphStringFree string = liftIO $ do string' <- unsafeManagedPtrGetPtr string pango_glyph_string_free string' touchManagedPtr string return () #if defined(ENABLE_OVERLOADING) data GlyphStringFreeMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo GlyphStringFreeMethodInfo GlyphString signature where overloadedMethod = glyphStringFree #endif -- method GlyphString::get_logical_widths -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "glyphs" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "text" -- , argType = TBasicType TUTF8 -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the text corresponding to the glyphs" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "length" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the length of @text, in bytes" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "embedding_level" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the embedding level of the string" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "logical_widths" -- , argType = TCArray False (-1) (-1) (TBasicType TInt) -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "an array whose length is the number of\n characters in text (equal to g_utf8_strlen (text,\n length) unless text has NUL bytes) to be filled in\n with the resulting character widths." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_get_logical_widths" pango_glyph_string_get_logical_widths :: Ptr GlyphString -> -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"}) CString -> -- text : TBasicType TUTF8 Int32 -> -- length : TBasicType TInt Int32 -> -- embedding_level : TBasicType TInt Ptr Int32 -> -- logical_widths : TCArray False (-1) (-1) (TBasicType TInt) IO () -- | Given a t'GI.Pango.Structs.GlyphString.GlyphString' resulting from 'GI.Pango.Functions.shape' and the corresponding -- text, determine the screen width corresponding to each character. When -- multiple characters compose a single cluster, the width of the entire -- cluster is divided equally among the characters. -- -- See also 'GI.Pango.Structs.GlyphItem.glyphItemGetLogicalWidths'. glyphStringGetLogicalWidths :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@glyphs@/: a t'GI.Pango.Structs.GlyphString.GlyphString' -> T.Text -- ^ /@text@/: the text corresponding to the glyphs -> Int32 -- ^ /@length@/: the length of /@text@/, in bytes -> Int32 -- ^ /@embeddingLevel@/: the embedding level of the string -> [Int32] -- ^ /@logicalWidths@/: an array whose length is the number of -- characters in text (equal to g_utf8_strlen (text, -- length) unless text has NUL bytes) to be filled in -- with the resulting character widths. -> m () glyphStringGetLogicalWidths glyphs text length_ embeddingLevel logicalWidths = liftIO $ do glyphs' <- unsafeManagedPtrGetPtr glyphs text' <- textToCString text logicalWidths' <- packStorableArray logicalWidths pango_glyph_string_get_logical_widths glyphs' text' length_ embeddingLevel logicalWidths' touchManagedPtr glyphs freeMem text' freeMem logicalWidths' return () #if defined(ENABLE_OVERLOADING) data GlyphStringGetLogicalWidthsMethodInfo instance (signature ~ (T.Text -> Int32 -> Int32 -> [Int32] -> m ()), MonadIO m) => O.MethodInfo GlyphStringGetLogicalWidthsMethodInfo GlyphString signature where overloadedMethod = glyphStringGetLogicalWidths #endif -- method GlyphString::get_width -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "glyphs" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Just (TBasicType TInt) -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_get_width" pango_glyph_string_get_width :: Ptr GlyphString -> -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"}) IO Int32 -- | Computes the logical width of the glyph string as can also be computed -- using 'GI.Pango.Structs.GlyphString.glyphStringExtents'. However, since this only computes the -- width, it\'s much faster. This is in fact only a convenience function that -- computes the sum of geometry.width for each glyph in the /@glyphs@/. -- -- /Since: 1.14/ glyphStringGetWidth :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@glyphs@/: a t'GI.Pango.Structs.GlyphString.GlyphString' -> m Int32 -- ^ __Returns:__ the logical width of the glyph string. glyphStringGetWidth glyphs = liftIO $ do glyphs' <- unsafeManagedPtrGetPtr glyphs result <- pango_glyph_string_get_width glyphs' touchManagedPtr glyphs return result #if defined(ENABLE_OVERLOADING) data GlyphStringGetWidthMethodInfo instance (signature ~ (m Int32), MonadIO m) => O.MethodInfo GlyphStringGetWidthMethodInfo GlyphString signature where overloadedMethod = glyphStringGetWidth #endif -- method GlyphString::index_to_x -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "glyphs" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the glyphs return from pango_shape()" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "text" -- , argType = TBasicType TUTF8 -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the text for the run" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "length" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just "the number of bytes (not characters) in @text." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "analysis" -- , argType = -- TInterface Name { namespace = "Pango" , name = "Analysis" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just "the analysis information return from pango_itemize()" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "index_" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the byte index within @text" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "trailing" -- , argType = TBasicType TBoolean -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "whether we should compute the result for the beginning (%FALSE)\n or end (%TRUE) of the character." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "x_pos" -- , argType = TBasicType TInt -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "location to store result" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferEverything -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_index_to_x" pango_glyph_string_index_to_x :: Ptr GlyphString -> -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"}) CString -> -- text : TBasicType TUTF8 Int32 -> -- length : TBasicType TInt Ptr Pango.Analysis.Analysis -> -- analysis : TInterface (Name {namespace = "Pango", name = "Analysis"}) Int32 -> -- index_ : TBasicType TInt CInt -> -- trailing : TBasicType TBoolean Ptr Int32 -> -- x_pos : TBasicType TInt IO () -- | Converts from character position to x position. (X position -- is measured from the left edge of the run). Character positions -- are computed by dividing up each cluster into equal portions. glyphStringIndexToX :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@glyphs@/: the glyphs return from 'GI.Pango.Functions.shape' -> T.Text -- ^ /@text@/: the text for the run -> Int32 -- ^ /@length@/: the number of bytes (not characters) in /@text@/. -> Pango.Analysis.Analysis -- ^ /@analysis@/: the analysis information return from 'GI.Pango.Functions.itemize' -> Int32 -- ^ /@index_@/: the byte index within /@text@/ -> Bool -- ^ /@trailing@/: whether we should compute the result for the beginning ('P.False') -- or end ('P.True') of the character. -> m (Int32) glyphStringIndexToX glyphs text length_ analysis index_ trailing = liftIO $ do glyphs' <- unsafeManagedPtrGetPtr glyphs text' <- textToCString text analysis' <- unsafeManagedPtrGetPtr analysis let trailing' = (fromIntegral . fromEnum) trailing xPos <- allocMem :: IO (Ptr Int32) pango_glyph_string_index_to_x glyphs' text' length_ analysis' index_ trailing' xPos xPos' <- peek xPos touchManagedPtr glyphs touchManagedPtr analysis freeMem text' freeMem xPos return xPos' #if defined(ENABLE_OVERLOADING) data GlyphStringIndexToXMethodInfo instance (signature ~ (T.Text -> Int32 -> Pango.Analysis.Analysis -> Int32 -> Bool -> m (Int32)), MonadIO m) => O.MethodInfo GlyphStringIndexToXMethodInfo GlyphString signature where overloadedMethod = glyphStringIndexToX #endif -- method GlyphString::set_size -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "string" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "a #PangoGlyphString." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "new_len" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the new length of the string." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_set_size" pango_glyph_string_set_size :: Ptr GlyphString -> -- string : TInterface (Name {namespace = "Pango", name = "GlyphString"}) Int32 -> -- new_len : TBasicType TInt IO () -- | Resize a glyph string to the given length. glyphStringSetSize :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@string@/: a t'GI.Pango.Structs.GlyphString.GlyphString'. -> Int32 -- ^ /@newLen@/: the new length of the string. -> m () glyphStringSetSize string newLen = liftIO $ do string' <- unsafeManagedPtrGetPtr string pango_glyph_string_set_size string' newLen touchManagedPtr string return () #if defined(ENABLE_OVERLOADING) data GlyphStringSetSizeMethodInfo instance (signature ~ (Int32 -> m ()), MonadIO m) => O.MethodInfo GlyphStringSetSizeMethodInfo GlyphString signature where overloadedMethod = glyphStringSetSize #endif -- method GlyphString::x_to_index -- method type : OrdinaryMethod -- Args: [ Arg -- { argCName = "glyphs" -- , argType = -- TInterface Name { namespace = "Pango" , name = "GlyphString" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the glyphs returned from pango_shape()" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "text" -- , argType = TBasicType TUTF8 -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the text for the run" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "length" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the number of bytes (not characters) in text." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "analysis" -- , argType = -- TInterface Name { namespace = "Pango" , name = "Analysis" } -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just "the analysis information return from pango_itemize()" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "x_pos" -- , argType = TBasicType TInt -- , direction = DirectionIn -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = Just "the x offset (in Pango units)" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferNothing -- } -- , Arg -- { argCName = "index_" -- , argType = TBasicType TInt -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just "location to store calculated byte index within @text" -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferEverything -- } -- , Arg -- { argCName = "trailing" -- , argType = TBasicType TInt -- , direction = DirectionOut -- , mayBeNull = False -- , argDoc = -- Documentation -- { rawDocText = -- Just -- "location to store a boolean indicating\n whether the user clicked on the leading or trailing\n edge of the character." -- , sinceVersion = Nothing -- } -- , argScope = ScopeTypeInvalid -- , argClosure = -1 -- , argDestroy = -1 -- , argCallerAllocates = False -- , transfer = TransferEverything -- } -- ] -- Lengths: [] -- returnType: Nothing -- throws : False -- Skip return : False foreign import ccall "pango_glyph_string_x_to_index" pango_glyph_string_x_to_index :: Ptr GlyphString -> -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"}) CString -> -- text : TBasicType TUTF8 Int32 -> -- length : TBasicType TInt Ptr Pango.Analysis.Analysis -> -- analysis : TInterface (Name {namespace = "Pango", name = "Analysis"}) Int32 -> -- x_pos : TBasicType TInt Ptr Int32 -> -- index_ : TBasicType TInt Ptr Int32 -> -- trailing : TBasicType TInt IO () -- | Convert from x offset to character position. Character positions -- are computed by dividing up each cluster into equal portions. -- In scripts where positioning within a cluster is not allowed -- (such as Thai), the returned value may not be a valid cursor -- position; the caller must combine the result with the logical -- attributes for the text to compute the valid cursor position. glyphStringXToIndex :: (B.CallStack.HasCallStack, MonadIO m) => GlyphString -- ^ /@glyphs@/: the glyphs returned from 'GI.Pango.Functions.shape' -> T.Text -- ^ /@text@/: the text for the run -> Int32 -- ^ /@length@/: the number of bytes (not characters) in text. -> Pango.Analysis.Analysis -- ^ /@analysis@/: the analysis information return from 'GI.Pango.Functions.itemize' -> Int32 -- ^ /@xPos@/: the x offset (in Pango units) -> m ((Int32, Int32)) glyphStringXToIndex glyphs text length_ analysis xPos = liftIO $ do glyphs' <- unsafeManagedPtrGetPtr glyphs text' <- textToCString text analysis' <- unsafeManagedPtrGetPtr analysis index_ <- allocMem :: IO (Ptr Int32) trailing <- allocMem :: IO (Ptr Int32) pango_glyph_string_x_to_index glyphs' text' length_ analysis' xPos index_ trailing index_' <- peek index_ trailing' <- peek trailing touchManagedPtr glyphs touchManagedPtr analysis freeMem text' freeMem index_ freeMem trailing return (index_', trailing') #if defined(ENABLE_OVERLOADING) data GlyphStringXToIndexMethodInfo instance (signature ~ (T.Text -> Int32 -> Pango.Analysis.Analysis -> Int32 -> m ((Int32, Int32))), MonadIO m) => O.MethodInfo GlyphStringXToIndexMethodInfo GlyphString signature where overloadedMethod = glyphStringXToIndex #endif #if defined(ENABLE_OVERLOADING) type family ResolveGlyphStringMethod (t :: Symbol) (o :: *) :: * where ResolveGlyphStringMethod "copy" o = GlyphStringCopyMethodInfo ResolveGlyphStringMethod "extents" o = GlyphStringExtentsMethodInfo ResolveGlyphStringMethod "extentsRange" o = GlyphStringExtentsRangeMethodInfo ResolveGlyphStringMethod "free" o = GlyphStringFreeMethodInfo ResolveGlyphStringMethod "indexToX" o = GlyphStringIndexToXMethodInfo ResolveGlyphStringMethod "xToIndex" o = GlyphStringXToIndexMethodInfo ResolveGlyphStringMethod "getLogicalWidths" o = GlyphStringGetLogicalWidthsMethodInfo ResolveGlyphStringMethod "getWidth" o = GlyphStringGetWidthMethodInfo ResolveGlyphStringMethod "setSize" o = GlyphStringSetSizeMethodInfo ResolveGlyphStringMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveGlyphStringMethod t GlyphString, O.MethodInfo info GlyphString p) => OL.IsLabel t (GlyphString -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod @info #else fromLabel _ = O.overloadedMethod @info #endif #endif