Merge pull request #10 from gunyarakun/fix-invalid-return
[cocotron.git] / CoreVideo / CVDisplayLink.m
blob2d53e549e728cc602b9aca5cd899cec6844bedcf
1 #import <CoreVideo/CVDisplayLink.h>
2 #import <Foundation/NSRaise.h>
4 // FIXME: use only one timer for all the display links, this will reduce run loop overhead
6 @interface CVDisplayLink : NSObject {
7     NSTimer *_timer;
8     CVDisplayLinkOutputCallback _callback;
9     void  *_userInfo;
12 @end
14 @implementation CVDisplayLink
16 -init {
17     return self;
20 -(void)dealloc {
21     [_timer invalidate];
22     [_timer release];
23     [super dealloc];
26 -(void)displayLinkTimer:(NSTimer *)timer {
27     if(_callback!=NULL)
28         _callback(self,NULL,NULL,0,NULL,_userInfo);
31 -(void)start {
32     _timer=[[NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:self selector:@selector(displayLinkTimer:) userInfo:nil repeats:YES] retain];
35 -(void)stop {
36     [_timer invalidate];
37     [_timer release];
38     _timer = nil;
41 CVReturn CVDisplayLinkCreateWithActiveCGDisplays(CVDisplayLinkRef *result) {
42     *result=[[CVDisplayLink alloc] init];
43     return kCVReturnSuccess;
46 CVReturn CVDisplayLinkSetOutputCallback(CVDisplayLinkRef self,CVDisplayLinkOutputCallback callback,void *userInfo) {
47     self->_callback=callback;
48     self->_userInfo=userInfo;
49     return kCVReturnSuccess;
52 CVReturn CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(CVDisplayLinkRef self,CGLContextObj cglContext,CGLPixelFormatObj cglPixelFormat) {
53     return kCVReturnSuccess;
56 CVReturn CVDisplayLinkStart(CVDisplayLinkRef self) {
57     if (CVDisplayLinkIsRunning(self))
58         return kCVReturnDisplayLinkAlreadyRunning;
59     [self start];
60     return kCVReturnSuccess;
63 CVReturn CVDisplayLinkStop(CVDisplayLinkRef self) {
64     if (!CVDisplayLinkIsRunning(self))
65         return kCVReturnDisplayLinkNotRunning;
66     [self stop];
67     return kCVReturnSuccess;
70 Boolean CVDisplayLinkIsRunning (CVDisplayLinkRef self) {
71     return (self->_timer != nil);
74 CVDisplayLinkRef CVDisplayLinkRetain(CVDisplayLinkRef self) {
75     return [self retain];
78 void CVDisplayLinkRelease(CVDisplayLinkRef self) {
79     [self release];
82 @end