use crate::ffi;
use crate::types::SenderInfo;
use cxx::UniquePtr;
pub struct SpoutReceiver(UniquePtr<ffi::SpoutReceiver>);
unsafe impl Send for SpoutReceiver {}
impl SpoutReceiver {
pub fn new(name: Option<&str>) -> Self {
let mut inner = ffi::new_spout_receiver();
if let Some(n) = name {
inner.pin_mut().set_receiver_name(n);
}
Self(inner)
}
pub fn receive_texture(&mut self, tex_id: u32, target: u32, invert: bool) -> bool {
self.0.pin_mut().receive_texture(tex_id, target, invert, 0)
}
pub fn connect(&mut self) -> bool {
self.0.pin_mut().receive_texture_connect()
}
pub fn is_updated(&mut self) -> bool {
self.0.pin_mut().is_updated()
}
pub fn is_connected(&mut self) -> bool {
self.0.pin_mut().is_connected()
}
pub fn is_frame_new(&mut self) -> bool {
self.0.pin_mut().is_frame_new()
}
pub fn sender_name(&mut self) -> String {
self.0.pin_mut().get_sender_name()
}
pub fn sender_size(&mut self) -> (u32, u32) {
let w = self.0.pin_mut().get_sender_width();
let h = self.0.pin_mut().get_sender_height();
(w, h)
}
pub fn sender_fps(&mut self) -> f64 {
self.0.pin_mut().get_sender_fps()
}
pub fn sender_info(&mut self) -> SenderInfo {
let (width, height) = self.sender_size();
SenderInfo {
name: self.sender_name(),
width,
height,
fps: self.sender_fps(),
}
}
}
impl Drop for SpoutReceiver {
fn drop(&mut self) {
self.0.pin_mut().release_receiver();
}
}