Changeset - r15884:d4a5a9f91833
[Not reviewed]
master
0 2 0
rubidium - 14 years ago 2010-08-20 11:55:10
rubidium@openttd.org
(svn r20577) -Fix [FS#4043]: scroll button flickering when pressed
2 files changed with 16 insertions and 18 deletions:
0 comments (0 inline, 0 general)
src/widget.cpp
Show inline comments
 
@@ -85,8 +85,8 @@ static void ScrollbarClickPositioning(Wi
 
	if (pos <= mi + 9) {
 
		/* Pressing the upper button? */
 
		SetBit(sb->disp_flags, NDB_SCROLLBAR_UP);
 
		if (_scroller_click_timeout == 0) {
 
			_scroller_click_timeout = 6;
 
		if (_scroller_click_timeout <= 1) {
 
			_scroller_click_timeout = 3;
 
			sb->UpdatePosition(rtl ? 1 : -1);
 
		}
 
		_left_button_clicked = false;
 
@@ -94,8 +94,8 @@ static void ScrollbarClickPositioning(Wi
 
		/* Pressing the lower button? */
 
		SetBit(sb->disp_flags, NDB_SCROLLBAR_DOWN);
 

	
 
		if (_scroller_click_timeout == 0) {
 
			_scroller_click_timeout = 6;
 
		if (_scroller_click_timeout <= 1) {
 
			_scroller_click_timeout = 3;
 
			sb->UpdatePosition(rtl ? -1 : 1);
 
		}
 
		_left_button_clicked = false;
src/window.cpp
Show inline comments
 
@@ -54,7 +54,7 @@ Point _cursorpos_drag_start;
 

	
 
int _scrollbar_start_pos;
 
int _scrollbar_size;
 
byte _scroller_click_timeout;
 
byte _scroller_click_timeout = 0;
 

	
 
bool _scrolling_viewport;  ///< A viewport is being scrolled with the mouse.
 
bool _mouse_hovering;      ///< The mouse is hovering over the same point.
 
@@ -1373,14 +1373,16 @@ static void DecreaseWindowCounters()
 
{
 
	Window *w;
 
	FOR_ALL_WINDOWS_FROM_FRONT(w) {
 
		/* Unclick scrollbar buttons if they are pressed. */
 
		for (uint i = 0; i < w->nested_array_size; i++) {
 
			NWidgetBase *nwid = w->nested_array[i];
 
			if (nwid != NULL && (nwid->type == NWID_HSCROLLBAR || nwid->type == NWID_VSCROLLBAR)) {
 
				NWidgetScrollbar *sb = static_cast<NWidgetScrollbar*>(nwid);
 
				if (sb->disp_flags & (ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN)) {
 
					sb->disp_flags &= ~(ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN);
 
					sb->SetDirty(w);
 
		if (_scroller_click_timeout == 0) {
 
			/* Unclick scrollbar buttons if they are pressed. */
 
			for (uint i = 0; i < w->nested_array_size; i++) {
 
				NWidgetBase *nwid = w->nested_array[i];
 
				if (nwid != NULL && (nwid->type == NWID_HSCROLLBAR || nwid->type == NWID_VSCROLLBAR)) {
 
					NWidgetScrollbar *sb = static_cast<NWidgetScrollbar*>(nwid);
 
					if (sb->disp_flags & (ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN)) {
 
						sb->disp_flags &= ~(ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN);
 
						sb->SetDirty(w);
 
					}
 
				}
 
			}
 
		}
 
@@ -2500,11 +2502,7 @@ void InvalidateWindowClassesData(WindowC
 
 */
 
void CallWindowTickEvent()
 
{
 
	if (_scroller_click_timeout > 3) {
 
		_scroller_click_timeout -= 3;
 
	} else {
 
		_scroller_click_timeout = 0;
 
	}
 
	if (_scroller_click_timeout != 0) _scroller_click_timeout--;
 

	
 
	Window *w;
 
	FOR_ALL_WINDOWS_FROM_FRONT(w) {
0 comments (0 inline, 0 general)