diff --git a/Tempo_Point.H b/Tempo_Point.H index 4207be9..9ae9ab6 100644 --- a/Tempo_Point.H +++ b/Tempo_Point.H @@ -89,9 +89,7 @@ protected: free( sa ); - timeline->rulers->redraw(); - timeline->tracks->redraw(); - + timeline->redraw(); _make_label(); } @@ -142,8 +140,7 @@ public: if ( m == FL_RELEASE ) { _track->sort(); - timeline->rulers->redraw(); - timeline->tracks->redraw(); + timeline->redraw(); } return r; } diff --git a/Time_Point.H b/Time_Point.H index f905e99..83a72ff 100644 --- a/Time_Point.H +++ b/Time_Point.H @@ -112,8 +112,7 @@ protected: free( sa ); - timeline->rulers->redraw(); - timeline->tracks->redraw(); + timeline->redraw(); _make_label(); } @@ -161,7 +160,7 @@ public: if ( m == FL_RELEASE ) { _track->sort(); - timeline->tracks->redraw(); + timeline->redraw(); } return r; } diff --git a/Timeline.C b/Timeline.C index b77c949..4e611f5 100644 --- a/Timeline.C +++ b/Timeline.C @@ -28,40 +28,40 @@ #include "Track_Header.H" void -cb_hscroll ( Fl_Widget *w, void *v ) +Timeline::cb_scroll ( Fl_Widget *w, void *v ) { - Scalebar *sb = (Scalebar*)w; - - if ( sb->zoom_changed() ) - { - timeline->fpp = sb->zoom() * 1; - - int maxx = timeline->ts_to_x( timeline->length ); - sb->range( 0, maxx ); - - timeline->redraw(); - } - else - { - timeline->position( sb->value() ); - } - - printf( "%lu\n", timeline->xoffset ); + ((Timeline*)v)->cb_scroll( w ); } void -cb_vscroll ( Fl_Widget *w, void *v ) +Timeline::cb_scroll ( Fl_Widget *w ) { - Fl_Scrollbar *sb = (Fl_Scrollbar*)w; + if ( w == vscroll ) + { + tracks->position( tracks->x(), (rulers->y() + rulers->h()) - vscroll->value() ); - timeline->tracks->position( timeline->tracks->x(), (timeline->rulers->y() + timeline->rulers->h()) - sb->value() ); - timeline->yposition = sb->value(); + yposition = vscroll->value(); -// timeline->vscroll->range( 0, timeline->tracks->h() - timeline->h() - timeline->rulers->h() ); + vscroll->value( vscroll->value(), 30, 0, min( tracks->h(), tracks->h() - h() - rulers->h() ) ); - sb->value( sb->value(), 30, 0, min( timeline->tracks->h(), timeline->tracks->h() - timeline->h() - timeline->rulers->h() ) ); + damage( FL_DAMAGE_SCROLL ); + } + else + { + if ( hscroll->zoom_changed() ) + { + fpp = hscroll->zoom() * 1; - timeline->damage( FL_DAMAGE_SCROLL ); + int maxx = ts_to_x( length ); + hscroll->range( 0, maxx ); + + redraw(); + } + else + { + position( hscroll->value() ); + } + } } @@ -81,7 +81,7 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi o->zoom_range( 2, 8192 ); o->zoom( 256 ); o->type( FL_HORIZONTAL ); - o->callback( cb_hscroll, 0 ); + o->callback( cb_scroll, this ); hscroll = o; } @@ -91,7 +91,7 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi o->type( FL_VERTICAL ); // o->step( 10 ); - o->callback( cb_vscroll, 0 ); + o->callback( cb_scroll, this ); vscroll = o; } @@ -144,7 +144,6 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi sample_rate = 44100; fpp = 256; - _beats_per_minute = 120; length = sample_rate * 60 * 2; { diff --git a/Timeline.H b/Timeline.H index b5881e9..829c8bf 100644 --- a/Timeline.H +++ b/Timeline.H @@ -61,9 +61,8 @@ struct Rectangle Rectangle ( int X, int Y, int W, int H ) : x( X ), y( Y ), w( W ), h( H ) {} }; -struct Timeline : public Fl_Overlay_Window +class Timeline : public Fl_Overlay_Window { - static void draw_clip ( void * v, int X, int Y, int W, int H ); int _old_xposition; @@ -88,6 +87,12 @@ struct Timeline : public Fl_Overlay_Window Tempo_Track *tempo_track; Time_Track *time_track; + + static void cb_scroll ( Fl_Widget *w, void *v ); + void cb_scroll ( Fl_Widget *w ); + +public: + float fpp; /* frames per pixel */ // nframes_t fpp; @@ -99,9 +104,6 @@ struct Timeline : public Fl_Overlay_Window int yposition; - int _beats_per_bar; - float _beats_per_minute; - Timeline ( int X, int Y, int W, int H, const char *L=0 ); int