summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-08-07 11:28:35 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-08-07 11:28:35 -0400
commit5fa534b942cdb96908cfa6faa0a84dcf10008def (patch)
treea9a5b32801f9761675d6adb0f191f72079f91c87
parent2d2a68c4d00ed77483ae17607f0613b4a8188d0e (diff)
Wrap GeglBuffer in struct.
-rw-r--r--src/main.rs49
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();
}