[Bf-blender-cvs] [b37c589319e] custom-manipulators: Further changes to manipulator API's.

Campbell Barton noreply at git.blender.org
Tue Jun 13 16:09:38 CEST 2017


Commit: b37c589319ecf8117fdb0ed7a14a3889beb108e3
Author: Campbell Barton
Date:   Wed Jun 14 00:04:35 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBb37c589319ecf8117fdb0ed7a14a3889beb108e3

Further changes to manipulator API's.

These changes are intended for operators to register their own
widget-types temporarily, so _every_ operator that uses manipulators
doesn't need to keep them continuously polling the view to check if the
operator is running.

- Register `wmManipulatorGroupType` globally (like all other RNA types).
- Add `wmManipulatorGroupTypeRef` for type-maps to reference groups.
- Remove `wmManipulatorMapType.idname` (spaceid & regionid are enough info).
- Add PERSISTENT flag for `wmManipulatorGroupType`
  intended for use with operators so loading a new file for eg doesn't
  keep the manipulator type around.

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

M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_node/node_manipulators.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_manipulators.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/makesrna/intern/rna_wm_api.c
M	source/blender/makesrna/intern/rna_wm_manipulator.c
M	source/blender/python/intern/bpy_manipulator_wrap.c
M	source/blender/windowmanager/CMakeLists.txt
M	source/blender/windowmanager/intern/wm_init_exit.c
M	source/blender/windowmanager/manipulators/WM_manipulator_api.h
M	source/blender/windowmanager/manipulators/WM_manipulator_types.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulator.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
A	source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup_type.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
M	source/blender/windowmanager/manipulators/wm_manipulator_fn.h
M	source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index c17391d8a54..d54a62dc7a1 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -594,6 +594,8 @@ static void IMAGE_WGT_manipulator2d(wmManipulatorGroupType *wgt)
 	wgt->name = "UV Transform Manipulator";
 	wgt->idname = "IMAGE_WGT_manipulator2d";
 
+	wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
 	wgt->poll = ED_widgetgroup_manipulator2d_poll;
 	wgt->setup = ED_widgetgroup_manipulator2d_setup;
 	wgt->refresh = ED_widgetgroup_manipulator2d_refresh;
@@ -602,13 +604,10 @@ static void IMAGE_WGT_manipulator2d(wmManipulatorGroupType *wgt)
 
 static void image_widgets(void)
 {
-	const struct wmManipulatorMapType_Params wmap_params = {
-		.idname = "Image_UV",
-		.spaceid = SPACE_IMAGE, .regionid = RGN_TYPE_WINDOW
-	};
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(&wmap_params);
+	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(
+	        &(const struct wmManipulatorMapType_Params){SPACE_IMAGE, RGN_TYPE_WINDOW});
 
-	WM_manipulatorgrouptype_append(wmaptype, IMAGE_WGT_manipulator2d);
+	WM_manipulatorgrouptype_append_and_link(wmaptype, IMAGE_WGT_manipulator2d);
 }
 
 /************************** main region ***************************/
@@ -675,9 +674,12 @@ static void image_main_region_init(wmWindowManager *wm, ARegion *ar)
 	// UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy);
 
 	/* manipulators */
