diff --git a/Timeline/Annotation_Point.H b/Timeline/Annotation_Point.H index 27d66c1..87532a3 100644 --- a/Timeline/Annotation_Point.H +++ b/Timeline/Annotation_Point.H @@ -69,7 +69,7 @@ public: { _sequence = sequence; - _r->offset = when; + _r->start = when; _label = strdup( name ); @@ -78,7 +78,7 @@ public: Annotation_Point ( const Annotation_Point &rhs ) { - _r->offset = rhs._r->offset; + _r->start = rhs._r->start; _label = strdup( rhs._label ); } diff --git a/Timeline/Annotation_Region.C b/Timeline/Annotation_Region.C index 778e177..6ab97d8 100644 --- a/Timeline/Annotation_Region.C +++ b/Timeline/Annotation_Region.C @@ -52,10 +52,10 @@ Annotation_Region::Annotation_Region ( Sequence *sequence, nframes_t when, const { _sequence = sequence; - _r->offset = when; + _r->start = when; /* FIXME: hack */ - _r->end = 400; + _r->length = 400; _label = strdup( name ); @@ -64,7 +64,9 @@ Annotation_Region::Annotation_Region ( Sequence *sequence, nframes_t when, const Annotation_Region::Annotation_Region ( const Annotation_Region &rhs ) { - _r->offset = rhs._r->offset; + _r->start = rhs._r->start; + _r->length = rhs._r->length; + _label = strdup( rhs._label ); } diff --git a/Timeline/Audio_Region.C b/Timeline/Audio_Region.C index bd187a5..e6db9bc 100644 --- a/Timeline/Audio_Region.C +++ b/Timeline/Audio_Region.C @@ -58,39 +58,62 @@ static Fl_Color fl_invert_color ( Fl_Color c ) } -#if 0 -/* perhaps use map? */ -map_PRIM ( set ) +void +Audio_Region::get ( Log_Entry &e ) const { -/* if ( narg % 2 != 0 ) */ -/* printf( "invalid number of arguments\n" ); */ - - int id = atoi( arg ); - - map_ARG_NEXT( arg, end ); + e.add( ":source", _clip ? _clip->name() : "" ); + e.add( ":gain", _scale ); + e.add( ":fade-in-type", _fade_in.type ); + e.add( ":fade-in-duration", _fade_in.length ); + e.add( ":fade-out-type", _fade_out.type ); + e.add( ":fade-out-duration", _fade_out.length ); + e.add( ":color", (int)_box_color ); - Logable *l = Loggable::find( id ); + Sequence_Region::get( e ); - char **sa = malloc( sizeof( char * ) * narg + 1 ); - - for ( int i = 0; i < narg; ++i ) - sa[ i ] = strdup( map_ARG_NEXT( arg, end ) ); + e.add( ":offset", _r->offset ); +} - l->set( sa ); +void +Audio_Region::set ( Log_Entry &e ) +{ + for ( int i = 0; i < e.size(); ++i ) + { + const char *s, *v; + + e.get( i, &s, &v ); + + if ( ! strcmp( s, ":gain" ) ) + _scale = atof( v ); + else if ( ! strcmp( s, ":color" ) ) + _box_color = (Fl_Color)atoi( v ); + else if ( ! strcmp( s, ":fade-in-type" ) ) + _fade_in.type = (Fade::fade_type_e)atoi( v ); + else if ( ! strcmp( s, ":fade-in-duration" ) ) + _fade_in.length = atoll( v ); + else if ( ! strcmp( s, ":fade-out-type" ) ) + _fade_out.type = (Fade::fade_type_e)atoi( v ); + else if ( ! strcmp( s, ":fade-out-duration" ) ) + _fade_out.length = atoll( v ); + else if ( ! strcmp( s, ":offset" ) ) + _r->offset = atoll( v ); + else if ( ! strcmp( s, ":source" ) ) + { + if ( ! ( _clip = Audio_File::from_file( v ) ) ) + { + printf( "Grave error: could not open source \"%s\"\n", v ); + } + } + } - map_RESULT( "" ); + Sequence_Region::set( e ); } -#endif void Audio_Region::init ( void ) { - _sequence = NULL; - _r->offset = 0; - _r->start = 0; - _r->end = 0; _scale = 1.0f; _clip = NULL; @@ -128,7 +151,7 @@ Audio_Region::Audio_Region ( Audio_File *c ) { init(); _clip = c; - _r->end = _clip->length(); + _r->length = _clip->length(); log_create(); } @@ -139,9 +162,10 @@ Audio_Region::Audio_Region ( Audio_File *c, Sequence *t, nframes_t o ) { init(); _clip = c; - _r->end = _clip->length(); _sequence = t; - _r->offset = o; + _r->offset = 0; + _r->start = o; + _r->length = _clip->length(); sequence()->add( this ); @@ -172,7 +196,6 @@ int Audio_Region::handle ( int m ) { static int ox, oy; - static enum trim_e trimming; static bool copied = false; static nframes_t os; @@ -266,7 +289,7 @@ Audio_Region::handle ( int m ) ox = x() - X; oy = y() - Y; /* for panning */ - os = _r->start; + os = _r->offset; /* normalization and selection */ if ( Fl::event_button2() ) @@ -360,14 +383,10 @@ Audio_Region::handle ( int m ) int d = (ox + X) - x(); long td = timeline->x_to_ts( d ); - nframes_t W = _r->end - _r->start; - if ( td > 0 && os < td ) - _r->start = 0; + _r->offset = 0; else - _r->start = os - td; - - _r->end = _r->start + W; + _r->offset = os - td; sequence()->redraw(); return 1; @@ -390,6 +409,8 @@ Audio_Region::handle ( int m ) return Sequence_Widget::handle( m ); break; } + + return 0; } @@ -513,15 +534,14 @@ Audio_Region::draw ( void ) W += 4; int OX = scroll_x(); - int ox = timeline->ts_to_x( _r->offset ); + int ox = timeline->ts_to_x( _r->start ); if ( ox > OX + sequence()->w() || ox < OX && ox + abs_w() < OX ) /* not in viewport */ return; - int rw = timeline->ts_to_x( _r->end - _r->start ); -// nframes_t end = _r->offset + ( _r->end - _r->start ); + int rw = timeline->ts_to_x( _r->length ); /* calculate waveform offset due to scrolling */ nframes_t offset = 0; @@ -545,7 +565,8 @@ Audio_Region::draw ( void ) // const nframes_t start = _r->start + offset + timeline->x_to_ts( X - rx ); - nframes_t start = _r->start + offset; +// nframes_t start = _r->start + offset; + nframes_t start = _r->offset + offset; /* compensate for ??? */ if ( X - rx > 0 ) @@ -636,14 +657,10 @@ Audio_Region::draw ( void ) void Audio_Region::normalize ( void ) { - printf( "normalize: start=%lu end=%lu\n", _r->start, _r->end ); - - /* FIXME: figure out a way to do this via the peak server */ - int peaks, channels; Peak *pbuf; - if ( _clip->read_peaks( length(), _r->start, _r->end, &peaks, &pbuf, &channels ) && + if ( _clip->read_peaks( length(), offset(), offset() + length(), &peaks, &pbuf, &channels ) && peaks ) _scale = pbuf->normalization_factor(); } @@ -710,10 +727,8 @@ Audio_Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channe { const Range r = _range; - const nframes_t length = r.end - r.start; - /* do nothing if we aren't covered by this frame range */ - if ( pos > r.offset + length || pos + nframes < r.offset ) + if ( pos > r.start + r.length || pos + nframes < r.start ) return 0; /* calculate offsets into file and sample buffer */ @@ -722,23 +737,23 @@ Audio_Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channe cnt = nframes; - if ( pos < r.offset ) + if ( pos < r.start ) { sofs = 0; - ofs = r.offset - pos; + ofs = r.start - pos; cnt -= ofs; } else { ofs = 0; - sofs = pos - r.offset; + sofs = pos - r.start; } if ( ofs >= nframes ) return 0; // const nframes_t start = ofs + r.start + sofs; - const nframes_t start = r.start + sofs; + const nframes_t start = r.offset + sofs; const nframes_t len = min( cnt, nframes - ofs ); const nframes_t end = start + len; @@ -782,9 +797,9 @@ Audio_Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channe /* do fade out if necessary */ // if ( start + cnt + fade.length > r.end ) - if ( start + fade.length > r.end ) + if ( start + fade.length > ( r.offset + r.length ) ) { - const nframes_t d = r.end - start; + const nframes_t d = ( r.offset + r.length ) - start; assert( cnt <= nframes ); @@ -803,12 +818,12 @@ Audio_Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channe nframes_t Audio_Region::write ( nframes_t nframes ) { - _range.end += nframes; + _range.length += nframes; /* FIXME: too much? */ // _track->damage( FL_DAMAGE_EXPOSE, x() + w(), y(), 10/* FIXME: guess */, h() ); - if ( 0 == ( timeline->ts_to_x( _range.end ) % 20 ) ) + if ( 0 == ( timeline->ts_to_x( _range.length ) % 20 ) ) { nframes_t oldl = _clip->length(); @@ -851,7 +866,7 @@ Audio_Region::finalize ( nframes_t frame ) /* FIXME: should we attempt to truncate the file? */ - _range.end = frame - _range.offset; + _range.length = frame - _range.start - _range.offset; redraw(); diff --git a/Timeline/Audio_Region.H b/Timeline/Audio_Region.H index 7026261..5b64e59 100644 --- a/Timeline/Audio_Region.H +++ b/Timeline/Audio_Region.H @@ -102,53 +102,8 @@ private: protected: -// const char *class_name ( void ) { return "Audio_Region"; } - - virtual void get ( Log_Entry &e ) const - { - e.add( ":source", _clip ? _clip->name() : "" ); - e.add( ":gain", _scale ); - e.add( ":fade-in-type", _fade_in.type ); - e.add( ":fade-in-duration", _fade_in.length ); - e.add( ":fade-out-type", _fade_out.type ); - e.add( ":fade-out-duration", _fade_out.length ); - e.add( ":color", (int)_box_color ); - - Sequence_Widget::get( e ); - } - - void - set ( Log_Entry &e ) - { - for ( int i = 0; i < e.size(); ++i ) - { - const char *s, *v; - - e.get( i, &s, &v ); - - if ( ! strcmp( s, ":gain" ) ) - _scale = atof( v ); - else if ( ! strcmp( s, ":color" ) ) - _box_color = (Fl_Color)atoi( v ); - else if ( ! strcmp( s, ":fade-in-type" ) ) - _fade_in.type = (Fade::fade_type_e)atoi( v ); - else if ( ! strcmp( s, ":fade-in-duration" ) ) - _fade_in.length = atoll( v ); - else if ( ! strcmp( s, ":fade-out-type" ) ) - _fade_out.type = (Fade::fade_type_e)atoi( v ); - else if ( ! strcmp( s, ":fade-out-duration" ) ) - _fade_out.length = atoll( v ); - else if ( ! strcmp( s, ":source" ) ) - { - if ( ! ( _clip = Audio_File::from_file( v ) ) ) - { - printf( "Grave error: could not open source \"%s\"\n", v ); - } - } - } - - Sequence_Widget::set( e ); - } + virtual void get ( Log_Entry &e ) const; + virtual void set ( Log_Entry &e ); public: diff --git a/Timeline/Control_Point.C b/Timeline/Control_Point.C index 6da393c..a9572c4 100644 --- a/Timeline/Control_Point.C +++ b/Timeline/Control_Point.C @@ -23,7 +23,7 @@ Control_Point::Control_Point ( Sequence *t, nframes_t when, float y ) { _sequence = t; _y = y; - _r->offset = when; + _r->start = when; _box_color = FL_WHITE; log_create(); @@ -31,7 +31,7 @@ Control_Point::Control_Point ( Sequence *t, nframes_t when, float y ) Control_Point::Control_Point ( const Control_Point &rhs ) { - _r->offset = rhs._r->offset; + _r->start = rhs._r->start; _y = rhs._y; } diff --git a/Timeline/Sequence.C b/Timeline/Sequence.C index c8f9841..93d8d73 100644 --- a/Timeline/Sequence.C +++ b/Timeline/Sequence.C @@ -97,7 +97,7 @@ Sequence::overlaps ( Sequence_Widget *r ) for ( list ::const_iterator i = _widgets.begin(); i != _widgets.end(); i++ ) { if ( *i == r ) continue; - if ( ! ( (*i)->offset() > r->offset() + r->length() || (*i)->offset() + (*i)->length() < r->offset() ) ) + if ( ! ( (*i)->start() > r->start() + r->length() || (*i)->start() + (*i)->length() < r->start() ) ) return *i; } @@ -176,7 +176,7 @@ Sequence::event_widget ( void ) { nframes_t ets = timeline->xoffset + timeline->x_to_ts( Fl::event_x() - x() ); for ( list ::const_reverse_iterator r = _widgets.rbegin(); r != _widgets.rend(); r++ ) - if ( ets > (*r)->offset() && ets < (*r)->offset() + (*r)->length() ) + if ( ets > (*r)->start() && ets < (*r)->start() + (*r)->length() ) return (*r); return NULL; @@ -189,7 +189,7 @@ Sequence::select_range ( int X, int W ) nframes_t ets = sts + timeline->x_to_ts( W ); for ( list ::const_reverse_iterator r = _widgets.rbegin(); r != _widgets.rend(); r++ ) - if ( ! ( (*r)->offset() > ets || (*r)->offset() + (*r)->length() < sts ) ) + if ( ! ( (*r)->start() > ets || (*r)->start() + (*r)->length() < sts ) ) (*r)->select(); } @@ -236,14 +236,14 @@ Sequence::snap ( Sequence_Widget *r ) if ( abs( rx1 - wx2 ) < snap_pixels ) { - r->offset( w->offset() + w->length() + 1 ); + r->start( w->start() + w->length() + 1 ); return; } if ( abs( rx2 - wx1 ) < snap_pixels ) { - r->offset( ( w->offset() - r->length() ) - 1 ); + r->start( ( w->start() - r->length() ) - 1 ); return; } @@ -252,10 +252,10 @@ Sequence::snap ( Sequence_Widget *r ) nframes_t f; - if ( timeline->nearest_line( r->offset(), &f ) ) + if ( timeline->nearest_line( r->start(), &f ) ) { // printf( "snap frame is %lu\n", f ); - r->offset( f ); + r->start( f ); } } diff --git a/Timeline/Sequence_Point.C b/Timeline/Sequence_Point.C index 56e5c34..7f56763 100644 --- a/Timeline/Sequence_Point.C +++ b/Timeline/Sequence_Point.C @@ -22,8 +22,7 @@ void Sequence_Point::get ( Log_Entry &e ) const { - e.add( ":x", _r->offset ); - e.add( ":sequence", _sequence ); + Sequence_Widget::get( e ); } void @@ -37,7 +36,7 @@ Sequence_Point::set ( Log_Entry &e ) e.get( i, &s, &v ); - if ( ! strcmp( ":x", s ) ) + if ( ! strcmp( ":start", s ) ) { sequence()->sort(); } diff --git a/Timeline/Sequence_Point.H b/Timeline/Sequence_Point.H index 95e797a..444681a 100644 --- a/Timeline/Sequence_Point.H +++ b/Timeline/Sequence_Point.H @@ -56,8 +56,6 @@ public: return sequence()->x() + sequence()->w() + abs_w(); else return x; - - } nframes_t length ( void ) const { return timeline->x_to_ts( abs_w() ); } diff --git a/Timeline/Sequence_Region.C b/Timeline/Sequence_Region.C index 6242d96..b6abdc8 100644 --- a/Timeline/Sequence_Region.C +++ b/Timeline/Sequence_Region.C @@ -20,6 +20,35 @@ #include "Sequence_Region.H" #include "Track.H" +void +Sequence_Region::get ( Log_Entry &e ) const +{ + e.add( ":color", (int)_box_color ); + e.add( ":length", _r->length ); + + Sequence_Widget::get( e ); +} + + +void +Sequence_Region::set ( Log_Entry &e ) +{ + for ( int i = 0; i < e.size(); ++i ) + { + const char *s, *v; + + e.get( i, &s, &v ); + + if ( ! strcmp( s, ":color" ) ) + _box_color = (Fl_Color)atoll( v ); + else if ( ! strcmp( s, ":length" ) ) + _r->length = atoll( v ); + + } + + Sequence_Widget::set( e ); +} + void Sequence_Region::draw_box ( void ) @@ -53,14 +82,17 @@ Sequence_Region::trim ( enum trim_e t, int X ) long td = timeline->x_to_ts( d ); - if ( td < 0 && _r->start < 0 - td ) - td = 0 - _r->start; + if ( td < 0 && _r->offset < 0 - td ) + td = 0 - _r->offset; + + if ( td > 0 && td >= _r->length ) + td = _r->length - timeline->x_to_ts( 1 ); - if ( _r->start + td >= _r->end ) - td = (_r->end - _r->start) - timeline->x_to_ts( 1 ); +// td = _r->length - timeline->x_to_ts( 1 ); - _r->start += td; _r->offset += td; + _r->start += td; + _r->length -= td; break; } case RIGHT: @@ -71,12 +103,12 @@ Sequence_Region::trim ( enum trim_e t, int X ) long td = timeline->x_to_ts( d ); -// printf( "%li %li\n", td, _r->end - _r->start ); +// printf( "%li %li\n", td, _r->length - _r->offset ); - if ( td >= 0 && _r->end - _r->start < td ) - _r->end = _r->start + timeline->x_to_ts( 1 ); + if ( td >= 0 && _r->length < td ) + _r->length = timeline->x_to_ts( 1 ); else - _r->end -= td; + _r->length -= td; break; } @@ -105,7 +137,7 @@ Sequence_Region::handle ( int m ) int ret; Logger _log( this ); -//log_r->start(); +//log_r->offset(); switch ( m ) { diff --git a/Timeline/Sequence_Region.H b/Timeline/Sequence_Region.H index 063925e..53ad89a 100644 --- a/Timeline/Sequence_Region.H +++ b/Timeline/Sequence_Region.H @@ -23,36 +23,15 @@ #include "Sequence_Widget.H" /* Base class representing a /region/ of time on a /sequence/, with - controls for the start and end points. */ + controls for the offset and length points. */ class Sequence_Region : public Sequence_Widget { protected: - virtual void get ( Log_Entry &e ) const - { - e.add( ":color", (int)_box_color ); - - Sequence_Widget::get( e ); - } - - - void - virtual set ( Log_Entry &e ) - { - for ( int i = 0; i < e.size(); ++i ) - { - const char *s, *v; - - e.get( i, &s, &v ); - - if ( ! strcmp( s, ":color" ) ) - _box_color = (Fl_Color)atoll( v ); - } - - Sequence_Widget::set( e ); - } + virtual void get ( Log_Entry &e ) const; + virtual void set ( Log_Entry &e ); Sequence_Region ( ) { diff --git a/Timeline/Sequence_Widget.C b/Timeline/Sequence_Widget.C index 3b9511c..b520b1c 100644 --- a/Timeline/Sequence_Widget.C +++ b/Timeline/Sequence_Widget.C @@ -33,6 +33,58 @@ Sequence_Widget * Sequence_Widget::_pushed = NULL; Sequence_Widget * Sequence_Widget::_belowmouse = NULL; Fl_Color Sequence_Widget::_selection_color = FL_MAGENTA; +void +Sequence_Widget::get ( Log_Entry &e ) const +{ + e.add( ":start", _r->start ); +// e.add( ":offset", _r->offset ); +// e.add( ":length", _r->length ); + e.add( ":sequence", _sequence ); + e.add( ":selected", selected() ); +} + +void +Sequence_Widget::set ( Log_Entry &e ) +{ + for ( int i = 0; i < e.size(); ++i ) + { + const char *s, *v; + + e.get( i, &s, &v ); + + if ( ! strcmp( s, ":start" ) ) + _r->start = atoll( v ); +// else if ( ! strcmp( s, ":offset" ) ) +// _r->offset = atoll( v ); +// else if ( ! strcmp( s, ":length" ) ) +// _r->length = atoll( v ); + else if ( ! strcmp( s, ":selected" ) ) + { + if ( atoi( v ) ) + select(); + else + deselect(); + } + else if ( ! strcmp( s, ":sequence" ) ) + { + int i; + sscanf( v, "%X", &i ); + Sequence *t = (Sequence*)Loggable::find( i ); + + assert( t ); + + t->add( this ); + } +// else +// e.erase( i ); + } + + if ( _sequence ) + _sequence->redraw(); + +} + + void Sequence_Widget::draw_label ( const char *label, Fl_Align align, Fl_Color color ) { @@ -172,7 +224,7 @@ Sequence_Widget::handle ( int m ) case FL_RELEASE: if ( _drag ) { - end_drag(); + length_drag(); _log.release(); } @@ -194,15 +246,15 @@ Sequence_Widget::handle ( int m ) { const nframes_t of = timeline->x_to_offset( X ); - if ( of >= _drag->offset ) + if ( of >= _drag->start ) { - _r->offset = of - _drag->offset; + _r->start = of - _drag->start; if ( Sequence_Widget::_current == this ) sequence()->snap( this ); } else - _r->offset = 0; + _r->start = 0; } diff --git a/Timeline/Sequence_Widget.H b/Timeline/Sequence_Widget.H index 54b3bd2..c760673 100644 --- a/Timeline/Sequence_Widget.H +++ b/Timeline/Sequence_Widget.H @@ -30,21 +30,21 @@ class Sequence_Widget; struct Drag { - /* mouse coords at start of drag */ + /* mouse coords at offset of drag */ int x; int y; int state; - nframes_t offset; + nframes_t start; - Drag( int X, int Y, nframes_t offset=0 ) : x( X ), y( Y ), offset( offset ) { state = 0; } + Drag( int X, int Y, nframes_t start=0 ) : x( X ), y( Y ), start( start ) { state = 0; } }; struct Range { - nframes_t offset; /* where on the timeline */ - nframes_t start; /* first sample from clip */ - nframes_t end; /* last sample from clip */ + nframes_t start; /* where on the timeline */ + nframes_t offset; /* first sample from clip */ + nframes_t length; /* total number of samples */ }; /* Base class for virtual widget on a track */ @@ -79,56 +79,8 @@ protected: Drag *_drag; - - virtual void get ( Log_Entry &e ) const - { - e.add( ":x", _r->offset ); - e.add( ":l", _r->start ); - e.add( ":r", _r->end ); - e.add( ":sequence", _sequence ); - e.add( ":selected", selected() ); - } - - virtual void - set ( Log_Entry &e ) - { - for ( int i = 0; i < e.size(); ++i ) - { - const char *s, *v; - - e.get( i, &s, &v ); - - if ( ! strcmp( s, ":x" ) ) - _r->offset = atoll( v ); - else if ( ! strcmp( s, ":l" ) ) - _r->start = atoll( v ); - else if ( ! strcmp( s, ":r" ) ) - _r->end = atoll( v ); - else if ( ! strcmp( s, ":selected" ) ) - { - if ( atoi( v ) ) - select(); - else - deselect(); - } - else if ( ! strcmp( s, ":sequence" ) ) - { - int i; - sscanf( v, "%X", &i ); - Sequence *t = (Sequence*)Loggable::find( i ); - - assert( t ); - - t->add( this ); - } -// else -// e.erase( i ); - } - - if ( _sequence ) - _sequence->redraw(); - - } + virtual void get ( Log_Entry &e ) const; + virtual void set ( Log_Entry &e ); public: @@ -138,7 +90,7 @@ public: _r = &_range; - _r->offset = _r->start = _r->end = 0; + _r->start = _r->offset = _r->length = 0; _drag = NULL; @@ -234,7 +186,7 @@ public: _r = new Range( _range ); } - void end_drag ( void ) + void length_drag ( void ) { _range = *_r; delete _r; @@ -245,26 +197,26 @@ public: } void - offset ( nframes_t where ) + start ( nframes_t where ) { if ( ! selected() ) { redraw(); - _r->offset = where; + _r->start = where; } else { - long d = where - _r->offset; + long d = where - _r->start; for ( list ::iterator i = _selection.begin(); i != _selection.end(); i++ ) { (*i)->redraw(); if ( d < 0 ) - (*i)->_r->offset -= 0 - d; + (*i)->_r->start -= 0 - d; else - (*i)->_r->offset += d; + (*i)->_r->start += d; } } @@ -284,18 +236,18 @@ public: /* used by regions */ virtual int x ( void ) const { - return _r->offset < timeline->xoffset ? _sequence->x() : min( _sequence->x() + _sequence->w(), _sequence->x() + timeline->ts_to_x( _r->offset - timeline->xoffset ) ); + return _r->start < timeline->xoffset ? _sequence->x() : min( _sequence->x() + _sequence->w(), _sequence->x() + timeline->ts_to_x( _r->start - timeline->xoffset ) ); } /* use this as x() when you need to draw lines between widgets */ int line_x ( void ) const { - return _r->offset < timeline->xoffset ? max( -32768, _sequence->x() - timeline->ts_to_x( timeline->xoffset - _r->offset )) : min( 32767, _sequence->x() + timeline->ts_to_x( _r->offset - timeline->xoffset ) ); + return _r->start < timeline->xoffset ? max( -32768, _sequence->x() - timeline->ts_to_x( timeline->xoffset - _r->start )) : min( 32767, _sequence->x() + timeline->ts_to_x( _r->start - timeline->xoffset ) ); } virtual int w ( void ) const { - int tx = timeline->ts_to_x( _r->offset ); + int tx = timeline->ts_to_x( _r->start ); int rw; if ( tx < scroll_x() ) @@ -306,8 +258,8 @@ public: return min( rw, _sequence->w() ); } - int abs_x ( void ) const { return timeline->ts_to_x( _r->offset ); } - virtual int abs_w ( void ) const { return timeline->ts_to_x( _r->end - _r->start ); } + int abs_x ( void ) const { return timeline->ts_to_x( _r->start ); } + virtual int abs_w ( void ) const { return timeline->ts_to_x( _r->length ); } Fl_Color color ( void ) const { return _color; } void color ( Fl_Color v ) { _color = v; } @@ -318,22 +270,21 @@ public: Sequence * sequence ( void ) const { return _sequence; } void sequence ( Sequence *t ) { _sequence = t; } - nframes_t offset ( void ) const { return _r->offset; } -// void offset ( nframes_t o ) { _r->offset = o; } - - void end ( nframes_t v ) { _r->end = v; } - nframes_t end ( void ) const { return _r->end; } - void start ( nframes_t v ) { _r->start = v; } nframes_t start ( void ) const { return _r->start; } +// void start ( nframes_t o ) { _r->start = o; } + + void length ( nframes_t v ) { _r->length = v; } + virtual nframes_t length ( void ) const { return _r->length; } + void offset ( nframes_t v ) { _r->offset = v; } + nframes_t offset ( void ) const { return _r->offset; } - /** convert a screen x coord into an offset into the region */ + /** convert a screen x coord into an start into the region */ nframes_t x_to_offset ( int X ) { - return timeline->x_to_ts( scroll_x() + ( X - _sequence->x() ) ) - _r->offset; + return timeline->x_to_ts( scroll_x() + ( X - _sequence->x() ) ) - _r->start; } int active_r ( void ) const { return _sequence->active_r(); } - virtual nframes_t length ( void ) const { return _r->end - _r->start; } virtual Fl_Boxtype box ( void ) const { return FL_UP_BOX; } virtual Fl_Align align ( void ) const { return (Fl_Align)0; } @@ -366,13 +317,13 @@ public: bool operator< ( const Sequence_Widget & rhs ) { - return _r->offset < rhs._r->offset; + return _r->start < rhs._r->start; } bool operator<=( const Sequence_Widget & rhs ) { - return _r->offset <= rhs._r->offset; + return _r->start <= rhs._r->start; } virtual void draw_label ( const char *label, Fl_Align align, Fl_Color color=(Fl_Color)0 ); diff --git a/Timeline/Tempo_Point.C b/Timeline/Tempo_Point.C index a3a0201..45080f5 100644 --- a/Timeline/Tempo_Point.C +++ b/Timeline/Tempo_Point.C @@ -25,7 +25,7 @@ void Tempo_Point::get ( Log_Entry &e ) const { - e.add( ":x", _r->offset ); + e.add( ":start", _r->offset ); e.add( ":tempo", _tempo ); } @@ -38,7 +38,7 @@ Tempo_Point::set ( Log_Entry &e ) e.get( i, &s, &v ); - if ( ! strcmp( s, ":x" ) ) + if ( ! strcmp( s, ":start" ) ) _r->offset = atol( v ); else if ( ! strcmp( s, ":tempo" ) ) _tempo = atof( v ); diff --git a/Timeline/Time_Point.C b/Timeline/Time_Point.C index 8abd59b..ae56e9c 100644 --- a/Timeline/Time_Point.C +++ b/Timeline/Time_Point.C @@ -24,7 +24,7 @@ void Time_Point::get ( Log_Entry &e ) const { - e.add( ":x", _r->offset ); + e.add( ":start", _r->offset ); e.add( ":beats_per_bar", _time.beats_per_bar ); e.add( ":beat_type", _time.beat_type ); } @@ -38,7 +38,7 @@ Time_Point::set ( Log_Entry &e ) e.get( i, &s, &v ); - if ( ! strcmp( s, ":x" ) ) + if ( ! strcmp( s, ":start" ) ) _r->offset = atol( v ); else if ( ! strcmp( s, ":beats_per_bar" ) ) _time.beats_per_bar = atoi( v );