use super::{FromOpt, ShmPool};
use ffi::interfaces::shm_pool::wl_shm_pool_create_buffer;
use ffi::interfaces::buffer::{wl_buffer, wl_buffer_destroy};
use ffi::FFI;
pub struct Buffer {
ptr: *mut wl_buffer
}
unsafe impl Send for Buffer {}
unsafe impl Sync for Buffer {}
impl<'a> FromOpt<(&'a ShmPool, i32, i32, i32, i32, u32)> for Buffer {
fn from((pool, offset, width, height, stride, format): (&'a ShmPool, i32, i32, i32, i32, u32))
-> Option<Buffer> {
let ptr = unsafe { wl_shm_pool_create_buffer(
pool.ptr_mut(), offset, width, height, stride, format) };
if ptr.is_null() {
None
} else {
Some(Buffer {
ptr: ptr
})
}
}
}
impl Drop for Buffer {
fn drop(&mut self) {
unsafe { wl_buffer_destroy(self.ptr) };
}
}
impl FFI for Buffer {
type Ptr = wl_buffer;
fn ptr(&self) -> *const wl_buffer {
self.ptr as *const wl_buffer
}
unsafe fn ptr_mut(&self) -> *mut wl_buffer {
self.ptr
}
}