[Bf-blender-cvs] [f8b5706a1ff] blender-v3.3-release: Fix T100129: Status bar incorrectly shows "[G] Move" after pressing G once in Edit Mode

Germano Cavalcante noreply at git.blender.org
Thu Aug 4 15:57:16 CEST 2022


Commit: f8b5706a1ffe61ae3bdd949ad851d6e9ff3fe188
Author: Germano Cavalcante
Date:   Wed Aug 3 15:12:18 2022 -0300
Branches: blender-v3.3-release
https://developer.blender.org/rBf8b5706a1ffe61ae3bdd949ad851d6e9ff3fe188

Fix T100129: Status bar incorrectly shows "[G] Move" after pressing G once in Edit Mode

Add specific modal keyitem for Vert/Edge Slide or TrackBall.

Note that there is a workround to avoid repeated keys in the status bar.

Reviewed By: campbellbarton

Maniphest Tasks: T100129

Differential Revision: https://developer.blender.org/D15597

===================================================================

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h

===================================================================

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index d08efc6909b..10c8c58763b 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5751,7 +5751,9 @@ def km_transform_modal_map(_params):
         ("PLANE_Z", {"type": 'Z', "value": 'PRESS', "shift": True}, None),
         ("CONS_OFF", {"type": 'C', "value": 'PRESS'}, None),
         ("TRANSLATE", {"type": 'G', "value": 'PRESS'}, None),
+        ("VERT_EDGE_SLIDE", {"type": 'G', "value": 'PRESS'}, None),
         ("ROTATE", {"type": 'R', "value": 'PRESS'}, None),
+        ("TRACKBALL", {"type": 'R', "value": 'PRESS'}, None),
         ("RESIZE", {"type": 'S', "value": 'PRESS'}, None),
         ("SNAP_TOGGLE", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
         ("SNAP_INV_ON", {"type": 'LEFT_CTRL', "value": 'PRESS', "any": True}, None),
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index c9d66afb796..c1e44ffe306 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -3968,7 +3968,9 @@ def km_transform_modal_map(_params):
         ("PLANE_Z", {"type": 'Z', "value": 'PRESS', "shift": True}, None),
         ("CONS_OFF", {"type": 'C', "value": 'PRESS'}, None),
         ("TRANSLATE", {"type": 'G', "value": 'PRESS'}, None),
+        ("VERT_EDGE_SLIDE", {"type": 'G', "value": 'PRESS'}, None),
         ("ROTATE", {"type": 'R', "value": 'PRESS'}, None),
+        ("TRACKBALL", {"type": 'R', "value": 'PRESS'}, None),
         ("RESIZE", {"type": 'S', "value": 'PRESS'}, None),
         ("SNAP_TOGGLE", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
         ("SNAP_INV_ON", {"type": 'LEFT_CTRL', "value": 'PRESS', "any": True}, None),
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 8dcbf07b776..7567fd0a91d 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -641,10 +641,48 @@ static bool transform_modal_item_poll(const wmOperator *op, int value)
     }
     case TFM_MODAL_TRANSLATE:
     case TFM_MODAL_ROTATE:
-    case TFM_MODAL_RESIZE: {
+    case TFM_MODAL_RESIZE:
+    case TFM_MODAL_VERT_EDGE_SLIDE:
+    case TFM_MODAL_TRACKBALL: {
       if (!transform_mode_is_changeable(t->mode)) {
         return false;
       }
+      if (value == TFM_MODAL_TRANSLATE && t->mode == TFM_TRANSLATION) {
+        return false;
+      }
+      if (value == TFM_MODAL_ROTATE && t->mode == TFM_ROTATION) {
+        return false;
+      }
+      if (value == TFM_MODAL_RESIZE && t->mode == TFM_RESIZE) {
+        return false;
+      }
+      if (value == TFM_MODAL_VERT_EDGE_SLIDE &&
+          (t->data_type != &TransConvertType_Mesh ||
+           /* WORKAROUND: Avoid repeated keys in status bar.
+            *
+            * Previously, `Vert/Edge Slide` and `Move` were triggered by the same modal key.
+            * But now, to fix T100129, `Vert/Edge Slide` has its own modal key.
+            * However by default it uses the same key as `Move` (G).
+            * So, to avoid displaying the same key twice (G and G), only display this modal key
+            * during the `Move` operation.
+            *
+            * Ideally we should check if it really uses the same key. */
+           t->mode != TFM_TRANSLATION)) {
+        return false;
+      }
+      if (value == TFM_MODAL_TRACKBALL &&
+          /* WORKAROUND: Avoid repeated keys in status bar.
+           *
+           * Previously, `Trackball` and `Rotate` were triggered by the same modal key.
+           * But now, to fix T100129, `Trackball` has its own modal key.
+           * However by default it uses the same key as `Rotate` (R).
+           * So, to avoid displaying the same key twice (R and R), only display this modal key
+           * during the `Rotate` operation.
+           *
+           * Ideally we should check if it really uses the same key. */
+          t->mode != TFM_ROTATION) {
+        return false;
+      }
       break;
     }
   }
@@ -691,7 +729,9 @@ wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf)
        "Toggle Direction for Node Auto-Offset",
        ""},
       {TFM_MODAL_TRANSLATE, "TRANSLATE", 0, "Move", ""},
