use objc2::{Message, extern_protocol, msg_send};
use objc2_foundation::NSObjectProtocol;
use crate::MTLDrawablePresentedHandler;
extern_protocol!(
pub unsafe trait MTLDrawable: NSObjectProtocol {
#[unsafe(method(present))]
#[unsafe(method_family = none)]
fn present(&self);
#[unsafe(method(presentAtTime:))]
#[unsafe(method_family = none)]
fn present_at_time(
&self,
presentation_time: f64,
);
#[unsafe(method(presentAfterMinimumDuration:))]
#[unsafe(method_family = none)]
fn present_after_minimum_duration(
&self,
duration: f64,
);
#[unsafe(method(presentedTime))]
#[unsafe(method_family = none)]
fn presented_time(&self) -> f64;
#[unsafe(method(drawableID))]
#[unsafe(method_family = none)]
fn drawable_id(&self) -> usize;
}
);
#[allow(unused)]
pub trait MTLDrawableExt: MTLDrawable + Message {
fn add_presented_handler(
&self,
handler: &MTLDrawablePresentedHandler,
);
}
impl<T> MTLDrawableExt for T
where
T: MTLDrawable + Message,
{
fn add_presented_handler(
&self,
handler: &MTLDrawablePresentedHandler,
) {
unsafe {
let _: () = msg_send![self, addPresentedHandler: &**handler];
}
}
}