mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r22794) -Codechange: let window drawing determine which windows may be drawn when a modal progress is busy
This commit is contained in:
parent
6d51883a87
commit
d1657fae80
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue