3D View: preferences for rotate sensitivity
authorCampbell Barton <ideasman42@gmail.com>
Sat, 3 Aug 2019 15:22:38 +0000 (01:22 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 3 Aug 2019 15:31:25 +0000 (01:31 +1000)
Added because the current default is too fast
for painting with tablets, see D5385.

Turntable and trackball have different settings because
turn-table uses an angle-per-pixel, where as trackball
values are relative to the view-port size so a scale is used.

The sensitivity is scaled by the pixel size so hi-dpi views don't rotate faster.

release/datafiles/userdef/userdef_default.c
release/scripts/startup/bl_ui/space_userpref.py
source/blender/blenloader/intern/versioning_280.c
source/blender/editors/space_view3d/view3d_edit.c
source/blender/makesdna/DNA_userdef_types.h
source/blender/makesrna/intern/rna_userdef.c

index e41e801c2f2f87ab678a3dedf834b51efb09a182..73146e5912370feafea5b34b4d11f6db3dd8ece8 100644 (file)
 
 /* Preferences Data File 'U_default'. */
 
+/* For constants. */
+#include <math.h>
+
 #include "DNA_userdef_types.h"
 #include "DNA_curve_types.h"
 
+#include "BLI_math_rotation.h"
+
 #include "BKE_blender_version.h"
 
 const UserDef U_default = {
@@ -153,6 +158,8 @@ const UserDef U_default = {
     .autokey_flag = AUTOKEY_FLAG_XYZ2RGB,
     .text_render = 0,
     .navigation_mode = VIEW_NAVIGATION_WALK,
+    .view_rotate_sensitivity_turntable = DEG2RAD(0.4),
+    .view_rotate_sensitivity_trackball = 1.0f,
 
     /** Initialized by #BKE_colorband_init. */
     .coba_weight = {0},
index 6a18766fae24571a6f039df5887575590a271a53..08f36bb15bb9a2656abde43218f74f2cfdd6cced 100644 (file)
@@ -1459,6 +1459,11 @@ class USERPREF_PT_navigation_orbit(PreferencePanel, Panel):
         flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
 
         flow.row().prop(inputs, "view_rotate_method", expand=True)
+        if inputs.view_rotate_method == 'TURNTABLE':
+            flow.prop(inputs, "view_rotate_sensitivity_turntable")
+        else:
+            flow.prop(inputs, "view_rotate_sensitivity_trackball")
+
         flow.prop(inputs, "use_rotate_around_active")
         flow.prop(inputs, "use_auto_perspective")
         flow.prop(inputs, "use_mouse_depth_navigate")
index 1a79b7c9b5a83aed1b9d825fbcc3081de1f85603..5780221bcc54b691a548fab43645fc23d74a7e1d 100644 (file)
@@ -3551,5 +3551,9 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
 
   {
     /* Versioning code until next subversion bump goes here. */
+    if (U.view_rotate_sensitivity_turntable == 0) {
+      U.view_rotate_sensitivity_turntable = DEG2RADF(0.4f);
+      U.view_rotate_sensitivity_trackball = 1.0f;
+    }
   }
 }
index 0d0cfce07d7b4f69f63c901505de2098939dc764..62673d9bd5a8b8f33aa7c5672f645e05ff916d35 100644 (file)
@@ -729,6 +729,10 @@ static void viewrotate_apply(ViewOpsData *vod, const int event_xy[2])
 
     angle = (len_v3(dvec) / (2.0f * TRACKBALLSIZE)) * (float)M_PI;
 
+    /* Before applying the sensitivity this is rotating 1:1,
+     * where the cursor would match the surface of a sphere in the view. */
+    angle *= U.view_rotate_sensitivity_trackball;
+
     /* Allow for rotation beyond the interval [-pi, pi] */
     angle = angle_wrap_rad(angle);
 
@@ -751,11 +755,8 @@ static void viewrotate_apply(ViewOpsData *vod, const int event_xy[2])
     const float zvec_global[3] = {0.0f, 0.0f, 1.0f};
     float xaxis[3];
 
-    /* Sensitivity will control how fast the viewport rotates.  0.007 was
-     * obtained experimentally by looking at viewport rotation sensitivities
-     * on other modeling programs. */
-    /* Perhaps this should be a configurable user parameter. */
-    const float sensitivity = 0.007f;
+    /* Radians per-pixel. */
+    const float sensitivity = U.view_rotate_sensitivity_turntable / U.pixelsize;
 
     /* Get the 3x3 matrix and its inverse from the quaternion */
     quat_to_mat3(m, vod->curr.viewquat);
index 2d3d091c65da1d2c1263ae7fc6386ca0c683d851..b90f1fd16dfecbf3d465928fa3b658bddfae02d8 100644 (file)
@@ -735,11 +735,16 @@ typedef struct UserDef {
   short autokey_flag;
 
   /** Options for text rendering. */
-  short text_render;
-  char _pad9;
-
+  char text_render;
   char navigation_mode;
 
+  char _pad9[2];
+
+  /** Turn-table rotation amount per-pixel in radians. Scaled with DPI. */
+  float view_rotate_sensitivity_turntable;
+  /** Track-ball rotation scale. */
+  float view_rotate_sensitivity_trackball;
+
   /** From texture.h. */
   struct ColorBand coba_weight;
 
index 7b7d9e71cd27d8b76b81fc57501b5d7ae323a9e3..e649a95fb06462b12c842b1d6a43ae75456e33d5 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "BLI_utildefines.h"
 #include "BLI_math_base.h"
+#include "BLI_math_rotation.h"
 
 #include "BLT_translation.h"
 
@@ -5230,6 +5231,20 @@ static void rna_def_userdef_input(BlenderRNA *brna)
   RNA_def_property_struct_type(prop, "WalkNavigation");
   RNA_def_property_ui_text(prop, "Walk Navigation", "Settings for walk navigation mode");
 
+  prop = RNA_def_property(srna, "view_rotate_sensitivity_turntable", PROP_FLOAT, PROP_ANGLE);
+  RNA_def_property_range(prop, DEG2RADF(0.001f), DEG2RADF(15.0f));
+  RNA_def_property_float_default(prop, DEG2RADF(0.4f));
+  RNA_def_property_ui_range(prop, DEG2RADF(0.001f), DEG2RADF(15.0f), 1.0f, 2);
+  RNA_def_property_ui_text(prop,
+                           "Rotate Sensitivity",
+                           "Rotation amount per-pixel to control how fast the viewport rotates");
+
+  prop = RNA_def_property(srna, "view_rotate_sensitivity_trackball", PROP_FLOAT, PROP_FACTOR);
+  RNA_def_property_range(prop, 0.1f, 10.0f);
+  RNA_def_property_float_default(prop, 1.0f);
+  RNA_def_property_ui_range(prop, 0.1f, 2.0f, 0.01f, 2);
+  RNA_def_property_ui_text(prop, "Rotate Sensitivity", "Scale trackball rotation sensitivity");
+
   /* tweak tablet & mouse preset */
   prop = RNA_def_property(srna, "drag_threshold_mouse", PROP_INT, PROP_PIXEL);
   RNA_def_property_range(prop, 1, 255);