[Bf-blender-cvs] [e20c825b05e] blender2.8: Manipulator: modal callback can now cancel & pass events

Campbell Barton noreply at git.blender.org
Thu Aug 24 09:01:51 CEST 2017


Commit: e20c825b05e00954995fe2ed74e7fb409d09abe8
Author: Campbell Barton
Date:   Thu Aug 24 17:04:28 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBe20c825b05e00954995fe2ed74e7fb409d09abe8

Manipulator: modal callback can now cancel & pass events

Re-use operator return flags for manipulator modal & invoke,
this means manipulators can allow navigation or other events to be
handled as they run - see T52499

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

M	release/scripts/templates_py/manipulator_custom_geometry.py
M	source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
M	source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
M	source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
M	source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c
M	source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
M	source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/editors/transform/transform_manipulator2d.c
M	source/blender/makesrna/intern/rna_wm_manipulator.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
M	source/blender/windowmanager/manipulators/wm_manipulator_fn.h
M	source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h

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

diff --git a/release/scripts/templates_py/manipulator_custom_geometry.py b/release/scripts/templates_py/manipulator_custom_geometry.py
index 38f7a358b2a..0f1ab72f9ef 100644
--- a/release/scripts/templates_py/manipulator_custom_geometry.py
+++ b/release/scripts/templates_py/manipulator_custom_geometry.py
@@ -93,6 +93,7 @@ class MyCustomShapeWidget(Manipulator):
     def invoke(self, context, event):
         self.init_mouse_y = event.mouse_y
         self.init_value = self.target_get_value("offset")
+        return {'RUNNING_MODAL'}
 
     def exit(self, context, cancel):
         context.area.header_text_set()
@@ -108,6 +109,7 @@ class MyCustomShapeWidget(Manipulator):
         value = self.init_value + delta
         self.target_set_value("offset", value)
         context.area.header_text_set("My Manipulator: %.4f" % value)
+        return {'RUNNING_MODAL'}
 
 
 class MyCustomShapeWidgetGroup(ManipulatorGroup):
diff --git a/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
index 1185bec2a2d..67583d28668 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
@@ -123,7 +123,7 @@ static void manipulator_arrow2d_setup(wmManipulator *mpr)
 	mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
 }
 
