diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-05-09 23:43:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-05-09 23:43:24 +0300 |
commit | e6814acf13d37f002f5fe6a20594970fcd186c2e (patch) | |
tree | 279aea349aa6ae79a1b37a4cdb31bbebf27bdfb5 /source/blender | |
parent | 80c9cd13dad4b56a729d8a1b23f9dce7edb948ea (diff) |
Manipulator: API call to invoke on setup
Needed for manipulators that start out interactive,
similar use-case to modal operators, except these can be tweaked after.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/windowmanager/manipulators/WM_manipulator_api.h | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/manipulators/intern/wm_manipulator.c | 20 |
2 files changed, 24 insertions, 0 deletions
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h index 97fcb4513be..748cc18480f 100644 --- a/source/blender/windowmanager/manipulators/WM_manipulator_api.h +++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h @@ -76,6 +76,10 @@ bool WM_manipulator_select_unlink(struct wmManipulatorMap *mmap, struct wmManipu bool WM_manipulator_select_set(struct wmManipulatorMap *mmap, struct wmManipulator *mpr, bool select); void WM_manipulator_highlight_set(struct wmManipulatorMap *mmap, struct wmManipulator *mpr); +void WM_manipulator_modal_set_from_setup( + struct wmManipulatorMap *mmap, struct bContext *C, + struct wmManipulator *mpr, int part_index, const struct wmEvent *event); + struct wmManipulatorOpElem *WM_manipulator_operator_get( struct wmManipulator *mpr, int part_index); struct PointerRNA *WM_manipulator_operator_set( diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c index 856b92096dd..42232950cc4 100644 --- a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c +++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c @@ -469,6 +469,26 @@ bool wm_manipulator_select_and_highlight(bContext *C, wmManipulatorMap *mmap, wm } } +/** + * Special function to run from setup so manipulators start out interactive. + * + * We could do this when linking them, but this complicates things since the window update code needs to run first. + */ +void WM_manipulator_modal_set_from_setup( + struct wmManipulatorMap *mmap, struct bContext *C, + struct wmManipulator *mpr, int part_index, const wmEvent *event) +{ + mpr->highlight_part = part_index; + WM_manipulator_highlight_set(mmap, mpr); + if (false) { + wm_manipulatormap_modal_set(mmap, C, mpr, event, true); + } + else { + /* WEAK: but it works. */ + WM_operator_name_call(C, "MANIPULATORGROUP_OT_manipulator_tweak", WM_OP_INVOKE_DEFAULT, NULL); + } +} + void wm_manipulator_calculate_scale(wmManipulator *mpr, const bContext *C) { const RegionView3D *rv3d = CTX_wm_region_view3d(C); |