@@ -92,12 +92,21 @@ Region::Region ( Clip *c ) | |||
void | |||
Region::trim ( enum trim_e t, int X ) | |||
{ | |||
redraw(); | |||
switch ( t ) | |||
{ | |||
case LEFT: | |||
{ | |||
int d = X - x(); | |||
/* if ( d < 0 ) */ | |||
/* // _track->damage( FL_DAMAGE_EXPOSE, x() + d, y(), 1 - d, h() ); */ | |||
/* _track->damage( FL_DAMAGE_EXPOSE, x(), y(), w(), h() ); */ | |||
/* else */ | |||
/* _track->damage( FL_DAMAGE_EXPOSE, x(), y(), d, h() ); */ | |||
long td = timeline->x_to_ts( d ); | |||
if ( td < 0 && _start < 0 - td ) | |||
@@ -106,11 +115,16 @@ Region::trim ( enum trim_e t, int X ) | |||
_start += td; | |||
_offset += td; | |||
break; | |||
} | |||
case RIGHT: | |||
{ | |||
int d = (x() + w()) - X; | |||
/* _track->damage( FL_DAMAGE_EXPOSE, x() + w(), y(), d, h() ); */ | |||
long td = timeline->x_to_ts( d ); | |||
_end -= td; | |||
@@ -120,9 +134,6 @@ Region::trim ( enum trim_e t, int X ) | |||
return; | |||
} | |||
_track->redraw(); | |||
} | |||
int | |||
@@ -253,7 +264,9 @@ Region::handle ( int m ) | |||
_track->prev()->add( this ); | |||
} | |||
_track->redraw(); | |||
// _track->redraw(); | |||
// _track->damage( FL_DAMAGE_EXPOSE, x(), y(), w(), h() ); | |||
ret = Track_Widget::handle( m ); | |||
return ret | 1; | |||
@@ -29,15 +29,19 @@ class Scalebar : public Fl_Scrollbar | |||
{ | |||
double _zoom; | |||
bool _zoom_changed; | |||
public: | |||
Scalebar ( int X, int Y, int W, int H ) : Fl_Scrollbar ( X, Y, W, H ) | |||
{ | |||
_zoom = 1.0f; | |||
_zoom_changed = true; | |||
step( 1 ); | |||
} | |||
bool zoom_changed ( void ) const { return _zoom_changed; } | |||
double zoom ( void ) const { return _zoom; } | |||
double value ( void ) const { return Fl_Slider::value(); } | |||
@@ -57,7 +61,9 @@ public: | |||
while ( d-- ) | |||
_zoom *= 2; | |||
_zoom_changed = true; | |||
do_callback(); | |||
_zoom_changed = false; | |||
slider_size( w() / maximum() ); | |||
@@ -106,8 +106,9 @@ struct Timeline : public Fl_Group | |||
damage( FL_DAMAGE_SCROLL ); | |||
rulers->damage( FL_DAMAGE_SCROLL ); | |||
tracks->damage( FL_DAMAGE_SCROLL ); | |||
/* rulers->damage( FL_DAMAGE_SCROLL ); */ | |||
/* tracks->damage( FL_DAMAGE_SCROLL ); */ | |||
} | |||
@@ -121,8 +122,17 @@ struct Timeline : public Fl_Group | |||
fl_push_clip( X, Y, W, H ); | |||
tl->tracks->redraw(); | |||
tl->rulers->redraw(); | |||
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 ) */ | |||
/* { */ | |||
@@ -140,39 +150,52 @@ struct Timeline : public Fl_Group | |||
} | |||
/* void */ | |||
/* draw ( void ) */ | |||
/* { */ | |||
/* int X, Y, W, H; */ | |||
void | |||
draw ( void ) | |||
{ | |||
int X, Y, W, H; | |||
/* X = x(); */ | |||
/* Y = tracks->y(); */ | |||
/* W = w(); */ | |||
/* H = tracks->h(); */ | |||
X = tracks->x() + Fl::box_dx( tracks->child( 0 )->box() ) + 1; | |||
Y = tracks->y(); | |||
W = tracks->w() - Fl::box_dw( tracks->child( 0 )->box() ) - 2; | |||
H = tracks->h(); | |||
/* if ( damage() & FL_DAMAGE_ALL ) */ | |||
/* { */ | |||
/* draw_clip( this, X, Y, W, H ); */ | |||
/* return; */ | |||
/* } */ | |||
/* if ( damage() & FL_DAMAGE_SCROLL ) */ | |||
/* { */ | |||
/* fl_scroll( X, Y, W, H, _old_position - xoffset, Y, draw_clip, this ); */ | |||
/* } */ | |||
/* fl_color( FL_RED ); */ | |||
/* fl_rect( X, Y, X + W, Y + H ); */ | |||
/* if ( damage() & FL_DAMAGE_CHILD ) */ | |||
/* { */ | |||
/* // Fl_Widget *o; */ | |||
if ( damage() & FL_DAMAGE_ALL ) | |||
{ | |||
draw_clip( this, X, tracks->y(), W, tracks->h() ); | |||
draw_clip( this, X, rulers->y(), W, rulers->h() ); | |||
return; | |||
} | |||
/* /\* FOR_CHILDREN_OF( tracks, o ) *\/ */ | |||
/* /\* tracks->update_child( o ); *\/ */ | |||
if ( damage() & FL_DAMAGE_SCROLL ) | |||
{ | |||
printf( "doing scroll\n" ); | |||
int dx = ts_to_x( _old_position ) - ts_to_x( xoffset ); | |||
/* /\* FOR_CHILDREN_OF( rulers, o ) *\/ */ | |||
/* /\* rulers->update_child( o ); *\/ */ | |||
fl_scroll( X, tracks->y(), W, tracks->h(), dx, 0, draw_clip, this ); | |||
fl_scroll( X, rulers->y(), W, rulers->h(), dx, 0, draw_clip, this ); | |||
/* // fl_pop_clip() */ | |||
/* } */ | |||
/* } */ | |||
_old_position = 0; | |||
} | |||
if ( damage() & FL_DAMAGE_CHILD ) | |||
{ | |||
Fl_Widget *o; | |||
FOR_CHILDREN_OF( this, o ) | |||
this->update_child( *o ); | |||
/* FOR_CHILDREN_OF( tracks, o ) */ | |||
/* tracks->update_child( o ); */ | |||
/* FOR_CHILDREN_OF( rulers, o ) */ | |||
/* rulers->update_child( o ); */ | |||
// fl_pop_clip() | |||
} | |||
} | |||
}; |
@@ -43,18 +43,22 @@ Track::sort ( void ) | |||
void | |||
Track::draw ( void ) | |||
{ | |||
fl_push_clip( x(), y(), w(), h() ); | |||
Fl_Group::draw(); | |||
timeline->draw_measure_lines( x(), y(), w(), h(), color() ); | |||
fl_push_clip( x(), y(), w(), h() ); | |||
int X, Y, W, H; | |||
fl_clip_box( x(), y(), w(), h(), X, Y, W, H ); | |||
for ( list <Track_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ ) | |||
(*r)->draw_box( x(), y(), w(), h() ); | |||
(*r)->draw_box( X, Y, W, H ); | |||
/* TODO: detect overlap and draw with transparency/crossfade */ | |||
for ( list <Track_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ ) | |||
(*r)->draw( x(), y(), w(), h() ); | |||
(*r)->draw( X, Y, W, H ); | |||
fl_pop_clip(); | |||
} | |||
@@ -96,8 +96,13 @@ public: | |||
virtual Fl_Boxtype box ( void ) const { return FL_UP_BOX; } | |||
/* just draw a simple box */ | |||
void | |||
redraw ( void ) | |||
{ | |||
_track->damage( FL_DAMAGE_EXPOSE, x(), y(), w(), h() ); | |||
} | |||
/* just draw a simple box */ | |||
virtual void | |||
draw_box ( int X, int Y, int W, int H ) | |||
{ | |||
@@ -208,6 +213,8 @@ public: | |||
return 1; | |||
case FL_DRAG: | |||
{ | |||
redraw(); | |||
if ( ox + X >= _track->x() ) | |||
{ | |||
int nx = ox + X; | |||
@@ -217,7 +224,7 @@ public: | |||
_track->snap( this ); | |||
} | |||
_track->redraw(); | |||
// _track->redraw(); | |||
fl_cursor( FL_CURSOR_MOVE ); | |||
@@ -241,9 +248,9 @@ public: | |||
else | |||
pos += d; | |||
timeline->xoffset = pos; | |||
timeline->position( timeline->ts_to_x( pos ) ); | |||
timeline->tracks->redraw(); | |||
// timeline->tracks->redraw(); | |||
} | |||
@@ -55,16 +55,20 @@ cb_scroll ( Fl_Widget *w, void *v ) | |||
{ | |||
Scalebar *sb = (Scalebar*)w; | |||
timeline->fpp = sb->zoom() * 256; | |||
timeline->fpp = max( min( timeline->fpp, 4096.0f ), (float)2 ); | |||
if ( sb->zoom_changed() ) | |||
{ | |||
timeline->fpp = sb->zoom() * 256; | |||
timeline->fpp = max( min( timeline->fpp, 4096.0f ), (float)2 ); | |||
int maxx = timeline->ts_to_x( timeline->length ); | |||
sb->range( 0, maxx ); | |||
// sb->value( sb->value(), maxx | |||
// sb->slider_size( sb->w() / maxx ); | |||
// ((Fl_Scrollbar*)sb)->value( sb->value(), 60, 10, maxx ); | |||
int maxx = timeline->ts_to_x( timeline->length ); | |||
sb->range( 0, maxx ); | |||
timeline->position( sb->value() ); | |||
timeline->redraw(); | |||
} | |||
else | |||
{ | |||
timeline->position( sb->value() ); | |||
} | |||
/* timeline->xoffset = timeline->x_to_ts( sb->value() ); */ | |||
/* // timeline->tracks->redraw(); */ | |||
@@ -72,17 +76,17 @@ cb_scroll ( Fl_Widget *w, void *v ) | |||
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->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 i = timeline->rulers->children(); i-- ; ) */ | |||
/* { */ | |||
/* Fl_Group *track = (Fl_Group*)timeline->rulers->child( i ); */ | |||
/* track->damage( FL_DAMAGE_SCROLL ); */ | |||
/* } */ | |||
@@ -100,7 +104,7 @@ cb_scroll ( Fl_Widget *w, void *v ) | |||
int | |||
main ( int argc, char **argv ) | |||
{ | |||
Fl_Double_Window *main_window = new Fl_Double_Window( 0, 0, 800, 600 ); | |||
Fl_Window *main_window = new Fl_Window( 0, 0, 800, 600 ); | |||
Fl::get_system_colors(); | |||
Fl::scheme( "plastic" ); | |||