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
This commit is contained in:
Peter Fog 2021-03-20 01:21:07 +01:00 committed by Richard Antalik
parent 1c095203c2
commit 3d9ee83d88
Notes: blender-bot 2023-02-14 11:00:17 +01:00
Referenced by commit ee07bfa3a0, Fix crash transforming sequences
4 changed files with 47 additions and 2 deletions

View File

@ -352,8 +352,12 @@ class SEQUENCER_MT_view(Menu):
if is_sequencer_view:
layout.prop(st, "show_region_hud")
layout.separator()
if st.view_type == 'SEQUENCER':
layout.prop(st, "show_backdrop", text="Preview as Backdrop")
if is_preview or st.show_backdrop:
layout.prop(st, "show_transform_preview", text="Preview During Transform")
layout.separator()
@ -724,6 +728,7 @@ class SEQUENCER_MT_strip_image_transform(Menu):
layout.operator("sequencer.strip_transform_clear", text="Clear Rotation").property = 'ROTATION'
layout.operator("sequencer.strip_transform_clear", text="Clear All").property = 'ALL'
class SEQUENCER_MT_strip_transform(Menu):
bl_label = "Transform"

View File

@ -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);
}

View File

@ -626,6 +626,7 @@ typedef enum eSpaceSeq_RegionType {
typedef enum eSpaceSeq_DrawFlag {
SEQ_DRAW_BACKDROP = (1 << 0),
SEQ_DRAW_OFFSET_EXT = (1 << 1),
SEQ_DRAW_TRANSFORM_PREVIEW = (1 << 2),
} eSpaceSeq_DrawFlag;
/* SpaceSeq.flag */

View File

@ -5434,6 +5434,11 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_SHOW_STRIP_DURATION);
RNA_def_property_ui_text(prop, "Show Duration", "");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "show_transform_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw_flag", SEQ_DRAW_TRANSFORM_PREVIEW);
RNA_def_property_ui_text(prop, "Transform Preview", "Show preview of the transformed frames");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
}
static void rna_def_space_text(BlenderRNA *brna)