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