Revision: 38026
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38026
Author:   merwin
Date:     2011-07-01 21:51:44 +0000 (Fri, 01 Jul 2011)
Log Message:
-----------
implemented ndof 'dead zone' around home position, fixed X11 active window 
determination, removed old X11 ndof code

Modified Paths:
--------------
    branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp
    branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.cpp
    branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.h
    branches/merwin-spacenav/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp
===================================================================
--- branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp  
2011-07-01 18:21:46 UTC (rev 38025)
+++ branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp  
2011-07-01 21:51:44 UTC (rev 38026)
@@ -27,6 +27,7 @@
 #include "GHOST_WindowManager.h"
 #include <string.h> // for memory functions
 #include <stdio.h> // for error/info reporting
+#include <math.h>
 
 #ifdef DEBUG_NDOF_BUTTONS
 static const char* ndof_button_names[] = {
@@ -301,6 +302,12 @@
                }
        }
 
+static bool atHomePosition(GHOST_TEventNDOFMotionData* ndof, float threshold)
+       {
+       #define HOME(foo) (fabsf(ndof->foo) < threshold)
+       return HOME(tx) && HOME(ty) && HOME(tz) && HOME(rx) && HOME(ry) && 
HOME(rz);
+       }
+
 bool GHOST_NDOFManager::sendMotionEvent()
        {
        if (m_atRest)
@@ -336,9 +343,7 @@
        m_system.pushEvent(event);
 
        // 'at rest' test goes at the end so that the first 'rest' event gets 
sent
-       m_atRest = m_rotation[0] == 0 && m_rotation[1] == 0 && m_rotation[2] == 
0 &&
-               m_translation[0] == 0 && m_translation[1] == 0 && 
m_translation[2] == 0;
-       // this needs to be aware of calibration -- 0.01 0.01 0.03 might be 
'rest'
+       m_atRest = atHomePosition(data, 0.05f);
 
        return true;
        }

Modified: branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.cpp
===================================================================
--- branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.cpp    
2011-07-01 18:21:46 UTC (rev 38025)
+++ branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.cpp    
2011-07-01 21:51:44 UTC (rev 38026)
@@ -75,22 +75,6 @@
 #include <stdio.h> // for fprintf only
 #include <cstdlib> // for exit
 
-#if 0 // obsolete SpaceNav code
-
-typedef struct NDOFPlatformInfo {
-       Display *display;
-       Window window;
-       volatile GHOST_TEventNDOFData *currValues;
-       Atom cmdAtom;
-       Atom motionAtom;
-       Atom btnPressAtom;
-       Atom btnRelAtom;
-} NDOFPlatformInfo;
-
-static NDOFPlatformInfo sNdofInfo = {NULL, 0, NULL, 0, 0, 0, 0};
-
-#endif
-
 //these are for copy and select copy
 static char *txt_cut_buffer= NULL;
 static char *txt_select_buffer= NULL;
@@ -612,6 +596,8 @@
                case FocusOut:
                {
                        XFocusChangeEvent &xfe = xe->xfocus;
+
+                       printf("X: focus %s for window %d\n", xfe.type == 
FocusIn ? "in" : "out", (int) xfe.window);
                
                        // May have to look at the type of event and filter some
                        // out.
@@ -643,36 +629,6 @@
                        } else 
 #endif
 
-#if 0 // obsolete SpaceNav code
-
-                       if (sNdofInfo.currValues) {
-                               static GHOST_TEventNDOFData data = 
{0,0,0,0,0,0,0,0,0,0,0};
-                               if (xcme.message_type == sNdofInfo.motionAtom)
-                               {
-                                       data.changed = 1;
-                                       data.delta = xcme.data.s[8] - data.time;
-                                       data.time = xcme.data.s[8];
-                                       data.tx = xcme.data.s[2] >> 2;
-                                       data.ty = xcme.data.s[3] >> 2;
-                                       data.tz = xcme.data.s[4] >> 2;
-                                       data.rx = xcme.data.s[5];
-                                       data.ry = xcme.data.s[6];
-                                       data.rz =-xcme.data.s[7];
-                                       g_event = new 
GHOST_EventNDOF(getMilliSeconds(),
-                                                                     
GHOST_kEventNDOFMotion,
-                                                                     window, 
data);
-                               } else if (xcme.message_type == 
sNdofInfo.btnPressAtom) {
-                                       data.changed = 2;
-                                       data.delta = xcme.data.s[8] - data.time;
-                                       data.time = xcme.data.s[8];
-                                       data.buttons = xcme.data.s[2];
-                                       g_event = new 
GHOST_EventNDOF(getMilliSeconds(),
-                                                                     
GHOST_kEventNDOFButton,
-                                                                     window, 
data);
-                               }
-
-#endif
-
                        if (((Atom)xcme.data.l[0]) == m_wm_take_focus) {
                                XWindowAttributes attr;
                                Window fwin;
@@ -730,6 +686,14 @@
                                        xce.y_root
                                );
                        }
