bsnes/higan/phoenix/cocoa/timer.cpp

61 lines
1.1 KiB
C++

@implementation CocoaTimer : NSObject
-(id) initWith:(phoenix::Timer&)timerReference {
if(self = [super init]) {
timer = &timerReference;
instance = nil;
}
return self;
}
-(NSTimer*) instance {
return instance;
}
-(void) update {
if(instance) {
[instance invalidate];
instance = nil;
}
if(timer->state.enabled == false) return;
instance = [NSTimer
scheduledTimerWithTimeInterval:timer->state.milliseconds / 1000.0
target:self selector:@selector(run:) userInfo:nil repeats:YES
];
}
-(void) run:(NSTimer*)instance {
if(timer->onActivate) timer->onActivate();
}
@end
namespace phoenix {
void pTimer::setEnabled(bool enabled) {
@autoreleasepool {
[cocoaTimer update];
}
}
void pTimer::setInterval(unsigned milliseconds) {
@autoreleasepool {
[cocoaTimer update];
}
}
void pTimer::constructor() {
@autoreleasepool {
cocoaTimer = [[CocoaTimer alloc] initWith:timer];
}
}
void pTimer::destructor() {
@autoreleasepool {
if([cocoaTimer instance]) [[cocoaTimer instance] invalidate];
[cocoaTimer release];
}
}
}