User Prefs for NDOF dead-zone
authorCampbell Barton <ideasman42@gmail.com>
Wed, 1 Jul 2015 03:45:19 +0000 (13:45 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 1 Jul 2015 03:45:19 +0000 (13:45 +1000)
D1344 with edits

15 files changed:
intern/ghost/GHOST_C-api.h
intern/ghost/GHOST_ISystem.h
intern/ghost/intern/GHOST_C-api.cpp
intern/ghost/intern/GHOST_NDOFManagerWin32.cpp
intern/ghost/intern/GHOST_NDOFManagerX11.cpp
intern/ghost/intern/GHOST_System.cpp
intern/ghost/intern/GHOST_System.h
release/scripts/startup/bl_ui/space_userpref.py
source/blender/blenkernel/BKE_blender.h
source/blender/editors/interface/resources.c
source/blender/makesdna/DNA_userdef_types.h
source/blender/makesrna/intern/rna_userdef.c
source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm_event_system.c
source/blender/windowmanager/intern/wm_init_exit.c

index 8a80a51a77b77a0715cf1cfee3fd08651e0f97b6..7715979d8bf098ce2227d11a03d798a09fa02cf6 100644 (file)
@@ -434,6 +434,16 @@ extern GHOST_TSuccess GHOST_GetButtonState(GHOST_SystemHandle systemhandle,
                                            GHOST_TButtonMask mask,
                                            int *isDown);
 
+/***************************************************************************************
+ * Access to 3D mouse.
+ ***************************************************************************************/
+
+/**
+ * Sets 3D mouse deadzone
+ * \param deadzone Deadzone of the 3D mouse (both for rotation and pan) relative to full range
+ */
+extern void GHOST_setNDOFDeadZone(float deadzone);
+
 
 /***************************************************************************************
  * Drag'n'drop operations
index 25908a54872db514218625acf86fda4e739f1c10..33540f3069d9839cfc606fa430be0da92f8d3e43 100644 (file)
@@ -378,6 +378,12 @@ public:
         */
        virtual GHOST_TSuccess getButtonState(GHOST_TButtonMask mask, bool& isDown) const = 0;
 
+       /**
+        * Sets 3D mouse deadzone
+        * \param deadzone: Deadzone of the 3D mouse (both for rotation and pan) relative to full range
+        */
+       virtual void setNDOFDeadZone(float deadzone) = 0;
+
        /**
         * Toggles console
         * \param action
index 8d01e8ac3a6e5d901ee2f5200ee264dc029ba095..af992bf5a3c1d2eb04f6cf659b13ae5af921ca3f 100644 (file)
@@ -413,6 +413,13 @@ GHOST_TSuccess GHOST_GetButtonState(GHOST_SystemHandle systemhandle,
 }
 
 
+void GHOST_setNDOFDeadZone(float deadzone)
+{
+       GHOST_ISystem *system = GHOST_ISystem::getSystem();
+       system->setNDOFDeadZone(deadzone);
+}
+
+
 void GHOST_setAcceptDragOperation(GHOST_WindowHandle windowhandle, GHOST_TInt8 canAccept)
 {
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
index 6c1627905e08927935d593df424694abad2144fd..7ccd2e602b4d2645e53bcddb5e60e22254c2a95a 100644 (file)
@@ -30,7 +30,7 @@
 GHOST_NDOFManagerWin32::GHOST_NDOFManagerWin32(GHOST_System& sys)
     : GHOST_NDOFManager(sys)
 {
-       setDeadZone(0.1f);
+       /* pass */
 }
 
 // whether multi-axis functionality is available (via the OS or driver)
