packages feed

gi-gdk-0.3.18.15: GI/Gdk/Structs/TimeCoord.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

A #GdkTimeCoord stores a single event in a motion history.
-}

module GI.Gdk.Structs.TimeCoord
    ( 

-- * Exported types
    TimeCoord(..)                           ,
    newZeroTimeCoord                        ,
    noTimeCoord                             ,


 -- * Properties
-- ** Time
    timeCoordReadTime                       ,
    timeCoordTime                           ,
    timeCoordWriteTime                      ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gdk.Types
import GI.Gdk.Callbacks

newtype TimeCoord = TimeCoord (ForeignPtr TimeCoord)
instance WrappedPtr TimeCoord where
    wrappedPtrCalloc = callocBytes 1032
    wrappedPtrCopy = copyPtr 1032
    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


noTimeCoord :: Maybe TimeCoord
noTimeCoord = Nothing

timeCoordReadTime :: MonadIO m => TimeCoord -> m Word32
timeCoordReadTime s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val

timeCoordWriteTime :: MonadIO m => TimeCoord -> Word32 -> m ()
timeCoordWriteTime s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Word32)

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"
    attrGet _ = timeCoordReadTime
    attrSet _ = timeCoordWriteTime
    attrConstruct = undefined
    attrClear _ = undefined

timeCoordTime :: AttrLabelProxy "time"
timeCoordTime = AttrLabelProxy


-- XXX Skipped attribute for "TimeCoord:axes" :: Not implemented: "Don't know how to unpack C array of type TCArray False 128 (-1) (TBasicType TDouble)"

type instance AttributeList TimeCoord = TimeCoordAttributeList
type TimeCoordAttributeList = ('[ '("time", TimeCoordTimeFieldInfo)] :: [(Symbol, *)])

type family ResolveTimeCoordMethod (t :: Symbol) (o :: *) :: * where
    ResolveTimeCoordMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveTimeCoordMethod t TimeCoord, MethodInfo info TimeCoord p) => IsLabelProxy t (TimeCoord -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveTimeCoordMethod t TimeCoord, MethodInfo info TimeCoord p) => IsLabel t (TimeCoord -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif