[Bf-blender-cvs] [b9dbd5e85e5] blender2.8: Manipulators: disable 3D widgets w/ animation

Campbell Barton noreply at git.blender.org
Wed Jan 24 08:12:38 CET 2018


Commit: b9dbd5e85e55936be3add46f471f4de681714ff9
Author: Campbell Barton
Date:   Wed Jan 24 17:31:11 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBb9dbd5e85e55936be3add46f471f4de681714ff9

Manipulators: disable 3D widgets w/ animation

Workaround for T53078.

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

M	source/blender/windowmanager/manipulators/WM_manipulator_api.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulator.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c

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

diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
index 7a31f4e6f1f..097af2dadcc 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_api.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
@@ -335,6 +335,6 @@ void WM_manipulator_group_type_unlink_delayed_ptr(
 void WM_manipulator_group_type_unlink_delayed(const char *idname);
 
 /* Utilities */
-void WM_manipulator_group_type_is_any_selected(const char *idname);
+bool WM_manipulator_context_check_drawstep(const struct bContext *C, eWM_ManipulatorMapDrawStep step);
 
 #endif  /* __WM_MANIPULATOR_API_H__ */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
index dff8d8b4e6c..3a78dd32f94 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
@@ -735,3 +735,28 @@ void WM_manipulator_properties_free(PointerRNA *ptr)
 }
 
 /** \} */
+
+/** \name General Utilities
+ *
+ * \{ */
+
+bool WM_manipulator_context_check_drawstep(const struct bContext *C, eWM_ManipulatorMapDrawStep step)
+{
+	switch (step) {
+		case WM_MANIPULATORMAP_DRAWSTEP_2D:
+		{
+			break;
+		}
+		case WM_MANIPULATORMAP_DRAWSTEP_3D:
+		{
+			wmWindowManager *wm = CTX_wm_manager(C);
+			if (ED_screen_animation_playing(wm)) {
+				return false;
+			}
+			break;
+		}
+	}
+	return true;
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
index d051c93d892..8479f0b444d 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
@@ -445,6 +445,10 @@ void WM_manipulatormap_draw(
         wmManipulatorMap *mmap, const bContext *C,
         const eWM_ManipulatorMapDrawStep drawstep)
 {
+	if (!WM_manipulator_context_check_drawstep(C, drawstep)) {
+		return;
+	}
+
 	ListBase draw_manipulators = {NULL};
 
 	manipulatormap_prepare_drawing(mmap, C, &draw_manipulators, drawstep);
@@ -550,6 +554,7 @@ static wmManipulator *manipulator_find_intersected_3d(
 	};
 
 	*r_part = 0;
+
 	/* set up view matrices */
 	view3d_operator_needs_opengl(C);
 
@@ -588,6 +593,11 @@ wmManipulator *wm_manipulatormap_highlight_find(
 {
 	wmManipulator *mpr = NULL;
 	ListBase visible_3d_manipulators = {NULL};
+	bool do_step[WM_MANIPULATORMAP_DRAWSTEP_MAX];
+
+	for (int i = 0; i < ARRAY_SIZE(do_step); i++) {
+		do_step[i] = WM_manipulator_context_check_drawstep(C, i);
+	}
 
 	for (wmManipulatorGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
 
@@ -599,25 +609,28 @@ wmManipulator *wm_manipulatormap_highlight_find(
 		}
 
 		if (wm_manipulatorgroup_is_visible(mgroup, C)) {
+			eWM_ManipulatorMapDrawStep step;
 			if (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
-				if ((mmap->update_flag[WM_MANIPULATORMAP_DRAWSTEP_3D] & MANIPULATORMAP_IS_REFRESH_CALLBACK) &&
-				    mgroup->type->refresh)
-				{
-					mgroup->type->refresh(C, mgroup);
-					/* cleared below */
-				}
-				wm_manipulatorgroup_intersectable_manipulators_to_list(mgroup, &visible_3d_manipulators);
+				step = WM_MANIPULATORMAP_DRAWSTEP_3D;
 			}
 			else {
-				if ((mmap->update_flag[WM_MANIPULATORMAP_DRAWSTEP_2D] & MANIPULATORMAP_IS_REFRESH_CALLBACK) &&
-				    mgroup->type->refresh)
+				step = WM_MANIPULATORMAP_DRAWSTEP_2D;
+			}
+
+			if (do_step[step]) {
+				if ((mmap->update_flag[step] & MANIPULATORMAP_IS_REFRESH_CALLBACK) &&
+					(mgroup->type->refresh != NULL))
 				{
 					mgroup->type->refresh(C, mgroup);
 					/* cleared below */
 				}
-
-				if ((mpr = wm_manipulatorgroup_find_intersected_mainpulator(mgroup, C, event, r_part))) {
-					break;
+				if (step == WM_MANIPULATORMAP_DRAWSTEP_3D) {
+					wm_manipulatorgroup_intersectable_manipulators_to_list(mgroup, &visible_3d_manipulators);
+				}
+				else if (step == WM_MANIPULATORMAP_DRAWSTEP_2D) {
+					if ((mpr = wm_manipulatorgroup_find_intersected_mainpulator(mgroup, C, event, r_part))) {
+						break;
+					}
 				}
 			}
 		}



More information about the Bf-blender-cvs mailing list