@@ -100,6 +100,9 @@ public: | |||||
{ | { | ||||
case FL_PUSH: | case FL_PUSH: | ||||
{ | { | ||||
if ( Fl::event_x() < drawable_x() ) | |||||
return 0; | |||||
Logger log( this ); | Logger log( this ); | ||||
if ( Fl::event_button1() ) | if ( Fl::event_button1() ) | ||||
@@ -726,8 +726,10 @@ Control_Sequence::handle ( int m ) | |||||
{ | { | ||||
case FL_PUSH: | case FL_PUSH: | ||||
{ | { | ||||
if ( test_press( FL_BUTTON1 ) && | |||||
Fl::event_x() >= Track::width() ) | |||||
if ( Fl::event_x() < drawable_x() ) | |||||
return 0; | |||||
if ( test_press( FL_BUTTON1 ) ) | |||||
{ | { | ||||
timeline->wrlock(); | timeline->wrlock(); | ||||
@@ -383,52 +383,62 @@ Sequence::handle ( int m ) | |||||
return 1; | return 1; | ||||
case FL_ENTER: | case FL_ENTER: | ||||
// DMESSAGE( "enter" ); | // DMESSAGE( "enter" ); | ||||
if ( Sequence_Widget::pushed() ) | |||||
if ( Fl::event_x() >= drawable_x() ) | |||||
{ | { | ||||
if ( Sequence_Widget::pushed()->sequence()->class_name() == class_name() ) | |||||
if ( Sequence_Widget::pushed() ) | |||||
{ | { | ||||
/* accept objects dragged from other sequences of this type */ | |||||
timeline->wrlock(); | |||||
add( Sequence_Widget::pushed() ); | |||||
timeline->unlock(); | |||||
damage( FL_DAMAGE_USER1 ); | |||||
fl_cursor( FL_CURSOR_MOVE ); | |||||
if ( Sequence_Widget::pushed()->sequence()->class_name() == class_name() ) | |||||
{ | |||||
/* accept objects dragged from other sequences of this type */ | |||||
timeline->wrlock(); | |||||
add( Sequence_Widget::pushed() ); | |||||
timeline->unlock(); | |||||
damage( FL_DAMAGE_USER1 ); | |||||
fl_cursor( FL_CURSOR_MOVE ); | |||||
} | |||||
else | |||||
fl_cursor( FL_CURSOR_DEFAULT ); | |||||
} | } | ||||
else | else | ||||
fl_cursor( FL_CURSOR_DEFAULT ); | |||||
if ( ! event_widget() ) | |||||
fl_cursor( cursor() ); | |||||
Fl_Group::handle( m ); | |||||
return 1; | |||||
} | } | ||||
else | else | ||||
if ( ! event_widget() ) | |||||
fl_cursor( cursor() ); | |||||
Fl_Group::handle( m ); | |||||
return 1; | |||||
{ | |||||
return Fl_Group::handle(m); | |||||
} | |||||
case FL_DND_ENTER: | case FL_DND_ENTER: | ||||
case FL_DND_LEAVE: | case FL_DND_LEAVE: | ||||
case FL_DND_RELEASE: | case FL_DND_RELEASE: | ||||
return 1; | return 1; | ||||
case FL_MOVE: | case FL_MOVE: | ||||
{ | { | ||||
Sequence_Widget *r = event_widget(); | |||||
if ( r != Sequence_Widget::belowmouse() ) | |||||
if ( Fl::event_x() >= drawable_x() ) | |||||
{ | { | ||||
if ( Sequence_Widget::belowmouse() ) | |||||
Sequence_Widget::belowmouse()->handle( FL_LEAVE ); | |||||
Sequence_Widget::belowmouse( r ); | |||||
if ( r ) | |||||
r->handle( FL_ENTER ); | |||||
Sequence_Widget *r = event_widget(); | |||||
if ( r != Sequence_Widget::belowmouse() ) | |||||
{ | |||||
if ( Sequence_Widget::belowmouse() ) | |||||
Sequence_Widget::belowmouse()->handle( FL_LEAVE ); | |||||
Sequence_Widget::belowmouse( r ); | |||||
if ( r ) | |||||
r->handle( FL_ENTER ); | |||||
} | |||||
return 1; | |||||
} | } | ||||
return 1; | |||||
} | } | ||||
default: | default: | ||||
{ | { | ||||
@@ -1667,81 +1667,84 @@ Timeline::handle ( int m ) | |||||
{ | { | ||||
case FL_PUSH: | case FL_PUSH: | ||||
{ | { | ||||
if ( test_press( FL_BUTTON1 ) || test_press( FL_BUTTON1 + FL_CTRL ) ) | |||||
if ( | |||||
Fl::event_x() >= Track::width() && | |||||
( test_press( FL_BUTTON1 ) || test_press( FL_BUTTON1 + FL_CTRL ) )) | |||||
{ | { | ||||
assert( ! drag ); | assert( ! drag ); | ||||
drag = new Drag( X, Y ); | drag = new Drag( X, Y ); | ||||
_selection.x = X; | _selection.x = X; | ||||
_selection.y = Y; | _selection.y = Y; | ||||
if ( ! Fl::event_ctrl() ) | if ( ! Fl::event_ctrl() ) | ||||
select_none(); | select_none(); | ||||
return 1; | return 1; | ||||
} | } | ||||
else if ( test_press( FL_BUTTON3 ) ) | else if ( test_press( FL_BUTTON3 ) ) | ||||
{ | { | ||||
menu_popup( menu ); | menu_popup( menu ); | ||||
return 1; | return 1; | ||||
} | } | ||||
return 0; | |||||
} | } | ||||
case FL_DRAG: | |||||
{ | |||||
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 ); | |||||
return 0; | |||||
case FL_DRAG: | |||||
{ | |||||
int ox = X - drag->x; | |||||
int oy = Y - drag->y; | |||||
if ( range ) | |||||
{ | |||||
range_start( x_to_offset( _selection.x ) ); | |||||
range_end( x_to_offset( _selection.x + _selection.w ) ); | |||||
redraw(); | |||||
} | |||||
if ( ox < 0 ) | |||||
_selection.x = X; | |||||
if ( oy < 0 ) | |||||
_selection.y = Y; | |||||
redraw_overlay(); | |||||
return 1; | |||||
_selection.w = abs( ox ); | |||||
_selection.h = abs( oy ); | |||||
break; | |||||
} | |||||
case FL_RELEASE: | |||||
if ( range ) | |||||
{ | { | ||||
delete drag; | |||||
drag = NULL; | |||||
range_start( x_to_offset( _selection.x ) ); | |||||
range_end( x_to_offset( _selection.x + _selection.w ) ); | |||||
redraw(); | |||||
} | |||||
if ( range ) | |||||
{ | |||||
range_start( x_to_offset( _selection.x ) ); | |||||
range_end( x_to_offset( _selection.x + _selection.w ) ); | |||||
redraw(); | |||||
} | |||||
else | |||||
select( _selection ); | |||||
redraw_overlay(); | |||||
return 1; | |||||
_selection.x = _selection.y =_selection.w = _selection.h = 0; | |||||
break; | |||||
} | |||||
case FL_RELEASE: | |||||
{ | |||||
delete drag; | |||||
drag = NULL; | |||||
redraw_overlay(); | |||||
return 1; | |||||
if ( range ) | |||||
{ | |||||
range_start( x_to_offset( _selection.x ) ); | |||||
range_end( x_to_offset( _selection.x + _selection.w ) ); | |||||
redraw(); | |||||
} | } | ||||
default: | |||||
return 0; | |||||
break; | |||||
} | |||||
else | |||||
select( _selection ); | |||||
return 0; | |||||
_selection.x = _selection.y =_selection.w = _selection.h = 0; | |||||
redraw_overlay(); | |||||
return 1; | |||||
} | |||||
default: | |||||
return 0; | |||||
break; | |||||
} | } | ||||
return 0; | |||||
} | } | ||||
} | } | ||||
} | |||||
/** retrun a pointer to the track named /name/, or NULL if no track is named /name/ */ | /** retrun a pointer to the track named /name/, or NULL if no track is named /name/ */ | ||||
Track * | Track * | ||||
@@ -706,6 +706,8 @@ Track::select ( int X, int Y, int W, int H, | |||||
Sequence *t = sequence(); | Sequence *t = sequence(); | ||||
X -= Track::width(); | |||||
if ( ! ( t->y() > Y + H || t->y() + t->h() < Y ) ) | if ( ! ( t->y() > Y + H || t->y() + t->h() < Y ) ) | ||||
t->select_range( X, W ); | t->select_range( X, W ); | ||||
else | else | ||||