]> git.mxchange.org Git - flightgear.git/blob - src/GUI/CocoaMouseCursor.mm
MouseInput changes to support hover.
[flightgear.git] / src / GUI / CocoaMouseCursor.mm
1 #include "CocoaMouseCursor.hxx"
2
3 #include <Cocoa/Cocoa.h>
4 #include <map>
5
6 #include <Main/globals.hxx>
7
8 class CocoaMouseCursor::CocoaMouseCursorPrivate
9 {
10 public:
11     Cursor activeCursorKey;
12     
13     typedef std::map<Cursor, NSCursor*> CursorMap;
14     CursorMap cursors;
15 };
16
17 NSCursor* cocoaCursorForKey(FGMouseCursor::Cursor aKey)
18 {
19     NSImage* img = nil;
20     
21     NSString* path = [NSString stringWithCString:globals->get_fg_root().c_str()
22                                             encoding:NSUTF8StringEncoding];
23     path = [path stringByAppendingPathComponent:@"gui"];
24     
25     switch (aKey) {
26     case FGMouseCursor::CURSOR_HAND: return [NSCursor pointingHandCursor];
27     case FGMouseCursor::CURSOR_CROSSHAIR: return [NSCursor crosshairCursor];
28     case FGMouseCursor::CURSOR_IBEAM: return [NSCursor IBeamCursor];
29     
30     // FIXME - use a proper left-right cursor here.
31     case FGMouseCursor::CURSOR_LEFT_RIGHT: return [NSCursor resizeLeftRightCursor];
32             
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)];
37             
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)];
42             
43     default: return [NSCursor arrowCursor];
44     }
45
46 }
47
48 CocoaMouseCursor::CocoaMouseCursor() :
49     d(new CocoaMouseCursorPrivate)
50 {
51     
52 }
53
54 CocoaMouseCursor::~CocoaMouseCursor()
55 {
56     
57     
58 }
59
60
61 void CocoaMouseCursor::setCursor(Cursor aCursor)
62 {
63     if (aCursor == d->activeCursorKey) {
64         return;
65     }
66     
67     d->activeCursorKey = aCursor;
68     if (d->cursors.find(aCursor) == d->cursors.end()) {
69         d->cursors[aCursor] = cocoaCursorForKey(aCursor);
70         [d->cursors[aCursor] retain];
71     }
72     
73     [d->cursors[aCursor] set];
74 }
75
76 void CocoaMouseCursor::setCursorVisible(bool aVis)
77 {
78     if (aVis) {
79         [NSCursor unhide];
80     } else {
81         [NSCursor hide];
82     }
83 }
84
85 void CocoaMouseCursor::hideCursorUntilMouseMove()
86 {
87     [NSCursor setHiddenUntilMouseMoves:YES];
88 }
89
90 void CocoaMouseCursor::mouseMoved()
91 {
92     // no-op
93 }