From 526fbdec3b6a0fb574e4d0ebe43eead9c1078e39 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 1 Sep 2020 09:37:43 -0300 Subject: Transform: Move some hardcoded keyitems to keymap_data in python Keymaps must be customized by the user. But this is not the case for hardcoded keymaps. Also the repetition of hardcoded and user-defined keyitems may induce the user to think they have made a mistake or it is a bug. Differential Revision: https://developer.blender.org/D6454 --- source/blender/editors/transform/transform.c | 271 ++++++--------------------- source/blender/editors/transform/transform.h | 3 + source/tools | 2 +- 3 files changed, 64 insertions(+), 212 deletions(-) (limited to 'source') diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 2fa291e7ae4..421a8e2d43e 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -560,94 +560,6 @@ static void viewRedrawPost(bContext *C, TransInfo *t) #endif } -/* ************************** TRANSFORMATIONS **************************** */ - -static void view_editmove(ushort UNUSED(event)) -{ -#if 0 // TRANSFORM_FIX_ME - int refresh = 0; - /* Regular: Zoom in */ - /* Shift: Scroll up */ - /* Ctrl: Scroll right */ - /* Alt-Shift: Rotate up */ - /* Alt-Ctrl: Rotate right */ - - /* only work in 3D window for now - * In the end, will have to send to event to a 2D window handler instead - */ - if (Trans.flag & T_2D_EDIT) { - return; - } - - switch (event) { - case WHEELUPMOUSE: - if (G.qual & LR_SHIFTKEY) { - if (G.qual & LR_ALTKEY) { - G.qual &= ~LR_SHIFTKEY; - persptoetsen(PAD2); - G.qual |= LR_SHIFTKEY; - } - else { - persptoetsen(PAD2); - } - } - else if (G.qual & LR_CTRLKEY) { - if (G.qual & LR_ALTKEY) { - G.qual &= ~LR_CTRLKEY; - persptoetsen(PAD4); - G.qual |= LR_CTRLKEY; - } - else { - persptoetsen(PAD4); - } - } - else if (U.uiflag & USER_WHEELZOOMDIR) { - persptoetsen(PADMINUS); - } - else { - persptoetsen(PADPLUSKEY); - } - - refresh = 1; - break; - case WHEELDOWNMOUSE: - if (G.qual & LR_SHIFTKEY) { - if (G.qual & LR_ALTKEY) { - G.qual &= ~LR_SHIFTKEY; - persptoetsen(PAD8); - G.qual |= LR_SHIFTKEY; - } - else { - persptoetsen(PAD8); - } - } - else if (G.qual & LR_CTRLKEY) { - if (G.qual & LR_ALTKEY) { - G.qual &= ~LR_CTRLKEY; - persptoetsen(PAD6); - G.qual |= LR_CTRLKEY; - } - else { - persptoetsen(PAD6); - } - } - else if (U.uiflag & USER_WHEELZOOMDIR) { - persptoetsen(PADPLUSKEY); - } - else { - persptoetsen(PADMINUS); - } - - refresh = 1; - break; - } - - if (refresh) { - setTransformViewMatrices(&Trans); - } -#endif -} - /* ************************************************* */ static bool transform_modal_item_poll(const wmOperator *op, int value) @@ -770,6 +682,17 @@ wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf) {TFM_MODAL_TRANSLATE, "TRANSLATE", 0, "Move", ""}, {TFM_MODAL_ROTATE, "ROTATE", 0, "Rotate", ""}, {TFM_MODAL_RESIZE, "RESIZE", 0, "Resize", ""}, + + {TFM_MODAL_AUTOCONSTRAINT, + "AUTOCONSTRAIN", + 0, + "Automatically detects one direction for constraint", + ""}, + {TFM_MODAL_CONSTRAINTPLANE, + "CONSTRAINPLANE", + 0, + "modifier that enables the plane type constraint", + ""}, {0, NULL, 0, NULL, NULL}, }; @@ -778,6 +701,25 @@ wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf) keymap = WM_modalkeymap_ensure(keyconf, "Transform Modal Map", modal_items); keymap->poll_modal_item = transform_modal_item_poll; + /* Default modal map values: + * + * \code{.c} + * WM_modalkeymap_add_item(keymap, EVT_RETKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONFIRM); + * WM_modalkeymap_add_item(keymap, EVT_ESCKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CANCEL); + * WM_modalkeymap_add_item(keymap, EVT_PAGEUPKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOIK_LEN_INC); + * WM_modalkeymap_add_item( + * keymap, EVT_PAGEDOWNKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOIK_LEN_DEC); + * WM_modalkeymap_add_item(keymap, EVT_GKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_TRANSLATE); + * WM_modalkeymap_add_item(keymap, EVT_RKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_ROTATE); + * WM_modalkeymap_add_item(keymap, EVT_SKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_RESIZE); + * WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOCONSTRAINT); + * WM_modalkeymap_add_item( + * keymap, EVT_LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONSTRAINTPLANE); + * WM_modalkeymap_add_item( + * keymap, EVT_RIGHTSHIFTKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONSTRAINTPLANE); + * \endcode + */ + return keymap; } @@ -887,6 +829,7 @@ int transformEvent(TransInfo *t, const wmEvent *event) handled = true; } /* handle modal keymap first */ + /* enforce redraw of transform when modifiers are used */ else if (event->type == EVT_MODAL_MAP) { switch (event->val) { case TFM_MODAL_CANCEL: @@ -1147,40 +1090,7 @@ int transformEvent(TransInfo *t, const wmEvent *event) t->redraw |= TREDRAW_SOFT; } break; - /* Those two are only handled in transform's own handler, see T44634! */ - case TFM_MODAL_EDGESLIDE_UP: - case TFM_MODAL_EDGESLIDE_DOWN: - default: - break; - } - } - /* else do non-mapped events */ - else if (event->val == KM_PRESS) { - switch (event->type) { - case EVT_ESCKEY: - case RIGHTMOUSE: - t->state = TRANS_CANCEL; - handled = true; - break; - - case EVT_SPACEKEY: - case EVT_PADENTER: - case EVT_RETKEY: - if (event->is_repeat) { - break; - } - t->state = TRANS_CONFIRM; - handled = true; - break; - - /* enforce redraw of transform when modifiers are used */ - case EVT_LEFTSHIFTKEY: - case EVT_RIGHTSHIFTKEY: - t->modifiers |= MOD_CONSTRAINT_PLANE; - t->redraw |= TREDRAW_HARD; - handled = true; - break; - case MIDDLEMOUSE: + case TFM_MODAL_AUTOCONSTRAINT: if ((t->flag & T_NO_CONSTRAINT) == 0) { /* exception for switching to dolly, or trackball, in camera view */ if (t->flag & T_CAMERA) { @@ -1206,59 +1116,21 @@ int transformEvent(TransInfo *t, const wmEvent *event) handled = true; } break; - case EVT_GKEY: - if (event->is_repeat) { - break; - } - /* only switch when... */ - if (t->mode != TFM_TRANSLATION && transform_mode_is_changeable(t->mode)) { - restoreTransObjects(t); - resetTransModal(t); - resetTransRestrictions(t); - transform_mode_init(t, NULL, TFM_TRANSLATION); - initSnapping(t, NULL); // need to reinit after mode change - t->redraw |= TREDRAW_HARD; - handled = true; - } - break; - case EVT_SKEY: - if (event->is_repeat) { - break; - } - /* only switch when... */ - if (t->mode != TFM_RESIZE && transform_mode_is_changeable(t->mode)) { - restoreTransObjects(t); - resetTransModal(t); - resetTransRestrictions(t); - transform_mode_init(t, NULL, TFM_RESIZE); - initSnapping(t, NULL); // need to reinit after mode change - t->redraw |= TREDRAW_HARD; - handled = true; - } + case TFM_MODAL_CONSTRAINTPLANE: + t->modifiers |= MOD_CONSTRAINT_PLANE; + t->redraw |= TREDRAW_HARD; + handled = true; break; - case EVT_RKEY: - if (event->is_repeat) { - break; - } - /* only switch when... */ - if (!(t->options & CTX_TEXTURE)) { - if (transform_mode_is_changeable(t->mode)) { - 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; - } - } + /* Those two are only handled in transform's own handler, see T44634! */ + case TFM_MODAL_EDGESLIDE_UP: + case TFM_MODAL_EDGESLIDE_DOWN: + default: break; + } + } + /* Else do non-mapped events. */ + else if (event->val == KM_PRESS) { + switch (event->type) { case EVT_CKEY: if (event->is_repeat) { break; @@ -1295,17 +1167,6 @@ int transformEvent(TransInfo *t, const wmEvent *event) handled = true; } break; - case EVT_PAGEUPKEY: - case WHEELDOWNMOUSE: - if (t->flag & T_AUTOIK) { - transform_autoik_update(t, 1); - } - else { - view_editmove(event->type); - } - t->redraw = TREDRAW_HARD; - handled = true; - break; case EVT_PADMINUS: if (event->alt && t->flag & T_PROP_EDIT) { t->prop_size /= (t->modifiers & MOD_PRECISION) ? 1.01f : 1.1f; @@ -1314,17 +1175,6 @@ int transformEvent(TransInfo *t, const wmEvent *event) handled = true; } break; - case EVT_PAGEDOWNKEY: - case WHEELUPMOUSE: - if (t->flag & T_AUTOIK) { - transform_autoik_update(t, -1); - } - else { - view_editmove(event->type); - } - t->redraw = TREDRAW_HARD; - handled = true; - break; case EVT_LEFTALTKEY: case EVT_RIGHTALTKEY: if (ELEM(t->spacetype, SPACE_SEQ, SPACE_VIEW3D)) { @@ -1357,31 +1207,30 @@ int transformEvent(TransInfo *t, const wmEvent *event) } else if (event->val == KM_RELEASE) { switch (event->type) { - case EVT_LEFTSHIFTKEY: - case EVT_RIGHTSHIFTKEY: - t->modifiers &= ~MOD_CONSTRAINT_PLANE; - t->redraw |= TREDRAW_HARD; - handled = true; - break; - - case MIDDLEMOUSE: - if ((t->flag & T_NO_CONSTRAINT) == 0) { - t->modifiers &= ~MOD_CONSTRAINT_SELECT; - postSelectConstraint(t); - t->redraw |= TREDRAW_HARD; - handled = true; - } - break; case EVT_LEFTALTKEY: case EVT_RIGHTALTKEY: + /* TODO: Modal Map */ if (ELEM(t->spacetype, SPACE_SEQ, SPACE_VIEW3D)) { t->flag &= ~T_ALT_TRANSFORM; t->redraw |= TREDRAW_HARD; handled = true; } break; - default: + default: { + /* Disable modifiers. */ + int modifiers = t->modifiers; + modifiers &= ~MOD_CONSTRAINT_SELECT; + modifiers &= ~MOD_CONSTRAINT_PLANE; + if (modifiers != t->modifiers) { + if (t->modifiers & MOD_CONSTRAINT_SELECT) { + postSelectConstraint(t); + } + t->modifiers = modifiers; + t->redraw |= TREDRAW_HARD; + handled = true; + } break; + } } /* confirm transform if launch key is released after mouse move */ diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 6356144d77a..9618e0d1bb9 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -575,6 +575,9 @@ enum { TFM_MODAL_PROPSIZE = 26, /* node editor insert offset (aka auto-offset) direction toggle */ TFM_MODAL_INSERTOFS_TOGGLE_DIR = 27, + + TFM_MODAL_AUTOCONSTRAINT = 28, + TFM_MODAL_CONSTRAINTPLANE = 29, }; bool initTransform(struct bContext *C, diff --git a/source/tools b/source/tools index f4aa2de034d..2afbb8ec472 160000 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit f4aa2de034d359bf85c6a0f90c0d045c5858eb8d +Subproject commit 2afbb8ec472cac5102eb239f57b006f8c9387685 -- cgit v1.2.3