{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) A 'GI.Gdk.Structs.TimeCoord.TimeCoord' stores a single event in a motion history. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gdk.Structs.TimeCoord ( -- * Exported types TimeCoord(..) , newZeroTimeCoord , noTimeCoord , -- * Properties -- ** time #attr:time# {- | The timestamp for this event. -} getTimeCoordTime , setTimeCoordTime , #if ENABLE_OVERLOADING timeCoord_time , #endif ) 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 TimeCoord = TimeCoord (ManagedPtr TimeCoord) instance WrappedPtr TimeCoord where wrappedPtrCalloc = callocBytes 1032 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 1032 >=> wrapPtr TimeCoord) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `TimeCoord` struct initialized to zero. newZeroTimeCoord :: MonadIO m => m TimeCoord newZeroTimeCoord = liftIO $ wrappedPtrCalloc >>= wrapPtr TimeCoord instance tag ~ 'AttrSet => Constructible TimeCoord tag where new _ attrs = do o <- newZeroTimeCoord GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `TimeCoord`. noTimeCoord :: Maybe TimeCoord noTimeCoord = Nothing {- | Get the value of the “@time@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' timeCoord #time @ -} getTimeCoordTime :: MonadIO m => TimeCoord -> m Word32 getTimeCoordTime s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO Word32 return val {- | Set the value of the “@time@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' timeCoord [ #time 'Data.GI.Base.Attributes.:=' value ] @ -} setTimeCoordTime :: MonadIO m => TimeCoord -> Word32 -> m () setTimeCoordTime s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Word32) #if ENABLE_OVERLOADING data TimeCoordTimeFieldInfo instance AttrInfo TimeCoordTimeFieldInfo where type AttrAllowedOps TimeCoordTimeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint TimeCoordTimeFieldInfo = (~) Word32 type AttrBaseTypeConstraint TimeCoordTimeFieldInfo = (~) TimeCoord type AttrGetType TimeCoordTimeFieldInfo = Word32 type AttrLabel TimeCoordTimeFieldInfo = "time" type AttrOrigin TimeCoordTimeFieldInfo = TimeCoord attrGet _ = getTimeCoordTime attrSet _ = setTimeCoordTime attrConstruct = undefined attrClear _ = undefined timeCoord_time :: AttrLabelProxy "time" timeCoord_time = AttrLabelProxy #endif -- XXX Skipped attribute for "TimeCoord:axes" :: Not implemented: "Don't know how to unpack C array of type TCArray False 128 (-1) (TBasicType TDouble)" #if ENABLE_OVERLOADING instance O.HasAttributeList TimeCoord type instance O.AttributeList TimeCoord = TimeCoordAttributeList type TimeCoordAttributeList = ('[ '("time", TimeCoordTimeFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveTimeCoordMethod (t :: Symbol) (o :: *) :: * where ResolveTimeCoordMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveTimeCoordMethod t TimeCoord, O.MethodInfo info TimeCoord p) => OL.IsLabel t (TimeCoord -> 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