initialize before hiding mouse, allow mouse movement for mouse mode initially

This commit is contained in:
thecozies 2024-03-04 09:25:07 -06:00
parent a84258c3f6
commit fbe8ef8571
1 changed files with 13 additions and 3 deletions

View File

@ -773,6 +773,7 @@ struct UIContext {
Rml::Element* prev_focused; Rml::Element* prev_focused;
bool mouse_is_active_changed = false; bool mouse_is_active_changed = false;
public: public:
bool mouse_is_active_initialized = false;
bool mouse_is_active = false; bool mouse_is_active = false;
std::unique_ptr<SystemInterface_SDL> system_interface; std::unique_ptr<SystemInterface_SDL> system_interface;
std::unique_ptr<RmlRenderInterface_RT64> render_interface; std::unique_ptr<RmlRenderInterface_RT64> render_interface;
@ -813,6 +814,7 @@ struct UIContext {
prev_focused = nullptr; prev_focused = nullptr;
mouse_is_active = false; mouse_is_active = false;
mouse_is_active_changed = false; mouse_is_active_changed = false;
mouse_is_active_initialized = false;
} }
void swap_config_menu(recomp::ConfigSubmenu submenu) { void swap_config_menu(recomp::ConfigSubmenu submenu) {
@ -825,6 +827,7 @@ struct UIContext {
prev_focused = nullptr; prev_focused = nullptr;
mouse_is_active = false; mouse_is_active = false;
mouse_is_active_changed = false; mouse_is_active_changed = false;
mouse_is_active_initialized = false;
} }
} }
} }
@ -857,6 +860,7 @@ struct UIContext {
prev_focused = nullptr; prev_focused = nullptr;
mouse_is_active = false; mouse_is_active = false;
mouse_is_active_changed = false; mouse_is_active_changed = false;
mouse_is_active_initialized = false;
} }
void make_event_listeners() { void make_event_listeners() {
@ -891,8 +895,14 @@ struct UIContext {
} }
} }
if (mouse_moved || non_mouse_interacted) {
mouse_is_active_initialized = true;
}
if (mouse_is_active_initialized) {
// TODO: Figure out why this only works if the mouse is moving // TODO: Figure out why this only works if the mouse is moving
SDL_ShowCursor(mouse_is_active ? SDL_ENABLE : SDL_DISABLE); SDL_ShowCursor(mouse_is_active ? SDL_ENABLE : SDL_DISABLE);
}
Rml::Element* window_el = current_document->GetElementById("window"); Rml::Element* window_el = current_document->GetElementById("window");
if (window_el != nullptr) { if (window_el != nullptr) {
@ -1106,7 +1116,7 @@ void draw_hook(RT64::RenderCommandList* command_list, RT64::RenderFramebuffer* s
// Implement some additional behavior for specific events on top of what RmlUi normally does with them. // Implement some additional behavior for specific events on top of what RmlUi normally does with them.
switch (cur_event.type) { switch (cur_event.type) {
case SDL_EventType::SDL_MOUSEMOTION: case SDL_EventType::SDL_MOUSEMOTION:
if (!ui_context->rml.mouse_is_active) { if (!ui_context->rml.mouse_is_active && ui_context->rml.mouse_is_active_initialized) {
break; break;
} }
// fallthrough // fallthrough