-	if (!ar->manipulator_map) {
-		ar->manipulator_map = WM_manipulatormap_new_from_type(&(const struct wmManipulatorMapType_Params) {
-		        "Image_UV", SPACE_IMAGE, RGN_TYPE_WINDOW});
+	if (ar->manipulator_map == NULL) {
+		const struct wmManipulatorMapType_Params wmap_params = {
+			.spaceid = SPACE_IMAGE,
+			.regionid = RGN_TYPE_WINDOW,
+		};
+		ar->manipulator_map = WM_manipulatormap_new_from_type(&wmap_params);
 	}
 	WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
 
diff --git a/source/blender/editors/space_node/node_manipulators.c b/source/blender/editors/space_node/node_manipulators.c
index 6eb03a6eb26..3b590c0a59e 100644
--- a/source/blender/editors/space_node/node_manipulators.c
+++ b/source/blender/editors/space_node/node_manipulators.c
@@ -110,6 +110,8 @@ void NODE_WGT_backdrop_transform(wmManipulatorGroupType *wgt)
 	wgt->name = "Backdrop Transform Widgets";
 	wgt->idname = "NODE_WGT_backdrop_transform";
 
+	wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
 	wgt->poll = WIDGETGROUP_node_transform_poll;
 	wgt->setup = WIDGETGROUP_node_transform_setup;
 	wgt->refresh = WIDGETGROUP_node_transform_refresh;
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 665808c500f..6a8a425f0d1 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -646,9 +646,9 @@ static void node_main_region_init(wmWindowManager *wm, ARegion *ar)
 	UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
 
 	/* manipulators stay in the background for now - quick patchjob to make sure nodes themselves work */
-	if (!ar->manipulator_map) {
-		ar->manipulator_map = WM_manipulatormap_new_from_type(&(const struct wmManipulatorMapType_Params) {
-		        "Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW});
+	if (ar->manipulator_map == NULL) {
+		ar->manipulator_map = WM_manipulatormap_new_from_type(
+		        &(const struct wmManipulatorMapType_Params){SPACE_NODE, RGN_TYPE_WINDOW});
 	}
 
 	WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
@@ -859,9 +859,9 @@ static int node_context(const bContext *C, const char *member, bContextDataResul
 static void node_widgets(void)
 {
 	/* create the widgetmap for the area here */
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(&(const struct wmManipulatorMapType_Params) {
-	        "Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW});
-	WM_manipulatorgrouptype_append(wmaptype, NODE_WGT_backdrop_transform);
+	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(
+	        &(const struct wmManipulatorMapType_Params){SPACE_NODE, RGN_TYPE_WINDOW});
+	WM_manipulatorgrouptype_append_and_link(wmaptype, NODE_WGT_backdrop_transform);
 }
 
 static void node_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID *new_id)
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 0af2d54eaa2..002be9174ad 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -491,9 +491,9 @@ static void view3d_main_region_init(wmWindowManager *wm, ARegion *ar)
 	ListBase *lb;
 	wmKeyMap *keymap;
 
-	if (!ar->manipulator_map) {
-		ar->manipulator_map = WM_manipulatormap_new_from_type(&(const struct wmManipulatorMapType_Params) {
-		        "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW});
+	if (ar->manipulator_map == NULL) {
+		ar->manipulator_map = WM_manipulatormap_new_from_type(
+		        &(const struct wmManipulatorMapType_Params) {SPACE_VIEW3D, RGN_TYPE_WINDOW});
 	}
 
 	WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
@@ -731,18 +731,15 @@ static void view3d_dropboxes(void)
 
 static void view3d_widgets(void)
 {
-	const struct wmManipulatorMapType_Params wmap_params = {
-		.idname = "View3D",
-		.spaceid = SPACE_VIEW3D, .regionid = RGN_TYPE_WINDOW,
-	};
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(&wmap_params);
-
-	WM_manipulatorgrouptype_append(wmaptype, TRANSFORM_WGT_manipulator);
-	WM_manipulatorgrouptype_append(wmaptype, VIEW3D_WGT_lamp);
-	WM_manipulatorgrouptype_append(wmaptype, VIEW3D_WGT_force_field);
-	WM_manipulatorgrouptype_append(wmaptype, VIEW3D_WGT_camera);
-
-	WM_manipulatorgrouptype_append(wmaptype, VIEW3D_WGT_armature_facemaps);
+	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(
+	        &(const struct wmManipulatorMapType_Params){SPACE_VIEW3D, RGN_TYPE_WINDOW});
+
+	WM_manipulatorgrouptype_append_and_link(wmaptype, TRANSFORM_WGT_manipulator);
+	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_lamp);
+	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_force_field);
+	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_camera);
+
+	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_armature_facemaps);
 }
 
 
diff --git a/source/blender/editors/space_view3d/view3d_manipulators.c b/source/blender/editors/space_view3d/view3d_manipulators.c
index 28d0c38d447..2a0ba6bc469 100644
--- a/source/blender/editors/space_view3d/view3d_manipulators.c
+++ b/source/blender/editors/space_view3d/view3d_manipulators.c
@@ -112,11 +112,13 @@ void VIEW3D_WGT_lamp(wmManipulatorGroupType *wgt)
 	wgt->name = "Lamp Widgets";
 	wgt->idname = "VIEW3D_WGT_lamp";
 
+	wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+	              WM_MANIPULATORGROUPTYPE_3D |
+	              WM_MANIPULATORGROUPTYPE_SCALE_3D);
+
 	wgt->poll = WIDGETGROUP_lamp_poll;
 	wgt->setup = WIDGETGROUP_lamp_setup;
 	wgt->refresh = WIDGETGROUP_lamp_refresh;
-
-	wgt->flag |= (WM_MANIPULATORGROUPTYPE_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
 }
 
 /** \} */
@@ -284,11 +286,12 @@ void VIEW3D_WGT_camera(wmManipulatorGroupType *wgt)
 	wgt->name = "Camera Widgets";
 	wgt->idname = "VIEW3D_WGT_camera";
 
+	wgt->flag = (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+	             WM_MANIPULATORGROUPTYPE_3D);
+
 	wgt->poll = WIDGETGROUP_camera_poll;
 	wgt->setup = WIDGETGROUP_camera_setup;
 	wgt->refresh = WIDGETGROUP_camera_refresh;
-
-	wgt->flag |= WM_MANIPULATORGROUPTYPE_3D;
 }
 
 /** \} */
@@ -352,11 +355,12 @@ void VIEW3D_WGT_force_field(wmManipulatorGroupType *wgt)
 	wgt->name = "Force Field Widgets";
 	wgt->idname = "VIEW3D_WGT_force_field";
 
+	wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+	              WM_MANIPULATORGROUPTYPE_3D);
+
 	wgt->poll = WIDGETGROUP_forcefield_poll;
 	wgt->setup = WIDGETGROUP_forcefield_init;
 	wgt->refresh = WIDGETGROUP_forcefield_refresh;
-
-	wgt->flag |= WM_MANIPULATORGROUPTYPE_3D;
 }
 
 /** \} */
@@ -553,15 +557,16 @@ void VIEW3D_WGT_armature_facemaps(wmManipulatorGroupType *wgt)
 	wgt->name = "Face Map Widgets";
 	wgt->idname = "VIEW3D_WGT_armature_facemaps";
 
+	wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+	              WM_MANIPULATORGROUPTYPE_3D |
+	              WM_MANIPULATORGROUPTYPE_SCALE_3D |
+	              WM_MANIPULATORGROUPTYPE_SELECT);
+
 	wgt->poll = WIDGETGROUP_armature_facemaps_poll;
 	wgt->setup = WIDGETGROUP_armature_facemaps_init;
 	wgt->refresh = WIDGETGROUP_armature_facemaps_refresh;
 
