module GEGL.Reparent
( gegl_node_add_child
, gegl_node_remove_child
, gegl_node_get_parent
)
where
import qualified GEGL.FFI.Reparent as FFI
import qualified GEGL.FFI.Node as FFI
import System.Glib.GObject (objectUnref)
import Foreign.Ptr (nullPtr)
import Foreign.ForeignPtr (newForeignPtr, withForeignPtr)
gegl_node_add_child
:: FFI.GeglNode
-> FFI.GeglNode
-> IO FFI.GeglNode
gegl_node_add_child (FFI.GeglNode fgraph) (FFI.GeglNode fchild) =
FFI.GeglNode <$> (newForeignPtr objectUnref =<<
withForeignPtr fgraph (\graph ->
withForeignPtr fchild (\child ->
FFI.c_gegl_node_add_child graph child)))
gegl_node_remove_child
:: FFI.GeglNode
-> FFI.GeglNode
-> IO FFI.GeglNode
gegl_node_remove_child (FFI.GeglNode fgraph) (FFI.GeglNode fchild) =
FFI.GeglNode <$> (newForeignPtr objectUnref =<<
withForeignPtr fgraph (\graph ->
withForeignPtr fchild (\child ->
FFI.c_gegl_node_remove_child graph child)))
gegl_node_get_parent
:: FFI.GeglNode
-> IO (Maybe FFI.GeglNode)
gegl_node_get_parent (FFI.GeglNode fnode) = do
ptr <- withForeignPtr fnode (\node -> FFI.c_gegl_node_get_parent node)
if ptr == nullPtr
then return Nothing
else Just <$> FFI.GeglNode <$> newForeignPtr objectUnref ptr