/* ====================================================================
* Copyright (c) 2003-2006, Martin Hauner
* http://subcommander.tigris.org
*
* Subcommander is licensed as described in the file doc/COPYING, which
* you should have received as part of this distribution.
* ====================================================================
*/
#ifndef _SCROLL_POSITION_CALCULATOR_H
#define _SCROLL_POSITION_CALCULATOR_H
class ScrollPositionCalculator
{
public:
int calcPos( int oldPos, int newPos, int curSize, int hintSize ) const
{
// if our current size is already more than we want, don't
// scroll all.
if( curSize > hintSize )
{
return 0;
}
// don't scroll into a negativ position
if( newPos < 0 )
{
return 0;
}
// keep newPos less or equal to the highest possible scroll
// position.
if( newPos >= hintSize - curSize )
{
return hintSize - curSize;
}
// if we have more space than requested and the current
// position is > 0, modify newPos in such a way that we
// scroll back to position = 0
// the negativ test is necessary because with quick resize
// movements newPos calculation can get negativ..
if( curSize + newPos > hintSize )
{
newPos -= curSize + newPos - hintSize;
if( newPos < 0 )
{
newPos = 0;
}
}
return newPos;
}
};
#endif // _SCROLL_POSITION_CALCULATOR_H
syntax highlighted by Code2HTML, v. 0.9.1