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. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to