{- | 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.Structs.AttrFloat.AttrFloat' structure is used to represent attributes with a float or double value. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Pango.Structs.AttrFloat ( -- * Exported types AttrFloat(..) , newZeroAttrFloat , noAttrFloat , -- * Properties -- ** attr #attr:attr# {- | the common portion of the attribute -} #if ENABLE_OVERLOADING attrFloat_attr , #endif getAttrFloatAttr , -- ** value #attr:value# {- | the value of the attribute -} #if ENABLE_OVERLOADING attrFloat_value , #endif getAttrFloatValue , setAttrFloatValue , ) 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 {-# SOURCE #-} qualified GI.Pango.Structs.Attribute as Pango.Attribute -- | Memory-managed wrapper type. newtype AttrFloat = AttrFloat (ManagedPtr AttrFloat) instance WrappedPtr AttrFloat where wrappedPtrCalloc = callocBytes 24 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 24 >=> wrapPtr AttrFloat) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `AttrFloat` struct initialized to zero. newZeroAttrFloat :: MonadIO m => m AttrFloat newZeroAttrFloat = liftIO $ wrappedPtrCalloc >>= wrapPtr AttrFloat instance tag ~ 'AttrSet => Constructible AttrFloat tag where new _ attrs = do o <- newZeroAttrFloat GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `AttrFloat`. noAttrFloat :: Maybe AttrFloat noAttrFloat = Nothing {- | Get the value of the “@attr@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' attrFloat #attr @ -} getAttrFloatAttr :: MonadIO m => AttrFloat -> m Pango.Attribute.Attribute getAttrFloatAttr s = liftIO $ withManagedPtr s $ \ptr -> do let val = ptr `plusPtr` 0 :: (Ptr Pango.Attribute.Attribute) val' <- (newPtr Pango.Attribute.Attribute) val return val' #if ENABLE_OVERLOADING data AttrFloatAttrFieldInfo instance AttrInfo AttrFloatAttrFieldInfo where type AttrAllowedOps AttrFloatAttrFieldInfo = '[ 'AttrGet] type AttrSetTypeConstraint AttrFloatAttrFieldInfo = (~) (Ptr Pango.Attribute.Attribute) type AttrBaseTypeConstraint AttrFloatAttrFieldInfo = (~) AttrFloat type AttrGetType AttrFloatAttrFieldInfo = Pango.Attribute.Attribute type AttrLabel AttrFloatAttrFieldInfo = "attr" type AttrOrigin AttrFloatAttrFieldInfo = AttrFloat attrGet _ = getAttrFloatAttr attrSet _ = undefined attrConstruct = undefined attrClear _ = undefined attrFloat_attr :: AttrLabelProxy "attr" attrFloat_attr = AttrLabelProxy #endif {- | Get the value of the “@value@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' attrFloat #value @ -} getAttrFloatValue :: MonadIO m => AttrFloat -> m Double getAttrFloatValue s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO CDouble let val' = realToFrac val return val' {- | Set the value of the “@value@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' attrFloat [ #value 'Data.GI.Base.Attributes.:=' value ] @ -} setAttrFloatValue :: MonadIO m => AttrFloat -> Double -> m () setAttrFloatValue s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 16) (val' :: CDouble) #if ENABLE_OVERLOADING data AttrFloatValueFieldInfo instance AttrInfo AttrFloatValueFieldInfo where type AttrAllowedOps AttrFloatValueFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AttrFloatValueFieldInfo = (~) Double type AttrBaseTypeConstraint AttrFloatValueFieldInfo = (~) AttrFloat type AttrGetType AttrFloatValueFieldInfo = Double type AttrLabel AttrFloatValueFieldInfo = "value" type AttrOrigin AttrFloatValueFieldInfo = AttrFloat attrGet _ = getAttrFloatValue attrSet _ = setAttrFloatValue attrConstruct = undefined attrClear _ = undefined attrFloat_value :: AttrLabelProxy "value" attrFloat_value = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList AttrFloat type instance O.AttributeList AttrFloat = AttrFloatAttributeList type AttrFloatAttributeList = ('[ '("attr", AttrFloatAttrFieldInfo), '("value", AttrFloatValueFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveAttrFloatMethod (t :: Symbol) (o :: *) :: * where ResolveAttrFloatMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveAttrFloatMethod t AttrFloat, O.MethodInfo info AttrFloat p) => OL.IsLabel t (AttrFloat -> 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