(svn r22794) -Codechange: let window drawing determine which windows may be drawn when a modal progress is busy

This commit is contained in:
rubidium 2011-08-21 12:51:52 +00:00
parent 6d51883a87
commit d1657fae80
1 changed files with 26 additions and 3 deletions

View File

@ -468,6 +468,27 @@ static void DispatchMouseWheelEvent(Window *w, NWidgetCore *nwid, int wheel)
}
}
/**
* 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.
*
@ -484,11 +505,12 @@ static void DrawOverlappedWindow(Window *w, int left, int top, int right, int bo
{
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 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom)
_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) {