Browse Source

Draw crossfades.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
5d41f34b77
2 changed files with 51 additions and 0 deletions
  1. +49
    -0
      Track.C
  2. +2
    -0
      Track.H

+ 49
- 0
Track.C View File

@@ -33,6 +33,20 @@ Track::sort ( void )
_widgets.sort( Track_Widget::sort_func );
}

/** return a pointer to the widget that /r/ overlaps, or NULL if none. */
Track_Widget *
Track::overlaps ( Track_Widget *r )
{
for ( list <Track_Widget *>::const_iterator i = _widgets.begin(); i != _widgets.end(); i++ )
{
if ( *i == r ) continue;
if ( ! ( (*i)->offset() > r->offset() + r->length() || (*i)->offset() + (*i)->length() < r->offset() ) )
return *i;
}

return NULL;
}

void
Track::draw ( void )
{
@@ -55,10 +69,45 @@ Track::draw ( void )
for ( list <Track_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ )
(*r)->draw_box( X, Y, W, H );

/* draw crossfades */
for ( list <Track_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ )
{
Track_Widget *o = overlaps( *r );

if ( o )
{
if ( *o < **r )
{
Rectangle b( (*r)->x(), o->y(), (o->x() + o->w()) - (*r)->x(), o->h() );

Fl_Color c = fl_color_average( o->box_color(), (*r)->box_color(), 0.50f );
c = fl_color_average( c, FL_YELLOW, 0.20f );

fl_push_clip( b.x, b.y, b.w, b.h );

draw_box( o->box(), b.x - 100, b.y, b.w + 200, b.h, c );

/* fl_color( FL_BLACK ); */
/* fl_line_style( FL_DOT, 4 ); */

/* fl_line( b.x, b.y, b.x + b.w, b.y + b.h ); */

/* fl_line( b.x, b.y + b.h, b.x + b.w, b.y ); */

/* fl_line_style( FL_SOLID, 0 ); */

fl_pop_clip();

}
}
}


/* TODO: detect overlap and draw with transparency/crossfade */
for ( list <Track_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ )
(*r)->draw( X, Y, W, H );


fl_pop_clip();
}



+ 2
- 0
Track.H View File

@@ -124,6 +124,8 @@ public:
_delete_queue.push( r );
}

Track_Widget * overlaps ( Track_Widget *r );

virtual void snap ( Track_Widget *r );
virtual int handle ( int m );



Loading…
Cancel
Save