|
|
@@ -392,15 +392,25 @@ Timeline::draw ( void ) |
|
|
|
void |
|
|
|
Timeline::draw_overlay ( void ) |
|
|
|
{ |
|
|
|
fl_color( FL_BLUE ); |
|
|
|
fl_line_style( FL_DOT, 4 ); |
|
|
|
|
|
|
|
fl_push_clip( tracks->x() + Track_Header::width(), rulers->y() + rulers->h(), tracks->w() - Track_Header::width(), h() - rulers->h() - hscroll->h() ); |
|
|
|
fl_rect( _selection.x, _selection.y, _selection.w, _selection.h ); |
|
|
|
fl_pop_clip(); |
|
|
|
|
|
|
|
const Rectangle &r = _selection; |
|
|
|
|
|
|
|
fl_color( FL_BLACK ); |
|
|
|
fl_line_style( FL_SOLID, 2 ); |
|
|
|
fl_rect( r.x + 2, r.y + 2, r.w, r.h ); |
|
|
|
fl_color( FL_MAGENTA ); |
|
|
|
fl_line_style( FL_DASH, 2 ); |
|
|
|
fl_rect( r.x, r.y, r.w, r.h ); |
|
|
|
|
|
|
|
|
|
|
|
fl_line_style( FL_SOLID, 0 ); |
|
|
|
|
|
|
|
|
|
|
|
fl_pop_clip(); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// #include "Track_Widget.H" |
|
|
@@ -409,13 +419,13 @@ Timeline::draw_overlay ( void ) |
|
|
|
void |
|
|
|
Timeline::select( const Rectangle &r ) |
|
|
|
{ |
|
|
|
const int Y = r.y - yposition; |
|
|
|
const int Y = r.y; |
|
|
|
|
|
|
|
for ( int i = tracks->children(); i-- ; ) |
|
|
|
{ |
|
|
|
Track_Header *t = (Track_Header*)tracks->child( i ); |
|
|
|
|
|
|
|
if ( t->y() >= Y && t->y() + t->h() <= Y + r.h ) |
|
|
|
if ( ! ( t->y() > Y + r.h || t->y() + t->h() < Y ) ) |
|
|
|
t->track()->select_range( r.x, r.w ); |
|
|
|
} |
|
|
|
} |
|
|
@@ -445,7 +455,7 @@ Timeline::handle ( int m ) |
|
|
|
{ |
|
|
|
int r = Fl_Overlay_Window::handle( m ); |
|
|
|
|
|
|
|
if ( r ) |
|
|
|
if ( m != FL_RELEASE && r ) |
|
|
|
return r; |
|
|
|
|
|
|
|
const int X = Fl::event_x(); |
|
|
@@ -455,6 +465,11 @@ Timeline::handle ( int m ) |
|
|
|
{ |
|
|
|
case FL_PUSH: |
|
|
|
{ |
|
|
|
if ( ! Fl::event_button1() ) |
|
|
|
return 0; |
|
|
|
|
|
|
|
assert( ! drag ); |
|
|
|
|
|
|
|
drag = new Drag( X - x(), Y - y() ); |
|
|
|
_selection.x = drag->x; |
|
|
|
_selection.y = drag->y; |
|
|
@@ -462,8 +477,16 @@ Timeline::handle ( int m ) |
|
|
|
} |
|
|
|
case FL_DRAG: |
|
|
|
{ |
|
|
|
_selection.w = X - drag->x; |
|
|
|
_selection.h = Y - drag->y; |
|
|
|
int ox = X - drag->x; |
|
|
|
int oy = Y - drag->y; |
|
|
|
|
|
|
|
if ( ox < 0 ) |
|
|
|
_selection.x = X; |
|
|
|
if ( oy < 0 ) |
|
|
|
_selection.y = Y; |
|
|
|
|
|
|
|
_selection.w = abs( ox ); |
|
|
|
_selection.h = abs( oy ); |
|
|
|
break; |
|
|
|
} |
|
|
|
case FL_RELEASE: |
|
|
|