forked from bartvdbraak/blender
Manipulator: modal callback can now cancel & pass events
Re-use operator return flags for manipulator modal & invoke, this means manipulators can allow navigation or other events to be handled as they run - see T52499
This commit is contained in:
parent
134e927965
commit
e20c825b05
@ -93,6 +93,7 @@ class MyCustomShapeWidget(Manipulator):
|
||||
def invoke(self, context, event):
|
||||
self.init_mouse_y = event.mouse_y
|
||||
self.init_value = self.target_get_value("offset")
|
||||
return {'RUNNING_MODAL'}
|
||||
|
||||
def exit(self, context, cancel):
|
||||
context.area.header_text_set()
|
||||
@ -108,6 +109,7 @@ class MyCustomShapeWidget(Manipulator):
|
||||
value = self.init_value + delta
|
||||
self.target_set_value("offset", value)
|
||||
context.area.header_text_set("My Manipulator: %.4f" % value)
|
||||
return {'RUNNING_MODAL'}
|
||||
|
||||
|
||||
class MyCustomShapeWidgetGroup(ManipulatorGroup):
|
||||
|
@ -123,7 +123,7 @@ static void manipulator_arrow2d_setup(wmManipulator *mpr)
|
||||
mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_arrow2d_invoke(
|
||||
static int manipulator_arrow2d_invoke(
|
||||
bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
|
||||
{
|
||||
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
|
||||
@ -132,6 +132,8 @@ static void manipulator_arrow2d_invoke(
|
||||
WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
|
||||
|
||||
mpr->interaction_data = inter;
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static int manipulator_arrow2d_test_select(
|
||||
|
@ -235,7 +235,7 @@ static void manipulator_arrow_draw(const bContext *UNUSED(C), wmManipulator *mpr
|
||||
* Calculate arrow offset independent from prop min value,
|
||||
* meaning the range will not be offset by min value first.
|
||||
*/
|
||||
static void manipulator_arrow_modal(
|
||||
static int manipulator_arrow_modal(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event,
|
||||
eWM_ManipulatorTweak tweak_flag)
|
||||
{
|
||||
@ -352,6 +352,8 @@ static void manipulator_arrow_modal(
|
||||
/* tag the region for redraw */
|
||||
ED_region_tag_redraw(ar);
|
||||
WM_event_add_mousemove(C);
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_arrow_setup(wmManipulator *mpr)
|
||||
@ -363,7 +365,7 @@ static void manipulator_arrow_setup(wmManipulator *mpr)
|
||||
arrow->data.range_fac = 1.0f;
|
||||
}
|
||||
|
||||
static void manipulator_arrow_invoke(
|
||||
static int manipulator_arrow_invoke(
|
||||
bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
|
||||
{
|
||||
ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
|
||||
@ -384,6 +386,8 @@ static void manipulator_arrow_invoke(
|
||||
WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
|
||||
|
||||
mpr->interaction_data = inter;
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_arrow_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
|
||||
|
@ -479,7 +479,7 @@ static void manipulator_rect_transform_setup(wmManipulator *mpr)
|
||||
mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_rect_transform_invoke(
|
||||
static int manipulator_rect_transform_invoke(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event)
|
||||
{
|
||||
RectTransformInteraction *data = MEM_callocN(sizeof(RectTransformInteraction), "cage_interaction");
|
||||
@ -493,9 +493,11 @@ static void manipulator_rect_transform_invoke(
|
||||
}
|
||||
|
||||
mpr->interaction_data = data;
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_rect_transform_modal(
|
||||
static int manipulator_rect_transform_modal(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event,
|
||||
eWM_ManipulatorTweak UNUSED(tweak_flag))
|
||||
{
|
||||
@ -514,7 +516,7 @@ static void manipulator_rect_transform_modal(
|
||||
if (manipulator_window_project_2d(
|
||||
C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, point_local) == false)
|
||||
{
|
||||
return;
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
float value_x = (point_local[0] - data->orig_mouse[0]);
|
||||
@ -636,6 +638,8 @@ static void manipulator_rect_transform_modal(
|
||||
|
||||
/* tag the region for redraw */
|
||||
ED_region_tag_redraw(CTX_wm_region(C));
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_rect_transform_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
|
||||
|
@ -71,7 +71,7 @@
|
||||
/* to use custom dials exported to geom_dial_manipulator.c */
|
||||
// #define USE_MANIPULATOR_CUSTOM_DIAL
|
||||
|
||||
static void manipulator_dial_modal(
|
||||
static int manipulator_dial_modal(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event,
|
||||
eWM_ManipulatorTweak tweak_flag);
|
||||
|
||||
@ -384,7 +384,7 @@ static void manipulator_dial_draw(const bContext *C, wmManipulator *mpr)
|
||||
}
|
||||
}
|
||||
|
||||
static void manipulator_dial_modal(
|
||||
static int manipulator_dial_modal(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event,
|
||||
eWM_ManipulatorTweak UNUSED(tweak_flag))
|
||||
{
|
||||
@ -408,6 +408,7 @@ static void manipulator_dial_modal(
|
||||
if (WM_manipulator_target_property_is_valid(mpr_prop)) {
|
||||
WM_manipulator_target_property_value_set(C, mpr, mpr_prop, inter->init_prop_angle + angle_delta);
|
||||
}
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
|
||||
@ -419,7 +420,7 @@ static void manipulator_dial_setup(wmManipulator *mpr)
|
||||
copy_v3_v3(mpr->matrix_basis[2], dir_default);
|
||||
}
|
||||
|
||||
static void manipulator_dial_invoke(
|
||||
static int manipulator_dial_invoke(
|
||||
bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
|
||||
{
|
||||
DialInteraction *inter = MEM_callocN(sizeof(DialInteraction), __func__);
|
||||
@ -433,6 +434,8 @@ static void manipulator_dial_invoke(
|
||||
}
|
||||
|
||||
mpr->interaction_data = inter;
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@ -77,7 +77,7 @@ static void manipulator_grab_matrix_basis_get(const wmManipulator *mpr, float r_
|
||||
add_v3_v3(r_matrix[3], grab->prop_co);
|
||||
}
|
||||
|
||||
static void manipulator_grab_modal(
|
||||
static int manipulator_grab_modal(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event,
|
||||
eWM_ManipulatorTweak tweak_flag);
|
||||
|
||||
@ -236,7 +236,7 @@ static void manipulator_grab_draw(const bContext *C, wmManipulator *mpr)
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
static void manipulator_grab_modal(
|
||||
static int manipulator_grab_modal(
|
||||
bContext *C, wmManipulator *mpr, const wmEvent *event,
|
||||
eWM_ManipulatorTweak UNUSED(tweak_flag))
|
||||
{
|
||||
@ -255,7 +255,7 @@ static void manipulator_grab_modal(
|
||||
(manipulator_window_project_2d(
|
||||
C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, mval_proj_curr) == false))
|
||||
{
|
||||
return;
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
sub_v2_v2v2(prop_delta, mval_proj_curr, mval_proj_init);
|
||||
prop_delta[2] = 0.0f;
|
||||
@ -269,9 +269,11 @@ static void manipulator_grab_modal(
|
||||
}
|
||||
|
||||
ED_region_tag_redraw(ar);
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_grab_invoke(
|
||||
static int manipulator_grab_invoke(
|
||||
bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
|
||||
{
|
||||
GrabInteraction *inter = MEM_callocN(sizeof(GrabInteraction), __func__);
|
||||
@ -298,6 +300,8 @@ static void manipulator_grab_invoke(
|
||||
}
|
||||
|
||||
mpr->interaction_data = inter;
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -145,7 +145,7 @@ static void manipulator_primitive_setup(wmManipulator *mpr)
|
||||
mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
|
||||
}
|
||||
|
||||
static void manipulator_primitive_invoke(
|
||||
static int manipulator_primitive_invoke(
|
||||
bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
|
||||
{
|
||||
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
|
||||
@ -153,6 +153,8 @@ static void manipulator_primitive_invoke(
|
||||
WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
|
||||
|
||||
mpr->interaction_data = inter;
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@ -1139,7 +1139,7 @@ static ManipulatorGroup *manipulatorgroup_init(wmManipulatorGroup *mgroup)
|
||||
/**
|
||||
* Custom handler for manipulator widgets
|
||||
*/
|
||||
static void manipulator_modal(
|
||||
static int manipulator_modal(
|
||||
bContext *C, wmManipulator *widget, const wmEvent *UNUSED(event),
|
||||
eWM_ManipulatorTweak UNUSED(tweak_flag))
|
||||
{
|
||||
@ -1154,6 +1154,8 @@ static void manipulator_modal(
|
||||
}
|
||||
|
||||
ED_region_tag_redraw(ar);
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
static void WIDGETGROUP_manipulator_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
|
||||
|
@ -167,7 +167,7 @@ BLI_INLINE void manipulator2d_origin_to_region(ARegion *ar, float *r_origin)
|
||||
/**
|
||||
* Custom handler for manipulator widgets
|
||||
*/
|
||||
static void manipulator2d_modal(
|
||||
static int manipulator2d_modal(
|
||||
bContext *C, wmManipulator *widget, const wmEvent *UNUSED(event),
|
||||
eWM_ManipulatorTweak UNUSED(tweak_flag))
|
||||
{
|
||||
@ -179,6 +179,8 @@ static void manipulator2d_modal(
|
||||
WM_manipulator_set_matrix_location(widget, origin);
|
||||
|
||||
ED_region_tag_redraw(ar);
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
void ED_widgetgroup_manipulator2d_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
|
||||
|
@ -136,7 +136,7 @@ static int rna_manipulator_test_select_cb(
|
||||
return intersect_id;
|
||||
}
|
||||
|
||||
static void rna_manipulator_modal_cb(
|
||||
static int rna_manipulator_modal_cb(
|
||||
struct bContext *C, struct wmManipulator *mpr, const struct wmEvent *event,
|
||||
eWM_ManipulatorTweak tweak_flag)
|
||||
{
|
||||
@ -154,7 +154,13 @@ static void rna_manipulator_modal_cb(
|
||||
RNA_parameter_set_lookup(&list, "event", &event);
|
||||
RNA_parameter_set_lookup(&list, "tweak", &tweak_flag_int);
|
||||
mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
|
||||
|
||||
void *ret;
|
||||
RNA_parameter_get_lookup(&list, "result", &ret);
|
||||
int ret_enum = *(int *)ret;
|
||||
|
||||
RNA_parameter_list_free(&list);
|
||||
return ret_enum;
|
||||
}
|
||||
|
||||
static void rna_manipulator_setup_cb(
|
||||
@ -174,7 +180,7 @@ static void rna_manipulator_setup_cb(
|
||||
}
|
||||
|
||||
|
||||
static void rna_manipulator_invoke_cb(
|
||||
static int rna_manipulator_invoke_cb(
|
||||
struct bContext *C, struct wmManipulator *mpr, const struct wmEvent *event)
|
||||
{
|
||||
extern FunctionRNA rna_Manipulator_invoke_func;
|
||||
@ -189,7 +195,13 @@ static void rna_manipulator_invoke_cb(
|
||||
RNA_parameter_set_lookup(&list, "context", &C);
|
||||
RNA_parameter_set_lookup(&list, "event", &event);
|
||||
mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
|
||||
|
||||
void *ret;
|
||||
RNA_parameter_get_lookup(&list, "result", &ret);
|
||||
int ret_enum = *(int *)ret;
|
||||
|
||||
RNA_parameter_list_free(&list);
|
||||
return ret_enum;
|
||||
}
|
||||
|
||||
static void rna_manipulator_exit_cb(
|
||||
@ -949,10 +961,10 @@ static void rna_def_manipulator(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
parm = RNA_def_pointer(func, "event", "Event", "", "");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
/* TODO, shuold be a enum-flag */
|
||||
parm = RNA_def_enum(func, "tweak", tweak_actions, 0, "Tweak", "");
|
||||
parm = RNA_def_enum_flag(func, "tweak", tweak_actions, 0, "Tweak", "");
|
||||
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
||||
RNA_def_property_flag(parm, PROP_ENUM_FLAG);
|
||||
|
||||
parm = RNA_def_enum_flag(func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
|
||||
RNA_def_function_return(func, parm);
|
||||
/* wmManipulator.property_update */
|
||||
/* TODO */
|
||||
|
||||
@ -969,6 +981,8 @@ static void rna_def_manipulator(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
parm = RNA_def_pointer(func, "event", "Event", "", "");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
parm = RNA_def_enum_flag(func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
|
||||
RNA_def_function_return(func, parm);
|
||||
|
||||
/* wmManipulator.exit */
|
||||
func = RNA_def_function(srna, "exit", NULL);
|
||||
|
@ -204,7 +204,7 @@ void WM_manipulator_unlink(ListBase *manipulatorlist, wmManipulatorMap *mmap, wm
|
||||
wm_manipulatormap_highlight_set(mmap, C, NULL, 0);
|
||||
}
|
||||
if (mpr->state & WM_MANIPULATOR_STATE_MODAL) {
|
||||
wm_manipulatormap_modal_set(mmap, C, NULL, NULL);
|
||||
wm_manipulatormap_modal_set(mmap, C, mpr, NULL, false);
|
||||
}
|
||||
/* Unlink instead of setting so we don't run callbacks. */
|
||||
if (mpr->state & WM_MANIPULATOR_STATE_SELECT) {
|
||||
|
@ -98,7 +98,7 @@ void wm_manipulatorgroup_free(bContext *C, wmManipulatorGroup *mgroup)
|
||||
wm_manipulatormap_highlight_set(mmap, C, NULL, 0);
|
||||
}
|
||||
if (mmap->mmap_context.modal && mmap->mmap_context.modal->parent_mgroup == mgroup) {
|
||||
wm_manipulatormap_modal_set(mmap, C, NULL, NULL);
|
||||
wm_manipulatormap_modal_set(mmap, C, mmap->mmap_context.modal, NULL, false);
|
||||
}
|
||||
|
||||
for (wmManipulator *mpr = mgroup->manipulators.first, *mpr_next; mpr; mpr = mpr_next) {
|
||||
@ -313,7 +313,7 @@ static void manipulator_tweak_finish(bContext *C, wmOperator *op, const bool can
|
||||
if (mtweak->mpr_modal->type->exit) {
|
||||
mtweak->mpr_modal->type->exit(C, mtweak->mpr_modal, cancel);
|
||||
}
|
||||
wm_manipulatormap_modal_set(mtweak->mmap, C, NULL, NULL);
|
||||
wm_manipulatormap_modal_set(mtweak->mmap, C, mtweak->mpr_modal, NULL, false);
|
||||
MEM_freeN(mtweak);
|
||||
}
|
||||
|
||||
@ -359,11 +359,12 @@ static int manipulator_tweak_modal(bContext *C, wmOperator *op, const wmEvent *e
|
||||
}
|
||||
|
||||
/* handle manipulator */
|
||||
if (mpr->custom_modal) {
|
||||
mpr->custom_modal(C, mpr, event, mtweak->flag);
|
||||
}
|
||||
else if (mpr->type->modal) {
|
||||
mpr->type->modal(C, mpr, event, mtweak->flag);
|
||||
wmManipulatorFnModal modal_fn = mpr->custom_modal ? mpr->custom_modal : mpr->type->modal;
|
||||
int retval = modal_fn(C, mpr, event, mtweak->flag);
|
||||
|
||||
if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
|
||||
manipulator_tweak_finish(C, op, (retval & OPERATOR_CANCELLED) != 0);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
/* always return PASS_THROUGH so modal handlers
|
||||
@ -385,7 +386,7 @@ static int manipulator_tweak_invoke(bContext *C, wmOperator *op, const wmEvent *
|
||||
|
||||
|
||||
/* activate highlighted manipulator */
|
||||
wm_manipulatormap_modal_set(mmap, C, event, mpr);
|
||||
wm_manipulatormap_modal_set(mmap, C, mpr, event, true);
|
||||
|
||||
/* XXX temporary workaround for modal manipulator operator
|
||||
* conflicting with modal operator attached to manipulator */
|
||||
@ -395,6 +396,10 @@ static int manipulator_tweak_invoke(bContext *C, wmOperator *op, const wmEvent *
|
||||
}
|
||||
}
|
||||
|
||||
/* Couldn't start the manipulator. */
|
||||
if ((mpr->state & WM_MANIPULATOR_STATE_MODAL) == 0) {
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
ManipulatorTweakData *mtweak = MEM_mallocN(sizeof(ManipulatorTweakData), __func__);
|
||||
|
||||
|
@ -638,18 +638,21 @@ void wm_manipulatormaps_handled_modal_update(
|
||||
if (mpr && (mpr->op_data.type != NULL) &&
|
||||
(mpr->op_data.type == handler->op->type))
|
||||
{
|
||||
if (mpr->custom_modal) {
|
||||
mpr->custom_modal(C, mpr, event, 0);
|
||||
}
|
||||
else if (mpr->type->modal) {
|
||||
mpr->type->modal(C, mpr, event, 0);
|
||||
wmManipulatorFnModal modal_fn = mpr->custom_modal ? mpr->custom_modal : mpr->type->modal;
|
||||
if (modal_fn != NULL) {
|
||||
int retval = modal_fn(C, mpr, event, 0);
|
||||
/* The manipulator is tried to the operator, we can't choose when to exit. */
|
||||
BLI_assert(retval & OPERATOR_RUNNING_MODAL);
|
||||
UNUSED_VARS_NDEBUG(retval);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* operator not running anymore */
|
||||
else {
|
||||
wm_manipulatormap_highlight_set(mmap, C, NULL, 0);
|
||||
wm_manipulatormap_modal_set(mmap, C, event, NULL);
|
||||
if (mpr) {
|
||||
wm_manipulatormap_modal_set(mmap, C, mpr, NULL, false);
|
||||
}
|
||||
}
|
||||
|
||||
/* restore the area */
|
||||
@ -836,24 +839,33 @@ wmManipulator *wm_manipulatormap_highlight_get(wmManipulatorMap *mmap)
|
||||
return mmap->mmap_context.highlight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Caller should call exit when (enable == False).
|
||||
*/
|
||||
void wm_manipulatormap_modal_set(
|
||||
wmManipulatorMap *mmap, bContext *C, const wmEvent *event, wmManipulator *mpr)
|
||||
wmManipulatorMap *mmap, bContext *C, wmManipulator *mpr, const wmEvent *event, bool enable)
|
||||
{
|
||||
if (mpr && C) {
|
||||
if (enable) {
|
||||
BLI_assert(mmap->mmap_context.modal == NULL);
|
||||
|
||||
/* For now only grab cursor for 3D manipulators. */
|
||||
bool grab_cursor = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) != 0;
|
||||
int retval = OPERATOR_RUNNING_MODAL;
|
||||
|
||||
if (mpr->type->invoke &&
|
||||
(mpr->type->modal || mpr->custom_modal))
|
||||
{
|
||||
retval = mpr->type->invoke(C, mpr, event);
|
||||
}
|
||||
|
||||
if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
mpr->state |= WM_MANIPULATOR_STATE_MODAL;
|
||||
mmap->mmap_context.modal = mpr;
|
||||
|
||||
if (mpr->op_data.type) {
|
||||
/* first activate the manipulator itself */
|
||||
if (mpr->type->invoke &&
|
||||
(mpr->type->modal || mpr->custom_modal))
|
||||
{
|
||||
mpr->type->invoke(C, mpr, event);
|
||||
}
|
||||
|
||||
WM_operator_name_call_ptr(C, mpr->op_data.type, WM_OP_INVOKE_DEFAULT, &mpr->op_data.ptr);
|
||||
|
||||
/* we failed to hook the manipulator to the operator handler or operator was cancelled, return */
|
||||
@ -863,20 +875,13 @@ void wm_manipulatormap_modal_set(
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (mpr->type->invoke &&
|
||||
(mpr->type->modal || mpr->custom_modal))
|
||||
{
|
||||
mpr->type->invoke(C, mpr, event);
|
||||
}
|
||||
}
|
||||
|
||||
if (grab_cursor) {
|
||||
WM_cursor_grab_enable(CTX_wm_window(C), true, true, NULL);
|
||||
}
|
||||
}
|
||||
else {
|
||||
mpr = mmap->mmap_context.modal;
|
||||
BLI_assert(ELEM(mmap->mmap_context.modal, NULL, mpr));
|
||||
|
||||
/* deactivate, manipulator but first take care of some stuff */
|
||||
if (mpr) {
|
||||
|
@ -50,10 +50,10 @@ typedef void (*wmManipulatorFnSetup)(struct wmManipulator *);
|
||||
typedef void (*wmManipulatorFnDraw)(const struct bContext *, struct wmManipulator *);
|
||||
typedef void (*wmManipulatorFnDrawSelect)(const struct bContext *, struct wmManipulator *, int);
|
||||
typedef int (*wmManipulatorFnTestSelect)(struct bContext *, struct wmManipulator *, const struct wmEvent *);
|
||||
typedef void (*wmManipulatorFnModal)(struct bContext *, struct wmManipulator *, const struct wmEvent *, eWM_ManipulatorTweak);
|
||||
typedef int (*wmManipulatorFnModal)(struct bContext *, struct wmManipulator *, const struct wmEvent *, eWM_ManipulatorTweak);
|
||||
typedef void (*wmManipulatorFnPropertyUpdate)(struct wmManipulator *, struct wmManipulatorProperty *);
|
||||
typedef void (*wmManipulatorFnMatrixWorldGet)(const struct wmManipulator *, float[4][4]);
|
||||
typedef void (*wmManipulatorFnInvoke)(struct bContext *, struct wmManipulator *, const struct wmEvent *);
|
||||
typedef int (*wmManipulatorFnInvoke)(struct bContext *, struct wmManipulator *, const struct wmEvent *);
|
||||
typedef void (*wmManipulatorFnExit)(struct bContext *, struct wmManipulator *, const bool);
|
||||
typedef int (*wmManipulatorFnCursorGet)(struct wmManipulator *);
|
||||
typedef void (*wmManipulatorFnSelectRefresh)(struct wmManipulator *);
|
||||
|
@ -82,8 +82,9 @@ void wm_manipulatormap_highlight_set(
|
||||
struct wmManipulator *mpr, int part);
|
||||
struct wmManipulator *wm_manipulatormap_highlight_get(struct wmManipulatorMap *mmap);
|
||||
void wm_manipulatormap_modal_set(
|
||||
struct wmManipulatorMap *mmap, bContext *C,
|
||||
const struct wmEvent *event, struct wmManipulator *mpr);
|
||||
struct wmManipulatorMap *mmap, bContext *C, struct wmManipulator *mpr,
|
||||
const struct wmEvent *event, bool enable);
|
||||
|
||||
struct wmManipulator *wm_manipulatormap_modal_get(struct wmManipulatorMap *mmap);
|
||||
struct wmManipulator **wm_manipulatormap_selected_get(wmManipulatorMap *mmap, int *r_selected_len);
|
||||
struct ListBase *wm_manipulatormap_groups_get(wmManipulatorMap *mmap);
|
||||
|
Loading…
Reference in New Issue
Block a user