|  |  | 
|  | /* | 
|  | * 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]; | 
|  | } | 
|  | } |