diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index f10a17ac08..f640679449 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -1977,7 +1977,7 @@ STR_2778 :ยป{MOVE_X}{10}{STRING} STR_2779 :Viewport #{COMMA16} STR_2780 :Extra viewport # End of new strings -STR_2781 :{STRINGID}:{MOVE_X}{255}{STRINGID} +STR_2781 :{STRINGID}: STR_2782 :SHIFT + STR_2783 :CTRL + STR_2784 :Change keyboard shortcut diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 1fb2130eb1..1aae2a2949 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.2.6+ (in development) ------------------------------------------------------------------------ +- Feature: [#11231] Change shortcut window list order to be more intuitive, and split it into logical sections. 0.2.6 (2020-04-17) diff --git a/src/openrct2-ui/input/KeyboardShortcuts.h b/src/openrct2-ui/input/KeyboardShortcuts.h index 0ce841a8b9..8499a2c205 100644 --- a/src/openrct2-ui/input/KeyboardShortcuts.h +++ b/src/openrct2-ui/input/KeyboardShortcuts.h @@ -23,7 +23,7 @@ # define PLATFORM_MODIFIER CTRL #endif -enum +enum KeyboardShortcut { SHORTCUT_CLOSE_TOP_MOST_WINDOW, SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS, @@ -151,9 +151,8 @@ namespace OpenRCT2 } // namespace Input } // namespace OpenRCT2 -/** The current shortcut being changed. */ +// The current shortcut being changed. extern uint8_t gKeyboardShortcutChangeId; -extern const rct_string_id ShortcutStringIds[SHORTCUT_COUNT]; void keyboard_shortcuts_reset(); bool keyboard_shortcuts_load(); diff --git a/src/openrct2-ui/windows/ShortcutKeyChange.cpp b/src/openrct2-ui/windows/ShortcutKeyChange.cpp index 6eb375b23d..900ff22d1e 100644 --- a/src/openrct2-ui/windows/ShortcutKeyChange.cpp +++ b/src/openrct2-ui/windows/ShortcutKeyChange.cpp @@ -69,12 +69,17 @@ static rct_window_event_list window_shortcut_change_events = { }; // clang-format on -rct_window* window_shortcut_change_open(int32_t selected_key) +static rct_string_id CurrentShortcutKeyStringId{}; + +rct_window* window_shortcut_change_open(int32_t selected_key, rct_string_id key_string_id) { // Move this to window_shortcut_change_open window_close_by_class(WC_CHANGE_KEYBOARD_SHORTCUT); + // Save the item we are selecting for new window gKeyboardShortcutChangeId = selected_key; + CurrentShortcutKeyStringId = key_string_id; + rct_window* w = window_create_centred(WW, WH, &window_shortcut_change_events, WC_CHANGE_KEYBOARD_SHORTCUT, 0); w->widgets = window_shortcut_change_widgets; @@ -108,6 +113,6 @@ static void window_shortcut_change_paint(rct_window* w, rct_drawpixelinfo* dpi) int32_t x = w->windowPos.x + 125; int32_t y = w->windowPos.y + 30; - set_format_arg(0, rct_string_id, ShortcutStringIds[gKeyboardShortcutChangeId]); + set_format_arg(0, rct_string_id, CurrentShortcutKeyStringId); gfx_draw_string_centred_wrapped(dpi, gCommonFormatArgs, x, y, 242, STR_SHORTCUT_CHANGE_PROMPT, COLOUR_BLACK); } diff --git a/src/openrct2-ui/windows/ShortcutKeys.cpp b/src/openrct2-ui/windows/ShortcutKeys.cpp index f5ee07401b..59a8927c26 100644 --- a/src/openrct2-ui/windows/ShortcutKeys.cpp +++ b/src/openrct2-ui/windows/ShortcutKeys.cpp @@ -80,91 +80,131 @@ static rct_window_event_list window_shortcut_events = { window_shortcut_scrollpaint }; -const rct_string_id ShortcutStringIds[SHORTCUT_COUNT] = { - STR_SHORTCUT_CLOSE_TOP_MOST_WINDOW, - STR_SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS, - STR_SHORTCUT_CANCEL_CONSTRUCTION_MODE, - STR_SHORTCUT_PAUSE_GAME, - STR_SHORTCUT_ZOOM_VIEW_OUT, - STR_SHORTCUT_ZOOM_VIEW_IN, - STR_SHORTCUT_ROTATE_VIEW_CLOCKWISE, - STR_SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE, - STR_SHORTCUT_ROTATE_CONSTRUCTION_OBJECT, - STR_SHORTCUT_UNDERGROUND_VIEW_TOGGLE, - STR_SHORTCUT_REMOVE_BASE_LAND_TOGGLE, - STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, - STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, - STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, - STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, - STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, - STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, - STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, - STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, - STR_SHORTCUT_ADJUST_LAND, - STR_SHORTCUT_ADJUST_WATER, - STR_SHORTCUT_BUILD_SCENERY, - STR_SHORTCUT_BUILD_PATHS, - STR_SHORTCUT_BUILD_NEW_RIDE, - STR_SHORTCUT_SHOW_FINANCIAL_INFORMATION, - STR_SHORTCUT_SHOW_RESEARCH_INFORMATION, - STR_SHORTCUT_SHOW_RIDES_LIST, - STR_SHORTCUT_SHOW_PARK_INFORMATION, - STR_SHORTCUT_SHOW_GUEST_LIST, - STR_SHORTCUT_SHOW_STAFF_LIST, - STR_SHORTCUT_SHOW_RECENT_MESSAGES, - STR_SHORTCUT_SHOW_MAP, - STR_SHORTCUT_SCREENSHOT, - STR_SHORTCUT_REDUCE_GAME_SPEED, - STR_SHORTCUT_INCREASE_GAME_SPEED, - STR_SHORTCUT_OPEN_CHEATS_WINDOW, - STR_SHORTCUT_TOGGLE_VISIBILITY_OF_TOOLBARS, - STR_SHORTCUT_SCROLL_MAP_UP, - STR_SHORTCUT_SCROLL_MAP_LEFT, - STR_SHORTCUT_SCROLL_MAP_DOWN, - STR_SHORTCUT_SCROLL_MAP_RIGHT, - STR_SEND_MESSAGE, - STR_SHORTCUT_QUICK_SAVE_GAME, - STR_SHORTCUT_SHOW_OPTIONS, - STR_SHORTCUT_MUTE_SOUND, - STR_SHORTCUT_WINDOWED_MODE_TOGGLE, - STR_SHORTCUT_SHOW_MULTIPLAYER, - STR_SHORTCUT_PAINT_ORIGINAL, - STR_SHORTCUT_DEBUG_PAINT_TOGGLE, - STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, - STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT, - STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT, - STR_SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT, - STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN, - STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP, - STR_SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE, - STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT, - STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT, - STR_SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK, - STR_SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK, - STR_SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT, - STR_SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT, - STR_LOAD_GAME, - STR_SHORTCUT_CLEAR_SCENERY, - STR_SHORTCUT_GRIDLINES_DISPLAY_TOGGLE, - STR_SHORTCUT_VIEW_CLIPPING, - STR_SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE, - STR_SHORTCUT_OPEN_TILE_INSPECTOR, - STR_ADVANCE_TO_NEXT_TICK, - STR_SHORTCUT_OPEN_SCENERY_PICKER, - STR_SHORTCUT_SCALE_UP, - STR_SHORTCUT_SCALE_DOWN, - STR_SHORTCUT_INSERT_CORRPUT_ELEMENT, - STR_SHORTCUT_COPY_ELEMENT, - STR_SHORTCUT_PASTE_ELEMENT, - STR_SHORTCUT_REMOVE_ELEMENT, - STR_SHORTCUT_MOVE_ELEMENT_UP, - STR_SHORTCUT_MOVE_ELEMENT_DOWN, - STR_SHORTCUT_INCREASE_X_COORD, - STR_SHORTCUT_DECREASE_X_COORD, - STR_SHORTCUT_INCREASE_Y_COORD, - STR_SHORTCUT_DECREASE_Y_COORD, - STR_SHORTCUT_INCREASE_ELEM_HEIGHT, - STR_SHORTCUT_DECREASE_ELEM_HEIGHT, +struct ShortcutStringPair +{ + KeyboardShortcut ShortcutId; + rct_string_id StringId; +}; + +static const ShortcutStringPair ShortcutList[] = +{ + { SHORTCUT_CLOSE_TOP_MOST_WINDOW, STR_SHORTCUT_CLOSE_TOP_MOST_WINDOW }, + { SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS, STR_SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS }, + { SHORTCUT_CANCEL_CONSTRUCTION_MODE, STR_SHORTCUT_CANCEL_CONSTRUCTION_MODE }, + { SHORTCUT_REMOVE_TOP_BOTTOM_TOOLBAR_TOGGLE, STR_SHORTCUT_TOGGLE_VISIBILITY_OF_TOOLBARS }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_PAUSE_GAME, STR_SHORTCUT_PAUSE_GAME }, + { SHORTCUT_REDUCE_GAME_SPEED, STR_SHORTCUT_REDUCE_GAME_SPEED }, + { SHORTCUT_INCREASE_GAME_SPEED, STR_SHORTCUT_INCREASE_GAME_SPEED }, + { SHORTCUT_LOAD_GAME, STR_LOAD_GAME }, + { SHORTCUT_QUICK_SAVE_GAME, STR_SHORTCUT_QUICK_SAVE_GAME }, + { SHORTCUT_SHOW_OPTIONS, STR_SHORTCUT_SHOW_OPTIONS }, + { SHORTCUT_SCREENSHOT, STR_SHORTCUT_SCREENSHOT }, + { SHORTCUT_MUTE_SOUND, STR_SHORTCUT_MUTE_SOUND }, + { SHORTCUT_OPEN_CHEAT_WINDOW, STR_SHORTCUT_OPEN_CHEATS_WINDOW }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_ZOOM_VIEW_OUT, STR_SHORTCUT_ZOOM_VIEW_OUT }, + { SHORTCUT_ZOOM_VIEW_IN, STR_SHORTCUT_ZOOM_VIEW_IN }, + { SHORTCUT_ROTATE_VIEW_CLOCKWISE, STR_SHORTCUT_ROTATE_VIEW_CLOCKWISE }, + { SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE, STR_SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE }, + { SHORTCUT_SHOW_MAP, STR_SHORTCUT_SHOW_MAP }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_CLEAR_SCENERY, STR_SHORTCUT_CLEAR_SCENERY }, + { SHORTCUT_ADJUST_LAND, STR_SHORTCUT_ADJUST_LAND }, + { SHORTCUT_ADJUST_WATER, STR_SHORTCUT_ADJUST_WATER }, + { SHORTCUT_BUILD_SCENERY, STR_SHORTCUT_BUILD_SCENERY }, + { SHORTCUT_BUILD_PATHS, STR_SHORTCUT_BUILD_PATHS }, + { SHORTCUT_BUILD_NEW_RIDE, STR_SHORTCUT_BUILD_NEW_RIDE }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_SHOW_FINANCIAL_INFORMATION, STR_SHORTCUT_SHOW_FINANCIAL_INFORMATION }, + { SHORTCUT_SHOW_RESEARCH_INFORMATION, STR_SHORTCUT_SHOW_RESEARCH_INFORMATION }, + { SHORTCUT_SHOW_RIDES_LIST, STR_SHORTCUT_SHOW_RIDES_LIST }, + { SHORTCUT_SHOW_PARK_INFORMATION, STR_SHORTCUT_SHOW_PARK_INFORMATION }, + { SHORTCUT_SHOW_GUEST_LIST, STR_SHORTCUT_SHOW_GUEST_LIST }, + { SHORTCUT_SHOW_STAFF_LIST, STR_SHORTCUT_SHOW_STAFF_LIST }, + { SHORTCUT_SHOW_RECENT_MESSAGES, STR_SHORTCUT_SHOW_RECENT_MESSAGES }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_SHOW_MULTIPLAYER, STR_SHORTCUT_SHOW_MULTIPLAYER }, + { SHORTCUT_OPEN_CHAT_WINDOW, STR_SEND_MESSAGE }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_UNDERGROUND_VIEW_TOGGLE, STR_SHORTCUT_UNDERGROUND_VIEW_TOGGLE }, + { SHORTCUT_REMOVE_BASE_LAND_TOGGLE, STR_SHORTCUT_REMOVE_BASE_LAND_TOGGLE }, + { SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE }, + { SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE }, + { SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE }, + { SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE }, + { SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE }, + { SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE }, + { SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE }, + { SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE }, + { SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE }, + { SHORTCUT_VIEW_CLIPPING, STR_SHORTCUT_VIEW_CLIPPING }, + { SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE, STR_SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE }, + { SHORTCUT_GRIDLINES_DISPLAY_TOGGLE, STR_SHORTCUT_GRIDLINES_DISPLAY_TOGGLE }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_SCENERY_PICKER, STR_SHORTCUT_OPEN_SCENERY_PICKER }, + { SHORTCUT_ROTATE_CONSTRUCTION_OBJECT, STR_SHORTCUT_ROTATE_CONSTRUCTION_OBJECT }, + { SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT, STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT }, + { SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT, STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT }, + { SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT, STR_SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT }, + { SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN, STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN }, + { SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP, STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP }, + { SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE, STR_SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE }, + { SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT, STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT }, + { SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT, STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT }, + { SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK, STR_SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK }, + { SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK, STR_SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK }, + { SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT, STR_SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT }, + { SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT, STR_SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_SCROLL_MAP_UP, STR_SHORTCUT_SCROLL_MAP_UP }, + { SHORTCUT_SCROLL_MAP_LEFT, STR_SHORTCUT_SCROLL_MAP_LEFT }, + { SHORTCUT_SCROLL_MAP_DOWN, STR_SHORTCUT_SCROLL_MAP_DOWN }, + { SHORTCUT_SCROLL_MAP_RIGHT, STR_SHORTCUT_SCROLL_MAP_RIGHT }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_WINDOWED_MODE_TOGGLE, STR_SHORTCUT_WINDOWED_MODE_TOGGLE }, + { SHORTCUT_SCALE_UP, STR_SHORTCUT_SCALE_UP }, + { SHORTCUT_SCALE_DOWN, STR_SHORTCUT_SCALE_DOWN }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_TILE_INSPECTOR, STR_SHORTCUT_OPEN_TILE_INSPECTOR }, + { SHORTCUT_INSERT_CORRUPT_ELEMENT, STR_SHORTCUT_INSERT_CORRPUT_ELEMENT }, + { SHORTCUT_COPY_ELEMENT, STR_SHORTCUT_COPY_ELEMENT }, + { SHORTCUT_PASTE_ELEMENT, STR_SHORTCUT_PASTE_ELEMENT }, + { SHORTCUT_REMOVE_ELEMENT, STR_SHORTCUT_REMOVE_ELEMENT }, + { SHORTCUT_MOVE_ELEMENT_UP, STR_SHORTCUT_MOVE_ELEMENT_UP }, + { SHORTCUT_MOVE_ELEMENT_DOWN, STR_SHORTCUT_MOVE_ELEMENT_DOWN }, + { SHORTCUT_INCREASE_X_COORD, STR_SHORTCUT_INCREASE_X_COORD }, + { SHORTCUT_DECREASE_X_COORD, STR_SHORTCUT_DECREASE_X_COORD }, + { SHORTCUT_INCREASE_Y_COORD, STR_SHORTCUT_INCREASE_Y_COORD }, + { SHORTCUT_DECREASE_Y_COORD, STR_SHORTCUT_DECREASE_Y_COORD }, + { SHORTCUT_INCREASE_ELEM_HEIGHT, STR_SHORTCUT_INCREASE_ELEM_HEIGHT }, + { SHORTCUT_DECREASE_ELEM_HEIGHT, STR_SHORTCUT_DECREASE_ELEM_HEIGHT }, + + { SHORTCUT_UNDEFINED, STR_NONE }, + + { SHORTCUT_ADVANCE_TO_NEXT_TICK, STR_ADVANCE_TO_NEXT_TICK }, + { SHORTCUT_PAINT_ORIGINAL_TOGGLE, STR_SHORTCUT_PAINT_ORIGINAL }, + { SHORTCUT_DEBUG_PAINT_TOGGLE, STR_SHORTCUT_DEBUG_PAINT_TOGGLE }, }; // clang-format on @@ -183,7 +223,7 @@ rct_window* window_shortcut_keys_open() w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RESET); window_init_scroll_widgets(w); - w->no_list_items = SHORTCUT_COUNT; + w->no_list_items = static_cast(std::size(ShortcutList)); w->selected_list_item = -1; w->min_width = WW; w->min_height = WH; @@ -258,7 +298,12 @@ static void window_shortcut_scrollmousedown(rct_window* w, int32_t scrollIndex, if (selected_item >= w->no_list_items) return; - window_shortcut_change_open(selected_item); + // Is this a separator? + if (ShortcutList[selected_item].ShortcutId == SHORTCUT_UNDEFINED) + return; + + auto& shortcut = ShortcutList[selected_item]; + window_shortcut_change_open(shortcut.ShortcutId, shortcut.StringId); } /** @@ -284,6 +329,10 @@ static void window_shortcut_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, i { gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width - 1, dpi->y + dpi->height - 1, ColourMapA[w->colours[1]].mid_light); + // TODO: the line below is a workaround for what is presumably a bug with dpi->width + // see https://github.com/OpenRCT2/OpenRCT2/issues/11238 for details + const auto scrollWidth = w->width - SCROLLBAR_WIDTH - 10; + for (int32_t i = 0; i < w->no_list_items; ++i) { int32_t y = 1 + i * SCROLLABLE_ROW_HEIGHT; @@ -297,20 +346,36 @@ static void window_shortcut_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, i continue; } + // Is this a separator? + if (ShortcutList[i].ShortcutId == SHORTCUT_UNDEFINED) + { + const int32_t top = y + (SCROLLABLE_ROW_HEIGHT / 2) - 1; + gfx_fill_rect(dpi, 0, top, scrollWidth, top, ColourMapA[w->colours[0]].mid_dark); + gfx_fill_rect(dpi, 0, top + 1, scrollWidth, top + 1, ColourMapA[w->colours[0]].lightest); + continue; + } + int32_t format = STR_BLACK_STRING; if (i == w->selected_list_item) { format = STR_WINDOW_COLOUR_2_STRINGID; - gfx_filter_rect(dpi, 0, y - 1, 800, y + (SCROLLABLE_ROW_HEIGHT - 2), PALETTE_DARKEN_1); + gfx_filter_rect(dpi, 0, y - 1, scrollWidth, y + (SCROLLABLE_ROW_HEIGHT - 2), PALETTE_DARKEN_1); } - char templateString[128]; - keyboard_shortcuts_format_string(templateString, 128, i); - + const int32_t bindingOffset = scrollWidth - 150; set_format_arg(0, rct_string_id, STR_SHORTCUT_ENTRY_FORMAT); - set_format_arg(2, rct_string_id, ShortcutStringIds[i]); - set_format_arg(4, rct_string_id, STR_STRING); - set_format_arg(6, char*, templateString); - gfx_draw_string_left(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 0, y - 1); + set_format_arg(2, rct_string_id, ShortcutList[i].StringId); + gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 0, y - 1, bindingOffset); + + char keybinding[128]; + keyboard_shortcuts_format_string(keybinding, 128, ShortcutList[i].ShortcutId); + + if (strlen(keybinding) > 0) + { + const int32_t maxWidth = 150; + set_format_arg(0, rct_string_id, STR_STRING); + set_format_arg(2, char*, keybinding); + gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, bindingOffset, y - 1, maxWidth); + } } } diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index 32c3628b65..9c6953c098 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -60,7 +60,7 @@ rct_window* window_save_prompt_open(); rct_window* window_server_list_open(); rct_window* window_server_start_open(); #endif -rct_window* window_shortcut_change_open(int32_t selected_key); +rct_window* window_shortcut_change_open(int32_t selected_key, rct_string_id key_string_id); rct_window* window_shortcut_keys_open(); rct_window* window_staff_list_open(); rct_window* window_staff_open(Peep* peep);