[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