]> git.mxchange.org Git - flightgear.git/commitdiff
Adjust cursor-setting code, for better compatibility with Cocoa-Viewer (OSG patch...
authorJames Turner <zakalawe@mac.com>
Tue, 4 Oct 2011 08:17:56 +0000 (09:17 +0100)
committerJames Turner <zakalawe@mac.com>
Tue, 4 Oct 2011 08:17:56 +0000 (09:17 +0100)
src/Main/fg_os_osgviewer.cxx

index 6952195f57d94fd8aece01c45e1787dddb3c5646..e8ba901a2f6a0a407e2a7896551c289444b4d683 100644 (file)
@@ -45,6 +45,7 @@
 #include <osg/View>
 #include <osgViewer/ViewerEventHandlers>
 #include <osgViewer/Viewer>
+#include <osgViewer/GraphicsWindow>
 
 #include <Scenery/scenery.hxx>
 #include "fg_os.hxx"
@@ -313,24 +314,23 @@ void fgOSFullScreen()
 {
 }
 
-static void setMouseCursor(osg::Camera* camera, int cursor)
+static void setMouseCursor(osgViewer::GraphicsWindow* gw, int cursor)
 {
-    if (!camera)
+    if (!gw) {
         return;
-    osg::GraphicsContext* gc = camera->getGraphicsContext();
-    if (!gc)
-        return;
-    osgViewer::GraphicsWindow* gw;
-    gw = dynamic_cast<osgViewer::GraphicsWindow*>(gc);
-    if (!gw)
-        return;
-    
+    }
+  
     osgViewer::GraphicsWindow::MouseCursor mouseCursor;
     mouseCursor = osgViewer::GraphicsWindow::InheritCursor;
-    if     (cursor == MOUSE_CURSOR_NONE)
+    if (cursor == MOUSE_CURSOR_NONE)
         mouseCursor = osgViewer::GraphicsWindow::NoCursor;
     else if(cursor == MOUSE_CURSOR_POINTER)
+#ifdef SG_MAC
+        // osgViewer-Cocoa lacks RightArrowCursor, use Left
+        mouseCursor = osgViewer::GraphicsWindow::LeftArrowCursor;
+#else
         mouseCursor = osgViewer::GraphicsWindow::RightArrowCursor;
+#endif
     else if(cursor == MOUSE_CURSOR_WAIT)
         mouseCursor = osgViewer::GraphicsWindow::WaitCursor;
     else if(cursor == MOUSE_CURSOR_CROSSHAIR)
@@ -362,9 +362,12 @@ static int _cursor = -1;
 void fgSetMouseCursor(int cursor)
 {
     _cursor = cursor;
-    setMouseCursor(viewer->getCamera(), cursor);
-    for (unsigned i = 0; i < viewer->getNumSlaves(); ++i)
-        setMouseCursor(viewer->getSlave(i)._camera.get(), cursor);
+  
+    std::vector<osgViewer::GraphicsWindow*> windows;
+    viewer->getWindows(windows);
+    BOOST_FOREACH(osgViewer::GraphicsWindow* gw, windows) {
+        setMouseCursor(gw, cursor);
+    }
 }
 
 int fgGetMouseCursor()