gvnc 0.1.0

Rust bindings for the GVnc library
use std::slice;

use glib::object::IsA;
use glib::translate::*;

use crate::{auto::traits::FramebufferExt, Framebuffer};

pub trait FramebufferManualExt: 'static {
    #[doc(alias = "vnc_framebuffer_get_buffer")]
    fn buffer(&self) -> &[u8];
}

impl<O: IsA<Framebuffer>> FramebufferManualExt for O {
    fn buffer(&self) -> &[u8] {
        let len = self.height() as usize * self.rowstride() as usize;
        unsafe {
            slice::from_raw_parts(
                ffi::vnc_framebuffer_get_buffer(self.as_ref().to_glib_none().0),
                len,
            )
        }
    }
}