From 3266c385c31bf9eefcc53a065b87841d7371c196 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 9 Mar 2008 20:07:04 -0500 Subject: [PATCH] Try to clean up some corner cases with crossfade drawing. --- Track.C | 39 ++++++++++++++++++++++++++++++++++++--- Track_Widget.H | 6 ++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Track.C b/Track.C index 2fad79d..22d0c77 100644 --- a/Track.C +++ b/Track.C @@ -102,9 +102,20 @@ Track::draw ( void ) if ( o ) { - if ( *o < **r ) + if ( *o <= **r ) { - Rectangle b( (*r)->x(), o->y(), (o->x() + o->w()) - (*r)->x(), o->h() ); + +/* if ( o->x() == (*r)->x() && o->w() == (*r)->w() ) */ +/* printf( "complete superposition\n" ); */ + + if ( (*r)->x() >= o->x() && (*r)->x() + (*r)->w() <= o->x() + o->w() ) + /* completely inside */ + continue; + + 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.30f ); @@ -115,6 +126,28 @@ Track::draw ( void ) draw_box( FL_UP_FRAME, b.x - 100, b.y, b.w + 200, b.h, c ); + fl_pop_clip(); + + } + } + + } + + for ( list ::const_reverse_iterator r = _widgets.rbegin(); r != _widgets.rend(); r++ ) + { + Track_Widget *o = overlaps( *r ); + + if ( o ) + { + if ( *o <= **r ) + { + + if ( (*r)->x() >= o->x() && (*r)->x() + (*r)->w() <= o->x() + o->w() ) + /* completely inside */ + continue; + + Rectangle b( (*r)->x(), o->y(), (o->x() + o->w()) - (*r)->x(), o->h() ); + /* draw overlapping waveforms in X-ray style. */ Waveform::fill = false; @@ -145,7 +178,7 @@ Track::draw ( void ) /* fl_line_style( FL_SOLID, 0 ); */ - fl_pop_clip(); +// fl_pop_clip(); } } diff --git a/Track_Widget.H b/Track_Widget.H index 5434997..7302653 100644 --- a/Track_Widget.H +++ b/Track_Widget.H @@ -229,6 +229,12 @@ public: return _offset < rhs._offset; } + bool + operator<=( const Track_Widget & rhs ) + { + return _offset <= rhs._offset; + } + virtual void draw_label ( const char *label, Fl_Align align, Fl_Color color=(Fl_Color)0 ); virtual int handle ( int m );