mirror of https://github.com/OpenTTD/OpenTTD
(svn r21244) -Fix [FS#4240] (r21179): the news message always stayed in the middle; let it follow the setting of the statusbar instead
parent
60e153002c
commit
16c90ed48b
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue