[Bf-blender-cvs] [ef09aff61cd] master: Preferences: add threshold for cursor motion

Campbell Barton noreply at git.blender.org
Wed Mar 20 12:20:23 CET 2019


Commit: ef09aff61cdc4dc940a022c9e0c7c0ad9519780f
Author: Campbell Barton
Date:   Wed Mar 20 22:14:13 2019 +1100
Branches: master
https://developer.blender.org/rBef09aff61cdc4dc940a022c9e0c7c0ad9519780f

Preferences: add threshold for cursor motion

A hard coded threshold was used to ignore cursor motion,
make this a preference since tablet users may want to increase it
since a pen hovering isn't as easy to keep still as a mouse.

Resolves T56278

===================================================================

M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/blenkernel/BKE_blender_version.h
M	source/blender/blenloader/intern/versioning_userdef.c
M	source/blender/editors/armature/armature_select.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/windowmanager/WM_types.h

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index fadc4f4b07b..1740731c301 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1384,6 +1384,7 @@ class USERPREF_PT_input_mouse(PreferencePanel, Panel):
         flow.prop(inputs, "use_mouse_continuous")
         flow.prop(inputs, "use_drag_immediately")
         flow.prop(inputs, "drag_threshold")
+        flow.prop(inputs, "move_threshold")
         flow.prop(inputs, "mouse_double_click_time", text="Double Click Speed")
 
 
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index cad733f774d..62934b702f8 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -24,7 +24,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         280
-#define BLENDER_SUBVERSION      50
+#define BLENDER_SUBVERSION      51
 /* Several breakages with 280, e.g. collections vs layers */
 #define BLENDER_MINVERSION      280
 #define BLENDER_MINSUBVERSION   0
diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c
index 14d10bbf85e..ee6b0ab9533 100644
--- a/source/blender/blenloader/intern/versioning_userdef.c
+++ b/source/blender/blenloader/intern/versioning_userdef.c
@@ -481,6 +481,10 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
 		BKE_addon_remove_safe(&userdef->addons, "io_scene_3ds");
 	}
 
+	if (!USER_VERSION_ATLEAST(280, 51)) {
+		userdef->move_threshold = 2;
+	}
+
 	/**
 	 * Include next version bump.
 	 */
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index 8e58f14ec99..b10db511eb4 100644
--- a/source/blender/editors/armature/armature_select.c
+++ b/source/blender/editors/armature/armature_select.c
@@ -421,7 +421,7 @@ static EditBone *get_nearest_editbonepoint(
 
 		if (vc->v3d->shading.type > OB_WIRE) {
 			do_nearest = true;
-			if (len_manhattan_v2v2_int(vc->mval, last_mval) < WM_EVENT_CURSOR_MOTION_THRESHOLD) {
+			if (len_manhattan_v2v2_int(vc->mval, last_mval) <= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
 				do_nearest = false;
 			}
 		}
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 50ff2c1e7ff..f31e90370a3 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -8136,7 +8136,10 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but)
 					/* Drag on a hold button (used in the toolbar) now opens it immediately. */
 					if (data->hold_action_timer) {
 						if (but->flag & UI_SELECT) {
-							if (len_manhattan_v2v2_int(&event->x, &event->prevx) >= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
+							if (len_manhattan_v2v2_int(&event->x, &event->prevx) <= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
+								/* pass */
+							}
+							else {
 								WM_event_remove_timer(data->wm, data->window, data->hold_action_timer);
 								data->hold_action_timer = WM_event_add_timer(data->wm, data->window, TIMER, 0.0f);
 							}
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index b4dfcf9ab66..4ce21013924 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -2511,7 +2511,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, const wmEvent *event)
 		}
 		case LEFTMOUSE:
 			if (event->val == KM_RELEASE) {
-				if (len_manhattan_v2v2_int(&event->x, &rmd->origx) < WM_EVENT_CURSOR_MOTION_THRESHOLD) {
+				if (len_manhattan_v2v2_int(&event->x, &rmd->origx) <= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
 					if (rmd->ar->flag & RGN_FLAG_HIDDEN) {
 						region_scale_toggle_hidden(C, rmd);
 					}
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index d7128b7d21a..78a33a01908 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -1410,7 +1410,7 @@ static int mixed_bones_object_selectbuffer_extended(
 	if (use_cycle) {
 		if (v3d->shading.type > OB_WIRE) {
 			do_nearest = true;
-			if (len_manhattan_v2v2_int(mval, last_mval) < WM_EVENT_CURSOR_MOTION_THRESHOLD) {
+			if (len_manhattan_v2v2_int(mval, last_mval) <= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
 				do_nearest = false;
 			}
 		}
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 1da28b4aa2d..d44b149d3fd 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -723,8 +723,8 @@ typedef struct UserDef {
 	float gpencil_new_layer_col[4];
 
 	short tweak_threshold;
+	char move_threshold;
 	char navigation_mode;
-	char _pad10;
 
 	char font_path_ui[1024];
 	char font_path_ui_mono[1024];
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index f8908cba195..a2de1712960 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -4713,6 +4713,13 @@ static void rna_def_userdef_input(BlenderRNA *brna)
 	                         "Number of pixels you have to drag before a tweak/drag event is triggered "
 	                         "(otherwise click events are detected)");
 
+	prop = RNA_def_property(srna, "move_threshold", PROP_INT, PROP_PIXEL);
+	RNA_def_property_range(prop, 0, 255);
+	RNA_def_property_ui_range(prop, 0, 10, 1, -1);
+	RNA_def_property_ui_text(prop, "Motion Threshold",
+	                         "Number of pixels you have to before the cursor is considered to have moved "
+	                         "(used for cycling selected items on successive clicks)");
+
 	/* tablet pressure curve */
 	prop = RNA_def_property(srna, "pressure_threshold_max", PROP_FLOAT, PROP_FACTOR);
 	RNA_def_property_range(prop, 0.0f, 1.0f);
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 8ad63cb92c0..96560b423a1 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -499,8 +499,10 @@ typedef struct wmEvent {
  * Values below are ignored when detecting if the user interntionally moved the cursor.
  * Keep this very small since it's used for selection cycling for eg,
  * where we want intended adjustments to pass this threshold and select new items.
+ *
+ * Always check for <= this value since it may be zero.
  */
-#define WM_EVENT_CURSOR_MOTION_THRESHOLD (3 * U.dpi_fac)
+#define WM_EVENT_CURSOR_MOTION_THRESHOLD ((float)U.move_threshold * U.dpi_fac)
 
 /* ************** custom wmEvent data ************** */
 typedef struct wmTabletData {



More information about the Bf-blender-cvs mailing list