Browse Source

Timeline: Improve drag scrolling behavior.

tags/non-daw-v1.2.0
Jonathan Moore Liles 9 years ago
parent
commit
aefc328c2d
3 changed files with 32 additions and 21 deletions
  1. +14
    -18
      timeline/src/Sequence_Widget.C
  2. +2
    -1
      timeline/src/Sequence_Widget.H
  3. +16
    -2
      timeline/src/Timeline.C

+ 14
- 18
timeline/src/Sequence_Widget.C View File

@@ -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();
}

@@ -463,7 +463,7 @@ Sequence_Widget::handle ( int m )
const nframes_t of = timeline->x_to_offset( X );

int64_t s = (int64_t)of - _drag->offset;
if ( s < 0 )
s = 0;

@@ -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;

nframes_t d = timeline->x_to_ts( 100 );
int64_t pos = s - ( _drag->mouse_offset - _drag->offset );

if ( X <= sequence()->x() )
{

if ( pos > d )
pos -= d;
else
pos = 0;
}
else
pos += d;
if ( X > sequence()->x() + sequence()->w() )
pos -= timeline->x_to_ts( sequence()->drawable_w() );

timeline->xposition( timeline->ts_to_x( pos ) );
if ( s == 0 )
pos = 0;

// timeline->update_length( start() + length() );
if ( pos < 0 )
pos = 0;

timeline->xposition(timeline->ts_to_x(pos));
/* timeline->redraw(); */
sequence()->damage( FL_DAMAGE_USER1 );
}



+ 2
- 1
timeline/src/Sequence_Widget.H View File

@@ -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,


+ 16
- 2
timeline/src/Timeline.C View File

@@ -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…
Cancel
Save