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