diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-01-04 18:12:50 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-01-04 18:27:50 +0300 |
commit | 8abdc89912e4ae042eeeb5f0e33e833a89eefb8f (patch) | |
tree | 7c268b04189a64e85d7c89de08ba798dcd26af08 /source/blender/editors/animation | |
parent | c7eb83bc17f3465aa8c9c9aeb3998cc5882ac4ec (diff) |
Sequencer: Preview dragging playhead over strips
Bring back the 2.4x feature.
also show a highlight when a strip is being previewed.
Diffstat (limited to 'source/blender/editors/animation')
-rw-r--r-- | source/blender/editors/animation/anim_ops.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 8a9e02a64ea..1a043b4cccd 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -56,6 +56,7 @@ #include "ED_anim_api.h" #include "ED_screen.h" +#include "ED_sequencer.h" #include "anim_intern.h" @@ -143,6 +144,25 @@ static int frame_from_event(bContext *C, const wmEvent *event) return frame; } +static void change_frame_seq_preview_begin(bContext *C, const wmEvent *event) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype == SPACE_SEQ) { + SpaceSeq *sseq = sa->spacedata.first; + if (ED_space_sequencer_check_show_strip(sseq)) { + ED_sequencer_special_preview_set(C, event->mval); + } + } +} +static void change_frame_seq_preview_end(bContext *C) +{ + if (ED_sequencer_special_preview_get() != NULL) { + Scene *scene = CTX_data_scene(C); + ED_sequencer_special_preview_clear(); + WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); + } +} + /* Modal Operator init */ static int change_frame_invoke(bContext *C, wmOperator *op, const wmEvent *event) { @@ -152,6 +172,8 @@ static int change_frame_invoke(bContext *C, wmOperator *op, const wmEvent *event */ RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); + change_frame_seq_preview_begin(C, event); + change_frame_apply(C, op); /* add temp handler */ @@ -160,14 +182,21 @@ static int change_frame_invoke(bContext *C, wmOperator *op, const wmEvent *event return OPERATOR_RUNNING_MODAL; } +static void change_frame_cancel(bContext *C, wmOperator *UNUSED(op)) +{ + change_frame_seq_preview_end(C); +} + /* 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: - return OPERATOR_FINISHED; - + ret = OPERATOR_FINISHED; + break; + case MOUSEMOVE: RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); change_frame_apply(C, op); @@ -180,7 +209,7 @@ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) * the modal op) doesn't work for some reason */ if (event->val == KM_RELEASE) - return OPERATOR_FINISHED; + ret = OPERATOR_FINISHED; break; case LEFTCTRLKEY: @@ -194,7 +223,11 @@ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) break; } - return OPERATOR_RUNNING_MODAL; + if (ret == OPERATOR_FINISHED) { + change_frame_seq_preview_end(C); + } + + return ret; } static void ANIM_OT_change_frame(wmOperatorType *ot) @@ -209,6 +242,7 @@ static void ANIM_OT_change_frame(wmOperatorType *ot) /* api callbacks */ ot->exec = change_frame_exec; ot->invoke = change_frame_invoke; + ot->cancel = change_frame_cancel; ot->modal = change_frame_modal; ot->poll = change_frame_poll; |