diff --git a/src/openrct2/input.c b/src/openrct2/input.c index 339a1f0961..aaa8f8d39a 100644 --- a/src/openrct2/input.c +++ b/src/openrct2/input.c @@ -1207,7 +1207,7 @@ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetinde goto dropdown_cleanup; } - if (dropdown_index < DROPDOWN_ITEMS_MAX_SIZE && gDropdownItemsDisabled & (1ULL << dropdown_index)) { + if (dropdown_index < DROPDOWN_ITEMS_MAX_SIZE && dropdown_is_disabled(dropdown_index)) { goto dropdown_cleanup; } @@ -1344,7 +1344,7 @@ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetinde window_tooltip_show(colourTooltips[dropdown_index], x, y); } - if (dropdown_index < DROPDOWN_ITEMS_MAX_SIZE && gDropdownItemsDisabled & (1ULL << dropdown_index)) { + if (dropdown_index < DROPDOWN_ITEMS_MAX_SIZE && dropdown_is_disabled(dropdown_index)) { return; } diff --git a/src/openrct2/windows/dropdown.c b/src/openrct2/windows/dropdown.c index 48ca59ce17..0c4d69219a 100644 --- a/src/openrct2/windows/dropdown.c +++ b/src/openrct2/windows/dropdown.c @@ -52,8 +52,8 @@ bool _dropdown_list_vertically; sint32 gDropdownNumItems; rct_string_id gDropdownItemsFormat[DROPDOWN_ITEMS_MAX_SIZE]; sint64 gDropdownItemsArgs[DROPDOWN_ITEMS_MAX_SIZE]; -uint64 gDropdownItemsChecked; -uint64 gDropdownItemsDisabled; +static uint64 _dropdownItemsChecked; +static uint64 _dropdownItemsDisabled; bool gDropdownIsColour; sint32 gDropdownLastColourHover; sint32 gDropdownHighlightedIndex; @@ -61,29 +61,29 @@ sint32 gDropdownDefaultIndex; bool dropdown_is_checked(sint32 index) { - return gDropdownItemsChecked & (1ULL << index); + return _dropdownItemsChecked & (1ULL << index); } bool dropdown_is_disabled(sint32 index) { - return gDropdownItemsDisabled & (1ULL << index); + return _dropdownItemsDisabled & (1ULL << index); } void dropdown_set_checked(sint32 index, bool value) { if (value) { - gDropdownItemsChecked |= 1ULL << index; + _dropdownItemsChecked |= 1ULL << index; } else { - gDropdownItemsChecked &= ~(1ULL << index); + _dropdownItemsChecked &= ~(1ULL << index); } } void dropdown_set_disabled(sint32 index, bool value) { if (value) { - gDropdownItemsDisabled |= 1ULL << index; + _dropdownItemsDisabled |= 1ULL << index; } else { - gDropdownItemsDisabled &= ~(1ULL << index); + _dropdownItemsDisabled &= ~(1ULL << index); } } @@ -208,8 +208,8 @@ void window_dropdown_show_text_custom_width(sint32 x, sint32 y, sint32 extray, u // Input state gDropdownHighlightedIndex = -1; - gDropdownItemsDisabled = 0; - gDropdownItemsChecked = 0; + _dropdownItemsDisabled = 0; + _dropdownItemsChecked = 0; gDropdownIsColour = false; gDropdownDefaultIndex = -1; input_set_state(INPUT_STATE_DROPDOWN_ACTIVE); @@ -282,8 +282,8 @@ void window_dropdown_show_image(sint32 x, sint32 y, sint32 extray, uint8 colour, // Input state gDropdownHighlightedIndex = -1; - gDropdownItemsDisabled = 0; - gDropdownItemsChecked = 0; + _dropdownItemsDisabled = 0; + _dropdownItemsChecked = 0; gDropdownIsColour = false; gDropdownDefaultIndex = -1; input_set_state(INPUT_STATE_DROPDOWN_ACTIVE); diff --git a/src/openrct2/windows/dropdown.h b/src/openrct2/windows/dropdown.h index 68898c7911..0d0830322f 100644 --- a/src/openrct2/windows/dropdown.h +++ b/src/openrct2/windows/dropdown.h @@ -36,8 +36,6 @@ extern sint32 gAppropriateImageDropdownItemsPerRow[]; extern sint32 gDropdownNumItems; extern rct_string_id gDropdownItemsFormat[DROPDOWN_ITEMS_MAX_SIZE]; extern sint64 gDropdownItemsArgs[DROPDOWN_ITEMS_MAX_SIZE]; -extern uint64 gDropdownItemsChecked; -extern uint64 gDropdownItemsDisabled; extern bool gDropdownIsColour; extern sint32 gDropdownLastColourHover; extern sint32 gDropdownHighlightedIndex; diff --git a/src/openrct2/windows/editor_object_selection.c b/src/openrct2/windows/editor_object_selection.c index aba190aa7b..d81d4cfeed 100644 --- a/src/openrct2/windows/editor_object_selection.c +++ b/src/openrct2/windows/editor_object_selection.c @@ -901,8 +901,6 @@ void window_editor_object_selection_mousedown(rct_window *w, rct_widgetindex wid { sint32 num_items; - //widget = &w->widgets[widgetIndex - 1]; - switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: @@ -935,7 +933,14 @@ void window_editor_object_selection_mousedown(rct_window *w, rct_widgetindex wid num_items ); - gDropdownItemsChecked = _filter_flags & 0xF; + for (sint32 i = 0; i < 4; i++) + { + if (_filter_flags & (1 << i)) + { + dropdown_set_checked(i, true); + } + } + if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { dropdown_set_checked(DDIX_FILTER_SELECTED, _FILTER_SELECTED); dropdown_set_checked(DDIX_FILTER_NONSELECTED, _FILTER_NONSELECTED); diff --git a/src/openrct2/windows/ride.c b/src/openrct2/windows/ride.c index fa6c3ae733..b1e44174d1 100644 --- a/src/openrct2/windows/ride.c +++ b/src/openrct2/windows/ride.c @@ -2043,11 +2043,12 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget) } // Set highlighted item - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) { - sint32 j = 2; - for (sint32 i = 0; i < ride->num_vehicles; i++) { - gDropdownItemsDisabled |= j; - j <<= 1; + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) + { + for (sint32 i = 0; i < ride->num_vehicles; i++) + { + // The +1 is to skip 'Overall view' + dropdown_set_disabled(i + 1, true);; } } @@ -3757,7 +3758,7 @@ static void window_ride_maintenance_mousedown(rct_window *w, rct_widgetindex wid } if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING) == 0) { - gDropdownItemsDisabled = (1 << 0); + dropdown_set_disabled(0, true); } } break; @@ -4140,7 +4141,7 @@ static void window_ride_colour_mousedown(rct_window *w, rct_widgetindex widgetIn vehicle_colour vehicleColour; rct_widget *dropdownWidget; rct_ride_entry *rideEntry; - sint32 i, numItems; + sint32 i, numItems, checkedIndex; rct_string_id stringId; ride = get_ride(w->number); @@ -4197,16 +4198,15 @@ static void window_ride_colour_mousedown(rct_window *w, rct_widgetindex widgetIn dropdown_set_checked(ride->track_colour_supports[colourSchemeIndex], true); break; case WIDX_ENTRANCE_STYLE_DROPDOWN: - gDropdownItemsChecked = 0; + checkedIndex = -1; for (i = 0; i < countof(window_ride_entrance_style_list); i++) { gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL; gDropdownItemsArgs[i] = RideEntranceDefinitions[window_ride_entrance_style_list[i]].string_id; if (ride->entrance_style == window_ride_entrance_style_list[i]) { - dropdown_set_checked(i, true); + checkedIndex = i; } } - uint64 checked = gDropdownItemsChecked; window_dropdown_show_text_custom_width( w->x + dropdownWidget->left, @@ -4219,7 +4219,11 @@ static void window_ride_colour_mousedown(rct_window *w, rct_widgetindex widgetIn widget->right - dropdownWidget->left ); - gDropdownItemsChecked = checked; + + if (checkedIndex != -1) + { + dropdown_set_checked(checkedIndex, true); + } break; case WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN: for (i = 0; i < 3; i++) { @@ -5066,7 +5070,9 @@ static void window_ride_measurements_mousedown(rct_window *w, rct_widgetindex wi ); gDropdownDefaultIndex = 0; if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) - gDropdownItemsDisabled |= 2; + { + dropdown_set_disabled(1, true); + } } /** diff --git a/src/openrct2/windows/ride_construction.c b/src/openrct2/windows/ride_construction.c index 8a0340d081..facf5f55f9 100644 --- a/src/openrct2/windows/ride_construction.c +++ b/src/openrct2/windows/ride_construction.c @@ -3578,7 +3578,13 @@ static void window_ride_construction_show_special_track_dropdown(rct_window *w, widget->right - widget->left ); - gDropdownItemsDisabled = _currentDisabledSpecialTrackPieces; + for (sint32 i = 0; i < 32; i++) + { + if (_currentDisabledSpecialTrackPieces & (1 << i)) + { + dropdown_set_disabled(i, true); + } + } gDropdownDefaultIndex = defaultIndex; } diff --git a/src/openrct2/windows/staff.c b/src/openrct2/windows/staff.c index 953b84a8a4..dce0b4e578 100644 --- a/src/openrct2/windows/staff.c +++ b/src/openrct2/windows/staff.c @@ -555,7 +555,7 @@ void window_staff_overview_mousedown(rct_window *w, rct_widgetindex widgetIndex, // Disable clear patrol area if no area is set. if (!(gStaffModes[peep->staff_id] & 2)) { - gDropdownItemsDisabled |= (1ULL << 1); + dropdown_set_disabled(1, true); } } @@ -1285,7 +1285,7 @@ void window_staff_options_mousedown(rct_window *w, rct_widgetindex widgetIndex, } rct_peep* peep = GET_PEEP(w->number); - sint32 itemsChecked = 0; + sint32 checkedIndex = -1; //This will be moved below where Items Checked is when all //of dropdown related functions are finished. This prevents //the dropdown from not working on first click. @@ -1293,7 +1293,7 @@ void window_staff_options_mousedown(rct_window *w, rct_widgetindex widgetIndex, for (sint32 i = 0; i < numCostumes; i++) { uint8 costume = _availableCostumes[i]; if (costume == peep->sprite_type) { - itemsChecked = 1 << i; + checkedIndex = i; } gDropdownItemsArgs[i] = StaffCostumeNames[costume]; gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL; @@ -1309,7 +1309,10 @@ void window_staff_options_mousedown(rct_window *w, rct_widgetindex widgetIndex, window_dropdown_show_text_custom_width(x, y, extray, w->colours[1], 0, DROPDOWN_FLAG_STAY_OPEN, numCostumes, width); // See above note. - gDropdownItemsChecked = itemsChecked; + if (checkedIndex != -1) + { + dropdown_set_checked(checkedIndex, true); + } } /**