From f2f8cec944d2da7c03db5d3daa02784b3f6b4d49 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 20 Jun 2017 10:40:38 +0200 Subject: [PATCH] Clean up dropdowns --- src/openrct2/input.c | 4 +-- src/openrct2/windows/dropdown.c | 47 +++++++++------------------------ src/openrct2/windows/dropdown.h | 4 ++- src/openrct2/windows/land.c | 4 +-- src/openrct2/windows/mapgen.c | 8 +++--- 5 files changed, 24 insertions(+), 43 deletions(-) diff --git a/src/openrct2/input.c b/src/openrct2/input.c index 121ed088d2..8a964f34f2 100644 --- a/src/openrct2/input.c +++ b/src/openrct2/input.c @@ -1211,7 +1211,7 @@ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetinde goto dropdown_cleanup; } - if (gDropdownItemsFormat[dropdown_index] == 0) { + if (gDropdownItemsFormat[dropdown_index] == DROPDOWN_SEPARATOR) { goto dropdown_cleanup; } } @@ -1346,7 +1346,7 @@ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetinde return; } - if (gDropdownItemsFormat[dropdown_index] == 0) { + if (gDropdownItemsFormat[dropdown_index] == DROPDOWN_SEPARATOR) { return; } diff --git a/src/openrct2/windows/dropdown.c b/src/openrct2/windows/dropdown.c index 5883ed1788..b6eb50acf5 100644 --- a/src/openrct2/windows/dropdown.c +++ b/src/openrct2/windows/dropdown.c @@ -323,10 +323,10 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi) } item = gDropdownItemsFormat[i]; - if (item == (uint16)-1 || item == (uint16)-2) { + if (item == DROPDOWN_FORMAT_LAND_PICKER || item == DROPDOWN_FORMAT_COLOUR_PICKER) { // Image item image = (uint32)gDropdownItemsArgs[i]; - if (item == (uint16)-2 && highlightedIndex == i) + if (item == DROPDOWN_FORMAT_COLOUR_PICKER && highlightedIndex == i) image++; gfx_draw_sprite( @@ -391,41 +391,20 @@ sint32 dropdown_index_from_point(sint32 x, sint32 y, rct_window *w) return dropdown_index; } +/** + * rct2: 0x006ED43D + */ void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour) { - window_dropdown_show_colour_available(w, widget, dropdownColour, selectedColour, 0xFFFFFFFF); -} - -/** - * - * rct2: 0x006ED43D - * al: dropdown colour - * ah: selected colour - * esi: window - * edi: widget - * ebp: unknown - */ -void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour, - uint32 availableColours) -{ - sint32 i, numItems; - - // Count number of available colours - numItems = 0; - for (i = 0; i < 32; i++) - if (availableColours & (1 << i)) - numItems++; - sint32 defaultIndex = -1; // Set items - for (i = 0; i < 32; i++) { - if (availableColours & (1 << i)) { - if (selectedColour == i) - defaultIndex = i; + for (uint64 i = 0; i < COLOUR_COUNT; i++) + { + if (selectedColour == i) + defaultIndex = i; - gDropdownItemsFormat[i] = 0xFFFE; - gDropdownItemsArgs[i] = ((uint64)i << 32) | (0x20000000 | (i << 19) | SPR_PALETTE_BTN); - } + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_COLOUR_PICKER; + gDropdownItemsArgs[i] = (i << 32) | (0x20000000 | (i << 19) | SPR_PALETTE_BTN); } // Show dropdown @@ -435,10 +414,10 @@ void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, ui widget->bottom - widget->top + 1, dropdownColour, DROPDOWN_FLAG_STAY_OPEN, - numItems, + COLOUR_COUNT, 12, 12, - gAppropriateImageDropdownItemsPerRow[numItems] + gAppropriateImageDropdownItemsPerRow[COLOUR_COUNT] ); gDropdownIsColour = true; diff --git a/src/openrct2/windows/dropdown.h b/src/openrct2/windows/dropdown.h index 353b11d3e9..e0160709e2 100644 --- a/src/openrct2/windows/dropdown.h +++ b/src/openrct2/windows/dropdown.h @@ -20,7 +20,9 @@ #include "../common.h" #include "../interface/window.h" -#define DROPDOWN_SEPARATOR 0 +#define DROPDOWN_SEPARATOR 0 +#define DROPDOWN_FORMAT_COLOUR_PICKER 0xFFFE +#define DROPDOWN_FORMAT_LAND_PICKER 0xFFFF enum { diff --git a/src/openrct2/windows/land.c b/src/openrct2/windows/land.c index 8dc1199106..f29d235107 100644 --- a/src/openrct2/windows/land.c +++ b/src/openrct2/windows/land.c @@ -213,7 +213,7 @@ static void window_land_mousedown(rct_widgetindex widgetIndex, rct_window*w, rct switch (widgetIndex) { case WIDX_FLOOR: for (i = 0; i < TERRAIN_COUNT_REGULAR; i++) { - gDropdownItemsFormat[i] = -1; + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + FloorTextureOrder[i]; if (FloorTextureOrder[i] == _selectedFloorTexture) defaultIndex = i; @@ -231,7 +231,7 @@ static void window_land_mousedown(rct_widgetindex widgetIndex, rct_window*w, rct break; case WIDX_WALL: for (i = 0; i < TERRAIN_EDGE_COUNT; i++) { - gDropdownItemsFormat[i] = -1; + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + WallTextureOrder[i]; if (WallTextureOrder[i] == _selectedWallTexture) defaultIndex = i; diff --git a/src/openrct2/windows/mapgen.c b/src/openrct2/windows/mapgen.c index 2d13049eb2..ea3910aad2 100644 --- a/src/openrct2/windows/mapgen.c +++ b/src/openrct2/windows/mapgen.c @@ -696,7 +696,7 @@ static void window_mapgen_base_mousedown(rct_widgetindex widgetIndex, rct_window break; case WIDX_FLOOR_TEXTURE: for (i = 0; i < TERRAIN_COUNT_REGULAR; i++) { - gDropdownItemsFormat[i] = -1; + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + FloorTextureOrder[i]; if (FloorTextureOrder[i] == _floorTexture) defaultIndex = i; @@ -714,7 +714,7 @@ static void window_mapgen_base_mousedown(rct_widgetindex widgetIndex, rct_window break; case WIDX_WALL_TEXTURE: for (i = 0; i < TERRAIN_EDGE_COUNT; i++) { - gDropdownItemsFormat[i] = -1; + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + WallTextureOrder[i]; if (WallTextureOrder[i] == _wallTexture) defaultIndex = i; @@ -1015,7 +1015,7 @@ static void window_mapgen_simplex_mousedown(rct_widgetindex widgetIndex, rct_win break; case WIDX_SIMPLEX_FLOOR_TEXTURE: for (i = 0; i < TERRAIN_COUNT_REGULAR; i++) { - gDropdownItemsFormat[i] = -1; + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + FloorTextureOrder[i]; if (FloorTextureOrder[i] == _floorTexture) defaultIndex = i; @@ -1033,7 +1033,7 @@ static void window_mapgen_simplex_mousedown(rct_widgetindex widgetIndex, rct_win break; case WIDX_SIMPLEX_WALL_TEXTURE: for (i = 0; i < TERRAIN_EDGE_COUNT; i++) { - gDropdownItemsFormat[i] = -1; + gDropdownItemsFormat[i] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + WallTextureOrder[i]; if (WallTextureOrder[i] == _wallTexture) defaultIndex = i;