diff options
author | rubidium <rubidium@openttd.org> | 2010-04-04 20:47:51 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2010-04-04 20:47:51 +0000 |
commit | bd629ad7c093a73ffbb4fd6a98e953172681bacc (patch) | |
tree | 81ab98b019a4d2a38dd60c132f27c1562822d7ca | |
parent | b966bdc23cc0ee5d5a8b6bd11bd76b306d8e470f (diff) | |
download | openttd-bd629ad7c093a73ffbb4fd6a98e953172681bacc.tar.xz |
(svn r19563) -Fix [FS#3733] (r19558): OnResize wasn't called often enough so scrollbars were in some cases not properly updated causing division by zero
-rw-r--r-- | src/window.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/window.cpp b/src/window.cpp index ba3d7f0eb..78fbd1ac5 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1413,18 +1413,20 @@ static bool HandleMouseOver() */ void ResizeWindow(Window *w, int delta_x, int delta_y) { - if (delta_x == 0 && delta_y == 0) return; + if (delta_x != 0 || delta_y != 0) { + w->SetDirty(); - w->SetDirty(); + uint new_xinc = max(0, (w->nested_root->resize_x == 0) ? 0 : (int)(w->nested_root->current_x - w->nested_root->smallest_x) + delta_x); + uint new_yinc = max(0, (w->nested_root->resize_y == 0) ? 0 : (int)(w->nested_root->current_y - w->nested_root->smallest_y) + delta_y); + assert(w->nested_root->resize_x == 0 || new_xinc % w->nested_root->resize_x == 0); + assert(w->nested_root->resize_y == 0 || new_yinc % w->nested_root->resize_y == 0); - uint new_xinc = max(0, (w->nested_root->resize_x == 0) ? 0 : (int)(w->nested_root->current_x - w->nested_root->smallest_x) + delta_x); - uint new_yinc = max(0, (w->nested_root->resize_y == 0) ? 0 : (int)(w->nested_root->current_y - w->nested_root->smallest_y) + delta_y); - assert(w->nested_root->resize_x == 0 || new_xinc % w->nested_root->resize_x == 0); - assert(w->nested_root->resize_y == 0 || new_yinc % w->nested_root->resize_y == 0); + w->nested_root->AssignSizePosition(ST_RESIZE, 0, 0, w->nested_root->smallest_x + new_xinc, w->nested_root->smallest_y + new_yinc, _dynlang.text_dir == TD_RTL); + w->width = w->nested_root->current_x; + w->height = w->nested_root->current_y; + } - w->nested_root->AssignSizePosition(ST_RESIZE, 0, 0, w->nested_root->smallest_x + new_xinc, w->nested_root->smallest_y + new_yinc, _dynlang.text_dir == TD_RTL); - w->width = w->nested_root->current_x; - w->height = w->nested_root->current_y; + /* Always call OnResize to make sure everything is initialised correctly if it needs to be. */ w->OnResize(); w->SetDirty(); } |