Refactoring FListView scroll bar callbacks
This commit is contained in:
parent
4778de5c52
commit
8bc40459e0
|
@ -354,6 +354,7 @@ class FListView : public FWidget
|
||||||
void scrollToY (int);
|
void scrollToY (int);
|
||||||
void scrollTo (const FPoint &);
|
void scrollTo (const FPoint &);
|
||||||
void scrollTo (int, int);
|
void scrollTo (int, int);
|
||||||
|
void scrollBy (int, int);
|
||||||
|
|
||||||
// Callback methods
|
// Callback methods
|
||||||
void cb_VBarChange (FWidget*, data_ptr);
|
void cb_VBarChange (FWidget*, data_ptr);
|
||||||
|
|
|
@ -1330,7 +1330,7 @@ void FListView::drawList()
|
||||||
y = 0;
|
y = 0;
|
||||||
page_height = uInt(getHeight() - 2);
|
page_height = uInt(getHeight() - 2);
|
||||||
is_focus = ((flags & fc::focus) != 0);
|
is_focus = ((flags & fc::focus) != 0);
|
||||||
iter = first_visible_line;
|
iter = first_visible_line;
|
||||||
|
|
||||||
while ( iter != itemlist.end() && y < page_height )
|
while ( iter != itemlist.end() && y < page_height )
|
||||||
{
|
{
|
||||||
|
@ -2054,14 +2054,25 @@ void FListView::scrollTo (int x, int y)
|
||||||
scrollToY(y);
|
scrollToY(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FListView::scrollBy (int dx, int dy)
|
||||||
|
{
|
||||||
|
scrollToX(xoffset + dx);
|
||||||
|
|
||||||
|
if ( dy > 0 )
|
||||||
|
stepForward(dy);
|
||||||
|
|
||||||
|
if ( dy < 0 )
|
||||||
|
stepBackward(-dy);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FListView::cb_VBarChange (FWidget*, data_ptr)
|
void FListView::cb_VBarChange (FWidget*, data_ptr)
|
||||||
{
|
{
|
||||||
FScrollbar::sType scrollType;
|
FScrollbar::sType scrollType = vbar->getScrollType();
|
||||||
int distance = 1;
|
int distance = 1
|
||||||
int first_line_position_before = first_visible_line.getPosition();
|
, pagesize = 4
|
||||||
|
, first_line_position_before = first_visible_line.getPosition();
|
||||||
scrollType = vbar->getScrollType();
|
|
||||||
|
|
||||||
switch ( scrollType )
|
switch ( scrollType )
|
||||||
{
|
{
|
||||||
|
@ -2086,22 +2097,15 @@ void FListView::cb_VBarChange (FWidget*, data_ptr)
|
||||||
{
|
{
|
||||||
int value = vbar->getValue();
|
int value = vbar->getValue();
|
||||||
scrollToY (value);
|
scrollToY (value);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case FScrollbar::scrollWheelUp:
|
case FScrollbar::scrollWheelUp:
|
||||||
{
|
wheelUp (pagesize);
|
||||||
FWheelEvent wheel_ev (fc::MouseWheel_Event, FPoint(2,2), fc::WheelUp);
|
|
||||||
onWheel(&wheel_ev);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FScrollbar::scrollWheelDown:
|
case FScrollbar::scrollWheelDown:
|
||||||
{
|
wheelDown (pagesize);
|
||||||
FWheelEvent wheel_ev (fc::MouseWheel_Event, FPoint(2,2), fc::WheelDown);
|
|
||||||
onWheel(&wheel_ev);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2125,12 +2129,10 @@ void FListView::cb_VBarChange (FWidget*, data_ptr)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FListView::cb_HBarChange (FWidget*, data_ptr)
|
void FListView::cb_HBarChange (FWidget*, data_ptr)
|
||||||
{
|
{
|
||||||
FScrollbar::sType scrollType;
|
FScrollbar::sType scrollType = hbar->getScrollType();
|
||||||
int distance = 1
|
int distance = 1
|
||||||
, pagesize = 4
|
, pagesize = 4
|
||||||
, xoffset_before = xoffset
|
, xoffset_before = xoffset;
|
||||||
, xoffset_end = max_line_width - getClientWidth();
|
|
||||||
scrollType = hbar->getScrollType();
|
|
||||||
|
|
||||||
switch ( scrollType )
|
switch ( scrollType )
|
||||||
{
|
{
|
||||||
|
@ -2141,24 +2143,14 @@ void FListView::cb_HBarChange (FWidget*, data_ptr)
|
||||||
distance = getClientWidth();
|
distance = getClientWidth();
|
||||||
// fall through
|
// fall through
|
||||||
case FScrollbar::scrollStepBackward:
|
case FScrollbar::scrollStepBackward:
|
||||||
xoffset -= distance;
|
scrollBy (-distance, 0);
|
||||||
|
|
||||||
if ( xoffset < 0 )
|
|
||||||
xoffset = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FScrollbar::scrollPageForward:
|
case FScrollbar::scrollPageForward:
|
||||||
distance = getClientWidth();
|
distance = getClientWidth();
|
||||||
// fall through
|
// fall through
|
||||||
case FScrollbar::scrollStepForward:
|
case FScrollbar::scrollStepForward:
|
||||||
xoffset += distance;
|
scrollBy (distance, 0);
|
||||||
|
|
||||||
if ( xoffset > xoffset_end )
|
|
||||||
xoffset = xoffset_end;
|
|
||||||
|
|
||||||
if ( xoffset < 0 )
|
|
||||||
xoffset = 0;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FScrollbar::scrollJump:
|
case FScrollbar::scrollJump:
|
||||||
|
@ -2169,25 +2161,11 @@ void FListView::cb_HBarChange (FWidget*, data_ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case FScrollbar::scrollWheelUp:
|
case FScrollbar::scrollWheelUp:
|
||||||
if ( xoffset == 0 )
|
scrollBy (-pagesize, 0);
|
||||||
break;
|
|
||||||
|
|
||||||
xoffset -= pagesize;
|
|
||||||
|
|
||||||
if ( xoffset < 0 )
|
|
||||||
xoffset = 0;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FScrollbar::scrollWheelDown:
|
case FScrollbar::scrollWheelDown:
|
||||||
if ( xoffset == xoffset_end )
|
scrollBy (pagesize, 0);
|
||||||
break;
|
|
||||||
|
|
||||||
xoffset += pagesize;
|
|
||||||
|
|
||||||
if ( xoffset > xoffset_end )
|
|
||||||
xoffset = xoffset_end;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue