use core::{ops::Deref, ptr::NonNull};
use block2::{Block, RcBlock};
use objc2::runtime::ProtocolObject;
use crate::MTLDrawable;
pub struct MTLDrawablePresentedHandler(RcBlock<dyn Fn(NonNull<ProtocolObject<dyn MTLDrawable>>)>);
impl MTLDrawablePresentedHandler {
pub fn new<F>(handler: F) -> Self
where
F: Fn(&ProtocolObject<dyn MTLDrawable>) + 'static,
{
Self(RcBlock::new(move |drawable_nn: NonNull<ProtocolObject<dyn MTLDrawable>>| {
let drawable = unsafe { drawable_nn.as_ref() };
handler(drawable);
}))
}
}
impl Deref for MTLDrawablePresentedHandler {
type Target = Block<dyn Fn(NonNull<ProtocolObject<dyn MTLDrawable>>)>;
fn deref(&self) -> &Self::Target {
&self.0
}
}