From bcfa0cb02960e3623bf971a90ca3386569dc7408 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Wed, 20 Feb 2008 01:08:36 -0600 Subject: [PATCH] Make trimming work. --- Region.C | 98 ++++++++++++++++++++++++++------------------------------ Region.H | 3 +- main.C | 10 +++--- 3 files changed, 53 insertions(+), 58 deletions(-) diff --git a/Region.C b/Region.C index 8d05b66..b424043 100644 --- a/Region.C +++ b/Region.C @@ -71,55 +71,48 @@ Region::Region ( Clip *c ) } +void +Region::trim ( enum trim_e t, int X ) +{ + switch ( t ) + { + case LEFT: + { + int d = X - x(); -/* void */ -/* Region::trim ( enum trim_e t, int X ) */ -/* { */ -/* switch ( t ) */ -/* { */ -/* case LEFT: */ -/* { */ -/* int d = X - x(); */ - -/* long td = timeline.x_to_ts( d ); */ - -/* if ( td < 0 && _start < 0 - td ) */ -/* td = 0 - _start; */ - -/* _start += td; */ - -/* _offset += td; */ + long td = timeline.x_to_ts( d ); -/* resize(); */ -/* // Fl_Widget::resize( x() + d, y(), w() - d, h() ); */ + if ( td < 0 && _start < 0 - td ) + td = 0 - _start; -/* // _offset = timeline.x_to_ts( x() ); */ + _start += td; -/* break; */ -/* } */ -/* case RIGHT: */ -/* { */ -/* int d = (x() + w()) - X; */ -/* long td = timeline.x_to_ts( d ); */ + _offset += td; -/* _end -= td; */ +// resize(); + break; + } + case RIGHT: + { + int d = (x() + w()) - X; + long td = timeline.x_to_ts( d ); -/* resize(); */ + _end -= td; -/* // _end = _start + timeline.x_to_ts( w() - d ); */ +// resize(); -/* // Fl_Widget::resize( x(), y(), w() - d, h() ); */ -/* break; */ -/* } */ -/* default: */ -/* return; */ + break; + } + default: + return; -/* } */ + } -/* redraw(); */ -/* parent()->redraw(); */ + _track->redraw(); +// redraw(); +// parent()->redraw(); -/* } */ +} int Region::handle ( int m ) @@ -144,13 +137,12 @@ Region::handle ( int m ) { switch ( Fl::event_button() ) { - -/* case 1: */ -/* trim( trimming = LEFT, X ); */ -/* break; */ -/* case 3: */ -/* trim( trimming = RIGHT, X ); */ -/* break; */ + case 1: + trim( trimming = LEFT, X ); + break; + case 3: + trim( trimming = RIGHT, X ); + break; default: return 0; @@ -202,14 +194,14 @@ Region::handle ( int m ) return 1; } -/* if ( Fl::event_state() & FL_SHIFT ) */ -/* if ( trimming ) */ -/* { */ -/* trim( trimming, X ); */ -/* return 1; */ -/* } */ -/* else */ -/* return 0; */ + if ( Fl::event_state() & FL_SHIFT ) + if ( trimming ) + { + trim( trimming, X ); + return 1; + } + else + return 0; if ( Fl::event_state() & FL_CTRL ) { diff --git a/Region.H b/Region.H index 632fce1..c687334 100644 --- a/Region.H +++ b/Region.H @@ -51,7 +51,8 @@ public: int y ( void ) { return _track->y(); } int h ( void ) { return _track->h(); } - int x ( void ) { return timeline.ts_to_x( _offset ) - timeline.xoffset; } + int x ( void ) { return _track->x() + timeline.ts_to_x( _offset - timeline.xoffset ); } + int w ( void ) { return timeline.ts_to_x( _end - _start ); } int handle ( int m ); void draw ( int X, int Y, int W, int H ); diff --git a/main.C b/main.C index c0225b2..6a724b8 100644 --- a/main.C +++ b/main.C @@ -78,10 +78,12 @@ cb_zoom ( Fl_Widget *w, void *v ) void cb_scroll ( Fl_Widget *w, void *v ) { - timeline.xoffset = ((Fl_Scrollbar*)w)->value(); - timeline.tracks->redraw(); - + timeline.xoffset = ((Fl_Slider*)w)->value(); + // timeline.tracks->redraw(); timeline.scroll->redraw(); + + printf( "%lu\n", timeline.xoffset ); + /* for ( int i = timeline.tracks->children(); i-- ; ) */ /* { */ /* Fl_Group *track = (Fl_Group*)timeline.tracks->child( i ); */ @@ -176,7 +178,7 @@ main ( int argc, char **argv ) zoom_slider->value( 256 ); timeline.scrollbar = new Fl_Scrollbar( 0, 600 - 24, 800, 24 ); - timeline.scrollbar->range( 0, 293847234 ); + timeline.scrollbar->range( 0, 48000 * 2 ); timeline.scrollbar->type( 1 ); timeline.scrollbar->step( 1 ); timeline.scrollbar->callback( cb_scroll, 0 );