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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to