@@ -221,6 +221,8 @@ Region::handle ( int m ) | |||||
// nx = _track->snap( this, nx ); | // nx = _track->snap( this, nx ); | ||||
// _offset = timeline.x_to_ts( nx ); | |||||
position( nx, y() ); | position( nx, y() ); | ||||
_track->snap( this ); | _track->snap( this ); | ||||
@@ -260,7 +262,7 @@ Region::handle ( int m ) | |||||
timeline.scroll->position( pos, timeline.scroll->yposition() ); | timeline.scroll->position( pos, timeline.scroll->yposition() ); | ||||
} | } | ||||
_offset = timeline.x_to_ts( x() ); | |||||
// _offset = timeline.x_to_ts( x() ); | |||||
return 1; | return 1; | ||||
default: | default: | ||||
@@ -48,9 +48,9 @@ public: | |||||
void resize ( void ); | void resize ( void ); | ||||
Track * track ( void ) { return _track; } | |||||
Track * track ( void ) const { return _track; } | |||||
void track ( Track *t ) { _track = t; } | void track ( Track *t ) { _track = t; } | ||||
nframes_t offset ( void ) { return _offset; } | |||||
nframes_t offset ( void ) const { return _offset; } | |||||
void offset ( nframes_t o ) { _offset = o; } | void offset ( nframes_t o ) { _offset = o; } | ||||
}; | }; |
@@ -25,6 +25,9 @@ | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <assert.h> | |||||
#include <list> | #include <list> | ||||
using std::list; | using std::list; | ||||
@@ -88,7 +91,7 @@ public: | |||||
for ( int i = children(); i-- ; ) | for ( int i = children(); i-- ; ) | ||||
{ | { | ||||
const Fl_Widget *w = child( i ); | |||||
const Region *w = (Region*)child( i ); | |||||
if ( w == r ) | if ( w == r ) | ||||
continue; | continue; | ||||
@@ -98,17 +101,29 @@ public: | |||||
if ( abs( rx1 - wx2 ) < snap_pixels ) | if ( abs( rx1 - wx2 ) < snap_pixels ) | ||||
{ | { | ||||
rx1 = wx2 - 1; | |||||
break; | |||||
r->offset( w->offset() + ( w->end() - w->start() ) + 1 ); | |||||
printf( "snap: %lu | %lu\n", w->offset() + (w->end() - w->start()), r->offset() ); | |||||
goto done; | |||||
} | } | ||||
if ( abs( rx2 - wx1 ) < snap_pixels ) | if ( abs( rx2 - wx1 ) < snap_pixels ) | ||||
{ | { | ||||
rx1 = (wx1 - r->w()) + 1; | |||||
break; | |||||
r->offset( (w->offset() - ( r->end() - r->start() )) - 1 ); | |||||
printf( "snap: %lu | %lu\n", r->offset() + (r->end() - r->start()), w->offset() ); | |||||
goto done; | |||||
} | } | ||||
} | } | ||||
r->position( rx1, y() ); | |||||
r->offset( timeline.x_to_ts( r->x() )); | |||||
done: | |||||
r->resize(); | |||||
// r->position( rx1, y() ); | |||||
} | } | ||||
int handle ( int m ) | int handle ( int m ) | ||||
@@ -68,9 +68,11 @@ public: | |||||
void draw ( int X, int Y, int W, int H ); | void draw ( int X, int Y, int W, int H ); | ||||
void start ( nframes_t s ) { _start = s; } | void start ( nframes_t s ) { _start = s; } | ||||
nframes_t start ( void ) const { return _start; } | |||||
void end ( nframes_t e ) { _end = e; } | void end ( nframes_t e ) { _end = e; } | ||||
nframes_t end ( void ) const { return _end; } | |||||
void scale ( float s ) { _scale = s; } | void scale ( float s ) { _scale = s; } | ||||
float scale ( void ) { return _scale; } | |||||
float scale ( void ) const { return _scale; } | |||||
// void peaks ( float *p ) { _peaks = p; } | // void peaks ( float *p ) { _peaks = p; } | ||||
void normalize ( void ); | void normalize ( void ); | ||||