/** * @file llwindowmacosx-objc.mm * @brief Definition of functions shared between llwindowmacosx.cpp * and llwindowmacosx-objc.mm. * * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. * $License$ */ #include /* * These functions are broken out into a separate file because the * objective-C typedef for 'BOOL' conflicts with the one in * llcommon/stdtypes.h. This makes it impossible to use the standard * linden headers with any objective-C++ source. */ #include "llwindowmacosx-objc.h" void setupCocoa() { static bool inited = false; if(!inited) { // This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor": // http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html // Needed for Carbon based applications which call into Cocoa NSApplicationLoad(); // Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image [[[NSWindow alloc] init] release]; } } CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // extra retain on the NSCursor since we want it to live for the lifetime of the app. NSCursor *cursor = [[[NSCursor alloc] initWithImage: [[[NSImage alloc] initWithContentsOfFile: [NSString stringWithFormat:@"%s", fullpath] ]autorelease] hotSpot:NSMakePoint(hotspotX, hotspotY) ]retain]; [pool release]; return (CursorRef)cursor; } // This is currently unused, since we want all our cursors to persist for the life of the app, but I've included it for completeness. OSErr releaseImageCursor(CursorRef ref) { if( ref != NULL ) { NSCursor *cursor = (NSCursor*)ref; [cursor release]; } else { return paramErr; } return noErr; } OSErr setImageCursor(CursorRef ref) { if( ref != NULL ) { NSCursor *cursor = (NSCursor*)ref; [cursor set]; } else { return paramErr; } return noErr; }