changeset 18619:886ef2ebaf49 draft

(svn r23466) -Fix [FS#4871, FS#4874]: assertion triggered when resizing a window during ReInit by an amount that's not a multiple of the resize interval
author rubidium <rubidium@openttd.org>
date Fri, 09 Dec 2011 22:07:00 +0000
parents 690f883cee0e
children 3a5946c8e952
files src/core/math_func.hpp src/window.cpp
diffstat 2 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/math_func.hpp
+++ b/src/core/math_func.hpp
@@ -330,6 +330,17 @@
 }
 
 /**
+ * Computes ceil(a / b) * b for non-negative a and b.
+ * @param a Numerator
+ * @param b Denominator
+ * @return a rounded up to the nearest multiple of b.
+ */
+static FORCEINLINE uint Ceil(uint a, uint b)
+{
+	return CeilDiv(a, b) * b;
+}
+
+/**
  * Computes round(a / b) for signed a and unsigned b.
  * @param a Numerator
  * @param b Denominator
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1675,8 +1675,8 @@
 		 * the resolution clamp it in such a manner that it stays within the bounts. */
 		int new_right  = w->left + w->width  + delta_x;
 		int new_bottom = w->top  + w->height + delta_y;
-		if (new_right  >= (int)_cur_resolution.width)  delta_x -= new_right  - _cur_resolution.width;
-		if (new_bottom >= (int)_cur_resolution.height) delta_y -= new_bottom - _cur_resolution.height;
+		if (new_right  >= (int)_cur_resolution.width)  delta_x -= Ceil(new_right  - _cur_resolution.width,  max(1U, w->nested_root->resize_x));
+		if (new_bottom >= (int)_cur_resolution.height) delta_y -= Ceil(new_bottom - _cur_resolution.height, max(1U, w->nested_root->resize_y));
 
 		w->SetDirty();