diff --git a/timeline/src/Control_Point.C b/timeline/src/Control_Point.C index 47a37d1..5c7d97d 100644 --- a/timeline/src/Control_Point.C +++ b/timeline/src/Control_Point.C @@ -87,7 +87,19 @@ Control_Point::draw_box ( void ) char val[10]; snprintf( val, sizeof( val ), "%+.2f", 1.0 - _y * 2 ); - draw_label( val, (Fl_Align)( FL_ALIGN_TOP | FL_ALIGN_LEFT ), FL_FOREGROUND_COLOR ); + Fl_Align a = 0; + + if ( x() < _sequence->x() + ( _sequence->w() / 2 ) ) + a |= FL_ALIGN_RIGHT; + else + a |= FL_ALIGN_LEFT; + + if ( y() < _sequence->y() + ( _sequence->h() / 2 ) ) + a |= FL_ALIGN_BOTTOM; + else + a |= FL_ALIGN_TOP; + + draw_label( val, a, FL_FOREGROUND_COLOR ); } } diff --git a/timeline/src/Sequence_Widget.C b/timeline/src/Sequence_Widget.C index 51dc477..de9e012 100644 --- a/timeline/src/Sequence_Widget.C +++ b/timeline/src/Sequence_Widget.C @@ -263,23 +263,29 @@ Sequence_Widget::draw_label ( const char *label, Fl_Align align, Fl_Color color, if ( abs_x() < scroll_x() ) dx = min( 32767, scroll_x() - abs_x() ); - const Fl_Boxtype b = FL_ROUNDED_BOX; - const int bx = Fl::box_dx( b ) + 2; - const int bw = Fl::box_dw( b ) + 4; - const int by = Fl::box_dy( b ) + 2; - const int bh = Fl::box_dh( b ) + 4; + const Fl_Boxtype b = FL_BORDER_BOX; + const int bx = Fl::box_dx( b ); + const int bw = Fl::box_dw( b ); + const int by = Fl::box_dy( b ); + const int bh = Fl::box_dh( b ); /* FIXME: why do we have to do this here? why doesn't Fl_Label::draw take care of this stuff? */ if ( align & FL_ALIGN_INSIDE ) { - if ( align & FL_ALIGN_RIGHT ) - X += abs_w() - (lw + bw); - if ( align & FL_ALIGN_BOTTOM ) - { - Y += h() - (lh + bh); - X += 2; - } + Y += h() - ( lh + bh ); + else if ( align & FL_ALIGN_TOP ) + Y += by; + else + Y += ( h() / 2 ) - ( lh + bh ); + + if ( align & FL_ALIGN_RIGHT ) + X += abs_w() - ( lw + bw ); + else if ( align & FL_ALIGN_LEFT ) + X += bx; + else + X += ( abs_w() / 2 ) - ( ( lw + bw ) / 2 ); + } else { @@ -287,11 +293,15 @@ Sequence_Widget::draw_label ( const char *label, Fl_Align align, Fl_Color color, X += abs_w(); else if ( align & FL_ALIGN_LEFT ) X -= lw + bw; + else + X += ( abs_w() / 2 ) - ( ( lw + bw ) / 2 ); if ( align & FL_ALIGN_BOTTOM ) Y += h(); else if ( align & FL_ALIGN_TOP ) Y -= lh + bh; + else + Y += ( h() / 2 ) - ( ( lh + bh ) / 2 ); } fl_draw_box( b, ( X - dx ), Y - by, lw + bw, lh + bh, fl_color_add_alpha( FL_DARK1, 150 ) );