KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a document-based app, where each document has one window with an NSScrollView that does some (fairly continuous) drawing using only Cocoa. To call the drawing, I am using a CVDisplayLink, outlined in the code below: - (void)windowControllerDidLoadNib:(NSWindowController *) aController { //other stuff... [self prepareDisplayLink]; //For some reason putting this in awakeFromNib crashes } //Prep the display link. - (void)prepareDisplayLink { CVDisplayLinkCreateWithActiveCGDisplays(&displayLink); CVDisplayLinkSetCurrentCGDisplay(displayLink, ((CGDirectDisplayID)[[[[[self windowForSheet]screen]deviceDescription]objectForKey:@"NSScreenNumber"]intValue])); CVDisplayLinkSetOutputCallback(displayLink, &MyDisplayLinkCallback, self); } //Callback to draw frame static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext) { NSAutoreleasePool *pool =[[NSAutoreleasePool alloc]init]; CVReturn result = [(ScrollView*)displayLinkContext getFrameForTime:outputTime]; [pool drain]; return result; } //Drawing function: - (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime { [scrollView lockFocusIfCanDraw]; [self addToCurrentPostion:(dist/time)*CVDisplayLinkGetActualOutputVideoRefreshPeriod(displayLink)]; //Redraws the scrollview]; [scrollView unlockFocus]; return kCVReturnSuccess; } //Set the display when the window moves: - (void)windowDidMove:(NSNotification *)notification { if ([notification object] == [self windowForSheet]) { CVDisplayLinkSetCurrentCGDisplay(displayLink, ((CGDirectDisplayID)[[[[[self windowForSheet]screen]deviceDescription]objectForKey:@"NSScreenNumber"]intValue])); } } //Start or stop the animation: - (IBAction)toggleAnim:(id)sender { if (CVDisplayLinkIsRunning(displayLink)) { CVDisplayLinkStop(di
Tags (comma-separated)
Save Edits
Cancel