mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
fix #2363: show default item highlight, refactor
This commit is contained in:
24
src/input.c
24
src/input.c
@@ -1208,7 +1208,12 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
|
||||
window_event_mouse_down_call(w, widgetIndex);
|
||||
}
|
||||
|
||||
if (gInputFlags & INPUT_FLAG_WIDGET_PRESSED) return;
|
||||
if (gInputFlags & INPUT_FLAG_WIDGET_PRESSED) {
|
||||
if (gInputState == INPUT_STATE_DROPDOWN_ACTIVE) {
|
||||
gDropdownHighlightedIndex = gDropdownDefaultIndex;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
gInputFlags |= INPUT_FLAG_WIDGET_PRESSED;
|
||||
widget_invalidate_by_number(cursor_w_class, cursor_w_number, widgetIndex);
|
||||
@@ -1257,6 +1262,12 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
|
||||
gTooltipWidget.widget_index = cursor_widgetIndex;
|
||||
gTooltipWidget.window_classification = cursor_w_class;
|
||||
gTooltipWidget.window_number = cursor_w_number;
|
||||
|
||||
if (dropdown_index == -1) {
|
||||
if (!dropdown_is_disabled(gDropdownDefaultIndex)) {
|
||||
dropdown_index = gDropdownDefaultIndex;
|
||||
}
|
||||
}
|
||||
window_event_dropdown_call(cursor_w, cursor_widgetIndex, dropdown_index);
|
||||
}
|
||||
dropdown_cleanup:
|
||||
@@ -1300,12 +1311,17 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
|
||||
return;
|
||||
}
|
||||
|
||||
if (!w) return;
|
||||
gDropdownHighlightedIndex = -1;
|
||||
window_invalidate_by_class(WC_DROPDOWN);
|
||||
if (w == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (w->classification == WC_DROPDOWN){
|
||||
int dropdown_index = dropdown_index_from_point(x, y, w);
|
||||
|
||||
if (dropdown_index == -1) return;
|
||||
if (dropdown_index == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (gDropdownIsColour && gDropdownLastColourHover != dropdown_index) {
|
||||
gDropdownLastColourHover = dropdown_index;
|
||||
|
||||
@@ -56,12 +56,18 @@ uint64 gDropdownItemsDisabled;
|
||||
bool gDropdownIsColour;
|
||||
int gDropdownLastColourHover;
|
||||
int gDropdownHighlightedIndex;
|
||||
int gDropdownDefaultIndex;
|
||||
|
||||
bool dropdown_is_checked(int index)
|
||||
{
|
||||
return gDropdownItemsChecked & (1ULL << index);
|
||||
}
|
||||
|
||||
bool dropdown_is_disabled(int index)
|
||||
{
|
||||
return gDropdownItemsDisabled & (1ULL << index);
|
||||
}
|
||||
|
||||
void dropdown_set_checked(int index, bool value)
|
||||
{
|
||||
if (value) {
|
||||
@@ -204,6 +210,7 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
|
||||
gDropdownItemsDisabled = 0;
|
||||
gDropdownItemsChecked = 0;
|
||||
gDropdownIsColour = false;
|
||||
gDropdownDefaultIndex = -1;
|
||||
gInputState = INPUT_STATE_DROPDOWN_ACTIVE;
|
||||
}
|
||||
|
||||
@@ -274,11 +281,9 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
|
||||
gDropdownHighlightedIndex = -1;
|
||||
gDropdownItemsDisabled = 0;
|
||||
gDropdownItemsChecked = 0;
|
||||
gInputState = INPUT_STATE_DROPDOWN_ACTIVE;
|
||||
|
||||
// Copy the following properties until all use of it is decompiled
|
||||
gDropdownHighlightedIndex = gDropdownHighlightedIndex;
|
||||
gDropdownIsColour = false;
|
||||
gDropdownDefaultIndex = -1;
|
||||
gInputState = INPUT_STATE_DROPDOWN_ACTIVE;
|
||||
}
|
||||
|
||||
void window_dropdown_close()
|
||||
@@ -292,7 +297,7 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
|
||||
gDropdownHighlightedIndex = gDropdownHighlightedIndex;
|
||||
int highlightedIndex = gDropdownHighlightedIndex;
|
||||
for (int i = 0; i < gDropdownNumItems; i++) {
|
||||
cell_x = i % _dropdown_num_columns;
|
||||
cell_y = i / _dropdown_num_columns;
|
||||
@@ -313,7 +318,7 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
}
|
||||
} else {
|
||||
//
|
||||
if (i == gDropdownHighlightedIndex) {
|
||||
if (i == highlightedIndex) {
|
||||
l = w->x + 2 + (cell_x * _dropdown_item_width);
|
||||
t = w->y + 2 + (cell_y * _dropdown_item_height);
|
||||
r = l + _dropdown_item_width - 1;
|
||||
@@ -325,7 +330,7 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
if (item == (uint16)-1 || item == (uint16)-2) {
|
||||
// Image item
|
||||
image = (uint32)gDropdownItemsArgs[i];
|
||||
if (item == (uint16)-2 && gDropdownHighlightedIndex == i)
|
||||
if (item == (uint16)-2 && highlightedIndex == i)
|
||||
image++;
|
||||
|
||||
gfx_draw_sprite(
|
||||
@@ -344,9 +349,9 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
|
||||
// Calculate colour
|
||||
colour = w->colours[0] & 0x7F;
|
||||
if (i == gDropdownHighlightedIndex)
|
||||
if (i == highlightedIndex)
|
||||
colour = 2;
|
||||
if (gDropdownItemsDisabled & (1ULL << i))
|
||||
if (dropdown_is_disabled(i))
|
||||
if (i < 64)
|
||||
colour = (w->colours[0] & 0x7F) | 0x40;
|
||||
|
||||
|
||||
@@ -40,7 +40,10 @@ extern uint64 gDropdownItemsDisabled;
|
||||
extern bool gDropdownIsColour;
|
||||
extern int gDropdownLastColourHover;
|
||||
extern int gDropdownHighlightedIndex;
|
||||
extern int gDropdownDefaultIndex;
|
||||
|
||||
bool dropdown_is_checked(int index);
|
||||
bool dropdown_is_disabled(int index);
|
||||
void dropdown_set_checked(int index, bool value);
|
||||
void dropdown_set_disabled(int index, bool value);
|
||||
|
||||
|
||||
@@ -120,6 +120,16 @@ enum {
|
||||
DDIDX_DISABLE_SUPPORT_LIMITS
|
||||
};
|
||||
|
||||
enum {
|
||||
DDIDX_SHOW_MAP,
|
||||
DDIDX_OPEN_VIEWPORT,
|
||||
};
|
||||
|
||||
enum {
|
||||
DDIDX_ROTATE_CLOCKWISE,
|
||||
DDIDX_ROTATE_ANTI_CLOCKWISE,
|
||||
};
|
||||
|
||||
#pragma region Toolbar_widget_ordering
|
||||
|
||||
// from left to right
|
||||
@@ -446,7 +456,7 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg
|
||||
if (gCheatsDisableSupportLimits) {
|
||||
dropdown_set_checked(DDIDX_DISABLE_SUPPORT_LIMITS, true);
|
||||
}
|
||||
RCT2_GLOBAL(0x009DEBA2, uint16) = 0;
|
||||
gDropdownDefaultIndex = DDIDX_CHEATS;
|
||||
break;
|
||||
case WIDX_VIEW_MENU:
|
||||
top_toolbar_init_view_menu(w, widget);
|
||||
@@ -469,7 +479,7 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg
|
||||
0,
|
||||
numItems
|
||||
);
|
||||
RCT2_GLOBAL(0x009DEBA2, uint16) = 0;
|
||||
gDropdownDefaultIndex = DDIDX_SHOW_MAP;
|
||||
break;
|
||||
case WIDX_FASTFORWARD:
|
||||
top_toolbar_init_fastforward_menu(w, widget);
|
||||
@@ -549,7 +559,6 @@ static void window_top_toolbar_dropdown(rct_window *w, int widgetIndex, int drop
|
||||
}
|
||||
break;
|
||||
case WIDX_CHEATS:
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x009DEBA2, uint16);
|
||||
switch (dropdownIndex) {
|
||||
case DDIDX_CHEATS:
|
||||
window_cheats_open();
|
||||
@@ -569,9 +578,6 @@ static void window_top_toolbar_dropdown(rct_window *w, int widgetIndex, int drop
|
||||
top_toolbar_view_menu_dropdown(dropdownIndex);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
if (dropdownIndex == -1)
|
||||
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, uint16);
|
||||
|
||||
switch (dropdownIndex) {
|
||||
case 0:
|
||||
window_map_open();
|
||||
@@ -2858,14 +2864,18 @@ void top_toolbar_init_fastforward_menu(rct_window* w, rct_widget* widget) {
|
||||
dropdown_set_checked(5, true);
|
||||
}
|
||||
|
||||
if (gConfigGeneral.debugging_tools)
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = (gGameSpeed == 8 ? 0 : gGameSpeed);
|
||||
else
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = (gGameSpeed >= 4 ? 0 : gGameSpeed);
|
||||
if (gConfigGeneral.debugging_tools) {
|
||||
gDropdownDefaultIndex = (gGameSpeed == 8 ? 0 : gGameSpeed);
|
||||
} else {
|
||||
gDropdownDefaultIndex = (gGameSpeed >= 4 ? 0 : gGameSpeed);
|
||||
}
|
||||
if (gDropdownDefaultIndex == 4) {
|
||||
gDropdownDefaultIndex = 5;
|
||||
}
|
||||
}
|
||||
|
||||
void top_toolbar_fastforward_menu_dropdown(short dropdownIndex) {
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
void top_toolbar_fastforward_menu_dropdown(short dropdownIndex)
|
||||
{
|
||||
rct_window* w = window_get_main();
|
||||
if (w) {
|
||||
if (dropdownIndex >= 0 && dropdownIndex <= 5) {
|
||||
@@ -2877,7 +2887,8 @@ void top_toolbar_fastforward_menu_dropdown(short dropdownIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
void top_toolbar_init_rotate_menu(rct_window* w, rct_widget* widget) {
|
||||
void top_toolbar_init_rotate_menu(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
gDropdownItemsFormat[0] = STR_ROTATE_CLOCKWISE;
|
||||
gDropdownItemsFormat[1] = STR_ROTATE_ANTI_CLOCKWISE;
|
||||
|
||||
@@ -2888,13 +2899,13 @@ void top_toolbar_init_rotate_menu(rct_window* w, rct_widget* widget) {
|
||||
w->colours[1] | 0x80,
|
||||
0,
|
||||
2
|
||||
);
|
||||
);
|
||||
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
|
||||
gDropdownDefaultIndex = DDIDX_ROTATE_CLOCKWISE;
|
||||
}
|
||||
|
||||
void top_toolbar_rotate_menu_dropdown(short dropdownIndex) {
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
void top_toolbar_rotate_menu_dropdown(short dropdownIndex)
|
||||
{
|
||||
rct_window* w = window_get_main();
|
||||
if (w) {
|
||||
if (dropdownIndex == 0) {
|
||||
@@ -2908,7 +2919,8 @@ void top_toolbar_rotate_menu_dropdown(short dropdownIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
void top_toolbar_init_debug_menu(rct_window* w, rct_widget* widget) {
|
||||
void top_toolbar_init_debug_menu(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
gDropdownItemsFormat[0] = STR_DEBUG_DROPDOWN_CONSOLE;
|
||||
gDropdownItemsFormat[1] = STR_DEBUG_DROPDOWN_TILE_INSPECTOR;
|
||||
gDropdownItemsFormat[2] = STR_DEBUG_DROPDOWN_OBJECT_SELECTION;
|
||||
@@ -2924,10 +2936,11 @@ void top_toolbar_init_debug_menu(rct_window* w, rct_widget* widget) {
|
||||
5
|
||||
);
|
||||
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
|
||||
gDropdownDefaultIndex = DDIDX_CONSOLE;
|
||||
}
|
||||
|
||||
void top_toolbar_init_network_menu(rct_window* w, rct_widget* widget) {
|
||||
void top_toolbar_init_network_menu(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
gDropdownItemsFormat[0] = STR_PLAYER_LIST;
|
||||
|
||||
window_dropdown_show_text(
|
||||
@@ -2939,11 +2952,11 @@ void top_toolbar_init_network_menu(rct_window* w, rct_widget* widget) {
|
||||
1
|
||||
);
|
||||
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
|
||||
gDropdownDefaultIndex = DDIDX_PLAYER_LIST;
|
||||
}
|
||||
|
||||
void top_toolbar_debug_menu_dropdown(short dropdownIndex) {
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
void top_toolbar_debug_menu_dropdown(short dropdownIndex)
|
||||
{
|
||||
rct_window* w = window_get_main();
|
||||
if (w) {
|
||||
switch (dropdownIndex) {
|
||||
@@ -2967,8 +2980,8 @@ void top_toolbar_debug_menu_dropdown(short dropdownIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
void top_toolbar_network_menu_dropdown(short dropdownIndex) {
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
void top_toolbar_network_menu_dropdown(short dropdownIndex)
|
||||
{
|
||||
rct_window* w = window_get_main();
|
||||
if (w) {
|
||||
switch (dropdownIndex) {
|
||||
@@ -3040,15 +3053,15 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) {
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS)
|
||||
dropdown_set_checked(11, true);
|
||||
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
|
||||
gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CF8A
|
||||
*/
|
||||
void top_toolbar_view_menu_dropdown(short dropdownIndex) {
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
void top_toolbar_view_menu_dropdown(short dropdownIndex)
|
||||
{
|
||||
rct_window* w = window_get_main();
|
||||
if (w) {
|
||||
switch (dropdownIndex) {
|
||||
|
||||
Reference in New Issue
Block a user