mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-22 07:13:07 +01:00
Add option to trap mouse cursor
This commit is contained in:
committed by
Linus Unnebäck
parent
ed8e6afb6f
commit
1a4ebcc0f7
@@ -3920,6 +3920,7 @@ STR_5578 :Russian Rouble (R)
|
||||
STR_5579 :Window scale factor:
|
||||
STR_5580 :Czech koruna (Kc)
|
||||
STR_5581 :Show FPS
|
||||
STR_5582 :Trap mouse cursor in window
|
||||
|
||||
#####################
|
||||
# Rides/attractions #
|
||||
|
||||
@@ -200,6 +200,7 @@ config_property_definition _generalDefinitions[] = {
|
||||
{ offsetof(general_configuration, steam_overlay_pause), "steam_overlay_pause", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL },
|
||||
{ offsetof(general_configuration, window_scale), "window_scale", CONFIG_VALUE_TYPE_FLOAT, { .value_float = 1.0f }, NULL },
|
||||
{ offsetof(general_configuration, show_fps), "show_fps", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL },
|
||||
{ offsetof(general_configuration, trap_cursor), "trap_cursor", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL },
|
||||
};
|
||||
|
||||
config_property_definition _interfaceDefinitions[] = {
|
||||
|
||||
@@ -169,6 +169,7 @@ typedef struct {
|
||||
uint8 steam_overlay_pause;
|
||||
float window_scale;
|
||||
uint8 show_fps;
|
||||
uint8 trap_cursor;
|
||||
} general_configuration;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -2180,6 +2180,8 @@ enum {
|
||||
|
||||
STR_SHOW_FPS = 5581,
|
||||
|
||||
STR_TRAP_MOUSE = 5582,
|
||||
|
||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||
STR_COUNT = 32768
|
||||
};
|
||||
|
||||
@@ -739,11 +739,18 @@ static void platform_create_window()
|
||||
gWindow = SDL_CreateWindow(
|
||||
"OpenRCT2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_RESIZABLE
|
||||
);
|
||||
|
||||
if (!gWindow) {
|
||||
log_fatal("SDL_CreateWindow failed %s", SDL_GetError());
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (gConfigGeneral.trap_cursor)
|
||||
SDL_SetWindowGrab(gWindow, SDL_TRUE);
|
||||
else
|
||||
SDL_SetWindowGrab(gWindow, SDL_FALSE);
|
||||
|
||||
|
||||
// Set the update palette function pointer
|
||||
RCT2_GLOBAL(0x009E2BE4, update_palette_func) = platform_update_palette;
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
|
||||
// Controls and interface
|
||||
WIDX_CONTROLS_GROUP = WIDX_PAGE_START,
|
||||
WIDX_SCREEN_EDGE_SCROLLING,
|
||||
WIDX_TRAP_CURSOR,
|
||||
WIDX_INVERT_DRAG,
|
||||
WIDX_HOTKEY_DROPDOWN,
|
||||
WIDX_THEMES_GROUP,
|
||||
@@ -233,23 +234,24 @@ static rct_widget window_options_audio_widgets[] = {
|
||||
|
||||
static rct_widget window_options_controls_and_interface_widgets[] = {
|
||||
MAIN_OPTIONS_WIDGETS,
|
||||
{ WWT_GROUPBOX, 1, 5, 304, 53, 114, STR_CONTROLS_GROUP, STR_NONE }, // Controls group
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 68, 79, STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP }, // Edge scrolling
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 83, 94, STR_INVERT_RIGHT_MOUSE_DRAG, STR_NONE }, // Invert right mouse dragging
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 26, 185, 98, 109, STR_HOTKEY, STR_HOTKEY_TIP }, // Set hotkeys buttons
|
||||
{ WWT_GROUPBOX, 1, 5, 304, 53, 129, STR_CONTROLS_GROUP, STR_NONE }, // Controls group
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 68, 79, STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP }, // Edge scrolling
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 83, 94, STR_TRAP_MOUSE, STR_NONE }, // Trap mouse
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 98, 109, STR_INVERT_RIGHT_MOUSE_DRAG, STR_NONE }, // Invert right mouse dragging
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 26, 185, 113, 124, STR_HOTKEY, STR_HOTKEY_TIP }, // Set hotkeys buttons
|
||||
|
||||
{ WWT_GROUPBOX, 1, 5, 304, 118, 164, STR_THEMES_GROUP, STR_NONE }, // Toolbar buttons group
|
||||
{ WWT_DROPDOWN, 1, 155, 299, 132, 143, STR_NONE, STR_NONE }, // Themes
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 133, 142, STR_DROPDOWN_GLYPH, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 10, 145, 148, 159, STR_EDIT_THEMES_BUTTON, STR_NONE }, // Themes button
|
||||
{ WWT_GROUPBOX, 1, 5, 304, 133, 179, STR_THEMES_GROUP, STR_NONE }, // Toolbar buttons group
|
||||
{ WWT_DROPDOWN, 1, 155, 299, 147, 158, STR_NONE, STR_NONE }, // Themes
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 148, 157, STR_DROPDOWN_GLYPH, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 10, 145, 163, 174, STR_EDIT_THEMES_BUTTON, STR_NONE }, // Themes button
|
||||
|
||||
{ WWT_GROUPBOX, 1, 5, 304, 168, 230, STR_TOOLBAR_BUTTONS_GROUP, STR_NONE }, // Toolbar buttons group
|
||||
{ WWT_CHECKBOX, 2, 10, 145, 199, 210, STR_FINANCES_BUTTON_ON_TOOLBAR, STR_NONE }, // Finances
|
||||
{ WWT_CHECKBOX, 2, 10, 145, 214, 225, STR_RESEARCH_BUTTON_ON_TOOLBAR, STR_NONE }, // Research
|
||||
{ WWT_CHECKBOX, 2, 155, 299, 199, 210, STR_CHEATS_BUTTON_ON_TOOLBAR, STR_NONE }, // Cheats
|
||||
{ WWT_CHECKBOX, 2, 155, 299, 214, 225, STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR, STR_NONE }, // Recent messages
|
||||
{ WWT_GROUPBOX, 1, 5, 304, 183, 245, STR_TOOLBAR_BUTTONS_GROUP, STR_NONE }, // Toolbar buttons group
|
||||
{ WWT_CHECKBOX, 2, 10, 145, 214, 225, STR_FINANCES_BUTTON_ON_TOOLBAR, STR_NONE }, // Finances
|
||||
{ WWT_CHECKBOX, 2, 10, 145, 229, 240, STR_RESEARCH_BUTTON_ON_TOOLBAR, STR_NONE }, // Research
|
||||
{ WWT_CHECKBOX, 2, 155, 299, 214, 225, STR_CHEATS_BUTTON_ON_TOOLBAR, STR_NONE }, // Cheats
|
||||
{ WWT_CHECKBOX, 2, 155, 299, 229, 240, STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR, STR_NONE }, // Recent messages
|
||||
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 239, 250, STR_SELECT_BY_TRACK_TYPE, STR_SELECT_BY_TRACK_TYPE_TIP }, // Select by track type
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 254, 265, STR_SELECT_BY_TRACK_TYPE, STR_SELECT_BY_TRACK_TYPE_TIP }, // Select by track type
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
@@ -404,6 +406,7 @@ static uint32 window_options_page_enabled_widgets[] = {
|
||||
|
||||
MAIN_OPTIONS_ENABLED_WIDGETS |
|
||||
(1 << WIDX_SCREEN_EDGE_SCROLLING) |
|
||||
(1 << WIDX_TRAP_CURSOR) |
|
||||
(1 << WIDX_INVERT_DRAG) |
|
||||
(1 << WIDX_HOTKEY_DROPDOWN) |
|
||||
(1 << WIDX_TOOLBAR_SHOW_FINANCES) |
|
||||
@@ -588,6 +591,17 @@ static void window_options_mouseup(rct_window *w, int widgetIndex)
|
||||
case WIDX_SCREEN_EDGE_SCROLLING:
|
||||
gConfigGeneral.edge_scrolling ^= 1;
|
||||
config_save_default();
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_TRAP_CURSOR:
|
||||
gConfigGeneral.trap_cursor ^= 1;
|
||||
config_save_default();
|
||||
|
||||
if (gConfigGeneral.trap_cursor)
|
||||
SDL_SetWindowGrab(gWindow, SDL_TRUE);
|
||||
else
|
||||
SDL_SetWindowGrab(gWindow, SDL_FALSE);
|
||||
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_TOOLBAR_SHOW_FINANCES:
|
||||
@@ -1285,6 +1299,7 @@ static void window_options_invalidate(rct_window *w)
|
||||
|
||||
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
|
||||
widget_set_checkbox_value(w, WIDX_SCREEN_EDGE_SCROLLING, gConfigGeneral.edge_scrolling);
|
||||
widget_set_checkbox_value(w, WIDX_TRAP_CURSOR, gConfigGeneral.trap_cursor);
|
||||
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);
|
||||
@@ -1296,6 +1311,7 @@ static void window_options_invalidate(rct_window *w)
|
||||
window_options_controls_and_interface_widgets[WIDX_THEMES_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
||||
window_options_controls_and_interface_widgets[WIDX_THEMES_BUTTON].type = WWT_DROPDOWN_BUTTON;
|
||||
window_options_controls_and_interface_widgets[WIDX_SCREEN_EDGE_SCROLLING].type = WWT_CHECKBOX;
|
||||
window_options_controls_and_interface_widgets[WIDX_TRAP_CURSOR].type = WWT_CHECKBOX;
|
||||
window_options_controls_and_interface_widgets[WIDX_HOTKEY_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
||||
window_options_controls_and_interface_widgets[WIDX_TOOLBAR_SHOW_FINANCES].type = WWT_CHECKBOX;
|
||||
window_options_controls_and_interface_widgets[WIDX_TOOLBAR_SHOW_RESEARCH].type = WWT_CHECKBOX;
|
||||
|
||||
Reference in New Issue
Block a user