diff options
author | Peter Fog <tintwotin> | 2021-03-20 03:21:07 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2021-03-20 03:40:53 +0300 |
commit | 3d9ee83d88186248fb66823662a04d1a0429e1ae (patch) | |
tree | 48c3d67a57453234f58469760828c7e78e76a7af /source/blender/editors/space_sequencer/sequencer_draw.c | |
parent | 1c095203c275f84e6b024e09203ca228d19b8070 (diff) |
VSE: Preview images when moving strip handles
Add option to override current frame whem transforming strip handles.
Option can be found in View menu of VSE preview, or in timeline when
using backdrop.
Reviewed By: ISS
Differential Revision: https://developer.blender.org/D10424
Diffstat (limited to 'source/blender/editors/space_sequencer/sequencer_draw.c')
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 3249eae8c7f..63449193cba 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -1818,6 +1818,30 @@ static ImBuf *sequencer_get_scope(Scene *scene, SpaceSeq *sseq, ImBuf *ibuf, boo return scope; } +static bool sequencer_draw_get_transform_preview(SpaceSeq *sseq, Scene *scene) +{ + Sequence *last_seq = SEQ_select_active_get(scene); + + return (G.moving & G_TRANSFORM_SEQ) && (last_seq->flag & SELECT) && + ((last_seq->flag & SEQ_LEFTSEL) || (last_seq->flag & SEQ_RIGHTSEL)) && + (sseq->draw_flag & SEQ_DRAW_TRANSFORM_PREVIEW); +} + +static int sequencer_draw_get_transform_preview_frame(Scene *scene) +{ + Sequence *last_seq = SEQ_select_active_get(scene); + int preview_frame; + + if (last_seq->flag & SEQ_RIGHTSEL) { + preview_frame = last_seq->enddisp - 1; + } + else { + preview_frame = last_seq->startdisp; + } + + return preview_frame; +} + void sequencer_draw_preview(const bContext *C, Scene *scene, ARegion *region, @@ -1842,9 +1866,14 @@ void sequencer_draw_preview(const bContext *C, return; } + int preview_frame = timeline_frame; + if (sequencer_draw_get_transform_preview(sseq, scene)) { + preview_frame = sequencer_draw_get_transform_preview_frame(scene); + } + /* Get image. */ ibuf = sequencer_ibuf_get( - bmain, region, depsgraph, scene, sseq, timeline_frame, offset, names[sseq->multiview_eye]); + bmain, region, depsgraph, scene, sseq, preview_frame, offset, names[sseq->multiview_eye]); /* Setup off-screen buffers. */ GPUViewport *viewport = WM_draw_region_get_viewport(region); @@ -2356,7 +2385,12 @@ void draw_timeline_seq(const bContext *C, ARegion *region) /* Only draw backdrop in timeline view. */ if (sseq->view == SEQ_VIEW_SEQUENCE && sseq->draw_flag & SEQ_DRAW_BACKDROP) { - sequencer_draw_preview(C, scene, region, sseq, scene->r.cfra, 0, false, true); + int preview_frame = scene->r.cfra; + if (sequencer_draw_get_transform_preview(sseq, scene)) { + preview_frame = sequencer_draw_get_transform_preview_frame(scene); + } + + sequencer_draw_preview(C, scene, region, sseq, preview_frame, 0, false, true); UI_view2d_view_ortho(v2d); } |