Commit: 3a65f0bfef7a9774471e2109e6e184100bdd5e15 Author: Richard Antalik Date: Sat Jun 19 10:52:06 2021 +0200 Branches: temp-vse-snapping https://developer.blender.org/rB3a65f0bfef7a9774471e2109e6e184100bdd5e15
Update rebased on master, arc pulled some very weird base, and I didn't notice =================================================================== M release/scripts/addons M release/scripts/startup/bl_ui/space_sequencer.py M source/blender/editors/transform/CMakeLists.txt M source/blender/editors/transform/transform_convert.h M source/blender/editors/transform/transform_convert_sequencer.c M source/blender/editors/transform/transform_mode_edge_seq_slide.c M source/blender/editors/transform/transform_snap.c M source/blender/editors/transform/transform_snap.h A source/blender/editors/transform/transform_snap_sequencer.c M source/blender/makesdna/DNA_scene_types.h M source/blender/makesrna/intern/rna_scene.c M source/blender/sequencer/SEQ_iterator.h M source/blender/sequencer/intern/iterator.c =================================================================== diff --git a/release/scripts/addons b/release/scripts/addons index ec07ed4c2e0..f86f25e6221 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit ec07ed4c2e0495bea7fbe0b546d25e35211506a9 +Subproject commit f86f25e62217264495d05f116ccb09d575fe9841 diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 07d9b0ee1f8..dbaae5de233 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -162,6 +162,14 @@ class SEQUENCER_HT_header(Header): if tool_settings.use_proportional_edit: row.prop(tool_settings, "proportional_edit_falloff", icon_only=True) + if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: + tool_settings = context.tool_settings.sequencer_tool_settings + row = layout.row(align=True) + row.prop(tool_settings, "use_snapping", text="") + sub = row.row(align=True) + sub.popover(panel="SEQUENCER_PT_snapping") + layout.separator_spacer() + row = layout.row(align=True) row.prop(st, "show_strip_overlay", text="", icon='OVERLAY') sub = row.row(align=True) @@ -2265,6 +2273,36 @@ class SEQUENCER_PT_custom_props(SequencerButtonsPanel, PropertyPanel, Panel): bl_category = "Strip" +class SEQUENCER_PT_snapping(Panel): + bl_space_type = 'SEQUENCE_EDITOR' + bl_region_type = 'HEADER' + bl_label = "Snapping" + + def draw(self, context): + tool_settings = context.tool_settings.sequencer_tool_settings + + layout = self.layout + col = layout.column() + col.label(text="Snap To") + col.prop(tool_settings, "snap_to_strip_start") + col.prop(tool_settings, "snap_to_strip_end") + col.prop(tool_settings, "snap_to_playhead") + col.separator() + col.prop(tool_settings, "snap_ignore_muted") + col.prop(tool_settings, "snap_ignore_sound") + col.separator() + + col.label(text="Snap Source") + col.prop(tool_settings, "snap_source") + col.prop(tool_settings, "snap_side") + col.separator() + + col.label(text="Snap Settings") + col.prop(tool_settings, "snap_threshold", slider=True) + col.prop(tool_settings, "snap_sensitivity", slider=True) + col.separator() + + classes = ( SEQUENCER_MT_change, SEQUENCER_HT_tool_header, @@ -2334,6 +2372,8 @@ classes = ( SEQUENCER_PT_annotation, SEQUENCER_PT_annotation_onion, + + SEQUENCER_PT_snapping, ) if __name__ == "__main__": # only for live edit. diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt index b0bc5c6abda..ad0a330f0f4 100644 --- a/source/blender/editors/transform/CMakeLists.txt +++ b/source/blender/editors/transform/CMakeLists.txt @@ -102,6 +102,7 @@ set(SRC transform_orientations.c transform_snap.c transform_snap_object.c + transform_snap_sequencer.c transform.h transform_constraints.h diff --git a/source/blender/editors/transform/transform_convert.h b/source/blender/editors/transform/transform_convert.h index 918ce0739ed..d92c24385ae 100644 --- a/source/blender/editors/transform/transform_convert.h +++ b/source/blender/editors/transform/transform_convert.h @@ -32,6 +32,7 @@ struct ListBase; struct Object; struct TransData; struct TransDataCurveHandleFlags; +struct TransSeqSnapData; struct TransInfo; struct bContext; @@ -47,9 +48,14 @@ void clipUVData(TransInfo *t); /* transform_convert_mesh.c */ void transform_convert_mesh_customdatacorrect_init(TransInfo *t); +/* transform_snap_sequencer.c */ +struct TransSeqSnapData *seq_snap_data_alloc(TransInfo *t, struct ListBase *seqbase); +void seq_snap_data_free(struct TransSeqSnapData *data); + /* transform_convert_sequencer.c */ -int transform_convert_sequencer_get_snap_bound(TransInfo *t); +struct TransSeqSnapData *transform_convert_sequencer_get_snap_data(TransInfo *t); void transform_convert_sequencer_channel_clamp(TransInfo *t); + /********************* intern **********************/ /* transform_convert.c */ diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c index eb8641f5070..2275aeee79f 100644 --- a/source/blender/editors/transform/transform_convert_sequencer.c +++ b/source/blender/editors/transform/transform_convert_sequencer.c @@ -63,9 +63,7 @@ typedef struct TransDataSeq { */ typedef struct TransSeq { TransDataSeq *tdseq; - int min; - int max; - bool snap_left; + struct TransSeqSnapData *snap_data; int selection_channel_range_min; int selection_channel_range_max; } TransSeq; @@ -254,38 +252,7 @@ static int SeqToTransData_build( static void SeqTransDataBounds(TransInfo *t, ListBase *seqbase, TransSeq *ts) { - Sequence *seq; - int count, flag; - int max = INT32_MIN, min = INT32_MAX; - - for (seq = seqbase->first; seq; seq = seq->next) { - - /* just to get the flag since there are corner cases where this isn't totally obvious */ - SeqTransInfo(t, seq, &count, &flag); - - /* use 'flag' which is derived from seq->flag but modified for special cases */ - if (flag & SELECT) { - if (flag & (SEQ_LEFTSEL | SEQ_RIGHTSEL)) { - if (flag & SEQ_LEFTSEL) { - min = min_ii(seq->startdisp, min); - max = max_ii(seq->startdisp, max); - } - if (flag & SEQ_RIGHTSEL) { - min = min_ii(seq->enddisp, min); - max = max_ii(seq->enddisp, max); - } - } - else { - min = min_ii(seq->startdisp, min); - max = max_ii(seq->enddisp, max); - } - } - } - - if (ts) { - ts->max = max; - ts->min = min; - } + ts->snap_data = seq_snap_data_alloc(t, seqbase); } static void free_transform_custom_data(TransCustomData *custom_data) @@ -293,6 +260,7 @@ static void free_transform_custom_data(TransCustomData *custom_data) if ((custom_data->data != NULL) && custom_data->use_free) { TransSeq *ts = custom_data->data; MEM_freeN(ts->tdseq); + seq_snap_data_free(ts->snap_data); MEM_freeN(custom_data->data); custom_data->data = NULL; } @@ -355,7 +323,7 @@ static void seq_transform_update_effects(TransInfo *t, SeqCollection *collection Sequence *seq; SEQ_ITERATOR_FOREACH (seq, collection) { if ((seq->type & SEQ_TYPE_EFFECT) && (seq->seq1 || seq->seq2 || seq->seq3)) { - SEQ_time_update_sequence(t->scene, seq); + SEQ_time_update_sequence(t->scene, seq); } } } @@ -544,15 +512,8 @@ void createTransSeqData(TransInfo *t) /* loop 2: build transdata array */ SeqToTransData_build(t, ed->seqbasep, td, td2d, tdsq); - SeqTransDataBounds(t, ed->seqbasep, ts); - - if (t->flag & T_MODAL) { - /* set the snap mode based on how close the mouse is at the end/start points */ - int xmouse = (int)UI_view2d_region_to_view_x((View2D *)t->view, t->mouse.imval[0]); - if (abs(xmouse - ts->max) > abs(xmouse - ts->min)) { - ts->snap_left = true; - } - } + /* Snapping data. */ + ts->snap_data = seq_snap_data_alloc(t, ed->seqbasep); ts->selection_channel_range_min = MAXSEQ + 1; LISTBASE_FOREACH (Sequence *, seq, SEQ_active_seqbase_get(ed)) { @@ -734,10 +695,10 @@ void transform_convert_sequencer_channel_clamp(TransInfo *t) } } -int transform_convert_sequencer_get_snap_bound(TransInfo *t) +struct TransSeqSnapData *transform_convert_sequencer_get_snap_data(TransInfo *t) { TransSeq *ts = TRANS_DATA_CONTAINER_FIRST_SINGLE(t)->custom.type.data; - return ts->snap_left ? ts->min : ts->max; + return ts->snap_data; } /** \} */ diff --git a/source/blender/editors/transform/transform_mode_edge_seq_slide.c b/source/blender/editors/transform/transform_mode_edge_seq_slide.c index 7e7b79c9f90..ee876a9b19a 100644 --- a/source/blender/editors/transform/transform_mode_edge_seq_slide.c +++ b/source/blender/editors/transform/transform_mode_edge_seq_slide.c @@ -107,7 +107,7 @@ static void applySeqSlide(TransInfo *t, const int mval[2]) char str[UI_MAX_DRAW_STR]; float values_final[3] = {0.0f}; - snapSequenceBounds(t, mval); + seq_snap_offset_apply(t, mval); transform_convert_sequencer_channel_clamp(t); if (applyNumInput(&t->num, values_final)) { if (t->con.mode & CON_APPLY) { diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index bebef049718..f61d72e72f4 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -41,6 +41,7 @@ #include "RNA_access.h" +#include "SEQ_iterator.h" #include "SEQ_sequencer.h" #include "SEQ_time.h" @@ -190,7 +191,7 @@ void drawSnapping(const struct bContext *C, TransInfo *t) RegionView3D *rv3d = CTX_wm_region_view3d(C); if (!BLI_listbase_is_empty(&t->tsnap.points)) { - /* Draw snap points. */ + /* Draw snap source_points. */ float size = 2.0f * UI_GetThemeValuef(TH_VERTEX_SIZE); float view_inv[4][4]; @@ -739,7 +740,7 @@ static void setSnappingCallback(TransInfo *t) void addSnapPoint(TransInfo *t) { - /* Currently only 3D viewport works for snapping points. */ + /* Currently only 3D viewport works for snapping source_points. */ if (t->tsnap.status & POINT_INIT && t->spacetype == SPACE_VIEW3D) { TransSnapPoint *p = MEM_callocN(sizeof(TransSnapPoint), "SnapPoint"); @@ -1430,28 +1431,6 @@ void snapFrameTransform(TransInfo *t, *r_val = (float)val; } -/*================================================================*/ - -void snapSequenceBounds(TransInfo *t, const int mval[2]) -{ - /* Reuse increment, strictly speaking could be another snap mode, but leave as is. */ - if (!(t->modifiers & MOD_SNAP_INVERT)) { - return; - } - - /* Convert to frame range. */ - float xmouse, ymouse; - UI_view2d_region_to_view(&t->region->v2d, mval[0], mval[1], &xmouse, &ymouse); - const int frame_curr = round_fl_to_int(xmouse); - - /* Now find the closest sequence. */ - const int frame_near = SEQ_time_find_next_prev_edi @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs