Update guiPopUpCtrl.cpp

Fix for "|" in text for popupctrl

If 1 was found it was just assuming all other bars existed for a colour input.

there could be a cleaner way to do this but the direct approach allows for clear safeties.
This commit is contained in:
marauder2k7 2025-12-31 05:50:59 +00:00
parent e9296bc882
commit 26ae2f8420

View file

@ -657,26 +657,32 @@ void GuiPopUpMenuCtrl::addEntry( const char *buf, S32 id, U32 scheme )
e.ascii = cp ? cp[1] : 0; e.ascii = cp ? cp[1] : 0;
// See if there is a colour box defined with the text // See if there is a colour box defined with the text
char *cb = dStrchr( e.buf, '|' ); char* firstBar = dStrchr(e.buf, '|');
if ( cb ) if (firstBar)
{ {
e.usesColorBox = true; char* red = firstBar + 1;
cb[0] = '\0'; char* secondBar = dStrchr(red, '|');
if (secondBar)
{
char* green = secondBar + 1;
char* thirdBar = dStrchr(green, '|');
if (thirdBar)
{
char* blue = thirdBar + 1;
char* red = &cb[1]; // Now we know the format is valid: text|r|g|b
cb = dStrchr(red, '|'); firstBar[0] = '\0';
cb[0] = '\0'; secondBar[0] = '\0';
char* green = &cb[1]; thirdBar[0] = '\0';
cb = dStrchr(green, '|');
cb[0] = '\0';
char* blue = &cb[1];
U32 r = dAtoi(red); U32 r = dAtoi(red);
U32 g = dAtoi(green); U32 g = dAtoi(green);
U32 b = dAtoi(blue); U32 b = dAtoi(blue);
e.colorbox = ColorI(r,g,b);
e.colorbox = ColorI(r, g, b);
e.usesColorBox = true;
}
}
} }
else else
{ {