use super::{From, Compositor};
use ffi::interfaces::compositor::wl_compositor_create_region;
use ffi::interfaces::region::{wl_region, wl_region_destroy, wl_region_add, wl_region_subtract};
use ffi::FFI;
pub struct Region {
_compositor: Compositor,
ptr: *mut wl_region
}
unsafe impl Send for Region {}
unsafe impl Sync for Region {}
impl Region {
pub fn add(&self, x: i32, y: i32, width: i32, height: i32) {
unsafe { wl_region_add(self.ptr, x, y, width, height) }
}
pub fn subtract(&self, x: i32, y: i32, width: i32, height: i32) {
unsafe { wl_region_subtract(self.ptr, x, y, width, height) }
}
}
impl From<Compositor> for Region {
fn from(compositor: Compositor) -> Region {
let ptr = unsafe { wl_compositor_create_region(compositor.ptr_mut()) };
Region {
_compositor: compositor,
ptr: ptr
}
}
}
impl Drop for Region {
fn drop(&mut self) {
unsafe { wl_region_destroy(self.ptr) };
}
}
impl FFI for Region {
type Ptr = wl_region;
fn ptr(&self) -> *const wl_region {
self.ptr as *const wl_region
}
unsafe fn ptr_mut(&self) -> *mut wl_region {
self.ptr
}
}