{-# 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 ()