+
+ draw_selected_edits(mwindow->edl, 0, 0, GREEN+BLUE, RED);
+}
+
+// x does not reliably draw a really big rectangle
+void TrackCanvas::draw_selected(int x, int y, int w, int h)
+{
+ int x1 = bmax(x, 0), x2 = bmin(x+w, get_w());
+ if( x1 > x2 ) return;
+ int y1 = bmax(y, 0), y2 = bmin(y+h, get_h());
+ if( y1 > y2 ) return;
+ if( x >= 0 && x < get_w() ) draw_line(x,y1, x,y2);
+ if( x+w >= 0 && x+w < get_w() ) draw_line(x+w,y1, x+w,y2);
+ if( y >= 0 && y < get_h() ) draw_line(x1,y, x2,y);
+ if( y+h >= 0 && y+h < get_h() ) draw_line(x1,y+h, x2,y+h);
+}
+
+void TrackCanvas::draw_selected_edits(EDL *edl, int dx, int dy, int color0, int color1)
+{
+ for( Track *track=edl->tracks->first; track; track=track->next ) {
+ for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
+ if( !edit->is_selected ) continue;
+ int64_t x, y, w, h;
+ edit_dimensions(edit, x, y, w, h);
+ x += dx; y += dy;
+ if( !MWindowGUI::visible(x, x + w, 0, get_w()) ) continue;
+ if( !MWindowGUI::visible(y, y + h, 0, get_h()) ) continue;
+ set_opaque();
+ int inner = color1 < 0 ? color0 : !edit->group_id ? color0 :
+ mwindow->get_group_color(edit->group_id);
+ set_color(inner);
+ draw_selected(x, y, w, h);
+ int outer = color1 < 0 ? color0 : !edit->group_id ? color1 : inner;
+ set_color(outer);
+ draw_selected(x-1, y-1, w+2, h+2);
+ draw_selected(x-2, y-2, w+1, h+1);
+ }