mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +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_5579 :Window scale factor:
|
||||||
STR_5580 :Czech koruna (Kc)
|
STR_5580 :Czech koruna (Kc)
|
||||||
STR_5581 :Show FPS
|
STR_5581 :Show FPS
|
||||||
|
STR_5582 :Trap mouse cursor in window
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# Rides/attractions #
|
# 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, 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, 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, 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[] = {
|
config_property_definition _interfaceDefinitions[] = {
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ typedef struct {
|
|||||||
uint8 steam_overlay_pause;
|
uint8 steam_overlay_pause;
|
||||||
float window_scale;
|
float window_scale;
|
||||||
uint8 show_fps;
|
uint8 show_fps;
|
||||||
|
uint8 trap_cursor;
|
||||||
} general_configuration;
|
} general_configuration;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -2180,6 +2180,8 @@ enum {
|
|||||||
|
|
||||||
STR_SHOW_FPS = 5581,
|
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
|
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||||
STR_COUNT = 32768
|
STR_COUNT = 32768
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -739,11 +739,18 @@ static void platform_create_window()
|
|||||||
gWindow = SDL_CreateWindow(
|
gWindow = SDL_CreateWindow(
|
||||||
"OpenRCT2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_RESIZABLE
|
"OpenRCT2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_RESIZABLE
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!gWindow) {
|
if (!gWindow) {
|
||||||
log_fatal("SDL_CreateWindow failed %s", SDL_GetError());
|
log_fatal("SDL_CreateWindow failed %s", SDL_GetError());
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gConfigGeneral.trap_cursor)
|
||||||
|
SDL_SetWindowGrab(gWindow, SDL_TRUE);
|
||||||
|
else
|
||||||
|
SDL_SetWindowGrab(gWindow, SDL_FALSE);
|
||||||
|
|
||||||
|
|
||||||
// Set the update palette function pointer
|
// Set the update palette function pointer
|
||||||
RCT2_GLOBAL(0x009E2BE4, update_palette_func) = platform_update_palette;
|
RCT2_GLOBAL(0x009E2BE4, update_palette_func) = platform_update_palette;
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
|
|||||||
// Controls and interface
|
// Controls and interface
|
||||||
WIDX_CONTROLS_GROUP = WIDX_PAGE_START,
|
WIDX_CONTROLS_GROUP = WIDX_PAGE_START,
|
||||||
WIDX_SCREEN_EDGE_SCROLLING,
|
WIDX_SCREEN_EDGE_SCROLLING,
|
||||||
|
WIDX_TRAP_CURSOR,
|
||||||
WIDX_INVERT_DRAG,
|
WIDX_INVERT_DRAG,
|
||||||
WIDX_HOTKEY_DROPDOWN,
|
WIDX_HOTKEY_DROPDOWN,
|
||||||
WIDX_THEMES_GROUP,
|
WIDX_THEMES_GROUP,
|
||||||
@@ -233,23 +234,24 @@ static rct_widget window_options_audio_widgets[] = {
|
|||||||
|
|
||||||
static rct_widget window_options_controls_and_interface_widgets[] = {
|
static rct_widget window_options_controls_and_interface_widgets[] = {
|
||||||
MAIN_OPTIONS_WIDGETS,
|
MAIN_OPTIONS_WIDGETS,
|
||||||
{ WWT_GROUPBOX, 1, 5, 304, 53, 114, STR_CONTROLS_GROUP, STR_NONE }, // Controls group
|
{ 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, 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_CHECKBOX, 2, 10, 299, 83, 94, STR_TRAP_MOUSE, STR_NONE }, // Trap mouse
|
||||||
{ WWT_DROPDOWN_BUTTON, 1, 26, 185, 98, 109, STR_HOTKEY, STR_HOTKEY_TIP }, // Set hotkeys buttons
|
{ 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_GROUPBOX, 1, 5, 304, 133, 179, STR_THEMES_GROUP, STR_NONE }, // Toolbar buttons group
|
||||||
{ WWT_DROPDOWN, 1, 155, 299, 132, 143, STR_NONE, STR_NONE }, // Themes
|
{ WWT_DROPDOWN, 1, 155, 299, 147, 158, STR_NONE, STR_NONE }, // Themes
|
||||||
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 133, 142, STR_DROPDOWN_GLYPH, STR_NONE },
|
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 148, 157, STR_DROPDOWN_GLYPH, STR_NONE },
|
||||||
{ WWT_DROPDOWN_BUTTON, 1, 10, 145, 148, 159, STR_EDIT_THEMES_BUTTON, STR_NONE }, // Themes button
|
{ 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_GROUPBOX, 1, 5, 304, 183, 245, 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_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, 10, 145, 229, 240, 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_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_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 },
|
{ WIDGETS_END },
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -404,6 +406,7 @@ static uint32 window_options_page_enabled_widgets[] = {
|
|||||||
|
|
||||||
MAIN_OPTIONS_ENABLED_WIDGETS |
|
MAIN_OPTIONS_ENABLED_WIDGETS |
|
||||||
(1 << WIDX_SCREEN_EDGE_SCROLLING) |
|
(1 << WIDX_SCREEN_EDGE_SCROLLING) |
|
||||||
|
(1 << WIDX_TRAP_CURSOR) |
|
||||||
(1 << WIDX_INVERT_DRAG) |
|
(1 << WIDX_INVERT_DRAG) |
|
||||||
(1 << WIDX_HOTKEY_DROPDOWN) |
|
(1 << WIDX_HOTKEY_DROPDOWN) |
|
||||||
(1 << WIDX_TOOLBAR_SHOW_FINANCES) |
|
(1 << WIDX_TOOLBAR_SHOW_FINANCES) |
|
||||||
@@ -588,6 +591,17 @@ static void window_options_mouseup(rct_window *w, int widgetIndex)
|
|||||||
case WIDX_SCREEN_EDGE_SCROLLING:
|
case WIDX_SCREEN_EDGE_SCROLLING:
|
||||||
gConfigGeneral.edge_scrolling ^= 1;
|
gConfigGeneral.edge_scrolling ^= 1;
|
||||||
config_save_default();
|
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);
|
window_invalidate(w);
|
||||||
break;
|
break;
|
||||||
case WIDX_TOOLBAR_SHOW_FINANCES:
|
case WIDX_TOOLBAR_SHOW_FINANCES:
|
||||||
@@ -1285,6 +1299,7 @@ static void window_options_invalidate(rct_window *w)
|
|||||||
|
|
||||||
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
|
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_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_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_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_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_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_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_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_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_FINANCES].type = WWT_CHECKBOX;
|
||||||
window_options_controls_and_interface_widgets[WIDX_TOOLBAR_SHOW_RESEARCH].type = WWT_CHECKBOX;
|
window_options_controls_and_interface_widgets[WIDX_TOOLBAR_SHOW_RESEARCH].type = WWT_CHECKBOX;
|
||||||
|
|||||||
Reference in New Issue
Block a user