summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-11-18 19:24:40 +0000
committerrubidium <rubidium@openttd.org>2010-11-18 19:24:40 +0000
commit16c90ed48bf8e840d303ff3f52984e91d6e22776 (patch)
treee76a21ec752ded6306db20dc4b2898e529b4b459
parent60e153002c8684c086c3a48e4a252fd6389db031 (diff)
downloadopenttd-16c90ed48bf8e840d303ff3f52984e91d6e22776.tar.xz
(svn r21244) -Fix [FS#4240] (r21179): the news message always stayed in the middle; let it follow the setting of the statusbar instead
-rw-r--r--src/news_gui.cpp4
-rw-r--r--src/settings.cpp5
-rw-r--r--src/window.cpp16
-rw-r--r--src/window_func.h1
4 files changed, 23 insertions, 3 deletions
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 4e2ebd4f9..03033beae 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -328,6 +328,8 @@ struct NewsWindow : Window {
nvp->disp_flags |= ND_SHADE_DIMMED;
}
}
+
+ PositionNewsMessage(this);
}
void DrawNewsBorder(const Rect &r) const
@@ -342,7 +344,7 @@ struct NewsWindow : Window {
virtual Point OnInitialPosition(const WindowDesc *desc, int16 sm_width, int16 sm_height, int window_number)
{
- Point pt = { (_screen.width - max(sm_width, desc->default_width)) / 2, _screen.height };
+ Point pt = { 0, _screen.height };
return pt;
}
diff --git a/src/settings.cpp b/src/settings.cpp
index 28f3fb9fe..387db7cfa 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -693,7 +693,10 @@ static bool v_PositionMainToolbar(int32 p1)
/** Reposition the statusbar as the setting changed. */
static bool v_PositionStatusbar(int32 p1)
{
- if (_game_mode != GM_MENU) PositionStatusbar(NULL);
+ if (_game_mode != GM_MENU) {
+ PositionStatusbar(NULL);
+ PositionNewsMessage(NULL);
+ }
return true;
}
diff --git a/src/window.cpp b/src/window.cpp
index 0d4b1f80f..1e85a42c0 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2654,12 +2654,15 @@ static int PositionWindow(Window *w, WindowClass clss, int setting)
if (w == NULL || w->window_class != clss) {
w = FindWindowById(clss, 0);
}
+ if (w == NULL) return 0;
+ int old_left = w->left;
switch (setting) {
case 1: w->left = (_screen.width - w->width) / 2; break;
case 2: w->left = _screen.width - w->width; break;
default: w->left = 0; break;
}
+ if (w->viewport != NULL) w->viewport->left += w->left - old_left;
SetDirtyBlocks(0, w->top, _screen.width, w->top + w->height); // invalidate the whole row
return w->left;
}
@@ -2686,6 +2689,17 @@ int PositionStatusbar(Window *w)
return PositionWindow(w, WC_STATUS_BAR, _settings_client.gui.statusbar_pos);
}
+/**
+ * (Re)position news message window at the screen.
+ * @param w Window structure of the news message window, may also be \c NULL.
+ * @return X coordinate of left edge of the repositioned news message.
+ */
+int PositionNewsMessage(Window *w)
+{
+ DEBUG(misc, 5, "Repositioning news message...");
+ return PositionWindow(w, WC_NEWS_WINDOW, _settings_client.gui.statusbar_pos);
+}
+
/**
* Switches viewports following vehicles, which get autoreplaced
@@ -2737,7 +2751,7 @@ void RelocateAllWindows(int neww, int newh)
case WC_NEWS_WINDOW:
top = newh - w->height;
- left = (neww - w->width) >> 1;
+ left = PositionNewsMessage(w);
break;
case WC_STATUS_BAR:
diff --git a/src/window_func.h b/src/window_func.h
index e7ce5bbd2..1f5a292e5 100644
--- a/src/window_func.h
+++ b/src/window_func.h
@@ -22,6 +22,7 @@ void ChangeWindowOwner(Owner old_owner, Owner new_owner);
void ResizeWindow(Window *w, int x, int y);
int PositionMainToolbar(Window *w);
int PositionStatusbar(Window *w);
+int PositionNewsMessage(Window *w);
int GetMainViewTop();
int GetMainViewBottom();