Commit: aef307cf31bee6f894069a3a995c8de1db73c9c3 Author: Bastien Montagne Date: Thu Jan 2 09:33:59 2014 +0100 https://developer.blender.org/rBaef307cf31bee6f894069a3a995c8de1db73c9c3
Fix T38019: Edge/Vertex Slide recognises Even and Flipped as if they were
numerical values
Further tweaked/simplified events handling in transform code, hope this time it
works OK...
===================================================================
M source/blender/editors/transform/transform.c
===================================================================
diff --git a/source/blender/editors/transform/transform.c
b/source/blender/editors/transform/transform.c
index bb97a22..8dac8f0 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -943,7 +943,14 @@ int transformEvent(TransInfo *t, const wmEvent *event)
t->redraw |= handleMouseInput(t, &t->mouse, event);
- if (event->type == MOUSEMOVE) {
+ /* Handle modal numinput events first, if already activated. */
+ if (((event->val == KM_PRESS) || (event->type == EVT_MODAL_MAP)) &&
+ hasNumInput(&t->num) && handleNumInput(t->context, &(t->num),
event))
+ {
+ t->redraw |= TREDRAW_HARD;
+ handled = true;
+ }
+ else if (event->type == MOUSEMOVE) {
if (t->modifiers & MOD_CONSTRAINT_SELECT)
t->con.mode |= CON_SELECT;
@@ -964,115 +971,61 @@ int transformEvent(TransInfo *t, const wmEvent *event)
}
/* handle modal keymap first */
else if (event->type == EVT_MODAL_MAP) {
- /* Handle modal numinput events first, if already activated. */
- if (hasNumInput(&t->num) && handleNumInput(t->context,
&(t->num), event)) {
- t->redraw |= TREDRAW_HARD;
- handled = true;
- }
- else {
- switch (event->val) {
- case TFM_MODAL_CANCEL:
- t->state = TRANS_CANCEL;
+ switch (event->val) {
+ case TFM_MODAL_CANCEL:
+ t->state = TRANS_CANCEL;
+ handled = true;
+ break;
+ case TFM_MODAL_CONFIRM:
+ t->state = TRANS_CONFIRM;
+ handled = true;
+ break;
+ case TFM_MODAL_TRANSLATE:
+ /* only switch when... */
+ if (ELEM5(t->mode, TFM_ROTATION, TFM_RESIZE,
TFM_TRACKBALL, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) {
+ resetTransModal(t);
+ resetTransRestrictions(t);
+ restoreTransObjects(t);
+ initTranslation(t);
+ initSnapping(t, NULL); // need to
reinit after mode change
+ t->redraw |= TREDRAW_HARD;
+ WM_event_add_mousemove(t->context);
handled = true;
- break;
- case TFM_MODAL_CONFIRM:
- t->state = TRANS_CONFIRM;
+ }
+ else if (t->mode == TFM_SEQ_SLIDE) {
+ t->flag ^= T_ALT_TRANSFORM;
+ t->redraw |= TREDRAW_HARD;
handled = true;
- break;
- case TFM_MODAL_TRANSLATE:
- /* only switch when... */
- if (ELEM5(t->mode, TFM_ROTATION,
TFM_RESIZE, TFM_TRACKBALL, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) {
- resetTransModal(t);
- resetTransRestrictions(t);
- restoreTransObjects(t);
- initTranslation(t);
- initSnapping(t, NULL); // need
to reinit after mode change
- t->redraw |= TREDRAW_HARD;
-
WM_event_add_mousemove(t->context);
- handled = true;
- }
- else if (t->mode == TFM_SEQ_SLIDE) {
- t->flag ^= T_ALT_TRANSFORM;
- t->redraw |= TREDRAW_HARD;
- handled = true;
- }
- else {
- if (t->obedit &&
t->obedit->type == OB_MESH) {
- if ((t->mode ==
TFM_TRANSLATION) && (t->spacetype == SPACE_VIEW3D)) {
-
resetTransModal(t);
-
resetTransRestrictions(t);
-
restoreTransObjects(t);
-
- /* first try
edge slide */
-
initEdgeSlide(t);
- /* if that
fails, do vertex slide */
- if (t->state ==
TRANS_CANCEL) {
-
t->state = TRANS_STARTING;
-
initVertSlide(t);
- }
- /* vert slide
can fail on unconnected vertices (rare but possible) */
- if (t->state ==
TRANS_CANCEL) {
-
t->state = TRANS_STARTING;
-
resetTransRestrictions(t);
-
restoreTransObjects(t);
-
initTranslation(t);
- }
- initSnapping(t,
NULL); // need to reinit after mode change
- t->redraw |=
TREDRAW_HARD;
- handled = true;
-
WM_event_add_mousemove(t->context);
- }
- }
- else if (t->options &
(CTX_MOVIECLIP | CTX_MASK)) {
- if (t->mode ==
TFM_TRANSLATION) {
-
restoreTransObjects(t);
-
- t->flag ^=
T_ALT_TRANSFORM;
- t->redraw |=
TREDRAW_HARD;
- handled = true;
- }
- }
- }
- break;
- case TFM_MODAL_ROTATE:
- /* only switch when... */
- if (!(t->options & CTX_TEXTURE) &&
!(t->options & (CTX_MOVIECLIP | CTX_MASK))) {
- if (ELEM6(t->mode,
TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION, TFM_EDGE_SLIDE,
TFM_VERT_SLIDE)) {
+ }
+ else {
+ if (t->obedit && t->obedit->type ==
OB_MESH) {
+ if ((t->mode ==
TFM_TRANSLATION) && (t->spacetype == SPACE_VIEW3D)) {
resetTransModal(t);
resetTransRestrictions(t);
-
- if (t->mode ==
TFM_ROTATION) {
-
restoreTransObjects(t);
-
initTrackball(t);
+ restoreTransObjects(t);
+
+ /* first try edge slide
*/
+ initEdgeSlide(t);
+ /* if that fails, do
vertex slide */
+ if (t->state ==
TRANS_CANCEL) {
+ t->state =
TRANS_STARTING;
+
initVertSlide(t);
}
- else {
+ /* vert slide can fail
on unconnected vertices (rare but possible) */
+ if (t->state ==
TRANS_CANCEL) {
+ t->state =
TRANS_STARTING;
+
resetTransRestrictions(t);
restoreTransObjects(t);
- initRotation(t);
+
initTranslation(t);
}
initSnapping(t, NULL);
// need to reinit after mode change
t->redraw |=
TREDRAW_HARD;
handled = true;
+
WM_event_add_mousemove(t->context);
}
}
- break;
- case TFM_MODAL_RESIZE:
- /* only switch when... */
- if (ELEM5(t->mode, TFM_ROTATION,
TFM_TRANSLATION, TFM_TRACKBALL, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) {
- resetTransModal(t);
- resetTransRestrictions(t);
- restoreTransObjects(t);
- initResize(t);
- initSnapping(t, NULL); // need
to reinit after mode change
- t->redraw |= TREDRAW_HARD;
- handled = true;
- }
- else if (t->mode == TFM_SHRINKFATTEN) {
- t->flag ^= T_ALT_TRANSFORM;
- t->redraw |= TREDRAW_HARD;
- handled = true;
- }
- else if (t->mode == TFM_RESIZE) {
- if (t->options & CTX_MOVIECLIP)
{
+ else if (t->options & (CTX_MOVIECLIP |
CTX_MASK)) {
+ if (t->mode == TFM_TRANSLATION)
{
restoreTransObjects(t);
t->flag ^=
T_ALT_TRANSFORM;
@@ -1080,379 +1033,407 @@ int transformEvent(TransInfo *t, const wmEvent *event)
handled = true;
}
}
- break;
-
- case TFM_MODAL_SNAP_INV_ON:
- t->modifiers |= MOD_SNAP_INVERT;
- t->redraw |= TREDRAW_HARD;
- handled = true;
- break;
- case TFM_MODAL_SNAP_INV_OFF:
- t->modifiers &= ~MOD_SNAP_INVERT;
- t->redraw |= TREDRAW_HARD;
- handled = true;
- break;
- case TFM_MODAL_SNAP_TOGGLE:
- t->modifiers ^= MOD_SNAP;
- t->redraw |= TREDRAW_HARD;
- handled = true;
- break;
- case TFM_MODAL_AXIS_X:
- if ((t->flag & T_NO_CONSTRAINT) == 0) {
- if (cmode == 'X') {
- stopConstraint(t);
+ }
+ break;
+ case TFM_MODAL_ROTATE:
+ /* only switch when... */
+ if (!(t->options & CTX_TEXTURE) && !(t->options
& (CTX_MOVIECLIP | CTX_MASK))) {
+ if (ELEM6(t->mode, TFM_ROTATION,
TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) {
+ resetTransModal(t);
+ resetTransRestrictions(t);
+
+ if (t->mode == TFM_ROTATION) {
+ restoreTransObjects(t);
+ initTrackball(t);
}
else {
- if (t->flag &
T_2D_EDIT) {
-
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), IFACE_("along X"));
- }
- else {
-
setUserConstraint(t, t->current_orientation, (CON_AXIS0), IFACE_("along %s X"));
- }
+ restoreTransObjects(t);
+ initRotation(t);
}
+ initSnapping(t, NULL); // need
to reinit after mode change
t->redraw |= TREDRAW_HARD;
handled = true;
}
- break;
- case TFM_MODAL_AXIS_Y:
- if ((t->flag & T_NO_CONSTRAINT) == 0) {
- if (cmode == 'Y') {
- stopConstraint(t);
- }
- else {
- if (t->flag &
T_2D_EDIT) {
-
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), IFACE_("along Y"));
- }
- else {
-
setUserConstraint(t, t->current_orientation, (CON_AXIS1), IFACE_("along %s Y"));
- }
- }
+ }
+ break;
+ case TFM_MODAL_RESIZE:
+ /* only switch when... */
+ if (ELEM5(t->mode, TFM_ROTATION,
TFM_TRANSLATION, TFM_TRACKBALL, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) {
+ resetTransModal(t);
+ resetTransRestrictions(t);
+ restoreTransObjects(t);
+ initResize(t);
+ initSnapping(t, NULL); // need to
reinit after mode change
+ t->redraw |= TREDRAW_HARD;
+ handled = true;
+ }
+ else if (t->mode == TFM_SHRINKFATTEN) {
+ t->flag ^= T_ALT_TRANSFORM;
+ t->redraw |= TREDRAW_HARD;
+ handled = true;
+ }
+ else if (t->mode == TFM_RESIZE) {
+ if (t->options & CTX_MOVIECLIP) {
+ restoreTransObjects(t);
+
+ t->flag ^= T_ALT_TRANSFORM;
t->redraw |= TREDRAW_HARD;
handled = true;
}
- break;
- case TFM_MODAL_AXIS_Z:
- if ((t->flag & (T_NO_CONSTRAINT |
T_2D_EDIT)) == 0) {
- if (cmode == 'Z') {
- stopConstraint(t);
- }
- else {
- setUserConstraint(t,
t->current_orientation, (CON_AXIS2), IFACE_("along %s Z"));
- }
- t->redraw |= TREDRAW_HARD;
- handled = true;
+ }
+ break;
+
+ case TFM_MODAL_SNAP_INV_ON:
+ t->modifiers |= MOD_SNAP_INVERT;
+ t->redraw |= TREDRAW_HARD;
+ handled = true;
+ break;
+ case TFM_MODAL_SNAP_INV_OFF:
+ t->modifiers &= ~MOD_SNAP_INVERT;
+ t->redraw |= TREDRAW_HARD;
+ handled = true;
+ break;
+ case TFM_MODAL_SNAP_TOGGLE:
+ t->modifiers ^= MOD_SNAP;
+ t->redraw |= TREDRAW_HARD;
+ handled = true;
+ break;
+ case TFM_MODAL_AXIS_X:
+ if ((t->flag & T_NO_CONSTRAINT) == 0) {
+ if (cmode == 'X') {
+ stopConstraint(t);
}
- break;
- case TFM_MODAL_PLANE_X:
- if ((t->flag & (T_NO_CONSTRAINT |
T_2D_EDIT)) == 0) {
- if (cmode == 'X') {
- stopConstraint(t);
+ else {
+ if (t->flag & T_2D_EDIT) {
+ setUserConstraint(t,
V3D_MANIP_GLOBAL, (CON_AXIS0), IFACE_("along X"));
}
else {
- setUserConstraint(t,
t->current_orientation, (CON_AXIS1 | CON_AXIS2), IFACE_("locking %s X"));
+ setUserConstraint(t,
t->current_orientation, (CON_AXIS0), IFACE_("along %s X"));
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs
