diff --git a/Timeline/Audio_Region.C b/Timeline/Audio_Region.C index 179e103..a442151 100644 --- a/Timeline/Audio_Region.C +++ b/Timeline/Audio_Region.C @@ -74,6 +74,7 @@ Audio_Region::get ( Log_Entry &e ) const Sequence_Region::get( e ); e.add( ":offset", _r->offset ); + e.add( ":loop", _loop ); } void @@ -99,6 +100,8 @@ Audio_Region::set ( Log_Entry &e ) _fade_out.length = atoll( v ); else if ( ! strcmp( s, ":offset" ) ) _r->offset = atoll( v ); + else if ( ! strcmp( s, ":loop" ) ) + _loop = atoll( v ); else if ( ! strcmp( s, ":source" ) ) { if ( ! ( _clip = Audio_File::from_file( v ) ) ) @@ -114,6 +117,7 @@ Audio_Region::set ( Log_Entry &e ) void Audio_Region::init ( void ) { + _loop = 0; _sequence = NULL; _scale = 1.0f; _clip = NULL; @@ -138,6 +142,8 @@ Audio_Region::Audio_Region ( const Audio_Region & rhs ) : Sequence_Region( rhs ) _fade_in = rhs._fade_in; _fade_out = rhs._fade_out; + _loop = rhs._loop; + log_create(); } @@ -241,6 +247,13 @@ Audio_Region::menu_cb ( const Fl_Menu_ *m ) if ( offset > 0 ) _fade_out.length = offset; } + else if ( ! strcmp( picked, "/Loop to mouse" ) ) + { + nframes_t offset = x_to_offset( Fl::event_x() ); + + if ( offset < length() ) + _loop = offset; + } else FATAL( "Unknown menu choice \"%s\"", picked ); @@ -278,6 +291,7 @@ Audio_Region::menu ( void ) { "Color", 0, 0, 0, inherit_track_color ? FL_MENU_INACTIVE : 0 }, { "Fade in to mouse", FL_F + 3, 0, 0 }, { "Fade out to mouse", FL_F + 4, 0, 0 }, + { "Loop to mouse", 'l', 0, 0 }, { 0 }, }; @@ -640,6 +654,16 @@ Audio_Region::draw ( void ) new Peaks_Redraw_Request( this, start + timeline->x_to_ts( peaks ), end ) ); } + if ( _loop ) + { + /* FIXME: is there no way to draw these symbols direclty? */ + fl_font( FL_SYMBOL, 14 ); + fl_color( FL_WHITE ); + fl_draw( "@2>", X + timeline->ts_to_x( _loop - start ), y(), 14, 14, (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_BOTTOM), 0, 1 ); + fl_color( FL_WHITE ); + fl_draw( "@2<", X + timeline->ts_to_x( _loop - start ), y() + h() - 14, 14, 14, (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_BOTTOM), 0, 1 ); + } + timeline->draw_measure_lines( X, Y, W, H, _box_color ); /* fl_color( FL_BLACK ); */ diff --git a/Timeline/Audio_Region.H b/Timeline/Audio_Region.H index 09acf0b..c9d4acc 100644 --- a/Timeline/Audio_Region.H +++ b/Timeline/Audio_Region.H @@ -100,6 +100,8 @@ private: Fade _fade_in; Fade _fade_out; + nframes_t _loop; /* loop point */ + friend class Track; /* for _clip */ Fl_Menu_Button & menu ( void ); diff --git a/Timeline/Timeline.C b/Timeline/Timeline.C index 147c4fb..809f616 100644 --- a/Timeline/Timeline.C +++ b/Timeline/Timeline.C @@ -1178,12 +1178,6 @@ Timeline::handle ( int m ) } default: { - -/* if ( m == FL_PUSH ) */ -/* take_focus(); */ - -//Fl::focus( this ); - int r = Fl_Overlay_Window::handle( m ); if ( m != FL_RELEASE && r )