Refine control sequence drawing code.
This commit is contained in:
parent
90e263719a
commit
173aeeae82
|
@ -47,7 +47,7 @@ Control_Sequence::init ( void )
|
||||||
{
|
{
|
||||||
_track = NULL;
|
_track = NULL;
|
||||||
|
|
||||||
color( fl_darker( FL_GREEN ) );
|
color( fl_darker( FL_YELLOW ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -82,6 +82,60 @@ Control_Sequence::set ( Log_Entry &e )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Control_Sequence::draw_curve ( bool flip, bool filled )
|
||||||
|
{
|
||||||
|
|
||||||
|
const int bx = x();
|
||||||
|
const int by = y() + Fl::box_dy( box() );
|
||||||
|
const int bw = w();
|
||||||
|
const int bh = h() - Fl::box_dh( box() );
|
||||||
|
|
||||||
|
list <Sequence_Widget *>::const_iterator e = _widgets.end();
|
||||||
|
e--;
|
||||||
|
|
||||||
|
if ( _widgets.size() )
|
||||||
|
for ( list <Sequence_Widget *>::const_iterator r = _widgets.begin(); ; r++ )
|
||||||
|
{
|
||||||
|
const int ry = (*r)->y();
|
||||||
|
|
||||||
|
if ( r == _widgets.begin() )
|
||||||
|
{
|
||||||
|
if ( flip )
|
||||||
|
{
|
||||||
|
if ( filled )
|
||||||
|
fl_vertex( bx, by );
|
||||||
|
fl_vertex( bx, ry );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( filled )
|
||||||
|
fl_vertex( bx, bh + by );
|
||||||
|
fl_vertex( bx, ry );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fl_vertex( (*r)->x(), ry );
|
||||||
|
|
||||||
|
if ( r == e )
|
||||||
|
{
|
||||||
|
if ( flip )
|
||||||
|
{
|
||||||
|
fl_vertex( bx + bw, ry );
|
||||||
|
if ( filled )
|
||||||
|
fl_vertex( bx + bw, by );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fl_vertex( bx + bw, ry );
|
||||||
|
if ( filled )
|
||||||
|
fl_vertex( bx + bw, bh + by );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
void
|
void
|
||||||
Control_Sequence::draw ( void )
|
Control_Sequence::draw ( void )
|
||||||
{
|
{
|
||||||
|
@ -94,7 +148,6 @@ Control_Sequence::draw ( void )
|
||||||
/* draw the box with the ends cut off. */
|
/* draw the box with the ends cut off. */
|
||||||
draw_box( box(), x() - Fl::box_dx( box() ), y(), w() + Fl::box_dw( box() ), h(), color() );
|
draw_box( box(), x() - Fl::box_dx( box() ), y(), w() + Fl::box_dw( box() ), h(), color() );
|
||||||
|
|
||||||
|
|
||||||
const int bx = x();
|
const int bx = x();
|
||||||
const int by = y() + Fl::box_dy( box() );
|
const int by = y() + Fl::box_dy( box() );
|
||||||
const int bw = w();
|
const int bw = w();
|
||||||
|
@ -106,11 +159,14 @@ Control_Sequence::draw ( void )
|
||||||
|
|
||||||
if ( draw_with_gradient )
|
if ( draw_with_gradient )
|
||||||
{
|
{
|
||||||
Fl_Color target = fl_color_average( color(), FL_WHITE, 0.50f );
|
// Fl_Color target = fl_color_average( color(), FL_WHITE, 0.50f );
|
||||||
|
|
||||||
|
const Fl_Color c2 = fl_color_average( selection_color(), FL_WHITE, 0.75f );
|
||||||
|
const Fl_Color c1 = fl_color_average( color(), c2, 0.60f );
|
||||||
|
|
||||||
for ( int gy = 0; gy < bh; gy++ )
|
for ( int gy = 0; gy < bh; gy++ )
|
||||||
{
|
{
|
||||||
fl_color( fl_color_average( target, selection_color(), gy / (float)bh) );
|
fl_color( fl_color_average( c1, c2, gy / (float)bh) );
|
||||||
fl_line( X, by + gy, X + W, by + gy );
|
fl_line( X, by + gy, X + W, by + gy );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,60 +182,30 @@ Control_Sequence::draw ( void )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fl_color( fl_color_average( selection_color(), color(), 0.90f ) );
|
|
||||||
fl_line_style( FL_SOLID, 4 );
|
|
||||||
|
|
||||||
if ( draw_with_polygon )
|
if ( draw_with_polygon )
|
||||||
|
{
|
||||||
fl_begin_complex_polygon();
|
fl_begin_complex_polygon();
|
||||||
else
|
draw_curve( draw_with_gradient, true );
|
||||||
fl_begin_line();
|
|
||||||
|
|
||||||
|
|
||||||
list <Sequence_Widget *>::const_iterator e = _widgets.end();
|
|
||||||
e--;
|
|
||||||
|
|
||||||
if ( _widgets.size() )
|
|
||||||
for ( list <Sequence_Widget *>::const_iterator r = _widgets.begin(); ; r++ )
|
|
||||||
{
|
|
||||||
const int ry = (*r)->y();
|
|
||||||
|
|
||||||
if ( r == _widgets.begin() )
|
|
||||||
{
|
|
||||||
if ( draw_with_gradient )
|
|
||||||
{
|
|
||||||
fl_vertex( bx, by );
|
|
||||||
fl_vertex( bx, ry );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fl_vertex( bx, bh + by );
|
|
||||||
fl_vertex( bx, ry );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fl_vertex( (*r)->x(), ry );
|
|
||||||
|
|
||||||
if ( r == e )
|
|
||||||
{
|
|
||||||
if ( draw_with_gradient )
|
|
||||||
{
|
|
||||||
fl_vertex( bx + bw, ry );
|
|
||||||
fl_vertex( bx + bw, by );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fl_vertex( bx + bw, ry );
|
|
||||||
fl_vertex( bx + bw, bh + by );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( draw_with_polygon )
|
|
||||||
fl_end_complex_polygon();
|
fl_end_complex_polygon();
|
||||||
else
|
|
||||||
|
fl_color( selection_color() );
|
||||||
|
fl_line_style( FL_SOLID, 2 );
|
||||||
|
|
||||||
|
fl_begin_line();
|
||||||
|
draw_curve( draw_with_gradient, false );
|
||||||
fl_end_line();
|
fl_end_line();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// fl_color( fl_color_average( selection_color(), color(), 0.70f ) );
|
||||||
|
fl_color( selection_color() );
|
||||||
|
fl_line_style( FL_SOLID, 2 );
|
||||||
|
|
||||||
|
fl_begin_line();
|
||||||
|
draw_curve( draw_with_gradient, false );
|
||||||
|
fl_end_line();
|
||||||
|
}
|
||||||
|
|
||||||
fl_line_style( FL_SOLID, 0 );
|
fl_line_style( FL_SOLID, 0 );
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,10 @@ protected:
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void draw_curve ( bool flip, bool filled );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static bool draw_with_gradient;
|
static bool draw_with_gradient;
|
||||||
|
|
Loading…
Reference in New Issue