diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/views/mac/SkEventNotifier.mm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/views/mac/SkEventNotifier.mm Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,68 @@ + +/* + * 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]; + } +}