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.
This commit is contained in:
Campbell Barton 2018-05-09 22:43:24 +02:00
parent 80c9cd13da
commit e6814acf13
2 changed files with 24 additions and 0 deletions

View File

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

View File

@ -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);