From f12ba0bfdb6d3d195910bdeb2643cd91da4fcd82 Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Fri, 24 Jan 2025 01:11:34 +0000 Subject: [PATCH] Add label placeholder looknfeel system Instead of hardcoding color values in the implementation code --- Client/core/CGUI.cpp | 2 +- Client/core/CSettings.cpp | 4 ++-- Client/core/ServerBrowser/CServerBrowser.cpp | 4 ++-- Client/gui/CGUILabel_Impl.cpp | 24 +++++++++++++++++++ Client/gui/CGUILabel_Impl.h | 4 ++++ Client/mods/deathmatch/logic/CTransferBox.cpp | 2 +- Client/sdk/gui/CGUILabel.h | 3 +++ 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Client/core/CGUI.cpp b/Client/core/CGUI.cpp index 149ee89eeb..a1373a3474 100644 --- a/Client/core/CGUI.cpp +++ b/Client/core/CGUI.cpp @@ -162,7 +162,7 @@ void CLocalGUI::CreateWindows(bool bGameIsAlreadyLoaded) m_pLabelVersionTag->SetSize(CVector2D(m_pLabelVersionTag->GetTextExtent() + 5, 18)); m_pLabelVersionTag->SetPosition(CVector2D(ScreenSize.fX - m_pLabelVersionTag->GetTextExtent() - 5, ScreenSize.fY - 15)); m_pLabelVersionTag->SetAlpha(0.5f); - m_pLabelVersionTag->SetTextColor(255, 255, 255); + m_pLabelVersionTag->SetPlaceholderColors(); m_pLabelVersionTag->SetZOrderingEnabled(false); m_pLabelVersionTag->MoveToBack(); m_pLabelVersionTag->SetVisible(false); diff --git a/Client/core/CSettings.cpp b/Client/core/CSettings.cpp index 97fdd04aca..20a6534a9c 100644 --- a/Client/core/CSettings.cpp +++ b/Client/core/CSettings.cpp @@ -947,7 +947,7 @@ void CSettings::CreateGUI() m_pLabelBrowserBlacklistAdd = reinterpret_cast(pManager->CreateLabel(m_pEditBrowserBlacklistAdd, _("Enter a domain e.g. google.com"))); m_pLabelBrowserBlacklistAdd->SetPosition(CVector2D(10.0f, 3.0f), false); - m_pLabelBrowserBlacklistAdd->SetTextColor(0, 0, 0); + m_pLabelBrowserBlacklistAdd->SetPlaceholderColors(); m_pLabelBrowserBlacklistAdd->SetSize(CVector2D(1, 1), true); m_pLabelBrowserBlacklistAdd->SetAlpha(0.7f); m_pLabelBrowserBlacklistAdd->SetProperty("MousePassThroughEnabled", "True"); @@ -982,7 +982,7 @@ void CSettings::CreateGUI() m_pLabelBrowserWhitelistAdd = reinterpret_cast(pManager->CreateLabel(m_pEditBrowserWhitelistAdd, _("Enter a domain e.g. google.com"))); m_pLabelBrowserWhitelistAdd->SetPosition(CVector2D(10.0f, 3.0f), false); - m_pLabelBrowserWhitelistAdd->SetTextColor(0, 0, 0); + m_pLabelBrowserWhitelistAdd->SetPlaceholderColors(); m_pLabelBrowserWhitelistAdd->SetSize(CVector2D(1, 1), true); m_pLabelBrowserWhitelistAdd->SetAlpha(0.7f); m_pLabelBrowserWhitelistAdd->SetProperty("MousePassThroughEnabled", "True"); diff --git a/Client/core/ServerBrowser/CServerBrowser.cpp b/Client/core/ServerBrowser/CServerBrowser.cpp index 2ea47cafdf..eb9f3f1bab 100644 --- a/Client/core/ServerBrowser/CServerBrowser.cpp +++ b/Client/core/ServerBrowser/CServerBrowser.cpp @@ -333,7 +333,7 @@ void CServerBrowser::CreateTab(ServerBrowserType type, const char* szName) m_pLabelAddressDescription[type] = reinterpret_cast(pManager->CreateLabel(m_pEditAddress[type], "Enter an address [IP:Port]")); m_pLabelAddressDescription[type]->SetPosition(CVector2D(10, 5), false); - m_pLabelAddressDescription[type]->SetTextColor(0, 0, 0); + m_pLabelAddressDescription[type]->SetPlaceholderColors(); m_pLabelAddressDescription[type]->AutoSize(m_pLabelAddressDescription[type]->GetText().c_str()); m_pLabelAddressDescription[type]->SetAlpha(0.6f); m_pLabelAddressDescription[type]->SetProperty("MousePassThroughEnabled", "True"); @@ -421,7 +421,7 @@ void CServerBrowser::CreateTab(ServerBrowserType type, const char* szName) m_pLabelSearchDescription[type] = reinterpret_cast(pManager->CreateLabel(m_pEditSearch[type], _("Search servers..."))); m_pLabelSearchDescription[type]->SetPosition(CVector2D(10, 3), false); - m_pLabelSearchDescription[type]->SetTextColor(0, 0, 0); + m_pLabelSearchDescription[type]->SetPlaceholderColors(); m_pLabelSearchDescription[type]->SetSize(CVector2D(1, 1), true); m_pLabelSearchDescription[type]->SetAlpha(0.6f); m_pLabelSearchDescription[type]->SetProperty("MousePassThroughEnabled", "True"); diff --git a/Client/gui/CGUILabel_Impl.cpp b/Client/gui/CGUILabel_Impl.cpp index e94ceafcee..1b470abc7a 100644 --- a/Client/gui/CGUILabel_Impl.cpp +++ b/Client/gui/CGUILabel_Impl.cpp @@ -164,3 +164,27 @@ float CGUILabel_Impl::GetTextExtent() return 0.0f; } + +void CGUILabel_Impl::InvertTextColor() +{ + auto& color = GetTextColor(); + SetTextColor(255 - color.R, 255 - color.G, 255 - color.B); +} + +void CGUILabel_Impl::SetPlaceholderColors() +{ + auto* text = reinterpret_cast(m_pWindow); + + if (!text->isPropertyPresent("PlaceholderTextColours")) + { + InvertTextColor(); + return; + } + + auto& prop = text->getProperty("PlaceholderTextColours"); + + unsigned int color = 0; + const char* buffer = prop.c_str(); + sscanf(buffer, "tl:%x tr:%x bl:%x br:%x", &color, &color, &color, &color); + SetTextColor(color >> 16, (color >> 8) & 0xFF, color & 0xFF); +} diff --git a/Client/gui/CGUILabel_Impl.h b/Client/gui/CGUILabel_Impl.h index 121c7cb3e6..563ebab70e 100644 --- a/Client/gui/CGUILabel_Impl.h +++ b/Client/gui/CGUILabel_Impl.h @@ -43,7 +43,11 @@ class CGUILabel_Impl : public CGUILabel, public CGUIElement_Impl eCGUIType GetType() { return CGUI_LABEL; }; + void InvertTextColor(); + void SetPlaceholderColors(); + #define EXCLUDE_SET_TEXT #include "CGUIElement_Inc.h" #undef EXCLUDE_SET_TEXT + }; diff --git a/Client/mods/deathmatch/logic/CTransferBox.cpp b/Client/mods/deathmatch/logic/CTransferBox.cpp index 1fb33f54bc..d5b16df17d 100644 --- a/Client/mods/deathmatch/logic/CTransferBox.cpp +++ b/Client/mods/deathmatch/logic/CTransferBox.cpp @@ -66,7 +66,7 @@ void CTransferBox::CreateTransferWindow() float fTempX = (m_progressBar->GetSize().fX - m_GUI->GetTextExtent(m_infoLabel->GetText().c_str()) - TRANSFERBOX_ICONSIZE - 4) * 0.5f; m_infoLabel->SetPosition(CVector2D(fTempX + TRANSFERBOX_ICONSIZE + 4, 0)); m_infoLabel->SetSize(CVector2D(fTransferBoxWidth, TRANSFERBOX_PROGRESSHEIGHT)); - m_infoLabel->SetTextColor(0, 0, 0); + m_infoLabel->SetPlaceholderColors(); m_infoLabel->SetVerticalAlign(CGUI_ALIGN_VERTICALCENTER); for (size_t i = 0; i < m_iconImages.size(); ++i) diff --git a/Client/sdk/gui/CGUILabel.h b/Client/sdk/gui/CGUILabel.h index b7eebff98d..993eb30bb4 100644 --- a/Client/sdk/gui/CGUILabel.h +++ b/Client/sdk/gui/CGUILabel.h @@ -36,4 +36,7 @@ class CGUILabel : public CGUIElement virtual float GetCharacterWidth(int iCharIndex) = 0; virtual float GetFontHeight() = 0; virtual float GetTextExtent() = 0; + + virtual void InvertTextColor() = 0; + virtual void SetPlaceholderColors() = 0; };