Compare commits
51 Commits
main
...
mb-0006-al
Author | SHA1 | Date |
---|---|---|
Jaume Bellet | ad55c52481 | |
Jaume Bellet | 22fd0a1504 | |
Jaume Bellet | c6d912c11d | |
Jaume Bellet | 0028d9615d | |
Jaume Bellet | edd5201507 | |
Jaume Bellet | 81cf99adcb | |
Jaume Bellet | ec29495412 | |
Jaume Bellet | ad2920a5d6 | |
Jaume Bellet | 23fa8ded8a | |
Jaume Bellet | 2e54d6a02a | |
Jaume Bellet | c3fe8f4807 | |
Jaume Bellet | eceb4d8685 | |
Jaume Bellet | f786d77b0d | |
Jaume Bellet | 4fb4a45b86 | |
Jaume Bellet | b1225d5ae1 | |
Jaume Bellet | 43d596603b | |
Jaume Bellet | 18810610e4 | |
Jaume Bellet | 1bfd72dbd4 | |
Jaume Bellet | b739512d87 | |
Jaume Bellet | 86ad3ca1bc | |
Jaume Bellet | 3ab99264fe | |
Jaume Bellet | 009c237222 | |
Jaume Bellet | 66ce9f98ca | |
Jaume Bellet | 3a62e7e895 | |
Jaume Bellet | 51d3c090a5 | |
Jaume Bellet | 76fe4cf0fc | |
Jaume Bellet | 9ba6313089 | |
Jaume Bellet | 76a0a15d58 | |
Jaume Bellet | 32cca28474 | |
Jaume Bellet | e5a324b9f2 | |
Jaume Bellet | 57da34764b | |
Jaume Bellet | c8dfbf9d48 | |
Jaume Bellet | a25d5aee92 | |
Jaume Bellet | 86a728dae6 | |
Jaume Bellet | 91f875105c | |
Jaume Bellet | 7d94f2640f | |
Jaume Bellet | 16bd433ad9 | |
Jaume Bellet | 75802f52c8 | |
Jaume Bellet | 6abb58caf0 | |
Jaume Bellet | 5ad00f6c9e | |
Jaume Bellet | fa0ef7aea6 | |
Jaume Bellet | 6943722b2d | |
Jaume Bellet | c3fcf150c4 | |
Jaume Bellet | cfd54b8fb2 | |
Jaume Bellet | d67fdf10d5 | |
Jaume Bellet | 943e7cff18 | |
Jaume Bellet | e955b78801 | |
Jaume Bellet | f32566964a | |
Jaume Bellet | 21b256495a | |
Jaume Bellet | d044fc6c9d | |
Jaume Bellet | 0b1931ca31 |
|
@ -734,6 +734,8 @@ static bool transform_modal_item_poll(const wmOperator *op, int value)
|
|||
return false;
|
||||
}
|
||||
return t->vod != nullptr;
|
||||
case TFM_MODAL_NO_MODAL_TRANSFORM:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -789,6 +791,7 @@ wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf)
|
|||
{TFM_MODAL_AUTOCONSTRAINTPLANE, "AUTOCONSTRAINPLANE", 0, "Automatic Constraint Plane", ""},
|
||||
{TFM_MODAL_PRECISION, "PRECISION", 0, "Precision Mode", ""},
|
||||
{TFM_MODAL_PASSTHROUGH_NAVIGATE, "PASSTHROUGH_NAVIGATE", 0, "Navigate", ""},
|
||||
{TFM_MODAL_NO_MODAL_TRANSFORM, "NO_MODAL_TRANSFORM", 0, "Allow movements around the scene",""},
|
||||
{0, nullptr, 0, nullptr, nullptr},
|
||||
};
|
||||
|
||||
|
@ -988,12 +991,74 @@ static bool transform_event_modal_constraint(TransInfo *t, short modal_type)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void switchTransformNoModal(TransInfo *t, const wmEvent *event) {
|
||||
t->flag ^= T_TRANSFORM_NO_MODAL;
|
||||
|
||||
{
|
||||
// Enable/Disable modal events allowing to be processed as non-modal events
|
||||
wmKeyMapItem *kmi;
|
||||
for (kmi =(wmKeyMapItem*) t->keymap->items.first; kmi; kmi = kmi->next)
|
||||
{
|
||||
if (ELEM(kmi->type, LEFTMOUSE, RIGHTMOUSE, MIDDLEMOUSE, WHEELDOWNMOUSE, WHEELUPMOUSE)) {
|
||||
if ((t->flag & T_TRANSFORM_NO_MODAL) == 0) {
|
||||
kmi->flag &= ~KMI_INACTIVE;
|
||||
}
|
||||
else {
|
||||
kmi->flag |= KMI_INACTIVE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((t->flag & T_TRANSFORM_NO_MODAL) == 0) {
|
||||
// Transform Restart
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int transformEvent(TransInfo *t, const wmEvent *event)
|
||||
{
|
||||
bool handled = false;
|
||||
bool is_navigating = t->vod ? ((RegionView3D *)t->region->regiondata)->rflag & RV3D_NAVIGATING :
|
||||
false;
|
||||
|
||||
if (t->flag & T_TRANSFORM_NO_MODAL) {
|
||||
if (ELEM(event->val, KM_PRESS, KM_RELEASE) &&
|
||||
ELEM(event->type, LEFTMOUSE, RIGHTMOUSE, MIDDLEMOUSE))
|
||||
{
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
else if (ELEM(event->type,
|
||||
BUTTON4MOUSE,
|
||||
BUTTON5MOUSE,
|
||||
BUTTON6MOUSE,
|
||||
BUTTON7MOUSE,
|
||||
MOUSEPAN,
|
||||
MOUSEZOOM,
|
||||
MOUSEROTATE,
|
||||
WHEELINMOUSE,
|
||||
WHEELOUTMOUSE,
|
||||
WHEELUPMOUSE,
|
||||
WHEELDOWNMOUSE))
|
||||
{
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
else if (event->type == EVT_MODAL_MAP) {
|
||||
switch (event->val) {
|
||||
case TFM_MODAL_CANCEL:
|
||||
t->state = TRANS_CANCEL;
|
||||
break;
|
||||
case TFM_MODAL_CONFIRM:
|
||||
t->state = TRANS_CONFIRM;
|
||||
break;
|
||||
case TFM_MODAL_NO_MODAL_TRANSFORM:
|
||||
t->redraw |= TREDRAW_HARD; // Redraw the Header
|
||||
switchTransformNoModal(t, event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Handle modal numinput events first, if already activated. */
|
||||
if (!is_navigating && ((event->val == KM_PRESS) || (event->type == EVT_MODAL_MAP)) &&
|
||||
hasNumInput(&t->num) && handleNumInput(t->context, &(t->num), event))
|
||||
|
@ -1034,6 +1099,11 @@ int transformEvent(TransInfo *t, const wmEvent *event)
|
|||
handled = true;
|
||||
}
|
||||
break;
|
||||
case TFM_MODAL_NO_MODAL_TRANSFORM:
|
||||
switchTransformNoModal(t, event);
|
||||
handled = true;
|
||||
t->redraw |= TREDRAW_HARD;
|
||||
break;
|
||||
case TFM_MODAL_TRANSLATE:
|
||||
case TFM_MODAL_ROTATE:
|
||||
case TFM_MODAL_RESIZE:
|
||||
|
@ -2099,6 +2169,12 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
|
|||
calculatePropRatio(t);
|
||||
calculateCenter(t);
|
||||
|
||||
if (t->spacetype == SPACE_VIEW3D) {
|
||||
float p[3] = {0, 0, 0};
|
||||
ED_view3d_win_to_3d_int((View3D*) t->view, t->region, p, event->mval, t->iloc);
|
||||
}
|
||||
|
||||
|
||||
if (event) {
|
||||
/* Initialize accurate transform to settings requested by keymap. */
|
||||
bool use_accurate = false;
|
||||
|
@ -2209,7 +2285,7 @@ void transformApply(bContext *C, TransInfo *t)
|
|||
|
||||
int transformEnd(bContext *C, TransInfo *t)
|
||||
{
|
||||
int exit_code = OPERATOR_RUNNING_MODAL;
|
||||
int exit_code = (t->flag & T_TRANSFORM_NO_MODAL) ? OPERATOR_HANDLED : OPERATOR_RUNNING_MODAL;
|
||||
|
||||
t->context = C;
|
||||
|
||||
|
|
|
@ -150,6 +150,12 @@ enum eTFlag {
|
|||
|
||||
/** Special flag for when the transform code is called after keys have been duplicated. */
|
||||
T_DUPLICATED_KEYFRAMES = 1 << 26,
|
||||
|
||||
/* Used on MB-0001-operator-repeat */
|
||||
T_TRANSFORM_MULTIPLE = 1 << 27,
|
||||
|
||||
/* Used on MB-0006-allow-no-modal-transform*/
|
||||
T_TRANSFORM_NO_MODAL = 1 << 28,
|
||||
};
|
||||
ENUM_OPERATORS(eTFlag, T_DUPLICATED_KEYFRAMES);
|
||||
|
||||
|
@ -285,6 +291,7 @@ enum {
|
|||
TFM_MODAL_EDIT_SNAP_SOURCE_OFF = 35,
|
||||
|
||||
TFM_MODAL_PASSTHROUGH_NAVIGATE = 36,
|
||||
TFM_MODAL_NO_MODAL_TRANSFORM = 37,
|
||||
};
|
||||
|
||||
/** \} */
|
||||
|
@ -561,6 +568,8 @@ struct TransInfo {
|
|||
/** Mouse side of the current frame, 'L', 'R' or 'B'. */
|
||||
char frame_side;
|
||||
|
||||
float iloc[3]; /* Initial location */
|
||||
|
||||
/** Copy from #RegionView3D, prevents feedback. */
|
||||
float viewmat[4][4];
|
||||
/** And to make sure we don't have to. */
|
||||
|
|
|
@ -463,7 +463,7 @@ static int transform_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
|
||||
exit_code |= transformEnd(C, t);
|
||||
|
||||
if ((exit_code & OPERATOR_RUNNING_MODAL) == 0) {
|
||||
if ((exit_code & (OPERATOR_CANCELLED | OPERATOR_FINISHED))) {
|
||||
transformops_exit(C, op);
|
||||
exit_code &= ~OPERATOR_PASS_THROUGH; /* Preventively remove pass-through. */
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
/* Empty File */
|
|
@ -0,0 +1 @@
|
|||
/* Empty File */
|
Loading…
Reference in New Issue