Make fades render better for crossfades.

This commit is contained in:
Jonathan Moore Liles 2008-04-14 20:27:27 -05:00
parent 30c19870d6
commit 6f0af6bf3f
2 changed files with 20 additions and 14 deletions

View File

@ -93,7 +93,7 @@ Region::init ( void )
_color = FL_BLUE; _color = FL_BLUE;
_fade_in.length = 256; _fade_in.length = 256;
_fade_in.type = Fade::Cosine; _fade_in.type = Fade::Sigmoid;
_fade_out = _fade_in; _fade_out = _fade_in;
} }
@ -417,7 +417,7 @@ changed:
portion of the region covered by this draw, which may or may not portion of the region covered by this draw, which may or may not
cover the fade in question. */ cover the fade in question. */
void void
Region::draw_fade ( const Fade &fade, Fade::fade_dir_e dir, int X, int W ) Region::draw_fade ( const Fade &fade, Fade::fade_dir_e dir, bool filled, int X, int W )
{ {
const int dy = y() + Fl::box_dy( box() ); const int dy = y() + Fl::box_dy( box() );
const int dh = h() - Fl::box_dh( box() ); const int dh = h() - Fl::box_dh( box() );
@ -435,15 +435,19 @@ Region::draw_fade ( const Fade &fade, Fade::fade_dir_e dir, int X, int W )
} }
else else
{ {
fl_translate( line_x() + abs_w(), dy + height ); // fl_translate( line_x() + abs_w(), dy + height );
fl_translate( line_x() + abs_w(), dy );
fl_scale( width, height ); fl_scale( width, height );
/* flip */ /* flip */
fl_scale( -1.0, 1.0 ); fl_scale( -1.0, 1.0 );
fl_scale( 1.0, -1.0 ); // fl_scale( 1.0, -1.0 );
} }
if ( filled )
fl_begin_polygon(); fl_begin_polygon();
else
fl_begin_line();
fl_vertex( 0.0, 0.0 ); fl_vertex( 0.0, 0.0 );
fl_vertex( 0.0, 1.0 ); fl_vertex( 0.0, 1.0 );
@ -456,7 +460,10 @@ Region::draw_fade ( const Fade &fade, Fade::fade_dir_e dir, int X, int W )
fl_vertex( x, y ); fl_vertex( x, y );
} }
if ( filled )
fl_end_polygon(); fl_end_polygon();
else
fl_end_line();
fl_pop_matrix(); fl_pop_matrix();
} }
@ -478,8 +485,8 @@ Region::draw_box( int X, int Y, int W, int H )
fl_draw_box( box(), x() - 10, y(), w() + 50, h(), _box_color ); fl_draw_box( box(), x() - 10, y(), w() + 50, h(), _box_color );
/* draw fades */ /* draw fades */
draw_fade( _fade_in, Fade::In, X, W ); draw_fade( _fade_in, Fade::In, true, X, W );
draw_fade( _fade_out, Fade::Out, X, W ); draw_fade( _fade_out, Fade::Out, true, X, W );
fl_pop_clip(); fl_pop_clip();
} }
@ -535,12 +542,11 @@ Region::draw ( int X, int Y, int W, int H )
assert( pbuf ); assert( pbuf );
int ch = (h() - Fl::box_dh( box() )) / channels; /* draw fade curve outlines--this is only here because of crossfades */
draw_fade( _fade_in, Fade::In, false, X, W );
draw_fade( _fade_out, Fade::Out, false, X, W );
/* FIXME: testing! */ int ch = (h() - Fl::box_dh( box() )) / channels;
Fade fade = _fade_in;
fade.length = 20000;
fade.type = Fade::Sigmoid;
for ( int i = 0; i < channels; ++i ) for ( int i = 0; i < channels; ++i )
{ {

View File

@ -267,7 +267,7 @@ public:
Region ( Audio_File *c, Track *t, nframes_t o ); Region ( Audio_File *c, Track *t, nframes_t o );
int handle ( int m ); int handle ( int m );
void draw_fade ( const Fade &fade, Fade::fade_dir_e dir, int X, int W ); void draw_fade ( const Fade &fade, Fade::fade_dir_e dir, bool filled, int X, int W );
void draw_box( int X, int Y, int W, int H ); void draw_box( int X, int Y, int W, int H );
void draw ( int X, int Y, int W, int H ); void draw ( int X, int Y, int W, int H );