Mercurial > hg > openttd
changeset 15117:62df3f6650e2 draft
(svn r19746) -Fix [FS#3675]: Do not recenter usually centered windows when resizing main window or changing language, if they have been moved/resized before.
author | frosch <frosch@openttd.org> |
---|---|
date | Sat, 01 May 2010 15:32:17 +0000 |
parents | aaaa44870ac4 |
children | bdea5ced037a |
files | src/window.cpp src/window_gui.h |
diffstat | 2 files changed, 17 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/window.cpp +++ b/src/window.cpp @@ -835,22 +835,22 @@ /** * Initializes the data (except the position and initial size) of a new Window. - * @param cls Class of the window, used for identification and grouping. @see WindowClass + * @param desc Window description. * @param window_number Number being assigned to the new window - * @param desc_flags Window flags. @see WindowDefaultFlag * @return Window pointer of the newly created window * @pre If nested widgets are used (\a widget is \c NULL), #nested_root and #nested_array_size must be initialized. * In addition, #nested_array is either \c NULL, or already initialized. */ -void Window::InitializeData(WindowClass cls, int window_number, uint32 desc_flags) +void Window::InitializeData(const WindowDesc *desc, WindowNumber window_number) { /* Set up window properties; some of them are needed to set up smallest size below */ - this->window_class = cls; + this->window_class = desc->cls; this->flags4 |= WF_WHITE_BORDER_MASK; // just opened windows have a white border + if (desc->default_pos == WDP_CENTER) this->flags4 |= WF_CENTERED; this->owner = INVALID_OWNER; this->nested_focus = NULL; this->window_number = window_number; - this->desc_flags = desc_flags; + this->desc_flags = desc->flags; this->OnInit(); /* Initialize nested widget tree. */ @@ -1235,7 +1235,7 @@ */ void Window::FinishInitNested(const WindowDesc *desc, WindowNumber window_number) { - this->InitializeData(desc->cls, window_number, desc->flags); + this->InitializeData(desc, window_number); Point pt = this->OnInitialPosition(desc, this->nested_root->smallest_x, this->nested_root->smallest_y, window_number); this->InitializePositionSize(pt.x, pt.y, this->nested_root->smallest_x, this->nested_root->smallest_y); this->FindWindowPlacementAndResize(desc->default_width, desc->default_height); @@ -1702,6 +1702,7 @@ static void StartWindowDrag(Window *w) { w->flags4 |= WF_DRAGGING; + w->flags4 &= ~WF_CENTERED; _dragging_window = true; _drag_delta.x = w->left - _cursor.pos.x; @@ -1719,6 +1720,7 @@ static void StartWindowSizing(Window *w, bool to_left) { w->flags4 |= to_left ? WF_SIZING_LEFT : WF_SIZING_RIGHT; + w->flags4 &= ~WF_CENTERED; _dragging_window = true; _drag_delta.x = _cursor.pos.x; @@ -2578,13 +2580,6 @@ left = PositionMainToolbar(w); // changes toolbar orientation break; - case WC_SELECT_GAME: - case WC_GAME_OPTIONS: - case WC_NETWORK_WINDOW: - top = (newh - w->height) >> 1; - left = (neww - w->width) >> 1; - break; - case WC_NEWS_WINDOW: top = newh - w->height; left = (neww - w->width) >> 1; @@ -2607,6 +2602,12 @@ continue; default: { + if (w->flags4 & WF_CENTERED) { + top = (newh - w->height) >> 1; + left = (neww - w->width) >> 1; + break; + } + left = w->left; if (left + (w->width >> 1) >= neww) left = neww - w->width; if (left < 0) left = 0;
--- a/src/window_gui.h +++ b/src/window_gui.h @@ -341,7 +341,7 @@ }; protected: - void InitializeData(WindowClass cls, int window_number, uint32 desc_flags); + void InitializeData(const WindowDesc *desc, WindowNumber window_number); void InitializePositionSize(int x, int y, int min_width, int min_height); void FindWindowPlacementAndResize(int def_width, int def_height); @@ -863,6 +863,8 @@ WF_WHITE_BORDER_ONE = 1 << 13, WF_WHITE_BORDER_MASK = 1 << 14 | WF_WHITE_BORDER_ONE, + + WF_CENTERED = 1 << 15, ///< Window is centered and shall stay centered after ReInit }; Window *BringWindowToFrontById(WindowClass cls, WindowNumber number);