| /* | |
| * Copyright 2011 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #import "SkEventNotifier.h" | |
| #include "SkEvent.h" | |
| #define SkEventClass @"SkEvenClass" | |
| @implementation SkEventNotifier | |
| - (id)init { | |
| self = [super init]; | |
| 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]; | |
| } | |
| -(BOOL) acceptsFirstResponder { | |
| return YES; | |
| } | |
| //SkEvent Handers | |
| - (void)receiveSkEvent:(NSNotification *)notification { | |
| if(SkEvent::ProcessEvent()) | |
| SkEvent::SignalNonEmptyQueue(); | |
| } | |
| + (void)postTimedSkEvent:(NSTimeInterval)timeInterval { | |
| [NSTimer scheduledTimerWithTimeInterval:timeInterval 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 queue | |
| NSNotification* notification = [NSNotification notificationWithName:SkEventClass object:nil]; | |
| [[NSNotificationQueue defaultQueue] enqueueNotification:notification | |
| postingStyle:NSPostWhenIdle | |
| coalesceMask:NSNotificationNoCoalescing | |
| forModes:nil]; | |
| } | |
| void SkEvent::SignalQueueTimer(SkMSec delay) { | |
| if (delay) { | |
| //Convert to seconds | |
| NSTimeInterval ti = delay/(float)SK_MSec1; | |
| [SkEventNotifier postTimedSkEvent:ti]; | |
| } | |
| } |