clutterhs-0.1: Graphics/UI/Clutter/Clone.chs
-- -*-haskell-*-
-- Clutter Clone
--
-- Author : Matthew Arsenault
--
-- Created: 2 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 #-}
#include <clutter/clutter.h>
{# context lib="clutter" prefix="clutter" #}
-- | ClutterClone — An actor that displays a clone of a source actor
module Graphics.UI.Clutter.Clone (
-- * Description
--
-- | 'Clone' is an Actor which draws with the paint function of
-- another actor, scaled to fit its own allocation.
--
-- 'Clone' can be used to efficiently clone any other actor.
--
-- * Note
--
-- This is different from 'textureNewFromActor' which requires support
-- for FBOs in the underlying GL implementation.
--
-- 'Clone' is available since Clutter 1.0
--
-- * Class Hierarchy
-- |
-- @
-- | 'GObject'
-- | +----'Actor'
-- | +----'Clone'
-- @
--
-- * Types
Clone,
-- * Constructors
cloneNew,
-- * Methods
cloneSetSource,
cloneGetSource,
-- * Attributes
cloneSource
) where
{# import Graphics.UI.Clutter.Types #}
{# import qualified Graphics.UI.Clutter.GTypes #} as CGT
{# import Graphics.UI.Clutter.Utility #}
import C2HS
import Control.Monad (liftM)
import System.Glib.Attributes
import System.Glib.Properties
-- | Creates a new 'Actor' which clones 'source'
--
-- [@source@] @Just@ an Actor, or @Nothing@
--
-- [@Returns@] the newly created 'Clone'
--
-- * Since 1.0
--
cloneNew :: (ActorClass a) => Maybe a -> IO (Clone a)
cloneNew actor = withMaybeActorClass actor $ \actorPtr ->
liftM (mkClone (undefined::a))
(newCloneRaw =<< {# call unsafe clone_new #} actorPtr)
-- | Sets source as the source actor to be cloned by clone.
--
-- [@clone@] a 'Clone'
--
-- [@source@] @Just@ an Actor, or @Nothing@
--
-- * Since 1.0
--
{# fun unsafe clone_set_source as ^ `(ActorClass a)' =>
{ withClone* `Clone a', withMaybeActorClass* `Maybe a' } -> `()' #}
-- | Retrieves the source 'Actor' being cloned by clone
--
-- [@clone@] a 'Clone'
--
-- [@Returns@] the actor source for the clone.
--
-- * Since 1.0
--
cloneGetSource :: (ActorClass a) => Clone a -> IO (Maybe a)
cloneGetSource clone = withClone clone $ \clonePtr ->
liftM (liftM unsafeCastActor)
(maybeNewActor =<< {# call unsafe clone_get_source #} clonePtr)
-- | This property specifies the source actor being cloned.
--
-- * Since 1.0
--
cloneSource :: (ActorClass a) => Attr (Clone a) (Maybe a)
cloneSource = newNamedAttr "source" cloneGetSource cloneSetSource