Revision: 30649
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30649
Author:   merwin
Date:     2010-07-23 08:45:59 +0200 (Fri, 23 Jul 2010)

Log Message:
-----------
SpaceNav event capture for MacOS, dispatch for all platforms. To compile this, 
you need their Mac driver installed and to send '-weak_framework 
3DconnexionClient' to the linker. I'm also exploring a HID Manager version, 
bypassing their driver (and any licensing issues).

Modified Paths:
--------------
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManager.cpp
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManagerCocoa.cpp
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_System.cpp

Modified: branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManager.cpp
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManager.cpp  
2010-07-23 06:36:08 UTC (rev 30648)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManager.cpp  
2010-07-23 06:45:59 UTC (rev 30649)
@@ -79,6 +79,9 @@
        data->ry = scale * m_rotation[1];
        data->rz = scale * m_rotation[2];
 
+       printf("sending T=(%.2f,%.2f,%.2f) R=(%.2f,%.2f,%.2f)\n", data->tx, 
data->ty, data->tz, data->rx, data->ry, data->rz);
+       fflush(stdout);
+
        m_system.pushEvent(event);
 
        // 'at rest' test goes at the end so that the first 'rest' event gets 
sent

Modified: 
branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManagerCocoa.cpp
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManagerCocoa.cpp     
2010-07-23 06:36:08 UTC (rev 30648)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_NDOFManagerCocoa.cpp     
2010-07-23 06:45:59 UTC (rev 30649)
@@ -21,9 +21,13 @@
  */
  
 #include "GHOST_NDOFManagerCocoa.h"
-#include <3DconnexionClient/ConnexionClientAPI.h>
-#include <stdio.h>
+#include "GHOST_SystemCocoa.h"
 
+extern "C" {
+       #include <3DconnexionClient/ConnexionClientAPI.h>
+       #include <stdio.h>
+       }
+
 static void SpaceNavAdded(io_connect_t connection)
        {
        printf("SpaceNav added\n");
@@ -36,7 +40,7 @@
 
 static void SpaceNavEvent(io_connect_t connection, natural_t messageType, void 
*messageArgument)
        {
-       GHOST_System* system = (GHOST_System*) GHOST_ISystem::getSystem();
+       GHOST_SystemCocoa* system = (GHOST_SystemCocoa*) 
GHOST_ISystem::getSystem();
        GHOST_NDOFManager* manager = system->getNDOFManager();
        switch (messageType)
                {
@@ -48,10 +52,12 @@
                                case kConnexionCmdHandleAxis:
                                        manager->updateTranslation(s->axis, 
s->time);
                                        manager->updateRotation(s->axis + 3, 
s->time);
+                                       system->notifyExternalEventProcessed();
                                        break;
 
                                case kConnexionCmdHandleButtons:
                                        manager->updateButtons(s->buttons, 
s->time);
+                                       system->notifyExternalEventProcessed();
                                        break;
                                }
                        break;
@@ -101,6 +107,7 @@
 
 bool GHOST_NDOFManagerCocoa::available()
        {
-       extern OSErr InstallConnexionHandlers() __attribute__((weak_import));
+//     extern OSErr InstallConnexionHandlers() __attribute__((weak_import));
+// ^-- not needed since the entire framework is weak-linked
        return InstallConnexionHandlers != NULL;
        }

Modified: branches/soc-2010-merwin/intern/ghost/intern/GHOST_System.cpp
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_System.cpp       
2010-07-23 06:36:08 UTC (rev 30648)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_System.cpp       
2010-07-23 06:45:59 UTC (rev 30649)
@@ -196,6 +196,9 @@
 
 bool GHOST_System::dispatchEvents()
 {
+       // NDOF Motion event is sent only once per dispatch, so do it now:
+       m_ndofManager->sendMotionEvent();
+
        bool handled;
        if (m_eventManager) {
                if (m_input_fidelity_hint == LO_FI)


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to