2.5
Made 'select-tweak-grab' work in 3d window, fcurve and nodes. For nodes it works with both left/right, the others follow user preset for select. Tweak is a WM event, which also follows user preset for tablet-style tweaks (release = apply). You enable tweak events with an operator WM_OT_tweak_gesture. Keymap entries can assign to left/middle/right button or to action/select button tweaks.
This commit is contained in:
@@ -867,7 +867,7 @@ void ED_marker_keymap(wmWindowManager *wm)
|
||||
|
||||
WM_keymap_add_item(keymap, "MARKER_OT_move", GKEY, KM_PRESS, 0, 0);
|
||||
|
||||
/* generates event, in end to make select work */
|
||||
/* generates event, needs to be after select to work */
|
||||
WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", RIGHTMOUSE, KM_PRESS, 0, 0);
|
||||
|
||||
}
|
||||
|
||||
@@ -186,7 +186,9 @@ static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap)
|
||||
//WM_keymap_add_item(keymap, "GRAPHEDIT_OT_set_previewrange", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
|
||||
//WM_keymap_add_item(keymap, "GRAPHEDIT_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
|
||||
|
||||
|
||||
/* generates event, needs to be after select to work */
|
||||
WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
|
||||
|
||||
/* transform system */
|
||||
transform_keymap_for_space(wm, keymap, SPACE_IPO);
|
||||
}
|
||||
|
||||
@@ -870,7 +870,8 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev
|
||||
/* set notifier tha things have changed */
|
||||
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
/* for tweak grab to work */
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
void GRAPHEDIT_OT_keyframes_clickselect (wmOperatorType *ot)
|
||||
|
||||
@@ -73,5 +73,9 @@ void node_keymap(struct wmWindowManager *wm)
|
||||
WM_keymap_add_item(keymap, "NODE_OT_border_select", BKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_delete_selection", XKEY, KM_PRESS, 0, 0);
|
||||
|
||||
/* generates event, needs to be after select to work */
|
||||
WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", ACTIONMOUSE, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
|
||||
|
||||
transform_keymap_for_space(wm, keymap, SPACE_NODE);
|
||||
}
|
||||
|
||||
@@ -125,10 +125,9 @@ static int node_select_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); /* Do we need to pass the scene? */
|
||||
|
||||
//WM_event_add_modal_handler(C, &window->handlers, op);
|
||||
|
||||
return /*OPERATOR_RUNNING_MODAL;*/ OPERATOR_FINISHED;
|
||||
/* allow tweak event to work too */
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
static int node_select_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
@@ -126,7 +126,7 @@ static int do_header_hidden_node(SpaceNode *snode, bNode *node, float mx, float
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void node_toggle_visibility(SpaceNode *snode, ARegion *ar, short *mval)
|
||||
static int node_toggle_visibility(SpaceNode *snode, ARegion *ar, short *mval)
|
||||
{
|
||||
bNode *node;
|
||||
float mx, my;
|
||||
@@ -140,16 +140,17 @@ static void node_toggle_visibility(SpaceNode *snode, ARegion *ar, short *mval)
|
||||
if(node->flag & NODE_HIDDEN) {
|
||||
if(do_header_hidden_node(snode, node, mx, my)) {
|
||||
ED_region_tag_redraw(ar);
|
||||
break;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(do_header_node(snode, node, mx, my)) {
|
||||
ED_region_tag_redraw(ar);
|
||||
break;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int node_toggle_visibility_exec(bContext *C, wmOperator *op)
|
||||
@@ -160,9 +161,10 @@ static int node_toggle_visibility_exec(bContext *C, wmOperator *op)
|
||||
|
||||
mval[0] = RNA_int_get(op->ptr, "mouse_x");
|
||||
mval[1] = RNA_int_get(op->ptr, "mouse_y");
|
||||
node_toggle_visibility(snode, ar, mval);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
if(node_toggle_visibility(snode, ar, mval))
|
||||
return OPERATOR_FINISHED;
|
||||
else
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
static int node_toggle_visibility_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
@@ -882,7 +882,8 @@ void transformEvent(TransInfo *t, wmEvent *event)
|
||||
break;
|
||||
case LEFTMOUSE:
|
||||
case RIGHTMOUSE:
|
||||
if (t->options & CTX_TWEAK)
|
||||
if(WM_modal_tweak_exit(event, t->event_type))
|
||||
// if (t->options & CTX_TWEAK)
|
||||
t->state = TRANS_CONFIRM;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -218,6 +218,7 @@ typedef struct TransInfo {
|
||||
float center[3]; /* center of transformation */
|
||||
int center2d[2]; /* center in screen coordinates */
|
||||
short imval[2]; /* initial mouse position */
|
||||
short event_type; /* event->type used to invoke transform */
|
||||
short idx_max; /* maximum index on the input vector */
|
||||
float snap[3]; /* Snapping Gears */
|
||||
char frame_side; /* Mouse side of the cfra, 'L', 'R' or 'B' */
|
||||
|
||||
@@ -684,6 +684,8 @@ void initTransInfo (bContext *C, TransInfo *t, wmEvent *event)
|
||||
{
|
||||
t->imval[0] = event->x - t->ar->winrct.xmin;
|
||||
t->imval[1] = event->y - t->ar->winrct.ymin;
|
||||
|
||||
t->event_type = event->type;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -242,7 +242,10 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key
|
||||
case SPACE_VIEW3D:
|
||||
km = WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
km = WM_keymap_add_item(keymap, "TFM_OT_transform", RKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_ROTATION);
|
||||
|
||||
@@ -265,6 +268,9 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE);
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE);
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND);
|
||||
|
||||
@@ -276,6 +282,9 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key
|
||||
break;
|
||||
case SPACE_IPO:
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
// XXX the 'mode' identifier here is not quite right
|
||||
@@ -292,6 +301,11 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_A, KM_ANY, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
km = WM_keymap_add_item(keymap, "TFM_OT_transform", RKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_ROTATION);
|
||||
|
||||
@@ -301,7 +315,10 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key
|
||||
case SPACE_SEQ:
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
|
||||
|
||||
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0);
|
||||
RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND);
|
||||
break;
|
||||
|
||||
@@ -970,8 +970,8 @@ void WM_event_add_mousemove(bContext *C)
|
||||
/* for modal callbacks, check configuration for how to interpret exit with tweaks */
|
||||
int WM_modal_tweak_exit(wmEvent *evt, int tweak_event)
|
||||
{
|
||||
/* user preset?? dunno... */
|
||||
int tweak_modal= 1;
|
||||
/* user preset or keymap? dunno... */
|
||||
int tweak_modal= (U.flag & USER_DRAGIMMEDIATE)==0;
|
||||
|
||||
switch(tweak_event) {
|
||||
case EVT_TWEAK_L:
|
||||
|
||||
Reference in New Issue
Block a user