Make vertical scrolling work.
This commit is contained in:
parent
364fee5983
commit
63fb8971a2
79
Timeline.C
79
Timeline.C
|
@ -23,13 +23,72 @@
|
|||
#include "Time_Track.H"
|
||||
#include "Audio_Track.H"
|
||||
|
||||
#include <FL/Fl_Scrollbar.H>
|
||||
|
||||
void
|
||||
cb_hscroll ( 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 );
|
||||
}
|
||||
|
||||
void
|
||||
cb_vscroll ( Fl_Widget *w, void *v )
|
||||
{
|
||||
Fl_Scrollbar *sb = (Fl_Scrollbar*)w;
|
||||
|
||||
timeline->tracks->position( timeline->tracks->x(), (timeline->rulers->y() + timeline->rulers->h()) - sb->value() );
|
||||
timeline->yposition = sb->value();
|
||||
|
||||
timeline->vscroll->range( 0, timeline->tracks->h() - timeline->h() - timeline->rulers->h() );
|
||||
|
||||
timeline->damage( FL_DAMAGE_SCROLL );
|
||||
}
|
||||
|
||||
|
||||
Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Group( X, Y, W, H, L )
|
||||
{
|
||||
|
||||
xoffset = 0;
|
||||
|
||||
{
|
||||
Fl_Pack *o = new Fl_Pack( 0, 0, 800, 600, "rulers" );
|
||||
Scalebar *o = new Scalebar( X, H - 18, W - 18, 18 );
|
||||
|
||||
o->range( 0, 48000 * 2 );
|
||||
o->zoom_range( 2, 8192 );
|
||||
o->zoom( 256 );
|
||||
o->type( FL_HORIZONTAL );
|
||||
o->callback( cb_hscroll, 0 );
|
||||
|
||||
hscroll = o;
|
||||
}
|
||||
|
||||
{
|
||||
Fl_Scrollbar *o = new Fl_Scrollbar( W - 18, Y, 18, H - 18 );
|
||||
|
||||
o->type( FL_VERTICAL );
|
||||
o->step( 10 );
|
||||
o->callback( cb_vscroll, 0 );
|
||||
vscroll = o;
|
||||
}
|
||||
|
||||
{
|
||||
Fl_Pack *o = new Fl_Pack( 0, 0, W - vscroll->w(), H - hscroll->h(), "rulers" );
|
||||
o->type( Fl_Pack::VERTICAL );
|
||||
|
||||
{
|
||||
|
@ -59,13 +118,16 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Group( X,
|
|||
|
||||
}
|
||||
|
||||
o->size( o->w(), o->child( 0 )->h() * o->children() );
|
||||
rulers = o;
|
||||
o->end();
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
Fl_Scroll *o = new Fl_Scroll( 0, 24 * 2, 800, 600 - (24 * 3) );
|
||||
o->type( Fl_Scroll::VERTICAL_ALWAYS );
|
||||
|
||||
/* Fl_Scroll *o = new Fl_Scroll( 0, 24 * 2, 800, 600 - (24 * 3) ); */
|
||||
/* o->type( Fl_Scroll::VERTICAL_ALWAYS ); */
|
||||
|
||||
sample_rate = 44100;
|
||||
fpp = 256;
|
||||
|
@ -73,12 +135,12 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Group( X,
|
|||
length = sample_rate * 60 * 2;
|
||||
|
||||
{
|
||||
Fl_Pack *o = new Fl_Pack( 0, 0, 800, 5000 );
|
||||
Fl_Pack *o = new Fl_Pack( X, rulers->y() + rulers->h(), W - vscroll->w(), 5000 );
|
||||
o->type( Fl_Pack::VERTICAL );
|
||||
o->spacing( 10 );
|
||||
|
||||
Track *l = NULL;
|
||||
for ( int i = 6; i--; )
|
||||
for ( int i = 16; i--; )
|
||||
{
|
||||
|
||||
Track *o = new Audio_Track( 0, 0, 800, 100 );
|
||||
|
@ -93,10 +155,13 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Group( X,
|
|||
o->end();
|
||||
}
|
||||
|
||||
scroll = o;
|
||||
o->end();
|
||||
/* scroll = o; */
|
||||
/* o->end(); */
|
||||
|
||||
}
|
||||
|
||||
vscroll->range( 0, tracks->h() );
|
||||
|
||||
redraw();
|
||||
|
||||
end();
|
||||
|
|
105
Timeline.H
105
Timeline.H
|
@ -51,7 +51,8 @@ using std::list;
|
|||
struct Timeline : public Fl_Group
|
||||
{
|
||||
|
||||
int _old_position;
|
||||
int _old_xposition;
|
||||
int _old_yposition;
|
||||
|
||||
enum snap_flags_e {
|
||||
SNAP_TO_REGION,
|
||||
|
@ -62,7 +63,8 @@ struct Timeline : public Fl_Group
|
|||
Fl_Scroll *scroll;
|
||||
Fl_Pack *tracks;
|
||||
Fl_Pack *rulers;
|
||||
Scalebar *scrollbar;
|
||||
Scalebar *hscroll;
|
||||
Fl_Scrollbar *vscroll;
|
||||
|
||||
Tempo_Track *tempo_track;
|
||||
Time_Track *time_track;
|
||||
|
@ -76,6 +78,8 @@ struct Timeline : public Fl_Group
|
|||
|
||||
nframes_t length;
|
||||
|
||||
int yposition;
|
||||
|
||||
int _beats_per_bar;
|
||||
float _beats_per_minute;
|
||||
|
||||
|
@ -102,7 +106,7 @@ struct Timeline : public Fl_Group
|
|||
void
|
||||
position ( int X )
|
||||
{
|
||||
_old_position = xoffset;
|
||||
_old_xposition = xoffset;
|
||||
|
||||
xoffset = x_to_ts( X );
|
||||
|
||||
|
@ -127,26 +131,8 @@ struct Timeline : public Fl_Group
|
|||
fl_color( rand() );
|
||||
fl_rectf( X, Y, X + W, Y + H );
|
||||
|
||||
// tl->tracks->redraw();
|
||||
|
||||
tl->draw_child( *tl->rulers );
|
||||
tl->draw_child( *tl->tracks );
|
||||
|
||||
|
||||
// tl->tracks->draw();
|
||||
// tl->rulers->draw();
|
||||
|
||||
/* FOR_CHILDREN_OF( tracks, o ) */
|
||||
/* { */
|
||||
/* tracks->draw_child( *o ); */
|
||||
/* tracks->draw_outside_label( *o ); */
|
||||
/* } */
|
||||
|
||||
/* FOR_CHILDREN_OF( rulers, o ) */
|
||||
/* { */
|
||||
/* tracks->draw_child( o ); */
|
||||
/* tracks->draw_outside_label( o ); */
|
||||
/* } */
|
||||
tl->draw_child( *tl->rulers );
|
||||
|
||||
fl_pop_clip();
|
||||
}
|
||||
|
@ -163,45 +149,84 @@ struct Timeline : public Fl_Group
|
|||
H = tracks->h();
|
||||
|
||||
|
||||
|
||||
/* fl_color( FL_RED ); */
|
||||
/* fl_rect( X, Y, X + W, Y + H ); */
|
||||
|
||||
if ( damage() & FL_DAMAGE_ALL )
|
||||
{
|
||||
Fl_Group::draw();
|
||||
|
||||
/* draw_clip( this, X, tracks->y(), W, tracks->h() ); */
|
||||
/* draw_clip( this, X, rulers->y(), W, rulers->h() ); */
|
||||
/* fl_push_clip( x(), y(), w() - vscroll->w(), h() - hscroll->h() ); */
|
||||
|
||||
/* Fl_Group::draw(); */
|
||||
|
||||
/* fl_pop_clip(); */
|
||||
|
||||
/* draw_child( *hscroll ); */
|
||||
/* draw_child( *vscroll ); */
|
||||
|
||||
|
||||
fl_push_clip( rulers->x(), rulers->y(), rulers->w(), rulers->h() );
|
||||
draw_child( *rulers );
|
||||
fl_pop_clip();
|
||||
|
||||
fl_push_clip( tracks->x(), rulers->y() + rulers->h(), tracks->w(), h() - hscroll->h() );
|
||||
draw_child( *tracks );
|
||||
fl_pop_clip();
|
||||
|
||||
draw_child( *hscroll );
|
||||
draw_child( *vscroll );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( damage() & FL_DAMAGE_SCROLL )
|
||||
{
|
||||
// printf( "doing scroll\n" );
|
||||
int dx = ts_to_x( _old_position ) - ts_to_x( xoffset );
|
||||
int dx = ts_to_x( _old_xposition ) - ts_to_x( xoffset );
|
||||
int dy = _old_yposition - yposition;
|
||||
|
||||
fl_scroll( X, tracks->y(), W, tracks->h(), dx, 0, draw_clip, this );
|
||||
if ( ! dy )
|
||||
fl_scroll( X, rulers->y(), W, rulers->h(), dx, 0, draw_clip, this );
|
||||
|
||||
_old_position = 0;
|
||||
Y = rulers->y() + rulers->h();
|
||||
H = h() - rulers->h() - hscroll->h();
|
||||
|
||||
fl_scroll( X, Y, W, H, dx, dy, draw_clip, this );
|
||||
|
||||
_old_xposition = xoffset;
|
||||
_old_yposition = yposition;
|
||||
|
||||
}
|
||||
|
||||
if ( damage() & FL_DAMAGE_CHILD )
|
||||
{
|
||||
Fl_Widget *o;
|
||||
FOR_CHILDREN_OF( this, o )
|
||||
this->update_child( *o );
|
||||
fl_push_clip( rulers->x(), rulers->y(), rulers->w(), rulers->h() );
|
||||
update_child( *rulers );
|
||||
fl_pop_clip();
|
||||
|
||||
/* FOR_CHILDREN_OF( tracks, o ) */
|
||||
/* tracks->update_child( o ); */
|
||||
fl_push_clip( tracks->x(), rulers->y() + rulers->h(), tracks->w(), h() - rulers->h() - hscroll->h() );
|
||||
update_child( *tracks );
|
||||
fl_pop_clip();
|
||||
|
||||
/* FOR_CHILDREN_OF( rulers, o ) */
|
||||
/* rulers->update_child( o ); */
|
||||
|
||||
// fl_pop_clip()
|
||||
}
|
||||
update_child( *hscroll );
|
||||
update_child( *vscroll );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int handle ( int m )
|
||||
{
|
||||
switch ( m )
|
||||
{
|
||||
case FL_MOUSEWHEEL:
|
||||
{
|
||||
if ( hscroll->handle( m ) )
|
||||
return 1;
|
||||
|
||||
return vscroll->handle( m );
|
||||
}
|
||||
default:
|
||||
return Fl_Group::handle( m );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
8
Track.C
8
Track.C
|
@ -47,7 +47,11 @@ Track::sort ( void )
|
|||
void
|
||||
Track::draw ( void )
|
||||
{
|
||||
fl_push_clip( x(), y(), w(), h() );
|
||||
|
||||
if ( ! fl_not_clipped( x(), y(), w(), h() ) )
|
||||
return;
|
||||
|
||||
/* fl_push_clip( x(), y(), w(), h() ); */
|
||||
|
||||
Fl_Group::draw();
|
||||
|
||||
|
@ -64,7 +68,7 @@ Track::draw ( void )
|
|||
for ( list <Track_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ )
|
||||
(*r)->draw( X, Y, W, H );
|
||||
|
||||
fl_pop_clip();
|
||||
/* fl_pop_clip(); */
|
||||
}
|
||||
|
||||
void
|
||||
|
|
60
main.C
60
main.C
|
@ -51,59 +51,6 @@
|
|||
|
||||
Timeline *timeline;
|
||||
|
||||
void
|
||||
cb_scroll ( Fl_Widget *w, void *v )
|
||||
{
|
||||
Scalebar *sb = (Scalebar*)w;
|
||||
|
||||
if ( sb->zoom_changed() )
|
||||
{
|
||||
// timeline->fpp = sb->zoom() * 256;
|
||||
timeline->fpp = sb->zoom() * 1;
|
||||
|
||||
/* timeline->fpp = max( min( timeline->fpp, 4096.0f ), (float)2 ); */
|
||||
|
||||
int maxx = timeline->ts_to_x( timeline->length );
|
||||
sb->range( 0, maxx );
|
||||
|
||||
// timeline->redraw();
|
||||
timeline->redraw();
|
||||
}
|
||||
else
|
||||
{
|
||||
timeline->position( sb->value() );
|
||||
}
|
||||
|
||||
/* timeline->xoffset = timeline->x_to_ts( sb->value() ); */
|
||||
/* // timeline->tracks->redraw(); */
|
||||
/* timeline->scroll->redraw(); */
|
||||
|
||||
printf( "%lu\n", timeline->xoffset );
|
||||
|
||||
/* for ( int i = timeline->tracks->children(); i-- ; ) */
|
||||
/* { */
|
||||
/* Fl_Group *track = (Fl_Group*)timeline->tracks->child( i ); */
|
||||
/* track->damage( FL_DAMAGE_SCROLL ); */
|
||||
/* } */
|
||||
|
||||
/* for ( int i = timeline->rulers->children(); i-- ; ) */
|
||||
/* { */
|
||||
/* Fl_Group *track = (Fl_Group*)timeline->rulers->child( i ); */
|
||||
/* track->damage( FL_DAMAGE_SCROLL ); */
|
||||
/* } */
|
||||
|
||||
|
||||
|
||||
/* /\* for ( int j = track->children(); j-- ; ) *\/ */
|
||||
/* /\* ((Region*)(track->child( j )))->resize(); *\/ */
|
||||
/* /\* } *\/ */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void cb_undo ( Fl_Widget *w, void *v )
|
||||
{
|
||||
Loggable::undo();
|
||||
|
@ -126,12 +73,7 @@ main ( int argc, char **argv )
|
|||
/* track1->next( track2 ); */
|
||||
/* track2->prev( track1 ); */
|
||||
|
||||
timeline->scrollbar = new Scalebar( 0, 600 - 24, 800, 24 );
|
||||
timeline->scrollbar->range( 0, 48000 * 2 );
|
||||
timeline->scrollbar->zoom_range( 2, 8192 );
|
||||
timeline->scrollbar->zoom( 256 );
|
||||
timeline->scrollbar->type( 1 );
|
||||
timeline->scrollbar->callback( cb_scroll, 0 );
|
||||
// timeline->scrollbar = new Scalebar( 0, 600 - 24, 800, 24 );
|
||||
|
||||
Fl_Button *o = new Fl_Button( 0, 0, 50, 50, "undo" );
|
||||
o->callback( cb_undo, 0 );
|
||||
|
|
Loading…
Reference in New Issue