-static void manipulator_arrow2d_invoke(
+static int manipulator_arrow2d_invoke(
         bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
 {
 	ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
@@ -132,6 +132,8 @@ static void manipulator_arrow2d_invoke(
 	WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
 
 	mpr->interaction_data = inter;
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 static int manipulator_arrow2d_test_select(
diff --git a/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
index 61f5a7b2786..5c984de2e27 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
@@ -235,7 +235,7 @@ static void manipulator_arrow_draw(const bContext *UNUSED(C), wmManipulator *mpr
  * Calculate arrow offset independent from prop min value,
  * meaning the range will not be offset by min value first.
  */
-static void manipulator_arrow_modal(
+static int manipulator_arrow_modal(
         bContext *C, wmManipulator *mpr, const wmEvent *event,
         eWM_ManipulatorTweak tweak_flag)
 {
@@ -352,6 +352,8 @@ static void manipulator_arrow_modal(
 	/* tag the region for redraw */
 	ED_region_tag_redraw(ar);
 	WM_event_add_mousemove(C);
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 static void manipulator_arrow_setup(wmManipulator *mpr)
@@ -363,7 +365,7 @@ static void manipulator_arrow_setup(wmManipulator *mpr)
 	arrow->data.range_fac = 1.0f;
 }
 
-static void manipulator_arrow_invoke(
+static int manipulator_arrow_invoke(
         bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
 {
 	ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
@@ -384,6 +386,8 @@ static void manipulator_arrow_invoke(
 	WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
 
 	mpr->interaction_data = inter;
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 static void manipulator_arrow_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
diff --git a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
index 40ef5f48492..311c8acde9e 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
@@ -479,7 +479,7 @@ static void manipulator_rect_transform_setup(wmManipulator *mpr)
 	mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
 }
 
-static void manipulator_rect_transform_invoke(
+static int manipulator_rect_transform_invoke(
         bContext *C, wmManipulator *mpr, const wmEvent *event)
 {
 	RectTransformInteraction *data = MEM_callocN(sizeof(RectTransformInteraction), "cage_interaction");
@@ -493,9 +493,11 @@ static void manipulator_rect_transform_invoke(
 	}
 
 	mpr->interaction_data = data;
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
-static void manipulator_rect_transform_modal(
+static int manipulator_rect_transform_modal(
         bContext *C, wmManipulator *mpr, const wmEvent *event,
         eWM_ManipulatorTweak UNUSED(tweak_flag))
 {
@@ -514,7 +516,7 @@ static void manipulator_rect_transform_modal(
 	if (manipulator_window_project_2d(
 	        C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, point_local) == false)
 	{
-		return;
+		return OPERATOR_RUNNING_MODAL;
 	}
 
 	float value_x = (point_local[0] - data->orig_mouse[0]);
@@ -636,6 +638,8 @@ static void manipulator_rect_transform_modal(
 
 	/* tag the region for redraw */
 	ED_region_tag_redraw(CTX_wm_region(C));
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 static void manipulator_rect_transform_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
diff --git a/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c
index f7511c581ed..257ccfa88d8 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c
@@ -71,7 +71,7 @@
 /* to use custom dials exported to geom_dial_manipulator.c */
 // #define USE_MANIPULATOR_CUSTOM_DIAL
 
-static void manipulator_dial_modal(
+static int manipulator_dial_modal(
         bContext *C, wmManipulator *mpr, const wmEvent *event,
         eWM_ManipulatorTweak tweak_flag);
 
@@ -384,7 +384,7 @@ static void manipulator_dial_draw(const bContext *C, wmManipulator *mpr)
 	}
 }
 
-static void manipulator_dial_modal(
+static int manipulator_dial_modal(
         bContext *C, wmManipulator *mpr, const wmEvent *event,
         eWM_ManipulatorTweak UNUSED(tweak_flag))
 {
@@ -408,6 +408,7 @@ static void manipulator_dial_modal(
 	if (WM_manipulator_target_property_is_valid(mpr_prop)) {
 		WM_manipulator_target_property_value_set(C, mpr, mpr_prop, inter->init_prop_angle + angle_delta);
 	}
+	return OPERATOR_RUNNING_MODAL;
 }
 
 
@@ -419,7 +420,7 @@ static void manipulator_dial_setup(wmManipulator *mpr)
 	copy_v3_v3(mpr->matrix_basis[2], dir_default);
 }
 
-static void manipulator_dial_invoke(
+static int manipulator_dial_invoke(
         bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
 {
 	DialInteraction *inter = MEM_callocN(sizeof(DialInteraction), __func__);
@@ -433,6 +434,8 @@ static void manipulator_dial_invoke(
 	}
 
 	mpr->interaction_data = inter;
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
index 38e350762c1..a714dd0f061 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
@@ -77,7 +77,7 @@ static void manipulator_grab_matrix_basis_get(const wmManipulator *mpr, float r_
 	add_v3_v3(r_matrix[3], grab->prop_co);
 }
 
-static void manipulator_grab_modal(
+static int manipulator_grab_modal(
         bContext *C, wmManipulator *mpr, const wmEvent *event,
         eWM_ManipulatorTweak tweak_flag);
 
@@ -236,7 +236,7 @@ static void manipulator_grab_draw(const bContext *C, wmManipulator *mpr)
 	glDisable(GL_BLEND);
 }
 
-static void manipulator_grab_modal(
+static int manipulator_grab_modal(
         bContext *C, wmManipulator *mpr, const wmEvent *event,
         eWM_ManipulatorTweak UNUSED(tweak_flag))
 {
@@ -255,7 +255,7 @@ static void manipulator_grab_modal(
 		    (manipulator_window_project_2d(
 		         C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, mval_proj_curr) == false))
 		{
-			return;
+			return OPERATOR_RUNNING_MODAL;
 		}
 		sub_v2_v2v2(prop_delta, mval_proj_curr, mval_proj_init);
 		prop_delta[2] = 0.0f;
@@ -269,9 +269,11 @@ static void manipulator_grab_modal(
 	}
 
 	ED_region_tag_redraw(ar);
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
-static void manipulator_grab_invoke(
+static int manipulator_grab_invoke(
         bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
 {
 	GrabInteraction *inter = MEM_callocN(sizeof(GrabInteraction), __func__);
@@ -298,6 +300,8 @@ static void manipulator_grab_invoke(
 	}
 
 	mpr->interaction_data = inter;
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 
diff --git a/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
index 44878a24430..eea14f2033f 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
@@ -145,7 +145,7 @@ static void manipulator_primitive_setup(wmManipulator *mpr)
 	mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
 }
 
-static void manipulator_primitive_invoke(
+static int manipulator_primitive_invoke(
         bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
 {
 	ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
@@ -153,6 +153,8 @@ static void manipulator_primitive_invoke(
 	WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
 
 	mpr->interaction_data = inter;
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manip

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list