Mercurial > hg > openttd
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) {