1
0
Fork 0

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

release/1.2
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. * 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; const Window *v;
FOR_ALL_WINDOWS_FROM_BACK_FROM(v, w->z_front) { FOR_ALL_WINDOWS_FROM_BACK_FROM(v, w->z_front) {
if (right > v->left && if (MayBeShown(v) &&
right > v->left &&
bottom > v->top && bottom > v->top &&
left < v->left + v->width && left < v->left + v->width &&
top < v->top + v->height) { top < v->top + v->height) {
/* v and rectangle intersect with eeach other */ /* v and rectangle intersect with each other */
int x; int x;
if (left < (x = v->left)) { if (left < (x = v->left)) {
@ -546,7 +568,8 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom)
_cur_dpi = &bk; _cur_dpi = &bk;
FOR_ALL_WINDOWS_FROM_BACK(w) { FOR_ALL_WINDOWS_FROM_BACK(w) {
if (right > w->left && if (MayBeShown(w) &&
right > w->left &&
bottom > w->top && bottom > w->top &&
left < w->left + w->width && left < w->left + w->width &&
top < w->top + w->height) { top < w->top + w->height) {