-	wgt->setup_keymap = WM_manipulatorgroup_keymap_common_sel;
-
-	wgt->flag |= (WM_MANIPULATORGROUPTYPE_3D |
-	              WM_MANIPULATORGROUPTYPE_SCALE_3D |
-	              WM_MANIPULATORGROUPTYPE_SELECT);
+	wgt->setup_keymap = WM_manipulatorgroup_keymap_common_select;
 }
 
 /** \} */
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index eee9919efd4..b705320879a 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1345,12 +1345,14 @@ void TRANSFORM_WGT_manipulator(wmManipulatorGroupType *wgt)
 	wgt->name = "Transform Manipulator";
 	wgt->idname = "TRANSFORM_WGT_manipulator";
 
+	wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+	              WM_MANIPULATORGROUPTYPE_3D |
+	              WM_MANIPULATORGROUPTYPE_SCALE_3D);
+
 	wgt->poll = WIDGETGROUP_manipulator_poll;
 	wgt->setup = WIDGETGROUP_manipulator_init;
 	wgt->refresh = WIDGETGROUP_manipulator_refresh;
 	wgt->draw_prepare = WIDGETGROUP_manipulator_draw_prepare;
-
-	wgt->flag |= (WM_MANIPULATORGROUPTYPE_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
 }
 
 
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index 677ea92aea1..9711de36ba3 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -426,6 +426,15 @@ void RNA_api_wm(StructRNA *srna)
 	parm = RNA_def_pointer(func, "timer", "Timer", "", "");
 	RNA_def_parameter_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list