Changeset - r17016:76fa7a1c20f1
[Not reviewed]
master
0 2 0
frosch - 13 years ago 2011-01-09 20:39:06
frosch@openttd.org
(svn r21763) -Codechange: Pass the distance to Scrollbar::UpdatePosition() in units of small or big steps.
2 files changed with 28 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/widget.cpp
Show inline comments
 
@@ -103,9 +103,9 @@ static void ScrollbarClickPositioning(Wi
 
		Point pt = HandleScrollbarHittest(sb, mi, ma, sb->type == NWID_HSCROLLBAR);
 

	
 
		if (pos < pt.x) {
 
			sb->UpdatePosition(rtl ? sb->GetCapacity() : -sb->GetCapacity());
 
			sb->UpdatePosition(rtl ? 1 : -1, Scrollbar::SS_BIG);
 
		} else if (pos > pt.y) {
 
			sb->UpdatePosition(rtl ? -sb->GetCapacity() : sb->GetCapacity());
 
			sb->UpdatePosition(rtl ? -1 : 1, Scrollbar::SS_BIG);
 
		} else {
 
			_scrollbar_start_pos = pt.x - mi - 9;
 
			_scrollbar_size = ma - mi - 23;
src/widget_type.h
Show inline comments
 
@@ -556,9 +556,17 @@ private:
 
	uint16 count;           ///< Number of elements in the list.
 
	uint16 cap;             ///< Number of visible elements of the scroll bar.
 
	uint16 pos;             ///< Index of first visible item of the list.
 
	uint16 stepsize;        ///< Distance to scroll, when pressing the buttons or using the wheel.
 

	
 
public:
 
	Scrollbar(bool is_vertical) : is_vertical(is_vertical)
 
	/** Stepping sizes when scrolling */
 
	enum ScrollbarStepping {
 
		SS_RAW,             ///< Step in single units.
 
		SS_SMALL,           ///< Step in #stepsize units.
 
		SS_BIG,             ///< Step in #cap units.
 
	};
 

	
 
	Scrollbar(bool is_vertical) : is_vertical(is_vertical), stepsize(1)
 
	{
 
	}
 

	
 
@@ -609,6 +617,16 @@ public:
 
	}
 

	
 
	/**
 
	 * Set the distance to scroll when using the buttons or the wheel.
 
	 * @param stepsize Scrolling speed.
 
	 */
 
	void SetStepSize(uint16 stepsize)
 
	{
 
		assert(stepsize > 0);
 
		this->stepsize = stepsize;
 
	}
 

	
 
	/**
 
	 * Sets the number of elements in the list
 
	 * @param num the number of elements in the list
 
	 * @note updates the position if needed
 
@@ -655,10 +673,16 @@ public:
 
	 * Updates the position of the first visible element by the given amount.
 
	 * If the position would be too low or high it will be clamped appropriately
 
	 * @param difference the amount of change requested
 
	 * @param unit The stepping unit of \a difference
 
	 */
 
	void UpdatePosition(int difference)
 
	void UpdatePosition(int difference, ScrollbarStepping unit = SS_SMALL)
 
	{
 
		if (difference == 0) return;
 
		switch (unit) {
 
			case SS_SMALL: difference *= this->stepsize; break;
 
			case SS_BIG:   difference *= this->cap; break;
 
			default: break;
 
		}
 
		this->SetPosition(Clamp(this->pos + difference, 0, max(this->count - this->cap, 0)));
 
	}
 

	
0 comments (0 inline, 0 general)