From 018f0f63a667b5ffe79eb9ea700d9e2b964e7f42 Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 21 Apr 2023 19:54:04 +0100 Subject: [PATCH] Change: Centre company face in scaled widget. (#10688) --- src/company_gui.cpp | 22 +++++++++++++--------- src/company_manager_face.h | 2 +- src/error_gui.cpp | 4 ++-- src/news_gui.cpp | 4 ++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 1d923c6d61..3dcafa00fa 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1182,13 +1182,17 @@ void ShowCompanyLiveryWindow(CompanyID company, GroupID group) * Draws the face of a company manager's face. * @param cmf the company manager's face * @param colour the (background) colour of the gradient - * @param x x-position to draw the face - * @param y y-position to draw the face + * @param r position to draw the face */ -void DrawCompanyManagerFace(CompanyManagerFace cmf, int colour, int x, int y) +void DrawCompanyManagerFace(CompanyManagerFace cmf, int colour, const Rect &r) { GenderEthnicity ge = (GenderEthnicity)GetCompanyManagerFaceBits(cmf, CMFV_GEN_ETHN, GE_WM); + /* Determine offset from centre of drawing rect. */ + Dimension d = GetSpriteSize(SPR_GRADIENT); + int x = CenterBounds(r.left, r.right, d.width); + int y = CenterBounds(r.top, r.bottom, d.height); + bool has_moustache = !HasBit(ge, GENDER_FEMALE) && GetCompanyManagerFaceBits(cmf, CMFV_HAS_MOUSTACHE, ge) != 0; bool has_tie_earring = !HasBit(ge, GENDER_FEMALE) || GetCompanyManagerFaceBits(cmf, CMFV_HAS_TIE_EARRING, ge) != 0; bool has_glasses = GetCompanyManagerFaceBits(cmf, CMFV_HAS_GLASSES, ge) != 0; @@ -1491,7 +1495,7 @@ public: break; case WID_SCMF_FACE: { - Dimension face_size = GetSpriteSize(SPR_GRADIENT); + Dimension face_size = GetScaledSpriteSize(SPR_GRADIENT); size->width = std::max(size->width, face_size.width); size->height = std::max(size->height, face_size.height); break; @@ -1643,7 +1647,7 @@ public: { switch (widget) { case WID_SCMF_FACE: - DrawCompanyManagerFace(this->face, Company::Get((CompanyID)this->window_number)->colour, r.left, r.top); + DrawCompanyManagerFace(this->face, Company::Get((CompanyID)this->window_number)->colour, r); break; } } @@ -2385,7 +2389,7 @@ struct CompanyWindow : Window { switch (widget) { case WID_C_FACE: { - Dimension face_size = GetSpriteSize(SPR_GRADIENT); + Dimension face_size = GetScaledSpriteSize(SPR_GRADIENT); size->width = std::max(size->width, face_size.width); size->height = std::max(size->height, face_size.height); break; @@ -2523,7 +2527,7 @@ struct CompanyWindow : Window const Company *c = Company::Get((CompanyID)this->window_number); switch (widget) { case WID_C_FACE: - DrawCompanyManagerFace(c->face, c->colour, r.left, r.top); + DrawCompanyManagerFace(c->face, c->colour, r); break; case WID_C_FACE_TITLE: @@ -2800,7 +2804,7 @@ struct BuyCompanyWindow : Window { { switch (widget) { case WID_BC_FACE: - *size = GetSpriteSize(SPR_GRADIENT); + *size = GetScaledSpriteSize(SPR_GRADIENT); break; case WID_BC_QUESTION: @@ -2827,7 +2831,7 @@ struct BuyCompanyWindow : Window { switch (widget) { case WID_BC_FACE: { const Company *c = Company::Get((CompanyID)this->window_number); - DrawCompanyManagerFace(c->face, c->colour, r.left, r.top); + DrawCompanyManagerFace(c->face, c->colour, r); break; } diff --git a/src/company_manager_face.h b/src/company_manager_face.h index 83bfd29e11..3c947e05b4 100644 --- a/src/company_manager_face.h +++ b/src/company_manager_face.h @@ -236,6 +236,6 @@ static inline SpriteID GetCompanyManagerFaceSprite(CompanyManagerFace cmf, Compa return _cmf_info[cmfv].first_sprite[ge] + GB(cmf, _cmf_info[cmfv].offset, _cmf_info[cmfv].length); } -void DrawCompanyManagerFace(CompanyManagerFace face, int colour, int x, int y); +void DrawCompanyManagerFace(CompanyManagerFace face, int colour, const Rect &r); #endif /* COMPANY_MANAGER_FACE_H */ diff --git a/src/error_gui.cpp b/src/error_gui.cpp index b682e7e257..6e076940ca 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -227,7 +227,7 @@ public: break; } case WID_EM_FACE: { - Dimension face_size = GetSpriteSize(SPR_GRADIENT); + Dimension face_size = GetScaledSpriteSize(SPR_GRADIENT); size->width = std::max(size->width, face_size.width); size->height = std::max(size->height, face_size.height); break; @@ -287,7 +287,7 @@ public: switch (widget) { case WID_EM_FACE: { const Company *c = Company::Get(this->face); - DrawCompanyManagerFace(c->face, c->colour, r.left, r.top); + DrawCompanyManagerFace(c->face, c->colour, r); break; } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 841c0db352..5b098ac47f 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -352,7 +352,7 @@ struct NewsWindow : Window { } case WID_N_MGR_FACE: - *size = maxdim(*size, GetSpriteSize(SPR_GRADIENT)); + *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_N_MGR_NAME: @@ -435,7 +435,7 @@ struct NewsWindow : Window { case WID_N_MGR_FACE: { const CompanyNewsInformation *cni = static_cast(this->ni->data.get()); - DrawCompanyManagerFace(cni->face, cni->colour, r.left, r.top); + DrawCompanyManagerFace(cni->face, cni->colour, r); GfxFillRect(r.left, r.top, r.right, r.bottom, PALETTE_NEWSPAPER, FILLRECT_RECOLOUR); break; }