[Bf-blender-cvs] [500bac8] terrible_consequencer: Snap to left-right based on position of mouse relative to selection.

Antony Riakiotakis noreply at git.blender.org
Tue Nov 11 18:41:16 CET 2014


Commit: 500bac82254bd28dcb8bab7710108acbb672f862
Author: Antony Riakiotakis
Date:   Tue Nov 11 18:41:09 2014 +0100
Branches: terrible_consequencer
https://developer.blender.org/rB500bac82254bd28dcb8bab7710108acbb672f862

Snap to left-right based on position of mouse relative to selection.

===================================================================

M	source/blender/blenkernel/BKE_sequencer.h
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/transform/transform_snap.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index bff96b2..b239998 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -384,7 +384,7 @@ enum {
 	SEQ_SIDE_RIGHT,
 	SEQ_SIDE_BOTH
 };
-int BKE_seq_find_next_prev_edit(struct Scene *scene, int cfra, const short side, const bool do_skip_mute, const bool do_center, const bool do_unselected, int *bfl);
+int BKE_seq_find_next_prev_edit(struct Scene *scene, int cfra, const short side, const bool do_skip_mute, const bool do_center, const bool do_unselected);
 
 struct Sequence *BKE_sequencer_add_image_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
 struct Sequence *BKE_sequencer_add_sound_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 77ee8c8..4fcc18e 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -4688,19 +4688,17 @@ bool BKE_sequence_is_valid_check(Sequence *seq)
 
 int BKE_seq_find_next_prev_edit(Scene *scene, int cfra,
                                 const short side,
-                                const bool do_skip_mute, const bool do_center, const bool do_unselected, int *bfl)
+                                const bool do_skip_mute, const bool do_center, const bool do_unselected)
 {
 	Editing *ed = BKE_sequencer_editing_get(scene, false);
 	Sequence *seq;
 
 	int dist, best_dist, best_frame = cfra;
-	int dist_left, best_dist_left, best_frame_left = cfra;
 	int seq_frames[2], seq_frames_tot;
 
 	/* in case where both is passed, frame just finds the nearest end while frame_left the nearest start */
 
 	best_dist = MAXFRAME * 2;
-	best_dist_left = MAXFRAME * 2;
 
 	if (ed == NULL) return cfra;
 
@@ -4729,7 +4727,6 @@ int BKE_seq_find_next_prev_edit(Scene *scene, int cfra,
 			const int seq_frame = seq_frames[i];
 
 			dist = MAXFRAME * 2;
-			dist_left = MAXFRAME * 2;
 
 			switch (side) {
 				case SEQ_SIDE_LEFT:
@@ -4743,12 +4740,7 @@ int BKE_seq_find_next_prev_edit(Scene *scene, int cfra,
 					}
 					break;
 				case SEQ_SIDE_BOTH:
-					if (i == 1) {
-						dist = abs(seq_frame - cfra);
-					}
-					else {
-						dist_left = abs(cfra - seq_frame);
-					}
+					dist = abs(seq_frame - cfra);
 					break;
 			}
 
@@ -4756,17 +4748,8 @@ int BKE_seq_find_next_prev_edit(Scene *scene, int cfra,
 				best_frame = seq_frame;
 				best_dist = dist;
 			}
-
-			if (dist_left < best_dist_left) {
-				best_frame_left = seq_frame;
-				best_dist_left = dist_left;
-			}
-
 		}
 	}
 
-	if (bfl) {
-		*bfl = best_frame_left;
-	}
 	return best_frame;
 }
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index ac4a107..d085bb8 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -2975,7 +2975,7 @@ static bool strip_jump_internal(Scene *scene,
 {
 	bool changed = false;
 	int cfra = CFRA;
-	int nfra = BKE_seq_find_next_prev_edit(scene, cfra, side, do_skip_mute, do_center, false, NULL);
+	int nfra = BKE_seq_find_next_prev_edit(scene, cfra, side, do_skip_mute, do_center, false);
 	
 	if (nfra != cfra) {
 		CFRA = nfra;
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index a15bc54..c2891b5 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -177,6 +177,7 @@ typedef struct TransSeq {
 	TransDataSeq *tdseq;
 	int min;
 	int max;
+	bool snap_left;
 } TransSeq;
 
 /* for NLA transform (stored in td->extra pointer) */
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index d6ff05d..9751126 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -4715,6 +4715,7 @@ static void createTransSeqData(bContext *C, TransInfo *t)
 	TransData2D *td2d = NULL;
 	TransDataSeq *tdsq = NULL;
 	TransSeq *ts = NULL;
+	float xmouse, ymouse;
 
 	int count = 0;
 
@@ -4725,12 +4726,11 @@ static void createTransSeqData(bContext *C, TransInfo *t)
 
 	t->customFree = freeSeqData;
 
+	UI_view2d_region_to_view(v2d, t->imval[0], t->imval[1], &xmouse, &ymouse);
+
 	/* which side of the current frame should be allowed */
 	if (t->mode == TFM_TIME_EXTEND) {
 		/* only side on which mouse is gets transformed */
-		float xmouse, ymouse;
-
-		UI_view2d_region_to_view(v2d, t->imval[0], t->imval[1], &xmouse, &ymouse);
 		t->frame_side = (xmouse > CFRA) ? 'R' : 'L';
 	}
 	else {
@@ -4779,6 +4779,10 @@ static void createTransSeqData(bContext *C, TransInfo *t)
 	/* loop 2: build transdata array */
 	SeqToTransData_Recursive(t, ed->seqbasep, td, td2d, tdsq, ts);
 
+	/* set the snap mode based on how close the mouse is at the end/start points */
+	if (abs(xmouse - ts->max) > abs(xmouse - ts->min))
+		ts->snap_left = true;
+
 #undef XXX_DURIAN_ANIM_TX_HACK
 }
 
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index f3e188b..94257f0 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -2425,8 +2425,6 @@ int snapSequenceBounds(TransInfo *t, const int mval[2])
 	float xmouse, ymouse;
 	int frame;
 	int mframe;
-	int frame_left;
-	int enddist, startdist;
 	TransSeq *ts = t->customData;
 	/* reuse increment, strictly speaking could be another snap mode, but leave as is */
 	if (!(t->modifiers & MOD_SNAP_INVERT))
@@ -2436,19 +2434,10 @@ int snapSequenceBounds(TransInfo *t, const int mval[2])
 	UI_view2d_region_to_view(&t->ar->v2d, mval[0], mval[1], &xmouse, &ymouse);
 	mframe = (int)xmouse;
 	/* now find the closest sequence */
-	frame = BKE_seq_find_next_prev_edit(t->scene, mframe, SEQ_SIDE_BOTH, true, false, true, &frame_left);
+	frame = BKE_seq_find_next_prev_edit(t->scene, mframe, SEQ_SIDE_BOTH, true, false, true);
 
-	enddist = abs(frame - mframe);
-	startdist = abs(mframe - frame_left);
-	/* check which is nearest */
-	if (enddist > startdist) {
-		frame = frame_left - (ts->max - ts->min);
-	}
-	else if (enddist == startdist) {
-		if (mframe < frame_left) {
-			frame = frame_left - (ts->max - ts->min);
-		}
-	}
+	if (!ts->snap_left)
+		frame = frame - (ts->max - ts->min);
 
 	return frame;
 }




More information about the Bf-blender-cvs mailing list