{- | 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 PangoGlyphVisAttr is used to communicate information between the shaping phase and the rendering phase. More attributes may be added in the future. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Pango.Structs.GlyphVisAttr ( -- * Exported types GlyphVisAttr(..) , newZeroGlyphVisAttr , noGlyphVisAttr , -- * Properties -- ** isClusterStart #attr:isClusterStart# {- | set for the first logical glyph in each cluster. (Clusters are stored in visual order, within the cluster, glyphs are always ordered in logical order, since visual order is meaningless; that is, in Arabic text, accent glyphs follow the glyphs for the base character.) -} getGlyphVisAttrIsClusterStart , #if ENABLE_OVERLOADING glyphVisAttr_isClusterStart , #endif setGlyphVisAttrIsClusterStart , ) 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 -- | Memory-managed wrapper type. newtype GlyphVisAttr = GlyphVisAttr (ManagedPtr GlyphVisAttr) instance WrappedPtr GlyphVisAttr where wrappedPtrCalloc = callocBytes 4 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 4 >=> wrapPtr GlyphVisAttr) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `GlyphVisAttr` struct initialized to zero. newZeroGlyphVisAttr :: MonadIO m => m GlyphVisAttr newZeroGlyphVisAttr = liftIO $ wrappedPtrCalloc >>= wrapPtr GlyphVisAttr instance tag ~ 'AttrSet => Constructible GlyphVisAttr tag where new _ attrs = do o <- newZeroGlyphVisAttr GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `GlyphVisAttr`. noGlyphVisAttr :: Maybe GlyphVisAttr noGlyphVisAttr = Nothing {- | Get the value of the “@is_cluster_start@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' glyphVisAttr #isClusterStart @ -} getGlyphVisAttrIsClusterStart :: MonadIO m => GlyphVisAttr -> m Word32 getGlyphVisAttrIsClusterStart s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO Word32 return val {- | Set the value of the “@is_cluster_start@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' glyphVisAttr [ #isClusterStart 'Data.GI.Base.Attributes.:=' value ] @ -} setGlyphVisAttrIsClusterStart :: MonadIO m => GlyphVisAttr -> Word32 -> m () setGlyphVisAttrIsClusterStart s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Word32) #if ENABLE_OVERLOADING data GlyphVisAttrIsClusterStartFieldInfo instance AttrInfo GlyphVisAttrIsClusterStartFieldInfo where type AttrAllowedOps GlyphVisAttrIsClusterStartFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint GlyphVisAttrIsClusterStartFieldInfo = (~) Word32 type AttrBaseTypeConstraint GlyphVisAttrIsClusterStartFieldInfo = (~) GlyphVisAttr type AttrGetType GlyphVisAttrIsClusterStartFieldInfo = Word32 type AttrLabel GlyphVisAttrIsClusterStartFieldInfo = "is_cluster_start" type AttrOrigin GlyphVisAttrIsClusterStartFieldInfo = GlyphVisAttr attrGet _ = getGlyphVisAttrIsClusterStart attrSet _ = setGlyphVisAttrIsClusterStart attrConstruct = undefined attrClear _ = undefined glyphVisAttr_isClusterStart :: AttrLabelProxy "isClusterStart" glyphVisAttr_isClusterStart = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList GlyphVisAttr type instance O.AttributeList GlyphVisAttr = GlyphVisAttrAttributeList type GlyphVisAttrAttributeList = ('[ '("isClusterStart", GlyphVisAttrIsClusterStartFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveGlyphVisAttrMethod (t :: Symbol) (o :: *) :: * where ResolveGlyphVisAttrMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveGlyphVisAttrMethod t GlyphVisAttr, O.MethodInfo info GlyphVisAttr p) => OL.IsLabel t (GlyphVisAttr -> 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