Improve the way sequence widgets are selected.
This commit is contained in:
parent
221e66d91a
commit
c464c73ab9
|
@ -751,7 +751,7 @@ Timeline::select( const Rectangle &r )
|
|||
Track *t = (Track*)tracks->child( i );
|
||||
|
||||
if ( ! ( t->y() > Y + r.h || t->y() + t->h() < Y ) )
|
||||
t->track()->select_range( r.x, r.w );
|
||||
t->select( r.x, r.y, r.w, r.h, true, true );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -365,6 +365,30 @@ Track::add ( Control_Sequence *t )
|
|||
resize();
|
||||
}
|
||||
|
||||
/** add all widget on this track falling within the given rectangle to
|
||||
the selection. */
|
||||
void
|
||||
Track::select ( int X, int Y, int W, int H,
|
||||
bool include_control, bool merge_control )
|
||||
{
|
||||
|
||||
Sequence *t = track();
|
||||
|
||||
if ( ! ( t->y() > Y + H || t->y() + t->h() < Y ) )
|
||||
t->select_range( X, W );
|
||||
else
|
||||
include_control = true;
|
||||
|
||||
if ( include_control )
|
||||
for ( int i = control->children(); i--; )
|
||||
{
|
||||
Control_Sequence *c = (Control_Sequence*)control->child( i );
|
||||
|
||||
if ( merge_control ||
|
||||
( c->y() >= Y && c->y() + c->h() <= Y + H ) )
|
||||
c->select_range( X, W );
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Track::draw ( void )
|
||||
|
|
|
@ -190,6 +190,8 @@ public:
|
|||
void remove ( Sequence *t );
|
||||
void remove ( Control_Sequence *t );
|
||||
|
||||
void select ( int X, int Y, int W, int H, bool include_control, bool merge_control );
|
||||
|
||||
int size ( void ) const { return _size; }
|
||||
|
||||
void resize ( void );
|
||||
|
|
Loading…
Reference in New Issue