clutterhs-0.1: Graphics/UI/Clutter/BehaviourPath.chs
-- -*-haskell-*-
-- Clutter BehaviourPath
--
-- Author : Matthew Arsenault
--
-- Created: 13 Oct 2009
--
-- Copyright (C) 2009 Matthew Arsenault
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 3 of the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
{-# LANGUAGE ForeignFunctionInterface, TypeSynonymInstances #-}
#include <clutter/clutter.h>
{# context lib="clutter" prefix="clutter" #}
module Graphics.UI.Clutter.BehaviourPath (
-- |
-- @
-- | 'GObject'
-- | +----'Behaviour'
-- | +----'BehaviourPath'
-- |
-- @
-- * Types
BehaviourPath,
BehaviourPathClass,
Knot,
-- * Constructors
behaviourPathNew,
behaviourPathNewWithDescription,
behaviourPathNewWithKnots,
-- * Methods
behaviourPathSetPath,
behaviourPathGetPath,
-- * Attributes
behaviourPathPath,
-- * Signals
onKnotReached,
afterKnotReached,
knotReached
--knotCopy, --not needed
--knotFree,
--knotEqual
) where
{# import Graphics.UI.Clutter.Types #}
{# import Graphics.UI.Clutter.Signals #}
import C2HS
import System.Glib.Attributes
{# fun unsafe behaviour_path_new as ^
{ withAlpha* `Alpha', withPath* `Path' } -> `BehaviourPath' newBehaviourPath* #}
{# fun unsafe behaviour_path_new_with_description as ^
{ withAlpha* `Alpha', `String' } -> `BehaviourPath' newBehaviourPath* #}
--CHECKME: Again, why the casting from Ptr Knot to Ptr ()
behaviourPathNewWithKnots :: Alpha -> [Knot] -> IO BehaviourPath
behaviourPathNewWithKnots alp knots = let func = {# call unsafe behaviour_path_new_with_knots #}
in withAlpha alp $ \aptr ->
withArrayLen knots $ \len knotptr ->
newBehaviourPath =<< func aptr (castPtr knotptr) (cIntConv len)
{# fun unsafe behaviour_path_set_path as ^
{ withBehaviourPath* `BehaviourPath', withPath* `Path'} -> `()' #}
{# fun unsafe behaviour_path_get_path as ^
{ withBehaviourPath* `BehaviourPath' } -> `Path' newPath* #}
-- Attributes
behaviourPathPath :: Attr BehaviourPath Path
behaviourPathPath = newNamedAttr "path" behaviourPathGetPath behaviourPathSetPath
onKnotReached, afterKnotReached :: BehaviourPath -> (Word -> IO ()) -> IO (ConnectId BehaviourPath)
onKnotReached = connect_WORD__NONE "knot_reached" False
afterKnotReached = connect_WORD__NONE "knot_reached" True
-- | This signal is emitted each time a node defined inside the path
-- is reached.
--
-- [@knot_num@] the index of the 'PathKnot' reached
--
-- * Since 0.2
--
knotReached :: Signal BehaviourPath (Word -> IO ())
knotReached = Signal (connect_WORD__NONE "knot_reached")