+void TrackCanvas::drag_edit_select(Edit *over_edit, int select, int draw)
+{
+ if( !over_edit ) return;
+ if( !mwindow->session->drag_edit ) return;
+ Track *drag_track = mwindow->session->drag_edit->track;
+ Track *over_track = over_edit->track;
+ if( !drag_track || !over_track ) return;
+ if( drag_track->number_of() > over_track->number_of() ) {
+ Track *trk = drag_track;
+ drag_track = over_track;
+ over_track = trk;
+ }
+ double start_pos = mwindow->session->drag_start;
+ double end_pos = mwindow->session->drag_position;
+ if( start_pos > end_pos ) {
+ double pos = start_pos;
+ start_pos = end_pos;
+ end_pos = pos;
+ }
+ int done = 0, do_flash = 0;
+ for( Track *track=drag_track; !done; track=track->next ) {
+ if( !track->is_armed() ) continue;
+ for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
+ int64_t pos = edit->startproject;
+ int64_t end = pos + edit->length;
+ double edit_start = track->from_units(pos);
+ double edit_end = track->from_units(end);
+ if( start_pos >= edit_end ) continue;
+ if( edit_start > end_pos ) continue;
+ if( select > 0 )
+ edit->is_selected = 1;
+ else if( select < 0 )
+ edit->is_selected = 0;
+ if( draw ) {
+ int64_t edit_x, edit_y, edit_w, edit_h;
+ edit_dimensions(edit, edit_x, edit_y, edit_w, edit_h);
+ set_color(YELLOW);
+ draw_rectangle(edit_x, edit_y, edit_w, edit_h);
+ do_flash = 1;
+ }
+ }
+ if( track == over_track ) done = 1;
+ }
+ if( do_flash )
+ flash();
+}
+