index 75e476c287f00fda599575ad90738b58755e3dc3..753321be58e1b87ec778d4238ff912b38b8b6fcc 100644 (file)
@@ -33,8 +33,6 @@ GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys)
     : GHOST_NDOFManager(sys),
       m_available(false)
 {
-       setDeadZone(0.1f); /* how to calibrate on Linux? throw away slight motion! */
-
        if (spnav_open() != -1) {
                m_available = true;
 
index baa1bdff79ad450ae52e0ef23fff69f5eeefa288..1698d2f0f31e10559278d69568020628a8c41c59 100644 (file)
@@ -295,6 +295,15 @@ GHOST_TSuccess GHOST_System::getButtonState(GHOST_TButtonMask mask, bool& isDown
        return success;
 }
 
+void GHOST_System::setNDOFDeadZone(float deadzone)
+{
+#ifdef WITH_INPUT_NDOF
+       this->m_ndofManager->setDeadZone(deadzone);
+#else
+       (void)deadzone;
+#endif
+}
+
 GHOST_TSuccess GHOST_System::init()
 {
        m_timerManager = new GHOST_TimerManager();
index 4f689ce43c993446547a3045cd879809a7e245e8..9dcba11527c93f4dc14d5a83d786369c5412d183 100644 (file)
@@ -237,6 +237,16 @@ public:
         */
        GHOST_TSuccess getButtonState(GHOST_TButtonMask mask, bool& isDown) const;
        
+       /***************************************************************************************
+        * Access to 3D mouse.
+        ***************************************************************************************/
+
+       /**
+        * Sets 3D mouse deadzone
+        * \param deadzone: Deadzone of the 3D mouse (both for rotation and pan) relative to full range
+        */
+       void setNDOFDeadZone(float deadzone);
+
        /***************************************************************************************
         * Other (internal) functionality.
         ***************************************************************************************/
index 0272f752bab1ac147595f6e7c6c5af6d643fa8f7..58bb383e84c4efcd91a615bced2ebae06841c517 100644 (file)
@@ -988,6 +988,7 @@ class USERPREF_MT_ndof_settings(Menu):
 
         layout.prop(input_prefs, "ndof_sensitivity")
         layout.prop(input_prefs, "ndof_orbit_sensitivity")
+        layout.prop(input_prefs, "ndof_deadzone")
 
         if is_view3d:
             layout.separator()
@@ -1130,10 +1131,12 @@ class USERPREF_PT_input(Panel):
             sub.prop(walk, "jump_height")
 
         col.separator()
-        sub = col.column()
-        sub.label(text="NDOF Device:")
+        col.label(text="NDOF Device:")
+        sub = col.column(align=True)
         sub.prop(inputs, "ndof_sensitivity", text="NDOF Sensitivity")
         sub.prop(inputs, "ndof_orbit_sensitivity", text="NDOF Orbit Sensitivity")
+        sub.prop(inputs, "ndof_deadzone", text="NDOF Deadzone")
+        sub = col.column(align=True)
         sub.row().prop(inputs, "ndof_view_navigate_method", expand=True)
         sub.row().prop(inputs, "ndof_view_rotate_method", expand=True)
 
index 8367fd4369f2749bb1b2c7e48e308f3c5dd06773..1638ba4521dee16fc2925b4d34a1e34f4bd62c3c 100644 (file)
@@ -42,7 +42,7 @@ extern "C" {
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         275
-#define BLENDER_SUBVERSION      1
+#define BLENDER_SUBVERSION      2
 /* Several breakages with 270, e.g. constraint deg vs rad */
 #define BLENDER_MINVERSION      270
 #define BLENDER_MINSUBVERSION   5
index b9d88176dba50056a2f8e2686bf9e5c7de3fc044..e8311443123606b1864aa2d5c679fde92c70a69e 100644 (file)
@@ -2631,6 +2631,10 @@ void init_userdef_do_versions(void)
                }
        }
 
+       if (!USER_VERSION_ATLEAST(275, 2)) {
+               U.ndof_deadzone = 0.1;
+       }
+
        if (U.pixelsize == 0.0f)
                U.pixelsize = 1.0f;
        
index 3a0e346d0c86b9259bc442797ec358d2d5cf4c8b..48ed3563d532ed016ee2ff58872e7e1e404c8e14 100644 (file)
@@ -491,7 +491,6 @@ typedef struct UserDef {
        int memcachelimit;
        int prefetchframes;
        float pad_rot_angle; /* control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use */
-       float pad3;
        short frameserverport;
        short pad4;
        short obcenter_dia;
@@ -519,6 +518,7 @@ typedef struct UserDef {
 
        float ndof_sensitivity; /* overall sensitivity of 3D mouse */
        float ndof_orbit_sensitivity;
+       float ndof_deadzone; /* deadzone of 3D mouse */
        int ndof_flag;                  /* flags for 3D mouse */
 
        short ogl_multisamples; /* amount of samples for OpenGL FSA, if zero no FSA */
index 9123a0682e6308ff03c02b459795b74e0f7a3a7b..9604f643149d04fa07c2b4531558178cb64b2e5b 100644 (file)
@@ -267,6 +267,12 @@ static void rna_userdef_autokeymode_set(PointerRNA *ptr, int value)
        }
 }
 
+static void rna_userdef_ndof_deadzone_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+       UserDef *userdef = ptr->data;
+       WM_ndof_deadzone_set(userdef->ndof_deadzone);
+}
+
 static void rna_userdef_timecode_style_set(PointerRNA *ptr, int value)
 {
        UserDef *userdef = (UserDef *)ptr->data;
@@ -4303,6 +4309,11 @@ static void rna_def_userdef_input(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.01f, 40.0f);
        RNA_def_property_ui_text(prop, "Orbit Sensitivity", "Overall sensitivity of the 3D Mouse for orbiting");
 
+       prop = RNA_def_property(srna, "ndof_deadzone", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_ui_text(prop, "Deadzone", "Deadzone of the 3D Mouse");
+       RNA_def_property_update(prop, 0, "rna_userdef_ndof_deadzone_update");
+
        prop = RNA_def_property(srna, "ndof_pan_yz_swap_axis", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_PAN_YZ_SWAP_AXIS);
        RNA_def_property_ui_text(prop, "Y/Z Swap Axis",
index bdb373a78bafef60b31ccebdff451aeab20dcf31..9e27190de022fb3c6ea91b92488aef442ae4fa35 100644 (file)
@@ -181,6 +181,9 @@ void                WM_event_add_mousemove(struct bContext *C);
 bool        WM_modal_tweak_exit(const struct wmEvent *event, int tweak_event);
 bool           WM_event_is_absolute(const struct wmEvent *event);
 
+                       /* 3D mouse */
+void           WM_ndof_deadzone_set(float deadzone);
+
                        /* notifiers */
 void           WM_event_add_notifier(const struct bContext *C, unsigned int type, void *reference);
 void           WM_main_add_notifier(unsigned int type, void *reference);
index 075390f9a15fdbd5a0d51c949a345ad2a24c2dde..15b155c864942e5886b091fa82e1102060eca85b 100644 (file)
@@ -623,6 +623,11 @@ bool WM_event_is_absolute(const wmEvent *event)
        return (event->tablet_data != NULL);
 }
 
+void WM_ndof_deadzone_set(float deadzone)
+{
+       GHOST_setNDOFDeadZone(deadzone);
+}
+
 static void wm_add_reports(const bContext *C, ReportList *reports)
 {
        /* if the caller owns them, handle this */
index edca1f97ecf37409c078b2a23885dff875948950..dc36cfbaf574a814cda50e036cb67bdec3ca03b8 100644 (file)
@@ -171,6 +171,9 @@ void WM_init(bContext *C, int argc, const char **argv)
        /* get the default database, plus a wm */
        wm_homefile_read(C, NULL, G.factory_startup, NULL);
        
+       /* sets 3D mouse deadzone */
+       WM_ndof_deadzone_set(U.ndof_deadzone);
+
        BLF_lang_set(NULL);
 
        if (!G.background) {