diff options
Diffstat (limited to 'src/misc_gui.cpp')
-rw-r--r-- | src/misc_gui.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index d5d4d5490..42776ca5e 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -541,9 +541,10 @@ private: uint height_summary; ///< Height of the #summary_msg string in pixels in the #EMW_MESSAGE widget. uint height_detailed; ///< Height of the #detailed_msg string in pixels in the #EMW_MESSAGE widget. Point position; ///< Position of the error message window. + CompanyID face; ///< Company belonging to the face being shown. #INVALID_COMPANY if no face present. public: - ErrmsgWindow(Point pt, const WindowDesc *desc, StringID summary_msg, StringID detailed_msg, bool no_timeout) : Window() + ErrmsgWindow(Point pt, StringID summary_msg, StringID detailed_msg, bool no_timeout) : Window() { this->position = pt; this->duration = no_timeout ? 0 : _settings_client.gui.errmsg_duration; @@ -551,6 +552,10 @@ public: this->summary_msg = summary_msg; this->detailed_msg = detailed_msg; + CompanyID company = (CompanyID)GetDParamX(this->decode_params, 2); + this->face = (this->detailed_msg == STR_ERROR_OWNED_BY && company <= MAX_COMPANIES) ? company : INVALID_COMPANY; + const WindowDesc *desc = (face == INVALID_COMPANY) ? &_errmsg_desc : &_errmsg_face_desc; + assert(summary_msg != INVALID_STRING_ID); this->InitNested(desc); @@ -595,7 +600,7 @@ public: Point pt = RemapCoords2(this->position.x, this->position.y); const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; - if (this->detailed_msg != STR_ERROR_OWNED_BY || GetDParamX(this->decode_params, 2) >= MAX_COMPANIES) { + if (this->face == INVALID_COMPANY) { /* move x pos to opposite corner */ pt.x = UnScaleByZoom(pt.x - vp->virtual_left, vp->zoom) + vp->left; pt.x = (pt.x < (_screen.width >> 1)) ? _screen.width - sm_width - 20 : 20; // Stay 20 pixels away from the edge of the screen. @@ -624,7 +629,7 @@ public: { switch (widget) { case EMW_FACE: { - const Company *c = Company::Get((CompanyID)GetDParamX(this->decode_params, 2)); + const Company *c = Company::Get(this->face); DrawCompanyManagerFace(c->face, c->colour, r.left, r.top); break; } @@ -720,8 +725,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel DeleteWindowById(WC_ERRMSG, 0); Point pt = {x, y}; - const WindowDesc *desc = (detailed_msg != STR_ERROR_OWNED_BY || GetDParam(2) >= MAX_COMPANIES) ? &_errmsg_desc : &_errmsg_face_desc; - new ErrmsgWindow(pt, desc, summary_msg, detailed_msg, no_timeout); + new ErrmsgWindow(pt, summary_msg, detailed_msg, no_timeout); } void ShowEstimatedCostOrIncome(Money cost, int x, int y) |