forked from rust-windowing/winit
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3c7a52f
commit 7c7fcc9
Showing
5 changed files
with
522 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
use cocoa::base::id; | ||
use objc::{runtime::{Class, Object, Sel, BOOL, YES}, declare::ClassDecl}; | ||
|
||
use platform_impl::platform::event_loop::HANDLER; | ||
|
||
pub struct AppDelegateClass(pub *const Class); | ||
unsafe impl Send for AppDelegateClass {} | ||
unsafe impl Sync for AppDelegateClass {} | ||
|
||
lazy_static! { | ||
pub static ref APP_DELEGATE_CLASS: AppDelegateClass = unsafe { | ||
let superclass = class!(NSResponder); | ||
let mut decl = ClassDecl::new("WinitAppDelegate", superclass).unwrap(); | ||
|
||
decl.add_method( | ||
sel!(applicationDidFinishLaunching:), | ||
did_finish_launching as extern fn(&Object, Sel, id) -> BOOL, | ||
); | ||
decl.add_method( | ||
sel!(applicationDidBecomeActive:), | ||
did_become_active as extern fn(&Object, Sel, id), | ||
); | ||
decl.add_method( | ||
sel!(applicationWillResignActive:), | ||
will_resign_active as extern fn(&Object, Sel, id), | ||
); | ||
decl.add_method( | ||
sel!(applicationWillEnterForeground:), | ||
will_enter_foreground as extern fn(&Object, Sel, id), | ||
); | ||
decl.add_method( | ||
sel!(applicationDidEnterBackground:), | ||
did_enter_background as extern fn(&Object, Sel, id), | ||
); | ||
decl.add_method( | ||
sel!(applicationWillTerminate:), | ||
will_terminate as extern fn(&Object, Sel, id), | ||
); | ||
|
||
AppDelegateClass(decl.register()) | ||
}; | ||
} | ||
|
||
extern fn did_finish_launching(_: &Object, _: Sel, _: id) -> BOOL { | ||
trace!("Triggered `didFinishLaunching`"); | ||
HANDLER.lock().unwrap().launched(); | ||
trace!("Completed `didFinishLaunching`"); | ||
YES | ||
} | ||
|
||
extern fn did_become_active(_: &Object, _: Sel, _: id) { | ||
trace!("Triggered `didBecomeActive`"); | ||
/*unsafe { | ||
HANDLER.lock().unwrap().handle_nonuser_event(Event::Suspended(false)) | ||
}*/ | ||
trace!("Completed `didBecomeActive`"); | ||
} | ||
|
||
extern fn will_resign_active(_: &Object, _: Sel, _: id) { | ||
trace!("Triggered `willResignActive`"); | ||
/*unsafe { | ||
HANDLER.lock().unwrap().handle_nonuser_event(Event::Suspended(true)) | ||
}*/ | ||
trace!("Completed `willResignActive`"); | ||
} | ||
|
||
extern fn will_enter_foreground(_: &Object, _: Sel, _: id) { | ||
trace!("Triggered `willEnterForeground`"); | ||
trace!("Completed `willEnterForeground`"); | ||
} | ||
|
||
extern fn did_enter_background(_: &Object, _: Sel, _: id) { | ||
trace!("Triggered `didEnterBackground`"); | ||
trace!("Completed `didEnterBackground`"); | ||
} | ||
|
||
extern fn will_terminate(_: &Object, _: Sel, _: id) { | ||
trace!("Triggered `willTerminate`"); | ||
/*unsafe { | ||
let app: id = msg_send![class!(UIApplication), sharedApplication]; | ||
let windows: id = msg_send![app, windows]; | ||
let windows_enum: id = msg_send![windows, objectEnumerator]; | ||
let mut events = Vec::new(); | ||
loop { | ||
let window: id = msg_send![windows_enum, nextObject]; | ||
if window == nil { | ||
break | ||
} | ||
let is_winit_window: BOOL = msg_send![window, isKindOfClass:class!(WinitUIWindow)]; | ||
if is_winit_window == YES { | ||
events.push(Event::WindowEvent { | ||
window_id: RootWindowId(window.into()), | ||
event: WindowEvent::Destroyed, | ||
}); | ||
} | ||
} | ||
HANDLER.lock().unwrap().handle_nonuser_events(events); | ||
HANDLER.lock().unwrap().terminated(); | ||
}*/ | ||
trace!("Completed `willTerminate`"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.