[Bf-blender-cvs] [3a65f0bfef7] temp-vse-snapping: Update rebased on master, arc pulled some very weird base, and I didn't notice

Richard Antalik noreply at git.blender.org
Mon Jun 21 09:13:23 CEST 2021


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. @@



More information about the Bf-blender-cvs mailing list