From 1bfdd8e56829a98707eaa5b8ed438c42d269be3a Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Mon, 21 Apr 2008 18:45:54 -0500 Subject: [PATCH] Add gradient option for control sequence drawing. --- Timeline/Control_Sequence.C | 54 ++++++++++++++++++++++++++++++------- Timeline/Control_Sequence.H | 3 +++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/Timeline/Control_Sequence.C b/Timeline/Control_Sequence.C index 9c80132..fc3b703 100644 --- a/Timeline/Control_Sequence.C +++ b/Timeline/Control_Sequence.C @@ -20,7 +20,8 @@ #include "Control_Sequence.H" #include "Track.H" - +bool Control_Sequence::use_gradient = true; +bool Control_Sequence::use_polygon = true; Control_Sequence::Control_Sequence ( Track *track ) : Sequence( 0, 0, 0, 0 ) { @@ -95,11 +96,25 @@ Control_Sequence::draw ( void ) fl_clip_box( x(), y(), w(), h(), X, Y, W, H ); - fl_line_style( FL_SOLID, 4 ); + if ( use_gradient ) + { + Fl_Color target = fl_color_average( color(), FL_WHITE, 0.50f ); + + for ( int gy = 0; gy < h(); gy++ ) + { + fl_color( fl_color_average( target, selection_color(), gy / (float)h()) ); + fl_line( x(), y() + gy, x() + w(), y() + gy ); + } + } fl_color( fl_color_average( selection_color(), color(), 0.90f ) ); + fl_line_style( FL_SOLID, 4 ); + + if ( use_polygon ) + fl_begin_complex_polygon(); + else + fl_begin_line(); - fl_begin_complex_polygon(); list ::const_iterator e = _widgets.end(); e--; @@ -107,24 +122,45 @@ Control_Sequence::draw ( void ) if ( _widgets.size() ) for ( list ::const_iterator r = _widgets.begin(); ; r++ ) { + const int ry = (*r)->y(); + if ( r == _widgets.begin() ) { - fl_vertex( x(), y() + h() ); - fl_vertex( x(), (*r)->y() ); + if ( use_gradient ) + { + fl_vertex( x(), y() ); + fl_vertex( x(), ry ); + } + else + { + fl_vertex( x(), h() + y() ); + fl_vertex( x(), ry ); + } } - fl_vertex( (*r)->x(), (*r)->y() ); + fl_vertex( (*r)->x(), ry ); if ( r == e ) { - fl_vertex( x() + w(), (*r)->y() ); - fl_vertex( x() + w(), y() + h() ); + if ( use_gradient ) + { + fl_vertex( x() + w(), ry ); + fl_vertex( x() + w(), y() ); + } + else + { + fl_vertex( x() + w(), ry ); + fl_vertex( x() + w(), h() + y() ); + } break; } } - fl_end_complex_polygon(); + if ( use_polygon ) + fl_end_complex_polygon(); + else + fl_end_line(); fl_line_style( FL_SOLID, 0 ); diff --git a/Timeline/Control_Sequence.H b/Timeline/Control_Sequence.H index 0cabe16..5e9d0a7 100644 --- a/Timeline/Control_Sequence.H +++ b/Timeline/Control_Sequence.H @@ -40,6 +40,9 @@ protected: public: + static bool use_gradient; + static bool use_polygon; + LOG_CREATE_FUNC( Control_Sequence ); Control_Sequence ( Track * );