Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/transform/transform.c59
-rw-r--r--source/blender/editors/transform/transform.h3
-rw-r--r--source/blender/editors/transform/transform_generics.c44
-rw-r--r--source/blender/editors/transform/transform_ops.c4
-rw-r--r--source/blender/windowmanager/WM_api.h4
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c7
6 files changed, 54 insertions, 67 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 356ad8643f8..bba0b750d0c 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -818,15 +818,9 @@ int transformEvent(TransInfo *t, const wmEvent *event)
t->redraw |= handleSnapping(t, event);
handled = true;
}
- else if (event->val == t->release_confirm_event_val &&
- event->type == t->release_confirm_event_type) {
- /* Confirm transform if launch key is released after mouse move. */
- BLI_assert(t->flag & T_RELEASE_CONFIRM);
- t->state = TRANS_CONFIRM;
- }
+ /* handle modal keymap first */
+ /* enforce redraw of transform when modifiers are used */
else if (event->type == EVT_MODAL_MAP) {
- /* Handle modal keymap first. */
- /* Enforce redraw of transform when modifiers are used */
switch (event->val) {
case TFM_MODAL_CANCEL:
t->state = TRANS_CANCEL;
@@ -1128,8 +1122,8 @@ int transformEvent(TransInfo *t, const wmEvent *event)
break;
}
}
+ /* Else do non-mapped events. */
else if (event->val == KM_PRESS) {
- /* Do non-mapped events. */
switch (event->type) {
case EVT_CKEY:
if (event->is_repeat) {
@@ -1217,6 +1211,11 @@ int transformEvent(TransInfo *t, const wmEvent *event)
}
break;
}
+
+ /* confirm transform if launch key is released after mouse move */
+ if ((t->flag & T_RELEASE_CONFIRM) && event->type == t->launch_event) {
+ t->state = TRANS_CONFIRM;
+ }
}
/* if we change snap options, get the unsnapped values back */
@@ -1688,6 +1687,17 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
t->mode = mode;
+ /* Needed to translate tweak events to mouse buttons. */
+ t->launch_event = event ? WM_userdef_event_type_from_keymap_type(event->type) : -1;
+ t->is_launch_event_tweak = event ? ISTWEAK(event->type) : false;
+
+ /* XXX Remove this when wm_operator_call_internal doesn't use window->eventstate
+ * (which can have type = 0) */
+ /* For gizmo only, so assume LEFTMOUSE. */
+ if (t->launch_event == 0) {
+ t->launch_event = LEFTMOUSE;
+ }
+
unit_m3(t->spacemtx);
initTransInfo(C, t, op, event);
@@ -1761,6 +1771,37 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
}
}
+ if (event) {
+ /* keymap for shortcut header prints */
+ t->keymap = WM_keymap_active(CTX_wm_manager(C), op->type->modalkeymap);
+
+ /* Stupid code to have Ctrl-Click on gizmo work ok.
+ *
+ * Do this only for translation/rotation/resize because only these
+ * modes are available from gizmo and doing such check could
+ * lead to keymap conflicts for other modes (see T31584)
+ */
+ if (ELEM(mode, TFM_TRANSLATION, TFM_ROTATION, TFM_RESIZE)) {
+ wmKeyMapItem *kmi;
+
+ for (kmi = t->keymap->items.first; kmi; kmi = kmi->next) {
+ if (kmi->flag & KMI_INACTIVE) {
+ continue;
+ }
+
+ if (kmi->propvalue == TFM_MODAL_SNAP_INV_ON && kmi->val == KM_PRESS) {
+ if ((ELEM(kmi->type, EVT_LEFTCTRLKEY, EVT_RIGHTCTRLKEY) && event->ctrl) ||
+ (ELEM(kmi->type, EVT_LEFTSHIFTKEY, EVT_RIGHTSHIFTKEY) && event->shift) ||
+ (ELEM(kmi->type, EVT_LEFTALTKEY, EVT_RIGHTALTKEY) && event->alt) ||
+ ((kmi->type == EVT_OSKEY) && event->oskey)) {
+ t->modifiers |= MOD_SNAP_INVERT;
+ }
+ break;
+ }
+ }
+ }
+ }
+
initSnapping(t, op); /* Initialize snapping data AFTER mode flags */
initSnapSpatial(t, t->snap_spatial);
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 485d5282a62..227330e8524 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -351,8 +351,7 @@ typedef struct TransInfo {
/*************** NEW STUFF *********************/
/** event type used to launch transform. */
- short release_confirm_event_type;
- short release_confirm_event_val;
+ short launch_event;
/** Is the actual launch event a tweak event? (launch_event above is set to the corresponding
* mouse button then.) */
bool is_launch_event_tweak;
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 27346c9e974..5b41f6b51bf 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -593,60 +593,18 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
transform_orientations_current_set(t, (t->con.mode & CON_APPLY) ? 2 : 0);
}
- if (event) {
- t->release_confirm_event_type = WM_userdef_event_type_from_keymap_type(event->type);
- t->is_launch_event_tweak = ISTWEAK(event->type);
-
- /* XXX Remove this when wm_operator_call_internal doesn't use window->eventstate
- * (which can have type = 0) */
- /* For gizmo only, so assume LEFTMOUSE. */
- if (t->release_confirm_event_type == 0) {
- t->release_confirm_event_type = LEFTMOUSE;
- }
- }
- else {
- /* Needed to translate tweak events to mouse buttons. */
- t->release_confirm_event_type = -1;
- }
-
- t->release_confirm_event_val = -2;
-
if (op && ((prop = RNA_struct_find_property(op->ptr, "release_confirm")) &&
RNA_property_is_set(op->ptr, prop))) {
if (RNA_property_boolean_get(op->ptr, prop)) {
t->flag |= T_RELEASE_CONFIRM;
- t->release_confirm_event_val = KM_RELEASE;
}
}
else {
/* Release confirms preference should not affect node editor (T69288, T70504). */
- if (ISMOUSE(t->release_confirm_event_type) &&
+ if (ISMOUSE(t->launch_event) &&
((U.flag & USER_RELEASECONFIRM) || (t->spacetype == SPACE_NODE))) {
/* Global "release confirm" on mouse bindings */
t->flag |= T_RELEASE_CONFIRM;
- t->release_confirm_event_val = KM_RELEASE;
- }
- }
-
- if (op && event) {
- /* Keymap for shortcut header prints. */
- t->keymap = WM_keymap_active(CTX_wm_manager(C), op->type->modalkeymap);
-
- /* Stupid code to have Relase confirm and Ctrl-Click on gizmo work ok. */
- wmKeyMapItem *kmi = WM_event_match_modal_keymap_item(t->keymap, op, event);
- if (kmi) {
- if ((t->flag & T_RELEASE_CONFIRM) && (event->val == KM_PRESS) && (kmi->val != KM_PRESS)) {
- t->release_confirm_event_type = EVT_MODAL_MAP;
- t->release_confirm_event_val = kmi->propvalue;
- }
-
- if ((kmi->propvalue == TFM_MODAL_SNAP_INV_ON) &&
- ELEM(t->mode, TFM_TRANSLATION, TFM_ROTATION, TFM_RESIZE)) {
- /* Do this only for translation/rotation/resize because only these
- * modes are available from gizmo and doing such check could
- * lead to keymap conflicts for other modes (see T31584) */
- t->modifiers |= MOD_SNAP_INVERT;
- }
}
}
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 7282c35ea0f..5153fdedcae 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -376,7 +376,7 @@ static int transformops_data(bContext *C, wmOperator *op, const wmEvent *event)
{
int retval = 1;
if (op->customdata == NULL) {
- TransInfo *t = op->customdata = MEM_callocN(sizeof(TransInfo), "TransInfo data2");
+ TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data2");
TransformModeItem *tmode;
int mode = -1;
@@ -396,10 +396,10 @@ static int transformops_data(bContext *C, wmOperator *op, const wmEvent *event)
/* store data */
if (retval) {
G.moving = special_transform_moving(t);
+ op->customdata = t;
}
else {
MEM_freeN(t);
- op->customdata = NULL;
}
}
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 430130d4727..da2115e12fb 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -47,7 +47,6 @@ struct ImBuf;
struct ImageFormatData;
struct Main;
struct MenuType;
-struct Operator;
struct PointerRNA;
struct PropertyRNA;
struct ScrArea;
@@ -259,9 +258,6 @@ void WM_event_set_keymap_handler_post_callback(struct wmEventHandler_Keymap *han
wmKeyMap *WM_event_get_keymap_from_handler(wmWindowManager *wm,
struct wmEventHandler_Keymap *handler);
-wmKeyMapItem *WM_event_match_modal_keymap_item(const wmKeyMap *keymap,
- struct wmOperator *op,
- const struct wmEvent *event);
wmKeyMapItem *WM_event_match_keymap_item(struct bContext *C,
wmKeyMap *keymap,
const struct wmEvent *event);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 587abf6fa0a..1bd8c675807 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1911,13 +1911,6 @@ static wmKeyMapItem *wm_eventmatch_modal_keymap_items(const wmKeyMap *keymap,
return NULL;
}
-wmKeyMapItem *WM_event_match_modal_keymap_item(const wmKeyMap *keymap,
- wmOperator *op,
- const wmEvent *event)
-{
- return wm_eventmatch_modal_keymap_items(keymap, op, event);
-}
-
/**
* This function prepares events for use with #wmOperatorType.modal by:
*