#import "SkNSWindow.h" #import "SkEvent.h" #define SkEventClass @"SkEvent" @implementation SkNSWindow -(id) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag { self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag]; if (self) { //Register as an observer for SkEventClass events and call //receiveSkEvent: upon receiving the event [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveSkEvent:) name:SkEventClass object:nil]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; } -(void) installSkViews { //to be overwritten by subclass } -(BOOL) acceptsFirstResponder { return YES; } -(void) receiveSkEvent:(NSNotification *)notification { if(SkEvent::ProcessEvent()) SkEvent::SignalNonEmptyQueue(); } +(void) postTimedEvent:(NSTimeInterval)ti { [NSTimer scheduledTimerWithTimeInterval:ti target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:NO]; } +(void) timerFireMethod:(NSTimer*)theTimer { SkEvent::ServiceQueueTimer(); } @end //////////////////////////////////////////////////////////////////////////////// void SkEvent::SignalNonEmptyQueue() { //post a SkEventClass event to the default notification center [[NSNotificationCenter defaultCenter] postNotificationName:SkEventClass object:nil]; } void SkEvent::SignalQueueTimer(SkMSec delay) { if (delay) { //Convert to seconds NSTimeInterval ti = delay/(float)SK_MSec1; [SkNSWindow postTimedEvent:ti]; } }