1 #include "CocoaMouseCursor.hxx"
3 #include <Cocoa/Cocoa.h>
6 #include <Main/globals.hxx>
8 class CocoaMouseCursor::CocoaMouseCursorPrivate
11 Cursor activeCursorKey;
13 typedef std::map<Cursor, NSCursor*> CursorMap;
17 NSCursor* cocoaCursorForKey(FGMouseCursor::Cursor aKey)
21 NSString* path = [NSString stringWithCString:globals->get_fg_root().c_str()
22 encoding:NSUTF8StringEncoding];
23 path = [path stringByAppendingPathComponent:@"gui"];
26 case FGMouseCursor::CURSOR_HAND: return [NSCursor pointingHandCursor];
27 case FGMouseCursor::CURSOR_CROSSHAIR: return [NSCursor crosshairCursor];
28 case FGMouseCursor::CURSOR_IBEAM: return [NSCursor IBeamCursor];
30 // FIXME - use a proper left-right cursor here.
31 case FGMouseCursor::CURSOR_LEFT_RIGHT: return [NSCursor resizeLeftRightCursor];
33 case FGMouseCursor::CURSOR_SPIN_CW:
34 path = [path stringByAppendingPathComponent:@"cursor-spin-cw.png"];
35 img = [[NSImage alloc] initWithContentsOfFile:path];
36 return [[NSCursor alloc] initWithImage:img hotSpot:NSMakePoint(16,16)];
38 case FGMouseCursor::CURSOR_SPIN_CCW:
39 path = [path stringByAppendingPathComponent:@"cursor-spin-cw.png"];
40 img = [[NSImage alloc] initWithContentsOfFile:path];
41 return [[NSCursor alloc] initWithImage:img hotSpot:NSMakePoint(16,16)];
43 default: return [NSCursor arrowCursor];
48 CocoaMouseCursor::CocoaMouseCursor() :
49 d(new CocoaMouseCursorPrivate)
54 CocoaMouseCursor::~CocoaMouseCursor()
61 void CocoaMouseCursor::setCursor(Cursor aCursor)
63 if (aCursor == d->activeCursorKey) {
67 d->activeCursorKey = aCursor;
68 if (d->cursors.find(aCursor) == d->cursors.end()) {
69 d->cursors[aCursor] = cocoaCursorForKey(aCursor);
70 [d->cursors[aCursor] retain];
73 [d->cursors[aCursor] set];
76 void CocoaMouseCursor::setCursorVisible(bool aVis)
85 void CocoaMouseCursor::hideCursorUntilMouseMove()
87 [NSCursor setHiddenUntilMouseMoves:YES];
90 void CocoaMouseCursor::mouseMoved()