Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-01-24 09:31:11 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-01-24 10:23:49 +0300
commitb9dbd5e85e55936be3add46f471f4de681714ff9 (patch)
tree00ef22bfcccdd151b2dda1bc10f910445d9ca7bf /source
parent0ff968eaf56830d19366e060b149dc32185bc063 (diff)
Manipulators: disable 3D widgets w/ animation
Workaround for T53078.
Diffstat (limited to 'source')
-rw-r--r--source/blender/windowmanager/manipulators/WM_manipulator_api.h2
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator.c25
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c37
3 files changed, 51 insertions, 13 deletions
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;
+ }
}
}
}