+      {TFM_MODAL_VERT_EDGE_SLIDE, "VERT_EDGE_SLIDE", 0, "Vert/Edge Slide", ""},
       {TFM_MODAL_ROTATE, "ROTATE", 0, "Rotate", ""},
+      {TFM_MODAL_TRACKBALL, "TRACKBALL", 0, "TrackBall", ""},
       {TFM_MODAL_RESIZE, "RESIZE", 0, "Resize", ""},
       {TFM_MODAL_AUTOCONSTRAINT, "AUTOCONSTRAIN", 0, "Automatic Constraint", ""},
       {TFM_MODAL_AUTOCONSTRAINTPLANE, "AUTOCONSTRAINPLANE", 0, "Automatic Constraint Plane", ""},
@@ -934,8 +974,15 @@ int transformEvent(TransInfo *t, const wmEvent *event)
         handled = true;
         break;
       case TFM_MODAL_TRANSLATE:
+      case TFM_MODAL_VERT_EDGE_SLIDE:
         /* only switch when... */
-        if (t->mode == TFM_TRANSLATION) {
+        if (!transform_mode_is_changeable(t->mode)) {
+          break;
+        }
+        if (event->val == TFM_MODAL_VERT_EDGE_SLIDE) {
+          if (ELEM(t->mode, TFM_VERT_SLIDE, TFM_EDGE_SLIDE)) {
+            break;
+          }
           if ((t->obedit_type == OB_MESH) && (t->spacetype == SPACE_VIEW3D)) {
             restoreTransObjects(t);
             resetTransModal(t);
@@ -969,7 +1016,10 @@ int transformEvent(TransInfo *t, const wmEvent *event)
             handled = true;
           }
         }
-        else if (transform_mode_is_changeable(t->mode)) {
+        else {
+          if (t->mode == TFM_TRANSLATION) {
+            break;
+          }
           restoreTransObjects(t);
           resetTransModal(t);
           resetTransRestrictions(t);
@@ -980,23 +1030,33 @@ int transformEvent(TransInfo *t, const wmEvent *event)
         }
         break;
       case TFM_MODAL_ROTATE:
+      case TFM_MODAL_TRACKBALL:
         /* only switch when... */
+        if (!transform_mode_is_changeable(t->mode)) {
+          break;
+        }
+        if (event->val == TFM_MODAL_TRACKBALL) {
+          if (t->mode == TFM_TRACKBALL) {
+            break;
+          }
+        }
+        else if (t->mode == TFM_ROTATION) {
+          break;
+        }
         if (!(t->options & CTX_TEXTURE_SPACE) && !(t->options & (CTX_MOVIECLIP | CTX_MASK))) {
-          if (transform_mode_is_changeable(t->mode)) {
-            restoreTransObjects(t);
-            resetTransModal(t);
-            resetTransRestrictions(t);
+          restoreTransObjects(t);
+          resetTransModal(t);
+          resetTransRestrictions(t);
 
-            if (t->mode == TFM_ROTATION) {
-              transform_mode_init(t, NULL, TFM_TRACKBALL);
-            }
-            else {
-              transform_mode_init(t, NULL, TFM_ROTATION);
-            }
-            initSnapping(t, NULL); /* need to reinit after mode change */
-            t->redraw |= TREDRAW_HARD;
-            handled = true;
+          if (event->val == TFM_MODAL_TRACKBALL) {
+            transform_mode_init(t, NULL, TFM_TRACKBALL);
           }
+          else {
+            transform_mode_init(t, NULL, TFM_ROTATION);
+          }
+          initSnapping(t, NULL); /* need to reinit after mode change */
+          t->redraw |= TREDRAW_HARD;
+          handled = true;
         }
         break;
       case TFM_MODAL_RESIZE:
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index fc59787e1ec..fee6acfbfa7 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -253,6 +253,9 @@ enum {
   TFM_MODAL_AUTOCONSTRAINTPLANE = 29,
 
   TFM_MODAL_PRECISION = 30,
+
+  TFM_MODAL_VERT_EDGE_SLIDE = 31,
+  TFM_MODAL_TRACKBALL = 32,
 };
 
 /** \} */



More information about the Bf-blender-cvs mailing list