diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 80 | 
1 files changed, 50 insertions, 30 deletions
| diff --git a/src/main.rs b/src/main.rs index 1073a08..27f3bc6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,12 +8,25 @@ use glib::translate::*;  use glib::Value;  use gobject_ffi::G_TYPE_POINTER; +#[derive(Debug)]  pub struct GeglBuffer(*mut libc::c_void); +#[repr(C)] +#[derive(Debug)] +struct GeglRectangle { +    x: i32, +    y: i32, +    width: i32, +    height: i32, +} +  impl GeglBuffer {      pub fn new() -> GeglBuffer { -        GeglBuffer(unsafe { -            gegl_buffer_new(ptr::null_mut(), ptr::null_mut()) }) +        GeglBuffer(ptr::null_mut()) +        // let mut bounds = GeglRectangle{x: 0, y: 0, width: 32, height: 32}; +        // GeglBuffer(unsafe { +        //     gegl_buffer_new(&mut bounds as *mut _ as *mut libc::c_void, +        //                     ptr::null_mut()) })      }      pub fn get_value(&self) -> Value { @@ -21,7 +34,17 @@ impl GeglBuffer {              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); +                                             self.0 as *mut libc::c_void); +            ret +        } +    } + +    pub fn get_value_ptr(&mut 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, +                                             &mut self.0 as *mut _ as *mut libc::c_void);              ret          }      } @@ -29,7 +52,7 @@ impl GeglBuffer {  impl Drop for GeglBuffer {      fn drop(&mut self) { -        println!("Dropping geglbuffer"); +        println!("Dropping geglbuffer: {:?}", self.0);          unsafe { g_object_unref(self.0); }          println!("Dropped");      } @@ -52,49 +75,46 @@ extern {      fn gegl_exit();      fn gegl_buffer_new(extent: *mut libc::c_void, format: *mut libc::c_void)          -> *mut libc::c_void; +    fn gegl_buffer_get_extent(buffer: *const libc::c_void) -> +        *const GeglRectangle;  }  fn main() { +    let mut graph : *mut libc::c_void;      unsafe {          let mut argc : i32 = 0;          gegl_init(&mut argc as *mut i32, ptr::null_mut()); -        let graph = gegl_node_new(); +        graph = gegl_node_new();          let src = gegl_node_create_child(              graph, CString::new("gegl:load").unwrap().as_ptr());          gegl_node_set_property(              src,              CString::new("path").unwrap().as_ptr(), -            // ptr::null_mut()              Value::from("/tmp/test.jpg").to_glib_none().0                  as *const libc::c_void); -        // let sink = gegl_node_create_child( -        //     graph, CString::new("gegl:save").unwrap().as_ptr()); -        // gegl_node_set_property( -        //     sink, -        //     CString::new("path").unwrap().as_ptr(), -        //     Value::from("/tmp/test-output.jpg").to_glib_none().0 -        //         as *const libc::c_void); -        // gegl_node_link(src, sink); -        // let mut buffer : *mut libc::c_void = 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()); -        // gegl_node_set_property( -        //     sink, -        //     CString::new("buffer").unwrap().as_ptr(), -        //     Value::from(buffer).to_glib_none().0); -        { -            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); +        let mut buffer = GeglBuffer::new(); +        println!("before set property: {:?}", buffer); +        gegl_node_set_property( +            sink, +            CString::new("buffer").unwrap().as_ptr(), +            buffer.get_value_ptr().to_glib_none().0 as *mut libc::c_void); -            gegl_node_link(src, sink); -            gegl_node_process(sink); -        } +        println!("before processing: {:?}", buffer); +        gegl_node_link(src, sink); +        gegl_node_process(sink); + +        println!("before extent: {:?}", buffer); +        let extent = gegl_buffer_get_extent(buffer.0 +                                            as *mut libc::c_void); +        println!("after extent: {:?}", buffer); +        println!("height: {:?}", (*extent).height); + +        println!("got here"); +    } +    unsafe {          g_object_unref(graph);          gegl_exit();      } | 
