gegl-0.0.0.5: src/GEGL/FFI/Buffer.hs
{-# LANGUAGE ForeignFunctionInterface #-}
-- | FFI moule for managing and manipulating buffers
module GEGL.FFI.Buffer
( GeglBuffer(..)
, GeglBufferDummy
, c_gegl_buffer_new
, c_gegl_buffer_new_for_backend
, c_gegl_buffer_open
, c_gegl_buffer_save
, c_gegl_buffer_load
, c_gegl_buffer_flush
, c_gegl_buffer_create_sub_buffer
, c_gegl_buffer_get_extent
, c_gegl_buffer_set_extent
, c_gegl_buffer_set_color
, c_gegl_buffer_set_pattern
, c_gegl_buffer_clear
, c_gegl_buffer_get
) where
import Foreign
import Foreign.C.Types
import Foreign.C.String
import Foreign.Ptr
import Foreign.ForeignPtr
import GEGL.FFI.Rectangle (GeglRectangle)
import GEGL.FFI.Color (GeglColorDummy)
import BABL.FFI.Format (BablFormatDummy)
-- | Pointer holding a buffer. Never peek or poke it.
type GeglBufferDummy = ForeignPtr ()
-- | Outward representation of the buffer.
data GeglBuffer = GeglBuffer GeglBufferDummy
-- | Interface to the @gegl_buffer_new@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_new"
c_gegl_buffer_new
:: Ptr GeglRectangle -- ^ Buffer geometry
-> BablFormatDummy -- ^ Color format
-> IO (Ptr()) -- ^ New buffer
-- | Interface to the @gegl_buffer_new_for_backend@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_new_for_backend"
c_gegl_buffer_new_for_backend
:: Ptr GeglRectangle -- ^ Buffer geometry
-> Ptr a -- ^ The backend
-> IO (Ptr()) -- ^ New buffer
-- | Interace to the @gegl_buffer_open@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_open"
c_gegl_buffer_open
:: CString -- Path to buffer on disc
-> IO (Ptr ()) -- The buffer
-- | Interface to the @gegl_buffer_save@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_save"
c_gegl_buffer_save
:: Ptr ()
-> CString
-> Ptr GeglRectangle
-> IO ()
-- | Interface to the @gegl_buffer_load@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_load"
c_gegl_buffer_load
:: CString
-> IO (Ptr ())
-- | Interface to the @gegl_buffer_flush@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_flush"
c_gegl_buffer_flush
:: Ptr ()
-> IO ()
-- | Interface to the @gegl_buffer_create_sub_buffer@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_create_sub_buffer"
c_gegl_buffer_create_sub_buffer
:: Ptr ()
-> Ptr GeglRectangle
-> IO (Ptr ())
-- | Interface to the @gegl_buffer_get_extent@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_get_extent"
c_gegl_buffer_get_extent
:: Ptr ()
-> IO (Ptr GeglRectangle)
-- | Interface to the @gegl_buffer_set_extent@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_set_extent"
c_gegl_buffer_set_extent
:: Ptr () -- ^ A buffer
-> Ptr GeglRectangle -- ^ Geometry
-> IO Bool -- ^ Returns True on success
-- | Interface to the @gegl_buffer_set_color@ funciton in C.
foreign import ccall unsafe "gegl.h gegl_buffer_set_color"
c_gegl_buffer_set_color
:: Ptr () -- ^ The buffer
-> Ptr GeglRectangle -- ^ Rectangular region to fill
-> GeglColorDummy -- ^ The colour to fill with.
-> IO ()
-- | Interface to the @gegl_bufer_set_pattern@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_set_pattern"
c_gegl_buffer_set_pattern
:: Ptr () -- ^ The target buffer
-> Ptr GeglRectangle -- ^ rectangular region to fill
-> (Ptr()) -- ^ A buffer to be repeated as pattern
-> CDouble -- ^ X offset
-> CDouble -- ^ Y offset
-> IO ()
-- | Interface to the @gegl_buffer_clear@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_clear"
c_gegl_buffer_clear
:: Ptr () -- ^ The target buffer
-> Ptr GeglRectangle -- ^ Region to clear
-> IO ()
-- | Interface to the @gegl_bufer_get@ function in C.
foreign import ccall unsafe "gegl.h gegl_buffer_get"
c_gegl_buffer_get
:: Ptr () -- ^ Buffer to retrieve data from
-> Ptr GeglRectangle -- ^ Coordinates to retrieve from
-> CDouble -- ^ Sampling scale
-> BablFormatDummy -- ^ 'BablFormat' to store the data in
-> Ptr a -- ^ Memory destination
-> CInt -- ^ Rowstride in bytes or 0 to compute it from format
-> CInt -- ^ Repeat mode
-> IO ()