+
+                       printf("X: %s window %d\n", xce.type == EnterNotify ? 
"entering" : "leaving", (int) xce.window);
+
+                       if (xce.type == EnterNotify)
+                               m_windowManager->setActiveWindow(window);
+                       else
+                               m_windowManager->setWindowInactive(window);
+
                        break;
                }
                case MapNotify:

Modified: branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.h
===================================================================
--- branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.h      
2011-07-01 18:21:46 UTC (rev 38025)
+++ branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.h      
2011-07-01 21:51:44 UTC (rev 38026)
@@ -203,15 +203,6 @@
                return m_display;
        }       
 
-#if 0 // obsolete SpaceNav code
-
-               void *
-       prepareNdofInfo(
-               volatile GHOST_TEventNDOFData *current_values
-       );
-
-#endif
-
        /* Helped function for get data from the clipboard. */
        void getClipboard_xcout(XEvent evt, Atom sel, Atom target,
                         unsigned char **txt, unsigned long *len,

Modified: 
branches/merwin-spacenav/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/merwin-spacenav/source/blender/windowmanager/intern/wm_operators.c 
2011-07-01 18:21:46 UTC (rev 38025)
+++ branches/merwin-spacenav/source/blender/windowmanager/intern/wm_operators.c 
2011-07-01 21:51:44 UTC (rev 38026)
@@ -1376,6 +1376,7 @@
 
 // BEGIN ndof menu -- experimental!
 
+#if 0
 static uiBlock* wm_block_ndof_menu_1st(bContext* C, ARegion* ar, void* 
UNUSED(arg_op))
 {
        uiBlock* block;
@@ -1448,9 +1449,17 @@
        puts("ndof: menu exec");
        return OPERATOR_FINISHED;       
 }
+#endif
 
 static int wm_ndof_menu_invoke(bContext *C, wmOperator *op, wmEvent 
*UNUSED(event))
 {
+//     uiPupMenuNotice(C, "Hello!"); // <-- this works
+//     uiPupBlock(C, wm_block_ndof_menu, op); // <-- no luck!
+//     ui_popup_menu_create(C, NULL, NULL, NULL, NULL, "Hello!"); // <-- this 
works
+
+       uiPopupMenu* pup = uiPupMenuBegin(C,"3D mouse settings",ICON_NDOF_TURN);
+       uiLayout* layout = uiPupMenuLayout(pup);
+
        printf("ndof: menu invoked in ");
 
        switch (CTX_wm_area(C)->spacetype) // diff spaces can have diff 3d 
mouse options
@@ -1465,13 +1474,7 @@
                        puts("some iNDOFferent area");
                }
 
-//     uiPupMenuNotice(C, "Hello!"); // <-- this works
-//     uiPupBlock(C, wm_block_ndof_menu, op); // <-- no luck!
-//     ui_popup_menu_create(C, NULL, NULL, NULL, NULL, "Hello!"); // <-- this 
works
 
-       uiPopupMenu* pup = uiPupMenuBegin(C,"3D mouse settings",ICON_NDOF_TURN);
-       uiLayout* layout = uiPupMenuLayout(pup);
-
        //uiBlock* block = uiLayoutGetBlock(layout);
        //int foo = 1;
        //uiDefButI(block, TOG, 0, "foo", 10, 10, 9*UI_UNIT_X, UI_UNIT_Y, &foo, 
0.f, 1.f, 0.1f, 0.9f, "15%");
@@ -1495,12 +1498,11 @@
 static void WM_OT_ndof_menu(wmOperatorType *ot)
 {
        puts("ndof: registering menu operator");
-       ot->name= "NDOF Menu";
-       ot->idname= "WM_OT_ndof_menu";
+
+       ot->name = "NDOF Menu";
+       ot->idname = "WM_OT_ndof_menu";
        
-       ot->invoke= wm_ndof_menu_invoke;
-//     ot->exec= wm_ndof_menu_exec;
-//     ot->poll= wm_ndof_menu_poll;
+       ot->invoke = wm_ndof_menu_invoke;
 }
 
 // END ndof menu

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

Reply via email to