changeset 17985:b01820fe3edf draft

(svn r22794) -Codechange: let window drawing determine which windows may be drawn when a modal progress is busy
author rubidium <rubidium@openttd.org>
date Sun, 21 Aug 2011 12:51:52 +0000
parents a37557517b38
children b5521cdad3e9
files src/window.cpp
diffstat 1 files changed, 26 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -469,6 +469,27 @@
 }
 
 /**
+ * Returns whether a window may be shown or not.
+ * @param w The window to consider.
+ * @return True iff it may be shown, otherwise false.
+ */
+static bool MayBeShown(const Window *w)
+{
+	/* If we're not modal, everything is okay. */
+	if (!HasModalProgress()) return true;
+
+	switch (w->window_class) {
+		case WC_MAIN_WINDOW:    ///< The background, i.e. the game.
+		case WC_MODAL_PROGRESS: ///< The actual progress window.
+		case WC_QUERY_STRING:   ///< The abort window.
+			return true;
+
+		default:
+			return false;
+	}
+}
+
+/**
  * Generate repaint events for the visible part of window w within the rectangle.
  *
  * The function goes recursively upwards in the window stack, and splits the rectangle
@@ -484,11 +505,12 @@
 {
 	const Window *v;
 	FOR_ALL_WINDOWS_FROM_BACK_FROM(v, w->z_front) {
-		if (right > v->left &&
+		if (MayBeShown(v) &&
+				right > v->left &&
 				bottom > v->top &&
 				left < v->left + v->width &&
 				top < v->top + v->height) {
-			/* v and rectangle intersect with eeach other */
+			/* v and rectangle intersect with each other */
 			int x;
 
 			if (left < (x = v->left)) {
@@ -546,7 +568,8 @@
 	_cur_dpi = &bk;
 
 	FOR_ALL_WINDOWS_FROM_BACK(w) {
-		if (right > w->left &&
+		if (MayBeShown(w) &&
+				right > w->left &&
 				bottom > w->top &&
 				left < w->left + w->width &&
 				top < w->top + w->height) {