From 586e5ef9cd29fe7a2ad0914651b00e4a49343eda Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Tue, 5 Jan 2016 21:46:38 +0000 Subject: [PATCH] integrate variable: gPressedWidget --- src/input.c | 54 ++++++++++++---------------- src/input.h | 2 ++ src/interface/viewport.c | 2 +- src/interface/widget.c | 20 +++++------ src/windows/editor_inventions_list.c | 2 +- 5 files changed, 34 insertions(+), 46 deletions(-) diff --git a/src/input.c b/src/input.c index dd0d6cc4b6..07c9a86e92 100644 --- a/src/input.c +++ b/src/input.c @@ -72,6 +72,8 @@ static sint32 _originalWindowHeight; uint8 gInputState; uint8 gInputFlags; +widget_ref gPressedWidget; + uint16 gTooltipNotShownTicks; uint16 gTooltipTimeout; widget_ref gTooltipWidget; @@ -574,9 +576,9 @@ static void input_scroll_begin(rct_window *w, int widgetIndex, int x, int y) widget = &w->widgets[widgetIndex]; gInputState = INPUT_STATE_SCROLL_LEFT; - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WIDGETINDEX, uint16) = widgetIndex; - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, rct_windowclass) = w->classification; - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, rct_windownumber) = w->number; + gPressedWidget.window_classification = w->classification; + gPressedWidget.window_number = w->number; + gPressedWidget.widget_index = widgetIndex; gTooltipCursorX = x; gTooltipCursorY = y; @@ -646,15 +648,10 @@ static void input_scroll_continue(rct_window *w, int widgetIndex, int state, int assert(w != NULL); widget = &w->widgets[widgetIndex]; - if (widgetIndex != RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WIDGETINDEX, uint32)){ - invalidate_scroll(); - return; - } - if (w->classification != RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, uint8)){ - invalidate_scroll(); - return; - } - if (w->number != RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, uint16)){ + if (w->classification != gPressedWidget.window_classification || + w->number != gPressedWidget.window_number || + widgetIndex != gPressedWidget.widget_index + ) { invalidate_scroll(); return; } @@ -1044,9 +1041,9 @@ static void input_widget_left(int x, int y, rct_window *w, int widgetIndex) audio_play_sound_panned(SOUND_CLICK_1, w->x + (widget->left + widget->right) / 2, 0, 0, 0); // Set new cursor down widget - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, rct_windowclass) = windowClass; - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, rct_windownumber) = windowNumber; - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WIDGETINDEX, uint16) = widgetIndex; + gPressedWidget.window_classification = windowClass; + gPressedWidget.window_number = windowNumber; + gPressedWidget.widget_index = widgetIndex; gInputFlags |= INPUT_FLAG_WIDGET_PRESSED; gInputState = INPUT_STATE_WIDGET_PRESSED; RCT2_GLOBAL(0x009DE528, uint16) = 1; @@ -1192,9 +1189,9 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi rct_windowclass cursor_w_class; rct_windownumber cursor_w_number; - cursor_w_class = RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, rct_windowclass); - cursor_w_number = RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, rct_windownumber); - int cursor_widgetIndex = RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WIDGETINDEX, uint32); + cursor_w_class = gPressedWidget.window_classification; + cursor_w_number = gPressedWidget.window_number; + int cursor_widgetIndex = gPressedWidget.widget_index; rct_window *cursor_w = window_find_by_number(cursor_w_class, cursor_w_number); if (cursor_w == NULL) { @@ -1547,20 +1544,13 @@ void sub_6ED990(char cursor_id){ */ void invalidate_scroll() { - rct_window* wind = window_find_by_number( - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, uint8), - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, uint16) - ); - if (wind == NULL) return; - - int scroll_id = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SCROLL_ID, uint32); - //Reset to basic scroll - wind->scrolls[scroll_id / sizeof(rct_scroll)].flags &= 0xFF11; - - window_invalidate_by_number( - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, uint8), - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, uint16) - ); + rct_window* w = window_find_by_number(gPressedWidget.window_classification, gPressedWidget.window_number); + if (w != NULL) { + // Reset to basic scroll + int scrollId = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SCROLL_ID, uint32); + w->scrolls[scrollId / sizeof(rct_scroll)].flags &= 0xFF11; + window_invalidate_by_number(gPressedWidget.window_classification, gPressedWidget.window_number); + } } /** diff --git a/src/input.h b/src/input.h index 3caa9d8584..3462b15910 100644 --- a/src/input.h +++ b/src/input.h @@ -69,6 +69,8 @@ typedef struct { extern uint8 gInputState; extern uint8 gInputFlags; +extern widget_ref gPressedWidget; + extern uint16 gTooltipNotShownTicks; extern uint16 gTooltipTimeout; extern widget_ref gTooltipWidget; diff --git a/src/interface/viewport.c b/src/interface/viewport.c index 80f52a9439..dd1f9da2f7 100644 --- a/src/interface/viewport.c +++ b/src/interface/viewport.c @@ -104,7 +104,7 @@ void viewport_init_all() // ? gInputFlags = 0; gInputState = INPUT_STATE_RESET; - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, rct_windowclass) = -1; + gPressedWidget.window_classification = 255; RCT2_GLOBAL(RCT2_ADDRESS_PICKEDUP_PEEP_IMAGE, sint32) = -1; gTooltipNotShownTicks = -1; RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) = 0; diff --git a/src/interface/widget.c b/src/interface/widget.c index 6175540dee..2118c19c87 100644 --- a/src/interface/widget.c +++ b/src/interface/widget.c @@ -978,19 +978,15 @@ int widget_is_disabled(rct_window *w, int widgetIndex) int widget_is_pressed(rct_window *w, int widgetIndex) { - int inputState = gInputState; - - if (w->pressed_widgets & (1LL << widgetIndex)) + if (w->pressed_widgets & (1LL << widgetIndex)) { + return 1; + } + if (gInputState == INPUT_STATE_WIDGET_PRESSED || gInputState == INPUT_STATE_DROPDOWN_ACTIVE) { + if (!(gInputFlags & INPUT_FLAG_WIDGET_PRESSED)) return 0; + if (gPressedWidget.window_classification != w->classification) return 0; + if (gPressedWidget.window_number != w->number) return 0; + if (gPressedWidget.widget_index != widgetIndex) return 0; return 1; - if (inputState == INPUT_STATE_WIDGET_PRESSED || inputState == INPUT_STATE_DROPDOWN_ACTIVE) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS, rct_windowclass) != w->classification) - return 0; - if (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WINDOWNUMBER, rct_windownumber) != w->number) - return 0; - if (!(gInputFlags & INPUT_FLAG_WIDGET_PRESSED)) - return 0; - if (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WIDGETINDEX, sint32) == widgetIndex) - return 1; } return 0; } diff --git a/src/windows/editor_inventions_list.c b/src/windows/editor_inventions_list.c index 1afcad62e4..9c2a6bba55 100644 --- a/src/windows/editor_inventions_list.c +++ b/src/windows/editor_inventions_list.c @@ -502,7 +502,7 @@ static rct_research_item *get_research_item_at(int x, int y) widgetIndex = window_find_widget_from_point(w, x, y); widget = &w->widgets[widgetIndex]; if (widgetIndex == WIDX_PRE_RESEARCHED_SCROLL || widgetIndex == WIDX_RESEARCH_ORDER_SCROLL) { - RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_DOWN_WIDGETINDEX, uint32) = widgetIndex; + gPressedWidget.widget_index = widgetIndex; widget_scroll_get_part(w, widget, x, y, &outX, &outY, &outScrollArea, &outScrollId); if (outScrollArea == SCROLL_PART_VIEW) { outScrollId = outScrollId == 0 ? 0 : 1;