diff options
| author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-08-07 11:28:35 -0400 | 
|---|---|---|
| committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-08-07 11:28:35 -0400 | 
| commit | 5fa534b942cdb96908cfa6faa0a84dcf10008def (patch) | |
| tree | a9a5b32801f9761675d6adb0f191f72079f91c87 /src | |
| parent | 2d2a68c4d00ed77483ae17607f0613b4a8188d0e (diff) | |
Wrap GeglBuffer in struct.
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 49 | 
1 files changed, 37 insertions, 12 deletions
| diff --git a/src/main.rs b/src/main.rs index d6d685c..1073a08 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,32 @@ use glib::translate::*;  use glib::Value;  use gobject_ffi::G_TYPE_POINTER; +pub struct GeglBuffer(*mut libc::c_void); + +impl GeglBuffer { +    pub fn new() -> GeglBuffer { +        GeglBuffer(unsafe { +            gegl_buffer_new(ptr::null_mut(), ptr::null_mut()) }) +    } + +    pub fn get_value(&self) -> Value { +        unsafe { +            let mut ret = Value::uninitialized(); +            gobject_ffi::g_value_init(ret.to_glib_none_mut().0, G_TYPE_POINTER); +            gobject_ffi::g_value_set_pointer(ret.to_glib_none_mut().0, +                                            self.0); +            ret +        } +    } +} + +impl Drop for GeglBuffer { +    fn drop(&mut self) { +        println!("Dropping geglbuffer"); +        unsafe { g_object_unref(self.0); } +        println!("Dropped"); +    } +}  #[link(name="gegl-0.3")]  extern { @@ -50,7 +76,7 @@ fn main() {          //         as *const libc::c_void);          // gegl_node_link(src, sink);          // let mut buffer : *mut libc::c_void = ptr::null_mut(); -        let mut buffer = gegl_buffer_new(ptr::null_mut(), ptr::null_mut()); +        let buffer = gegl_buffer_new(ptr::null_mut(), ptr::null_mut());          let sink = gegl_node_create_child(graph,                                            CString::new("gegl:buffer-sink")                                            .unwrap().as_ptr()); @@ -58,18 +84,17 @@ fn main() {          //     sink,          //     CString::new("buffer").unwrap().as_ptr(),          //     Value::from(buffer).to_glib_none().0); -        let mut ret = Value::uninitialized(); -        gobject_ffi::g_value_init(ret.to_glib_none_mut().0, G_TYPE_POINTER); -        gobject_ffi::g_value_set_pointer(ret.to_glib_none_mut().0, -                                         buffer); - -        gegl_node_set_property( -            sink, -            CString::new("buffer").unwrap().as_ptr(), -            ret.to_glib_none_mut().0 as *mut libc::c_void); +        { +            let buffer = GeglBuffer::new(); +            println!("buffer: {:?}", buffer.get_value()); +            gegl_node_set_property( +                sink, +                CString::new("buffer").unwrap().as_ptr(), +                buffer.get_value().to_glib_none().0 as *mut libc::c_void); -        gegl_node_link(src, sink); -        gegl_node_process(sink); +            gegl_node_link(src, sink); +            gegl_node_process(sink); +        }          g_object_unref(graph);          gegl_exit();      } | 
