diff --git a/canvas.C b/canvas.C index f0fb2eb..230614f 100644 --- a/canvas.C +++ b/canvas.C @@ -798,7 +798,10 @@ Canvas::invert_selection ( void ) void Canvas::crop ( void ) { - m.grid->crop( m.p1, m.p2 ); + if ( m.p3 == m.p4 ) + m.grid->crop( m.p1, m.p2 ); + else + m.grid->crop( m.p1, m.p2, rtn( m.p3 ), rtn( m.p4 ) ); m.vp->x = 0; diff --git a/grid.C b/grid.C index 7e8c17c..a7d6865 100644 --- a/grid.C +++ b/grid.C @@ -594,6 +594,25 @@ Grid::crop ( int l, int r ) unlock(); } +void +Grid::crop ( int l, int r, int t, int b ) +{ + lock(); + + _rw->events.push_selection(); + + select( l, r, t, b ); + + _rw->events.invert_selection(); + _rw->events.remove_selected(); + + _rw->events.pop_selection(); + + crop( l, r ); + + unlock(); +} + void Grid::_relink ( void ) diff --git a/grid.H b/grid.H index 061e210..39a72d7 100644 --- a/grid.H +++ b/grid.H @@ -213,6 +213,7 @@ public: void move_selected ( int l ); void crop ( int l, int r ); + void crop ( int l, int r, int t, int b ); void toggle_select ( int x, int y ); void insert_time ( int x, int r );