/* Modal event handling of frame changing */ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) { /* execute the events */ switch (event->type) { case ESCKEY: return OPERATOR_FINISHED; case MOUSEMOVE: RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); break; case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init * the modal op) doesn't work for some reason */ if (event->val == KM_RELEASE) return OPERATOR_FINISHED; break; } return OPERATOR_RUNNING_MODAL; }
/* Modal Operator init */ static int change_frame_invoke(bContext *C, wmOperator *op, const wmEvent *event) { /* Change to frame that mouse is over before adding modal handler, * as user could click on a single frame (jump to frame) as well as * click-dragging over a range (modal scrubbing). */ RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); /* add temp handler */ WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; }
static int change_frame_invoke(bContext *C, wmOperator *op, const wmEvent *event) { ARegion *ar = CTX_wm_region(C); if (ar->regiontype == RGN_TYPE_WINDOW) { if (event->mval[1] > 16) return OPERATOR_PASS_THROUGH; } RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); /* add temp handler */ WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; }
static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) { switch (event->type) { case ESCKEY: return OPERATOR_FINISHED; case MOUSEMOVE: RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); break; case LEFTMOUSE: case RIGHTMOUSE: if (event->val == KM_RELEASE) return OPERATOR_FINISHED; break; } return OPERATOR_RUNNING_MODAL; }
/* Modal event handling of frame changing */ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) { int ret = OPERATOR_RUNNING_MODAL; /* execute the events */ switch (event->type) { case ESCKEY: ret = OPERATOR_FINISHED; break; case MOUSEMOVE: RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); break; case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init * the modal op) doesn't work for some reason */ if (event->val == KM_RELEASE) ret = OPERATOR_FINISHED; break; case LEFTCTRLKEY: case RIGHTCTRLKEY: if (event->val == KM_RELEASE) { RNA_boolean_set(op->ptr, "snap", false); } else if (event->val == KM_PRESS) { RNA_boolean_set(op->ptr, "snap", true); } break; } if (ret != OPERATOR_RUNNING_MODAL) { change_frame_seq_preview_end(C); } return ret; }
/* Modal event handling of frame changing */ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) { int ret = OPERATOR_RUNNING_MODAL; /* execute the events */ switch (event->type) { case ESCKEY: ret = OPERATOR_FINISHED; break; case MOUSEMOVE: RNA_float_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); break; case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: /* We check for either mouse-button to end, to work with all user keymaps. */ if (event->val == KM_RELEASE) { ret = OPERATOR_FINISHED; } break; case LEFTCTRLKEY: case RIGHTCTRLKEY: if (event->val == KM_RELEASE) { RNA_boolean_set(op->ptr, "snap", false); } else if (event->val == KM_PRESS) { RNA_boolean_set(op->ptr, "snap", true); } break; } if (ret != OPERATOR_RUNNING_MODAL) { change_frame_seq_preview_end(C); } return ret; }
static int change_frame_exec(bContext *C, wmOperator *op) { change_frame_apply(C, op); return OPERATOR_FINISHED; }