FL/Fl_Packscroller: Cleanup event behavior. Eliminate unnecessary vertical padding.
This commit is contained in:
parent
5d59a1d291
commit
ea380f00f9
|
@ -32,7 +32,6 @@
|
||||||
|
|
||||||
class Fl_Packscroller : public Fl_Group
|
class Fl_Packscroller : public Fl_Group
|
||||||
{
|
{
|
||||||
|
|
||||||
int _increment;
|
int _increment;
|
||||||
int _yposition;
|
int _yposition;
|
||||||
static const int sbh = 15; /* scroll button height */
|
static const int sbh = 15; /* scroll button height */
|
||||||
|
@ -43,7 +42,6 @@ public:
|
||||||
{
|
{
|
||||||
_increment = 30;
|
_increment = 30;
|
||||||
_yposition = 0;
|
_yposition = 0;
|
||||||
|
|
||||||
// color( FL_WHITE );
|
// color( FL_WHITE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +58,8 @@ public:
|
||||||
if ( Y > 0 )
|
if ( Y > 0 )
|
||||||
Y = 0;
|
Y = 0;
|
||||||
|
|
||||||
const int H = h() - (sbh * 2);
|
const int H = h();
|
||||||
|
// - (sbh * 2);
|
||||||
|
|
||||||
Fl_Widget *o = child( 0 );
|
Fl_Widget *o = child( 0 );
|
||||||
|
|
||||||
|
@ -89,88 +88,113 @@ public:
|
||||||
void bbox ( int &X, int &Y, int &W, int &H )
|
void bbox ( int &X, int &Y, int &W, int &H )
|
||||||
{
|
{
|
||||||
X = x();
|
X = x();
|
||||||
Y = y() + sbh;
|
Y = y() + ( sbh * top_sb_visible() );
|
||||||
W = w();
|
W = w();
|
||||||
H = h() - (sbh * 2);
|
H = h() - ( sbh * ( top_sb_visible() + bottom_sb_visible() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
int top_sb_visible ( void )
|
||||||
|
{
|
||||||
|
return children() && child(0)->y() != y() ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bottom_sb_visible ( void )
|
||||||
|
{
|
||||||
|
if ( children() )
|
||||||
|
{
|
||||||
|
Fl_Widget *o = child( 0 );
|
||||||
|
|
||||||
|
if ( o->h() > h() && o->y() + o->h() != y() + h() )
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void
|
virtual void
|
||||||
draw ( void )
|
draw ( void )
|
||||||
{
|
{
|
||||||
|
if ( damage() & FL_DAMAGE_ALL )
|
||||||
|
{
|
||||||
|
fl_rectf( x(), y(), w(), h(), color() );
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! children() )
|
if ( ! children() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( ! fl_not_clipped( x(), y(), w(), h() ) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// draw_box();
|
|
||||||
|
|
||||||
Fl_Widget *o = child( 0 );
|
Fl_Widget *o = child( 0 );
|
||||||
|
|
||||||
o->position( x(), y() + sbh + _yposition );
|
o->position( x(), y() + _yposition );
|
||||||
|
|
||||||
if ( damage() != FL_DAMAGE_CHILD )
|
const int top_sb = top_sb_visible();
|
||||||
{
|
const int bottom_sb = bottom_sb_visible();
|
||||||
fl_rectf( x(), y(), w(), h(), color() );
|
|
||||||
|
|
||||||
fl_font( FL_HELVETICA, 12 );
|
fl_push_clip( x(), y() + ( sbh * top_sb ), w(), h() - (sbh * (top_sb + bottom_sb) ));
|
||||||
|
|
||||||
if ( o->y() != y() + sbh )
|
|
||||||
{
|
|
||||||
fl_draw_box( box(), x(), y(), w(), sbh, color() );
|
|
||||||
fl_color( FL_BLACK );
|
|
||||||
fl_draw( "@2<", x(), y(), w(), sbh, FL_ALIGN_CENTER );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( o->h() > h() - (sbh * 2) && o->y() + o->h() != y() + h() - sbh )
|
|
||||||
{
|
|
||||||
fl_draw_box( box(), x(), y() + h() - sbh, w(), sbh, color() );
|
|
||||||
fl_color( FL_BLACK );
|
|
||||||
fl_draw( "@2>", x(), y() + h() - sbh, w(), sbh, FL_ALIGN_CENTER );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fl_push_clip( x(), y() + sbh, w(), h() - (sbh * 2 ) );
|
|
||||||
|
|
||||||
draw_children();
|
draw_children();
|
||||||
|
|
||||||
fl_pop_clip();
|
fl_pop_clip();
|
||||||
|
|
||||||
|
fl_font( FL_HELVETICA, 12 );
|
||||||
|
|
||||||
|
if ( top_sb )
|
||||||
|
{
|
||||||
|
fl_draw_box( box(), x(), y(), w(), sbh, color() );
|
||||||
|
fl_color( fl_contrast( FL_FOREGROUND_COLOR, color() ) );
|
||||||
|
fl_draw( "@2<", x(), y(), w(), sbh, FL_ALIGN_CENTER );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( bottom_sb )
|
||||||
|
{
|
||||||
|
fl_draw_box( box(), x(), y() + h() - sbh, w(), sbh, color() );
|
||||||
|
fl_color( fl_contrast( FL_FOREGROUND_COLOR, color() ) );
|
||||||
|
fl_draw( "@2>", x(), y() + h() - sbh, w(), sbh, FL_ALIGN_CENTER );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int
|
virtual int
|
||||||
handle ( int m )
|
handle ( int m )
|
||||||
{
|
{
|
||||||
if ( Fl_Group::handle( m ) )
|
static int _button;
|
||||||
return 1;
|
|
||||||
|
|
||||||
|
int r = 0;
|
||||||
switch ( m )
|
switch ( m )
|
||||||
{
|
{
|
||||||
case FL_PUSH:
|
case FL_PUSH:
|
||||||
|
_button = Fl::event_button();
|
||||||
|
|
||||||
|
if ( top_sb_visible() &&
|
||||||
|
Fl::event_inside( x(), y(), w(), sbh ) )
|
||||||
{
|
{
|
||||||
if ( Fl::event_button1() )
|
return 1;
|
||||||
|
}
|
||||||
|
else if ( bottom_sb_visible() &&
|
||||||
|
Fl::event_inside( x(), y() + h() - sbh, w(), sbh ) )
|
||||||
{
|
{
|
||||||
if ( Fl::event_inside( x(), y(), w(), sbh ) )
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FL_RELEASE:
|
||||||
|
{
|
||||||
|
int b = _button;
|
||||||
|
_button = 0;
|
||||||
|
if ( b == 1 )
|
||||||
|
{
|
||||||
|
if ( top_sb_visible() &&
|
||||||
|
Fl::event_inside( x(), y(), w(), sbh ) )
|
||||||
{
|
{
|
||||||
yposition( yposition() + ( h() / 4 ) );
|
yposition( yposition() + ( h() / 4 ) );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if ( Fl::event_inside( x(), y() + h() - sbh, w(), sbh ) )
|
else if ( bottom_sb_visible() &&
|
||||||
|
Fl::event_inside( x(), y() + h() - sbh, w(), sbh ) )
|
||||||
{
|
{
|
||||||
yposition( yposition() - (h() / 4 ) );
|
yposition( yposition() - (h() / 4 ) );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
case FL_ENTER:
|
|
||||||
case FL_LEAVE:
|
|
||||||
return 1;
|
|
||||||
case FL_FOCUS:
|
|
||||||
case FL_UNFOCUS:
|
|
||||||
return 1;
|
|
||||||
case FL_KEYBOARD:
|
case FL_KEYBOARD:
|
||||||
{
|
{
|
||||||
if ( Fl::event_key() == FL_Up )
|
if ( Fl::event_key() == FL_Up )
|
||||||
|
@ -183,7 +207,7 @@ public:
|
||||||
yposition( yposition() - (h() / 4 ) );
|
yposition( yposition() - (h() / 4 ) );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
break;
|
||||||
}
|
}
|
||||||
case FL_MOUSEWHEEL:
|
case FL_MOUSEWHEEL:
|
||||||
{
|
{
|
||||||
|
@ -193,6 +217,6 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return Fl_Group::handle( m ) | r;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue