macro_rules! delegate { ( $name:expr, { $( ($($sel:ident :)+) => $func:expr),* } ) => { ... }; ( $name:expr, { $($var:ident : $var_type:ty = $value:expr),* , $( ($($sel:ident :)+) => $func:expr),* } ) => { ... }; }
Expand description
Creates a Cocoa delegate to use e.g. with NSWindow.setDelegate_
.
Adds instance variables and methods to the definition.
§Example with NSWindowDelegate
use cocoa::appkit::NSWindow;
use cocoa::base::{id, nil};
use cocoa::delegate;
use objc::runtime::{Object, Sel};
use objc::{msg_send, sel, sel_impl};
unsafe {
let my_window: id = NSWindow::alloc(nil);
extern fn on_enter_fullscreen(this: &Object, _cmd: Sel, _notification: id) {
unsafe {
let window: id = *this.get_ivar("window");
window.setToolbar_(nil);
}
}
my_window.setDelegate_(delegate!("MyWindowDelegate", {
window: id = my_window, // Declare instance variable(s)
(onWindowWillEnterFullscreen:) => on_enter_fullscreen as extern fn(&Object, Sel, id) // Declare function(s)
}));
}