From fd914094a771a01197cfb153283236d3651a0dbf Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 20 Jun 2015 17:52:38 +0200 Subject: [PATCH] Add option to invert viewport dragging (#1332) --- data/language/english_uk.txt | 3 ++- src/config.c | 1 + src/config.h | 1 + src/input.c | 9 +++++++-- src/localisation/string_ids.h | 2 ++ src/windows/options.c | 17 +++++++++++++---- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index d36b4912e4..8401ebc0ac 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3704,4 +3704,5 @@ STR_5367 :Fast STR_5368 :Reset crash status STR_5369 :Park parameters... STR_5370 :{SMALLFONT}{BLACK}Click this button to modify park{NEWLINE}parameters like restrictions,{NEWLINE}guest generation and money. -STR_5371 :Object Selection \ No newline at end of file +STR_5371 :Object Selection +STR_5372 :Invert right mouse dragging \ No newline at end of file diff --git a/src/config.c b/src/config.c index cf7651288e..2acfd44095 100644 --- a/src/config.c +++ b/src/config.c @@ -179,6 +179,7 @@ config_property_definition _generalDefinitions[] = { { offsetof(general_configuration, auto_staff_placement), "auto_staff", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, { offsetof(general_configuration, last_run_version), "last_run_version", CONFIG_VALUE_TYPE_STRING, { .value_string = NULL }, NULL }, { offsetof(general_configuration, title_sequence), "title_sequence", CONFIG_VALUE_TYPE_UINT8, TITLE_SEQUENCE_OPENRCT2, NULL }, + { offsetof(general_configuration, invert_viewport_drag), "invert_viewport_drag", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, }; config_property_definition _interfaceDefinitions[] = { diff --git a/src/config.h b/src/config.h index d9fcd3ae62..9c161c965d 100644 --- a/src/config.h +++ b/src/config.h @@ -144,6 +144,7 @@ typedef struct { uint8 auto_staff_placement; utf8string last_run_version; uint8 title_sequence; + uint8 invert_viewport_drag; } general_configuration; typedef struct { diff --git a/src/input.c b/src/input.c index a1cb6e67c2..3bffaed02c 100644 --- a/src/input.c +++ b/src/input.c @@ -436,8 +436,13 @@ static void input_viewport_drag_continue() RCT2_GLOBAL(0x009DE540, sint16) = 1000; dx <<= viewport->zoom + 1; dy <<= viewport->zoom + 1; - w->saved_view_x += dx; - w->saved_view_y += dy; + if (gConfigGeneral.invert_viewport_drag){ + w->saved_view_x -= dx; + w->saved_view_y -= dy; + } else { + w->saved_view_x += dx; + w->saved_view_y += dy; + } } } diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 139104e3a2..91ed513dc1 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -1537,6 +1537,8 @@ enum { STR_NORMAL = 5366, STR_FAST = 5367, + STR_INVERT_RIGHT_MOUSE_DRAG = 5372, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/windows/options.c b/src/windows/options.c index a618b7442b..dc9da836c0 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -108,6 +108,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX { // Controls WIDX_SCREEN_EDGE_SCROLLING = WIDX_PAGE_START, + WIDX_INVERT_DRAG, WIDX_HOTKEY_DROPDOWN, WIDX_TOOLBAR_SHOW_FINANCES, WIDX_TOOLBAR_SHOW_RESEARCH, @@ -199,10 +200,11 @@ static rct_widget window_options_audio_widgets[] = { static rct_widget window_options_controls_widgets[] = { MAIN_OPTIONS_WIDGETS, { WWT_CHECKBOX, 2, 10, 299, 54, 65, STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP }, - { WWT_DROPDOWN_BUTTON, 1, 26, 185, 69, 80, STR_HOTKEY, STR_HOTKEY_TIP }, - { WWT_CHECKBOX, 2, 10, 299, 84, 95, 5120, STR_NONE }, - { WWT_CHECKBOX, 2, 10, 299, 99, 110, 5121, STR_NONE }, - { WWT_CHECKBOX, 2, 10, 299, 114, 125, 5147, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 69, 80, STR_INVERT_RIGHT_MOUSE_DRAG,STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 26, 185, 84, 95, STR_HOTKEY, STR_HOTKEY_TIP }, + { WWT_CHECKBOX, 2, 10, 299, 99, 110, 5120, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 114, 125, 5121, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 129, 140, 5147, STR_NONE }, { WIDGETS_END }, }; @@ -349,6 +351,7 @@ static uint32 window_options_page_enabled_widgets[] = { MAIN_OPTIONS_ENABLED_WIDGETS | (1 << WIDX_SCREEN_EDGE_SCROLLING) | + (1 << WIDX_INVERT_DRAG) | (1 << WIDX_HOTKEY_DROPDOWN) | (1 << WIDX_TOOLBAR_SHOW_FINANCES) | (1 << WIDX_TOOLBAR_SHOW_RESEARCH) | @@ -509,6 +512,11 @@ static void window_options_mouseup() window_invalidate(w); window_invalidate_by_class(WC_TOP_TOOLBAR); break; + case WIDX_INVERT_DRAG: + gConfigGeneral.invert_viewport_drag ^= 1; + config_save_default(); + window_invalidate(w); + break; } break; @@ -1105,6 +1113,7 @@ static void window_options_invalidate() case WINDOW_OPTIONS_PAGE_CONTROLS: widget_set_checkbox_value(w, WIDX_SCREEN_EDGE_SCROLLING, gConfigGeneral.edge_scrolling); + widget_set_checkbox_value(w, WIDX_INVERT_DRAG, gConfigGeneral.invert_viewport_drag); widget_set_checkbox_value(w, WIDX_TOOLBAR_SHOW_FINANCES, gConfigInterface.toolbar_show_finances); widget_set_checkbox_value(w, WIDX_TOOLBAR_SHOW_RESEARCH, gConfigInterface.toolbar_show_research); widget_set_checkbox_value(w, WIDX_TOOLBAR_SHOW_CHEATS, gConfigInterface.toolbar_show_cheats);