1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-28 17:24:47 +01:00

Refactor of colours (#19998)

* Move dropdown functions to dropdown code

* Use a map for the colour tip

* Keep dropdownidx and colour seperated

* Allow number of rows to match vanilla

* Apply review comment

* Bump network version
This commit is contained in:
Duncan
2023-04-22 09:58:13 +01:00
committed by GitHub
parent 53642c0ae9
commit cdccb21dd5
16 changed files with 174 additions and 171 deletions

View File

@@ -28,11 +28,13 @@ constexpr int32_t DROPDOWN_TEXT_MAX_ROWS = 32;
constexpr int32_t DROPDOWN_ITEM_HEIGHT = 12;
static constexpr const uint8_t _appropriateImageDropdownItemsPerRow[34] = {
static constexpr const std::array<uint8_t, 57> _appropriateImageDropdownItemsPerRow = {
1, 1, 1, 1, 2, 2, 3, 3, 4, 3, // 10
5, 4, 4, 5, 5, 5, 4, 5, 6, 5, // 20
5, 7, 4, 5, 6, 5, 6, 6, 6, 6, // 30
6, 8, 9, 8, // 34
6, 8, 8, 8, 9, 9, 9, 9, 9, 9, // 40
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 50
9, 9, 9, 9, 9, 9, 9, // 56
};
enum
@@ -443,6 +445,79 @@ int32_t DropdownIndexFromPoint(const ScreenCoordsXY& loc, WindowBase* w)
return -1;
}
// clang-format off
// colour_t ordered for use in color dropdown
static constexpr colour_t kColoursDropdownOrder[] = {
COLOUR_BLACK,
COLOUR_SATURATED_RED,
COLOUR_DARK_ORANGE,
COLOUR_DARK_YELLOW,
COLOUR_GRASS_GREEN_DARK,
COLOUR_SATURATED_GREEN,
COLOUR_AQUA_DARK,
COLOUR_DARK_BLUE,
COLOUR_SATURATED_PURPLE_DARK,
COLOUR_GREY,
COLOUR_BRIGHT_RED,
COLOUR_LIGHT_ORANGE,
COLOUR_YELLOW,
COLOUR_MOSS_GREEN,
COLOUR_BRIGHT_GREEN,
COLOUR_TEAL,
COLOUR_LIGHT_BLUE,
COLOUR_BRIGHT_PURPLE,
COLOUR_WHITE,
COLOUR_LIGHT_PINK,
COLOUR_ORANGE_LIGHT,
COLOUR_BRIGHT_YELLOW,
COLOUR_GRASS_GREEN_LIGHT,
COLOUR_SATURATED_GREEN_LIGHT,
COLOUR_AQUAMARINE,
COLOUR_ICY_BLUE,
COLOUR_SATURATED_PURPLE_LIGHT,
COLOUR_DULL_BROWN_DARK,
COLOUR_BORDEAUX_RED_DARK,
COLOUR_TAN_DARK,
COLOUR_SATURATED_BROWN,
COLOUR_DARK_OLIVE_DARK,
COLOUR_OLIVE_DARK,
COLOUR_DULL_GREEN_DARK,
COLOUR_DARK_PURPLE,
COLOUR_DARK_PINK,
COLOUR_DARK_BROWN,
COLOUR_BORDEAUX_RED,
COLOUR_SALMON_PINK,
COLOUR_LIGHT_BROWN,
COLOUR_DARK_OLIVE_GREEN,
COLOUR_OLIVE_GREEN,
COLOUR_DARK_GREEN,
COLOUR_LIGHT_PURPLE,
COLOUR_BRIGHT_PINK,
COLOUR_DULL_BROWN_LIGHT,
COLOUR_BORDEAUX_RED_LIGHT,
COLOUR_TAN_LIGHT,
COLOUR_SATURATED_BROWN_LIGHT,
COLOUR_DARK_OLIVE_LIGHT,
COLOUR_OLIVE_LIGHT,
COLOUR_DULL_GREEN_LIGHT,
COLOUR_DULL_PURPLE_LIGHT,
COLOUR_MAGENTA_LIGHT,
COLOUR_INVISIBLE,
COLOUR_VOID
};
// clang-format on
colour_t ColourDropDownIndexToColour(uint8_t ddidx)
{
return kColoursDropdownOrder[ddidx];
}
/**
* rct2: 0x006ED43D
*/
@@ -454,7 +529,7 @@ void WindowDropdownShowColour(WindowBase* w, Widget* widget, uint8_t dropdownCol
// Set items
for (uint64_t i = 0; i < numColours; i++)
{
auto orderedColour = ColourToPaletteIndex(i);
auto orderedColour = ColourDropDownIndexToColour(i);
if (selectedColour == orderedColour)
defaultIndex = i;
@@ -469,7 +544,8 @@ void WindowDropdownShowColour(WindowBase* w, Widget* widget, uint8_t dropdownCol
// Show dropdown
WindowDropdownShowImage(
w->windowPos.x + widget->left, w->windowPos.y + widget->top, widget->height() + 1, dropdownColour,
Dropdown::Flag::StayOpen, numColours, 12, 12, _appropriateImageDropdownItemsPerRow[COLOUR_NUM_ORIGINAL]);
Dropdown::Flag::StayOpen, numColours, 12, 12,
DropdownGetAppropriateImageDropdownItemsPerRow(static_cast<uint32_t>(numColours)));
gDropdownIsColour = true;
gDropdownLastColourHover = -1;
@@ -478,7 +554,9 @@ void WindowDropdownShowColour(WindowBase* w, Widget* widget, uint8_t dropdownCol
uint32_t DropdownGetAppropriateImageDropdownItemsPerRow(uint32_t numItems)
{
return numItems < std::size(_appropriateImageDropdownItemsPerRow) ? _appropriateImageDropdownItemsPerRow[numItems] : 8;
// If above the table size return the last element
return _appropriateImageDropdownItemsPerRow[std::min<uint32_t>(
numItems, static_cast<uint32_t>(std::size(_appropriateImageDropdownItemsPerRow) - 1))];
}
bool WindowDropDownHasMultipleColumns(size_t numItems)