changeset 9834:efa04139a798 draft

(svn r13977) -Codechange: Let ResizeWindowForWidget() handle hidden (zero height or zero width) widgets.
author peter1138 <peter1138@openttd.org>
date Sun, 03 Aug 2008 17:35:08 +0000
parents 80c1295b64df
children c32841e9b508
files src/widget.cpp src/window_gui.h
diffstat 2 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -590,18 +590,23 @@
 }
 
 /** Resize a widget and shuffle other widgets around to fit. */
-void ResizeWindowForWidget(Window *w, int widget, int delta_x, int delta_y)
+void ResizeWindowForWidget(Window *w, uint widget, int delta_x, int delta_y)
 {
 	int right  = w->widget[widget].right;
 	int bottom = w->widget[widget].bottom;
 
 	for (uint i = 0; i < w->widget_count; i++) {
-		if (w->widget[i].left >= right) w->widget[i].left += delta_x;
+		if (w->widget[i].left >= right && i != widget) w->widget[i].left += delta_x;
 		if (w->widget[i].right >= right) w->widget[i].right += delta_x;
-		if (w->widget[i].top >= bottom) w->widget[i].top += delta_y;
+		if (w->widget[i].top >= bottom && i != widget) w->widget[i].top += delta_y;
 		if (w->widget[i].bottom >= bottom) w->widget[i].bottom += delta_y;
 	}
 
+	/* A hidden widget has bottom == top or right == left, we need to make it
+	 * one less to fit in its new gap. */
+	if (right  == w->widget[widget].left) w->widget[widget].right--;
+	if (bottom == w->widget[widget].top)  w->widget[widget].bottom--;
+
 	w->width  += delta_x;
 	w->height += delta_y;
 	w->resize.width  += delta_x;
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -573,7 +573,7 @@
 
 void ResizeButtons(Window *w, byte left, byte right);
 
-void ResizeWindowForWidget(Window *w, int widget, int delta_x, int delta_y);
+void ResizeWindowForWidget(Window *w, uint widget, int delta_x, int delta_y);
 
 void SetVScrollCount(Window *w, int num);
 void SetVScroll2Count(Window *w, int num);