1use super::*;
2
3
4crate::class! {@Typeof
5 BitmapData
10}
11impl<'a> BitmapData<'a> {
12 pub fn with <F, R> (self, f: F) -> R
17 where F: Sync + FnOnce (BitmapDataAdapter) -> R
18 {
19 let mut descriptor = MaybeUninit::<FREBitmapData2>::uninit();
20 let result = unsafe {FREAcquireBitmapData2(self.as_ptr(), descriptor.as_mut_ptr())};
21 debug_assert!(result.is_ok(), "{}", FfiError::try_from(result).unwrap());
22 let descriptor = unsafe {descriptor.assume_init()};
23 let r = f(unsafe {BitmapDataAdapter::new(self.as_ptr(), descriptor)});
24 let result = unsafe {FREReleaseBitmapData(self.as_ptr())};
25 debug_assert!(result.is_ok(), "{}", FfiError::try_from(result).unwrap());
26 r
27 }
28}
29
30
31crate::class! {
32 NativeWindow
37}
38impl<'a> NativeWindow<'a> {
39 pub fn get_stage(self) -> Stage<'a> {
40 let object = self.get_property(crate::ucstringify!(stage)).unwrap();
41 assert!(!object.is_null());
42 unsafe {object.as_unchecked()}
43 }
44
45 pub fn with <F, R> (self, f: F) -> R
54 where F: Sync + FnOnce (NonNullHandle) -> R
55 {
56 let mut handle = MaybeUninit::<FRENativeWindow>::uninit();
57 let result = unsafe {FREAcquireNativeWindowHandle(self.as_ptr(), handle.as_mut_ptr())};
58 assert!(result.is_ok());
59 let handle = unsafe {handle.assume_init()};
60 let handle = NonNullHandle::new(handle).unwrap();
61 let r = f(handle);
62 let result = unsafe {FREReleaseNativeWindowHandle(self.as_ptr())};
63 debug_assert!(result.is_ok());
64 r
65 }
66}
67
68
69crate::class! {
70 Stage
75}
76impl<'a> Stage<'a> {
77
78 pub fn render_mode(self) -> RenderMode {crate::context::stack::current_context().get_render_mode(Some(self))}
83
84 #[allow(non_snake_case)]
85 pub fn get_stage3Ds(self) -> Box<[Stage3D<'a>]> {
86 let object = self.get_property(crate::ucstringify!(stage3Ds)).unwrap();
87 assert!(!object.is_null());
88 let vector: Vector = unsafe {object.as_unchecked()};
89 let stage_3ds: Box<[Stage3D]> = vector.iter()
90 .map(|stage_3d|unsafe {stage_3d.as_unchecked()})
91 .collect();
92 stage_3ds
93 }
94}
95
96
97crate::class! {
98 Stage3D
103}
104impl<'a> Stage3D<'a> {
105 #[allow(non_snake_case)]
106 pub fn get_context3D(self) -> Option<Context3D<'a>> {
107 let object = self.get_property(crate::ucstringify!(context3D)).unwrap();
108 if object.is_null() {None} else {Some(unsafe {object.as_unchecked()})}
109 }
110}
111
112
113crate::class! {
114 Context3D
119}
120impl<'a> Context3D<'a> {
121 pub fn raw (self) -> NonNullHandle {
126 let mut handle = MaybeUninit::<FREHandle>::uninit();
127 let r = unsafe {FREGetNativeContext3DHandle(self.as_ptr(), handle.as_mut_ptr())};
128 debug_assert!(r.is_ok());
129 let handle = unsafe {handle.assume_init()};
130 NonNullHandle::new(handle).unwrap()
131 }
132}
133
134
135crate::class! {
136 MediaBuffer
141}
142impl<'a> MediaBuffer<'a> {
143
144 pub fn render_to (self, display_object: NonNullObject<'_>) -> Result<(), FfiError> {crate::context::stack::current_context().set_render_source(self, display_object)}
149
150 pub fn with <F, R> (self, f: F) -> R
153 where F: FnOnce (MediaBufferDataAdapter) -> R {crate::context::stack::current_context().with_media_buffer(self, f)}
154}
155