diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 200 |
1 files changed, 90 insertions, 110 deletions
diff --git a/src/main.rs b/src/main.rs index 27f3bc6..6bbf8b5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,120 +2,100 @@ extern crate libc; extern crate glib; extern crate gobject_sys as gobject_ffi; extern crate glib_sys as glib_ffi; +extern crate phed; +#[allow(unused_imports)] +use phed::gegl_ffi::*; +#[allow(unused_imports)] use std::ffi::CString; +#[allow(unused_imports)] use std::ptr; +#[allow(unused_imports)] use glib::translate::*; +#[allow(unused_imports)] use glib::Value; +#[allow(unused_imports)] use gobject_ffi::G_TYPE_POINTER; -#[derive(Debug)] -pub struct GeglBuffer(*mut libc::c_void); +fn main () {} -#[repr(C)] -#[derive(Debug)] -struct GeglRectangle { - x: i32, - y: i32, - width: i32, - height: i32, -} - -impl GeglBuffer { - pub fn new() -> GeglBuffer { - 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 { - 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 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 - } - } -} - -impl Drop for GeglBuffer { - fn drop(&mut self) { - println!("Dropping geglbuffer: {:?}", self.0); - unsafe { g_object_unref(self.0); } - println!("Dropped"); - } -} - -#[link(name="gegl-0.3")] -extern { - fn gegl_init(argc: *mut i32, argv: *mut *mut libc::c_char); - fn gegl_node_new() -> *mut libc::c_void; - fn gegl_node_create_child(parent: *mut libc::c_void, - operation: *const libc::c_char) - -> *mut libc::c_void; - fn gegl_node_set_property(node: *mut libc::c_void, - property_name: *const libc::c_char, - value: *const libc::c_void); - fn gegl_node_link(source: *mut libc::c_void, - sink: *mut libc::c_void); - fn gegl_node_process(node: *mut libc::c_void); - fn g_object_unref(node: *mut libc::c_void); - 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()); - 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(), - Value::from("/tmp/test.jpg").to_glib_none().0 - as *const libc::c_void); - let sink = gegl_node_create_child(graph, - CString::new("gegl:buffer-sink") - .unwrap().as_ptr()); - 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); - - 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(); - } -} +// #[derive(Debug)] +// pub struct GeglBuffer(*mut libc::c_void); +// +// impl GeglBuffer { +// pub fn new() -> GeglBuffer { +// 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 { +// 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 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 +// } +// } +// } +// +// impl Drop for GeglBuffer { +// fn drop(&mut self) { +// println!("Dropping geglbuffer: {:?}", self.0); +// unsafe { g_object_unref(self.0); } +// println!("Dropped"); +// } +// } +// +// 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()); +// 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(), +// Value::from("/tmp/test.jpg").to_glib_none().0 +// as *const libc::c_void); +// let sink = gegl_node_create_child(graph, +// CString::new("gegl:buffer-sink") +// .unwrap().as_ptr()); +// 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); +// +// 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(); +// } +// } |