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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user