/** * Opens the window/tab for the subject of the news item * * rct2: 0x0066EBE6 * */ void news_item_open_subject(sint32 type, sint32 subject) { rct_peep* peep; rct_window* window; switch (type) { case NEWS_ITEM_RIDE: window_ride_main_open(subject); break; case NEWS_ITEM_PEEP_ON_RIDE: case NEWS_ITEM_PEEP: peep = GET_PEEP(subject); window_guest_open(peep); break; case NEWS_ITEM_MONEY: window_finances_open(); break; case NEWS_ITEM_RESEARCH: if (subject >= 0x10000) { // Open ride list window window_new_ride_open(); // Switch to right tab and scroll to ride location ride_list_item rideItem; rideItem.type = subject >> 8; rideItem.entry_index = subject & 0xFF; window_new_ride_focus(rideItem); break; } // Check if window is already open window = window_bring_to_front_by_class(WC_SCENERY); if (window == NULL) { window = window_find_by_class(WC_TOP_TOOLBAR); if (window != NULL) { window_invalidate(window); if (!tool_set(window, WC_TOP_TOOLBAR__WIDX_SCENERY, TOOL_ARROW)) { input_set_flag(INPUT_FLAG_6, true); window_scenery_open(); } } } // Switch to new scenery tab window = window_find_by_class(WC_SCENERY); if (window != NULL) window_event_mouse_down_call(window, WC_SCENERY__WIDX_SCENERY_TAB_1 + subject); break; case NEWS_ITEM_PEEPS: window_guest_list_open_with_filter(GLFT_GUESTS_THINKING_X, subject);; break; case NEWS_ITEM_AWARD: window_park_awards_open(); break; case NEWS_ITEM_GRAPH: window_park_rating_open(); break; }
/** * * rct2: 0x006E8DA7 */ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetindex widgetIndex, rct_window *w, rct_widget *widget) { rct_windowclass cursor_w_class; rct_windownumber cursor_w_number; cursor_w_class = gPressedWidget.window_classification; cursor_w_number = gPressedWidget.window_number; rct_widgetindex cursor_widgetIndex = gPressedWidget.widget_index; rct_window *cursor_w = window_find_by_number(cursor_w_class, cursor_w_number); if (cursor_w == NULL) { _inputState = INPUT_STATE_RESET; return; } switch (state) { case MOUSE_STATE_RELEASED: if (!w || cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) break; if (w->disabled_widgets & (1ULL << widgetIndex)) break; if (_clickRepeatTicks != 0) { _clickRepeatTicks++; // Handle click repeat if (_clickRepeatTicks >= 16 && (_clickRepeatTicks & 3) != 0) { if (w->hold_down_widgets & (1ULL << widgetIndex)) { window_event_mouse_down_call(w, widgetIndex); } } } if (_inputFlags & INPUT_FLAG_WIDGET_PRESSED) { if (_inputState == INPUT_STATE_DROPDOWN_ACTIVE) { gDropdownHighlightedIndex = gDropdownDefaultIndex; window_invalidate_by_class(WC_DROPDOWN); } return; } _inputFlags |= INPUT_FLAG_WIDGET_PRESSED; widget_invalidate_by_number(cursor_w_class, cursor_w_number, widgetIndex); return; case MOUSE_STATE_LEFT_RELEASE: case MOUSE_STATE_RIGHT_PRESS: if (_inputState == INPUT_STATE_DROPDOWN_ACTIVE) { if (w) { sint32 dropdown_index = 0; if (w->classification == WC_DROPDOWN) { dropdown_index = dropdown_index_from_point(x, y, w); if (dropdown_index == -1) { goto dropdown_cleanup; } if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) { goto dropdown_cleanup; } if (gDropdownItemsFormat[dropdown_index] == 0) { goto dropdown_cleanup; } } else { if (cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) goto dropdown_cleanup; dropdown_index = -1; if (_inputFlags & INPUT_FLAG_DROPDOWN_STAY_OPEN){ if (!(_inputFlags & INPUT_FLAG_DROPDOWN_MOUSE_UP)){ _inputFlags |= INPUT_FLAG_DROPDOWN_MOUSE_UP; return; } } } window_close_by_class(WC_DROPDOWN); cursor_w = window_find_by_number(cursor_w_class, cursor_w_number); if (_inputFlags & INPUT_FLAG_WIDGET_PRESSED) { _inputFlags &= ~INPUT_FLAG_WIDGET_PRESSED; widget_invalidate_by_number(cursor_w_class, cursor_w_number, cursor_widgetIndex); } _inputState = INPUT_STATE_NORMAL; gTooltipTimeout = 0; 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: window_close_by_class(WC_DROPDOWN); } if (state == MOUSE_STATE_RIGHT_PRESS) { return; } _inputState = INPUT_STATE_NORMAL; gTooltipTimeout = 0; gTooltipWidget.widget_index = cursor_widgetIndex; if (!w) break; if (!widget) break; sint32 mid_point_x = (widget->left + widget->right) / 2 + w->x; audio_play_sound_panned(5, mid_point_x, 0, 0, 0); if (cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) break; if (w->disabled_widgets & (1ULL << widgetIndex)) break; widget_invalidate_by_number(cursor_w_class, cursor_w_number, widgetIndex); window_event_mouse_up_call(w, widgetIndex); default: return; } _clickRepeatTicks = 0; if (_inputState != INPUT_STATE_DROPDOWN_ACTIVE){ // Hold down widget and drag outside of area?? if (_inputFlags & INPUT_FLAG_WIDGET_PRESSED){ _inputFlags &= ~INPUT_FLAG_WIDGET_PRESSED; widget_invalidate_by_number(cursor_w_class, cursor_w_number, cursor_widgetIndex); } return; } gDropdownHighlightedIndex = -1; window_invalidate_by_class(WC_DROPDOWN); if (w == NULL) { return; } if (w->classification == WC_DROPDOWN){ sint32 dropdown_index = dropdown_index_from_point(x, y, w); if (dropdown_index == -1) { return; } if (gDropdownIsColour && gDropdownLastColourHover != dropdown_index) { gDropdownLastColourHover = dropdown_index; window_tooltip_close(); static const rct_string_id colourTooltips[] = { STR_COLOUR_BLACK_TIP, STR_COLOUR_GREY_TIP, STR_COLOUR_WHITE_TIP, STR_COLOUR_DARK_PURPLE_TIP, STR_COLOUR_LIGHT_PURPLE_TIP, STR_COLOUR_BRIGHT_PURPLE_TIP, STR_COLOUR_DARK_BLUE_TIP, STR_COLOUR_LIGHT_BLUE_TIP, STR_COLOUR_ICY_BLUE_TIP, STR_COLOUR_TEAL_TIP, STR_COLOUR_AQUAMARINE_TIP, STR_COLOUR_SATURATED_GREEN_TIP, STR_COLOUR_DARK_GREEN_TIP, STR_COLOUR_MOSS_GREEN_TIP, STR_COLOUR_BRIGHT_GREEN_TIP, STR_COLOUR_OLIVE_GREEN_TIP, STR_COLOUR_DARK_OLIVE_GREEN_TIP, STR_COLOUR_BRIGHT_YELLOW_TIP, STR_COLOUR_YELLOW_TIP, STR_COLOUR_DARK_YELLOW_TIP, STR_COLOUR_LIGHT_ORANGE_TIP, STR_COLOUR_DARK_ORANGE_TIP, STR_COLOUR_LIGHT_BROWN_TIP, STR_COLOUR_SATURATED_BROWN_TIP, STR_COLOUR_DARK_BROWN_TIP, STR_COLOUR_SALMON_PINK_TIP, STR_COLOUR_BORDEAUX_RED_TIP, STR_COLOUR_SATURATED_RED_TIP, STR_COLOUR_BRIGHT_RED_TIP, STR_COLOUR_DARK_PINK_TIP, STR_COLOUR_BRIGHT_PINK_TIP, STR_COLOUR_LIGHT_PINK_TIP, }; window_tooltip_show(colourTooltips[dropdown_index], x, y); } if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) { return; } if (gDropdownItemsFormat[dropdown_index] == 0) { return; } gDropdownHighlightedIndex = dropdown_index; window_invalidate_by_class(WC_DROPDOWN); } else { gDropdownLastColourHover = -1; window_tooltip_close(); } }
/** * * rct2: 0x006E95F9 */ static void input_widget_left(sint32 x, sint32 y, rct_window *w, rct_widgetindex widgetIndex) { rct_windowclass windowClass = 255; rct_windownumber windowNumber = 0; rct_widget *widget; if (w != NULL) { windowClass = w->classification; windowNumber = w->number; } window_close_by_class(WC_ERROR); window_close_by_class(WC_TOOLTIP); // Window might have changed position in the list, therefore find it again w = window_find_by_number(windowClass, windowNumber); if (w == NULL) return; w = window_bring_to_front(w); if (widgetIndex == -1) return; if (windowClass != gCurrentTextBox.window.classification || windowNumber != gCurrentTextBox.window.number || widgetIndex != gCurrentTextBox.widget_index) { window_cancel_textbox(); } widget = &w->widgets[widgetIndex]; switch (widget->type) { case WWT_FRAME: case WWT_RESIZE: if (window_can_resize(w) && (x >= w->x + w->width - 19 && y >= w->y + w->height - 19)) input_window_resize_begin(w, widgetIndex, x, y); break; case WWT_VIEWPORT: _inputState = INPUT_STATE_VIEWPORT_LEFT; gInputDragLastX = x; gInputDragLastY = y; _dragWidget.window_classification = windowClass; _dragWidget.window_number = windowNumber; if (_inputFlags & INPUT_FLAG_TOOL_ACTIVE) { w = window_find_by_number( gCurrentToolWidget.window_classification, gCurrentToolWidget.window_number ); if (w != NULL) { window_event_tool_down_call(w, gCurrentToolWidget.widget_index, x, y); _inputFlags |= INPUT_FLAG_4; } } break; case WWT_CAPTION: input_window_position_begin(w, widgetIndex, x, y); break; case WWT_SCROLL: input_scroll_begin(w, widgetIndex, x, y); break; default: if (widget_is_enabled(w, widgetIndex) && !widget_is_disabled(w, widgetIndex)) { audio_play_sound_panned(SOUND_CLICK_1, w->x + (widget->left + widget->right) / 2, 0, 0, 0); // Set new cursor down widget gPressedWidget.window_classification = windowClass; gPressedWidget.window_number = windowNumber; gPressedWidget.widget_index = widgetIndex; _inputFlags |= INPUT_FLAG_WIDGET_PRESSED; _inputState = INPUT_STATE_WIDGET_PRESSED; _clickRepeatTicks = 1; widget_invalidate_by_number(windowClass, windowNumber, widgetIndex); window_event_mouse_down_call(w, widgetIndex); } break; } }
/** * * rct2: 0x006E8DA7 */ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_window *w, rct_widget *widget) { RCT2_GLOBAL(0x1420054, uint16) = x; RCT2_GLOBAL(0x1420056, uint16) = y; rct_windowclass cursor_w_class; rct_windownumber cursor_w_number; 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) { gInputState = INPUT_STATE_RESET; return; } switch (state) { case MOUSE_STATE_RELEASED: if (!w || cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) break; if (w->disabled_widgets & (1ULL << widgetIndex)) break; if (RCT2_GLOBAL(0x009DE528, uint16) != 0) RCT2_GLOBAL(0x009DE528, uint16)++; if (w->hold_down_widgets & (1ULL << widgetIndex) && RCT2_GLOBAL(0x009DE528, uint16) >= 16 && !(RCT2_GLOBAL(0x009DE528, uint16) & 3) ) { window_event_mouse_down_call(w, widgetIndex); } if (gInputFlags & INPUT_FLAG_WIDGET_PRESSED) { if (gInputState == INPUT_STATE_DROPDOWN_ACTIVE) { gDropdownHighlightedIndex = gDropdownDefaultIndex; window_invalidate_by_class(WC_DROPDOWN); } return; } gInputFlags |= INPUT_FLAG_WIDGET_PRESSED; widget_invalidate_by_number(cursor_w_class, cursor_w_number, widgetIndex); return; case MOUSE_STATE_LEFT_RELEASE: case MOUSE_STATE_RIGHT_PRESS: if (gInputState == INPUT_STATE_DROPDOWN_ACTIVE) { if (w) { int dropdown_index = 0; if (w->classification == WC_DROPDOWN) { dropdown_index = dropdown_index_from_point(x, y, w); if (dropdown_index == -1) { goto dropdown_cleanup; } if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) { goto dropdown_cleanup; } if (gDropdownItemsFormat[dropdown_index] == 0) { goto dropdown_cleanup; } } else { if (cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) goto dropdown_cleanup; dropdown_index = -1; if (gInputFlags & INPUT_FLAG_DROPDOWN_STAY_OPEN){ if (!(gInputFlags & INPUT_FLAG_DROPDOWN_MOUSE_UP)){ gInputFlags |= INPUT_FLAG_DROPDOWN_MOUSE_UP; return; } } } window_close_by_class(WC_DROPDOWN); cursor_w = window_find_by_number(cursor_w_class, cursor_w_number); if (gInputFlags & INPUT_FLAG_WIDGET_PRESSED) { gInputFlags &= ~INPUT_FLAG_WIDGET_PRESSED; widget_invalidate_by_number(cursor_w_class, cursor_w_number, cursor_widgetIndex); } gInputState = INPUT_STATE_NORMAL; gTooltipTimeout = 0; 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: window_close_by_class(WC_DROPDOWN); } if (state == MOUSE_STATE_RIGHT_PRESS) { return; } gInputState = INPUT_STATE_NORMAL; gTooltipTimeout = 0; gTooltipWidget.widget_index = cursor_widgetIndex; if (!w) break; if (!widget) break; int mid_point_x = (widget->left + widget->right) / 2 + w->x; audio_play_sound_panned(5, mid_point_x, 0, 0, 0); if (cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) break; if (w->disabled_widgets & (1ULL << widgetIndex)) break; widget_invalidate_by_number(cursor_w_class, cursor_w_number, widgetIndex); window_event_mouse_up_call(w, widgetIndex); default: return; } RCT2_GLOBAL(0x009DE528, uint16) = 0; if (gInputState != INPUT_STATE_DROPDOWN_ACTIVE){ // Hold down widget and drag outside of area?? if (gInputFlags & INPUT_FLAG_WIDGET_PRESSED){ gInputFlags &= ~INPUT_FLAG_WIDGET_PRESSED; widget_invalidate_by_number(cursor_w_class, cursor_w_number, cursor_widgetIndex); } 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 (gDropdownIsColour && gDropdownLastColourHover != dropdown_index) { gDropdownLastColourHover = dropdown_index; window_tooltip_close(); window_tooltip_show(STR_COLOUR_NAMES_START + dropdown_index, x, y); } if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) { return; } if (gDropdownItemsFormat[dropdown_index] == 0) { return; } gDropdownHighlightedIndex = dropdown_index; window_invalidate_by_class(WC_DROPDOWN); } else { gDropdownLastColourHover = -1; window_tooltip_close(); } }