+int TrackCanvas::edit_intersects(Track *track, Edit *src_edit, double &pos)
+{
+ int64_t src_start = src_edit->startproject;
+ int64_t src_end = src_start + src_edit->length;
+ double new_start = src_edit->track->from_units(src_start) + pos;
+ double new_end = src_edit->track->from_units(src_end) + pos;
+ int64_t trk_start = track->to_units(new_start, 0);
+ int64_t trk_end = track->to_units(new_end, 0);
+ for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
+ if( edit->is_selected || edit->silence() ) continue;
+ int64_t edit_start = edit->startproject;
+ if( edit_start >= trk_end ) continue;
+ int64_t edit_end = edit_start + edit->length;
+ if( trk_start >= edit_end ) continue;
+ int lt_dist = abs(trk_end - edit_start);
+ int rt_dist = abs(edit_end - trk_start);
+ if( lt_dist < rt_dist ) {
+ pos = edit->track->from_units(edit_start) -
+ src_edit->track->from_units(src_end);
+ }
+ else {
+ pos = edit->track->from_units(edit_end);
+ }
+ return 1;
+ }
+ return 0;
+}
+