Timeline: Improve drag scrolling behavior.
This commit is contained in:
parent
97d149421f
commit
aefc328c2d
|
@ -442,7 +442,7 @@ Sequence_Widget::handle ( int m )
|
|||
|
||||
if ( ! _drag )
|
||||
{
|
||||
begin_drag ( Drag( Y, x_to_offset( X ) ) );
|
||||
begin_drag ( Drag( X, Y, x_to_offset( X ), start() ) );
|
||||
_log.hold();
|
||||
}
|
||||
|
||||
|
@ -473,29 +473,25 @@ Sequence_Widget::handle ( int m )
|
|||
sequence()->snap( this );
|
||||
|
||||
if ( X >= sequence()->x() + sequence()->w() ||
|
||||
X <= sequence()->x() )
|
||||
X <= sequence()->drawable_x() )
|
||||
{
|
||||
/* this drag needs to scroll */
|
||||
|
||||
nframes_t pos = timeline->xoffset;
|
||||
int64_t pos = s - ( _drag->mouse_offset - _drag->offset );
|
||||
|
||||
nframes_t d = timeline->x_to_ts( 100 );
|
||||
|
||||
if ( X <= sequence()->x() )
|
||||
{
|
||||
if ( X > sequence()->x() + sequence()->w() )
|
||||
pos -= timeline->x_to_ts( sequence()->drawable_w() );
|
||||
|
||||
if ( pos > d )
|
||||
pos -= d;
|
||||
else
|
||||
if ( s == 0 )
|
||||
pos = 0;
|
||||
|
||||
if ( pos < 0 )
|
||||
pos = 0;
|
||||
}
|
||||
else
|
||||
pos += d;
|
||||
|
||||
timeline->xposition(timeline->ts_to_x(pos));
|
||||
|
||||
// timeline->update_length( start() + length() );
|
||||
|
||||
/* timeline->redraw(); */
|
||||
sequence()->damage( FL_DAMAGE_USER1 );
|
||||
}
|
||||
|
||||
|
|
|
@ -39,8 +39,9 @@ struct Drag
|
|||
|
||||
// nframes_t start;
|
||||
int64_t offset;
|
||||
int64_t mouse_offset;
|
||||
|
||||
Drag( int X, int Y, uint64_t offset=0 ) : x( X ), y( Y ), offset( offset ) { state = 0; }
|
||||
Drag( int X, int Y, uint64_t offset=0, uint64_t mouse_offset = 0 ) : x( X ), y( Y ), offset( offset ), mouse_offset( mouse_offset ) { state = 0; }
|
||||
};
|
||||
|
||||
/* most common position description. /offset/ is only used by Regions,
|
||||
|
|
|
@ -938,7 +938,21 @@ Timeline::prev_line ( nframes_t *frame, bool bar ) const
|
|||
nframes_t
|
||||
Timeline::x_to_offset ( int x ) const
|
||||
{
|
||||
return x_to_ts( max( 0, x - Track::width() ) ) + xoffset;
|
||||
int d = x - Track::width();
|
||||
|
||||
int64_t r;
|
||||
|
||||
if ( d < 0 )
|
||||
r = (int64_t)xoffset - x_to_ts( 0 - d );
|
||||
else
|
||||
r = (int64_t)xoffset + x_to_ts( d );
|
||||
|
||||
if ( r > JACK_MAX_FRAMES )
|
||||
return JACK_MAX_FRAMES;
|
||||
else if ( r < 0 )
|
||||
return 0;
|
||||
else
|
||||
return r;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -1837,7 +1851,7 @@ Timeline::xposition ( int X )
|
|||
{
|
||||
xoffset = x_to_ts( X );
|
||||
|
||||
int dx = ts_to_x( _old_xposition ) - ts_to_x( xoffset );
|
||||
long dx = ts_to_x( _old_xposition ) - ts_to_x( xoffset );
|
||||
|
||||
if ( dx )
|
||||
damage( FL_DAMAGE_SCROLL );
|
||||
|
|
Loading…
Reference in New Issue