1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 19:43:06 +01:00

Add mapping of new colors to original colors for UI themes

This commit is contained in:
Trevor Finney
2023-02-21 09:41:03 -05:00
parent d2dd60ced8
commit d3dc515d10
5 changed files with 53 additions and 2 deletions

View File

@@ -770,6 +770,55 @@ void ThemeSetColour(WindowClass wc, uint8_t index, colour_t colour)
ThemeSave();
}
// Quick and dirty mapping for new colors to original colors, until flags are extracted from color upper bits
colour_t ThemeOverrideExtendedColour(colour_t inputColour)
{
switch (inputColour - COLOUR_ID_G2_OFFSET)
{
case COLOUR_DARK_OLIVE_DARK:
case COLOUR_DARK_OLIVE_LIGHT:
return COLOUR_DARK_OLIVE_GREEN;
case COLOUR_SATURATED_BROWN_LIGHT:
return COLOUR_LIGHT_BROWN;
case COLOUR_BORDEAUX_RED_DARK:
case COLOUR_BORDEAUX_RED_LIGHT:
return COLOUR_BORDEAUX_RED;
case COLOUR_GRASS_GREEN_DARK:
case COLOUR_GRASS_GREEN_LIGHT:
return COLOUR_MOSS_GREEN;
case COLOUR_OLIVE_DARK:
case COLOUR_OLIVE_LIGHT:
return COLOUR_OLIVE_GREEN;
case COLOUR_SATURATED_GREEN_LIGHT:
return COLOUR_BRIGHT_GREEN;
case COLOUR_TAN_DARK:
case COLOUR_TAN_LIGHT:
return COLOUR_SALMON_PINK;
case COLOUR_DULL_PURPLE_LIGHT:
return COLOUR_LIGHT_PURPLE;
case COLOUR_DULL_GREEN_DARK:
case COLOUR_DULL_GREEN_LIGHT:
return COLOUR_DARK_GREEN;
case COLOUR_SATURATED_PURPLE_DARK:
case COLOUR_SATURATED_PURPLE_LIGHT:
return COLOUR_BRIGHT_PURPLE;
case COLOUR_ORANGE_LIGHT:
return COLOUR_LIGHT_ORANGE;
case COLOUR_AQUA_DARK:
return COLOUR_AQUAMARINE;
case COLOUR_MAGENTA_LIGHT:
return COLOUR_BRIGHT_PINK;
case COLOUR_DULL_BROWN_DARK:
case COLOUR_DULL_BROWN_LIGHT:
return COLOUR_DARK_BROWN;
case COLOUR_INVISIBLE:
case COLOUR_VOID:
return COLOUR_BLACK;
default:
return inputColour;
}
}
uint8_t ThemeGetFlags()
{
return ThemeManager::CurrentTheme->Flags;

View File

@@ -37,6 +37,7 @@ size_t ThemeGetIndexForName(const utf8* name);
colour_t ThemeGetColour(WindowClass wc, uint8_t index);
void ThemeSetColour(WindowClass wc, uint8_t index, colour_t colour);
colour_t ThemeOverrideExtendedColour(colour_t inputColour);
uint8_t ThemeGetFlags();
void ThemeSetFlags(uint8_t flags);
void ThemeSave();

View File

@@ -615,9 +615,10 @@ public:
case WIDX_THEMES_LIST:
if (selectedIndex != -1)
{
const auto newColour = ThemeOverrideExtendedColour(selectedIndex);
WindowClass wc = GetWindowClassTabIndex(_colour_index_1);
uint8_t colour = ThemeGetColour(wc, _colour_index_2);
colour = (colour & COLOUR_FLAG_TRANSLUCENT) | selectedIndex;
colour = (colour & COLOUR_FLAG_TRANSLUCENT) | newColour;
ThemeSetColour(wc, _colour_index_2, colour);
ColourSchemeUpdateAll();
WindowInvalidateAll();

View File

@@ -42,7 +42,6 @@ void ColoursInitMaps()
// Get palette index in g1 / g2
const auto paletteIndex = (i < COLOUR_NUM_ORIGINAL) ? SPR_PALETTE_2_START : SPR_G2_PALETTE_BEGIN - COLOUR_NUM_ORIGINAL;
const G1Element* g1 = GfxGetG1Element(paletteIndex + i);
//TODO: Integrate themes with G2 palettes
if (g1 != nullptr)
{
ColourMapA[i].colour_0 = g1->offset[INDEX_COLOUR_0];

View File

@@ -205,6 +205,7 @@ constexpr uint8_t PALETTE_LENGTH_ANIMATED = 16;
constexpr uint8_t COLOUR_NUM_ORIGINAL = 32;
constexpr uint8_t COLOUR_NUM_NORMAL = 54;
// COLOUR_ID_G2_OFFSET = PALETTE_TO_G1_OFFSET_COUNT - COLOUR_NUM_ORIGINAL
constexpr uint8_t COLOUR_ID_G2_OFFSET = 112;
constexpr uint8_t COLOUR_OFFSET_INVISIBLE = 166;