use super::*;
crate::class! {@Typeof
BitmapData
}
impl<'a> BitmapData<'a> {
pub fn with <F, R> (self, f: F) -> R
where F: Sync + FnOnce (BitmapDataAdapter) -> R
{
let mut descriptor = MaybeUninit::<FREBitmapData2>::uninit();
let result = unsafe {FREAcquireBitmapData2(self.as_ptr(), descriptor.as_mut_ptr())};
debug_assert!(result.is_ok(), "{}", FfiError::try_from(result).unwrap());
let descriptor = unsafe {descriptor.assume_init()};
let r = f(unsafe {BitmapDataAdapter::new(self.as_ptr(), descriptor)});
let result = unsafe {FREReleaseBitmapData(self.as_ptr())};
debug_assert!(result.is_ok(), "{}", FfiError::try_from(result).unwrap());
r
}
}
crate::class! {
NativeWindow
}
impl<'a> NativeWindow<'a> {
pub fn get_stage(self) -> Stage<'a> {
let object = self.get_property(crate::ucstringify!(stage)).unwrap();
assert!(!object.is_null());
unsafe {object.as_unchecked()}
}
pub fn with <F, R> (self, f: F) -> R
where F: Sync + FnOnce (NonNullHandle) -> R
{
let mut handle = MaybeUninit::<FRENativeWindow>::uninit();
let result = unsafe {FREAcquireNativeWindowHandle(self.as_ptr(), handle.as_mut_ptr())};
assert!(result.is_ok());
let handle = unsafe {handle.assume_init()};
let handle = NonNullHandle::new(handle).unwrap();
let r = f(handle);
let result = unsafe {FREReleaseNativeWindowHandle(self.as_ptr())};
debug_assert!(result.is_ok());
r
}
}
crate::class! {
Stage
}
impl<'a> Stage<'a> {
pub fn render_mode(self) -> RenderMode {crate::context::stack::current_context().get_render_mode(Some(self))}
#[allow(non_snake_case)]
pub fn get_stage3Ds(self) -> Box<[Stage3D<'a>]> {
let object = self.get_property(crate::ucstringify!(stage3Ds)).unwrap();
assert!(!object.is_null());
let vector: Vector = unsafe {object.as_unchecked()};
let stage_3ds: Box<[Stage3D]> = vector.iter()
.map(|stage_3d|unsafe {stage_3d.as_unchecked()})
.collect();
stage_3ds
}
}
crate::class! {
Stage3D
}
impl<'a> Stage3D<'a> {
#[allow(non_snake_case)]
pub fn get_context3D(self) -> Option<Context3D<'a>> {
let object = self.get_property(crate::ucstringify!(context3D)).unwrap();
if object.is_null() {None} else {Some(unsafe {object.as_unchecked()})}
}
}
crate::class! {
Context3D
}
impl<'a> Context3D<'a> {
pub fn raw (self) -> NonNullHandle {
let mut handle = MaybeUninit::<FREHandle>::uninit();
let r = unsafe {FREGetNativeContext3DHandle(self.as_ptr(), handle.as_mut_ptr())};
debug_assert!(r.is_ok());
let handle = unsafe {handle.assume_init()};
NonNullHandle::new(handle).unwrap()
}
}
crate::class! {
MediaBuffer
}
impl<'a> MediaBuffer<'a> {
pub fn render_to (self, display_object: NonNullObject<'_>) -> Result<(), FfiError> {crate::context::stack::current_context().set_render_source(self, display_object)}
pub fn with <F, R> (self, f: F) -> R
where F: FnOnce (MediaBufferDataAdapter) -> R {crate::context::stack::current_context().with_media_buffer(self, f)}
}