changeset 19209:4c3739ad48ab draft

(svn r24089) -Fix [FS#5136]: Conflicting strategies for resizing the main toolbar and statusbar after resizing the main window.
author frosch <frosch@openttd.org>
date Tue, 03 Apr 2012 20:09:41 +0000
parents 95736498dcc4
children 8c51a6777caa
files src/window.cpp src/window_func.h
diffstat 2 files changed, 14 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1753,16 +1753,19 @@
  * @param w       Window to resize
  * @param delta_x Delta x-size of changed window (positive if larger, etc.)
  * @param delta_y Delta y-size of changed window
+ * @param clamp_to_screen Whether to make sure the whole window stays visible
  */
-void ResizeWindow(Window *w, int delta_x, int delta_y)
+void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen)
 {
 	if (delta_x != 0 || delta_y != 0) {
-		/* Determine the new right/bottom position. If that is outside of the bounds of
-		 * the resolution clamp it in such a manner that it stays within the bounds. */
-		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 -= 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));
+		if (clamp_to_screen) {
+			/* Determine the new right/bottom position. If that is outside of the bounds of
+			 * the resolution clamp it in such a manner that it stays within the bounds. */
+			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 -= 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();
 
@@ -2988,7 +2991,7 @@
 				continue;
 
 			case WC_MAIN_TOOLBAR:
-				ResizeWindow(w, min(neww, *_preferred_toolbar_size) - w->width, 0);
+				ResizeWindow(w, min(neww, *_preferred_toolbar_size) - w->width, 0, false);
 
 				top = w->top;
 				left = PositionMainToolbar(w); // changes toolbar orientation
@@ -3000,14 +3003,14 @@
 				break;
 
 			case WC_STATUS_BAR:
-				ResizeWindow(w, min(neww, *_preferred_statusbar_size) - w->width, 0);
+				ResizeWindow(w, min(neww, *_preferred_statusbar_size) - w->width, 0, false);
 
 				top = newh - w->height;
 				left = PositionStatusbar(w);
 				break;
 
 			case WC_SEND_NETWORK_MSG:
-				ResizeWindow(w, Clamp(neww, 320, 640) - w->width, 0);
+				ResizeWindow(w, Clamp(neww, 320, 640) - w->width, 0, false);
 				top = newh - w->height - FindWindowById(WC_STATUS_BAR, 0)->height;
 				left = PositionNetworkChatWindow(w);
 				break;
--- a/src/window_func.h
+++ b/src/window_func.h
@@ -19,7 +19,7 @@
 Window *FindWindowByClass(WindowClass cls);
 void ChangeWindowOwner(Owner old_owner, Owner new_owner);
 
-void ResizeWindow(Window *w, int x, int y);
+void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true);
 int PositionMainToolbar(Window *w);
 int PositionStatusbar(Window *w);
 int PositionNewsMessage(Window *w);