From ee577bc06b8c835caebebc04cdb1682e8101eebb Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Mon, 3 Mar 2008 15:36:33 -0600 Subject: [PATCH] Make selection move together. --- Region.C | 27 ++++++++++++++------------- Track_Widget.C | 3 ++- Track_Widget.H | 30 +++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/Region.C b/Region.C index c4becf6..b3c7dd5 100644 --- a/Region.C +++ b/Region.C @@ -235,7 +235,7 @@ Region::handle ( int m ) break; case 3: trim( trimming = RIGHT, X ); - _log.hold(); + _log.hold(); break; case 2: { @@ -360,21 +360,22 @@ Region::handle ( int m ) } } - if ( Y > y() + h() ) + if ( ! selected() ) { - if ( _track->next() ) - if ( Y > _track->next()->y() ) - _track->next()->add( this ); - } - else - if ( Y < y() ) + if ( Y > y() + h() ) { - if ( _track->prev() ) - if ( Y < _track->prev()->y() + _track->prev()->h() ) - _track->prev()->add( this ); + if ( _track->next() ) + if ( Y > _track->next()->y() ) + _track->next()->add( this ); } - - // _track->damage( FL_DAMAGE_EXPOSE, x(), y(), w(), h() ); + else + if ( Y < y() ) + { + if ( _track->prev() ) + if ( Y < _track->prev()->y() + _track->prev()->h() ) + _track->prev()->add( this ); + } + } ret = Track_Widget::handle( m ); return ret | 1; diff --git a/Track_Widget.C b/Track_Widget.C index cd497be..03d883c 100644 --- a/Track_Widget.C +++ b/Track_Widget.C @@ -134,7 +134,8 @@ Track_Widget::handle ( int m ) { int nx = (ox + X) - _track->x(); - _offset = timeline->x_to_ts( nx ) + timeline->xoffset; + // _offset = timeline->x_to_ts( nx ) + timeline->xoffset; + offset( timeline->x_to_ts( nx ) + timeline->xoffset ); _track->snap( this ); } diff --git a/Track_Widget.H b/Track_Widget.H index 86c2160..0675a1d 100644 --- a/Track_Widget.H +++ b/Track_Widget.H @@ -85,13 +85,33 @@ public: delete _selection.front(); } - static void - move_selected ( long d ) + void + offset ( nframes_t where ) { - for ( list ::iterator i = _selection.begin(); i != _selection.end(); i++ ) - i->_offset += d; + + if ( ! selected() ) + { + redraw(); + _offset = where; + } + else + { + long d = where - _offset; + + for ( list ::iterator i = _selection.begin(); i != _selection.end(); i++ ) + { + (*i)->redraw(); + + if ( d < 0 ) + (*i)->_offset -= 0 - d; + else + (*i)->_offset += d; + + } + } } + Fl_Group * parent ( void ) const { return _track; } int scroll_x ( void ) const { return timeline->ts_to_x( timeline->xoffset ); } @@ -124,7 +144,7 @@ public: void track ( Track *t ) { _track = t; } nframes_t offset ( void ) const { return _offset; } - void offset ( nframes_t o ) { _offset = o; } +// void offset ( nframes_t o ) { _offset = o; } void end ( nframes_t v ) { _end = v; } nframes_t end ( void ) const { return _end; }