Scaled mouse coordinates before passing them to RmlUi

This commit is contained in:
Mr-Wiseguy 2024-01-19 14:14:47 -05:00
parent 0a4ae48d24
commit 3456b03b4d

View File

@ -896,7 +896,7 @@ void init_hook(RT64::RenderInterface* interface, RT64::RenderDevice* device) {
int width, height; int width, height;
SDL_GetWindowSizeInPixels(window, &width, &height); SDL_GetWindowSizeInPixels(window, &width, &height);
UIContext.rml.context = Rml::CreateContext("main", Rml::Vector2i(width, height)); UIContext.rml.context = Rml::CreateContext("main", Rml::Vector2i(width * UIContext.rml.ui_scale, height * UIContext.rml.ui_scale));
UIContext.rml.make_bindings(); UIContext.rml.make_bindings();
Rml::Debugger::Initialise(UIContext.rml.context); Rml::Debugger::Initialise(UIContext.rml.context);
@ -974,6 +974,24 @@ void draw_hook(RT64::RenderCommandList* command_list, RT64::RenderFramebuffer* s
bool mouse_moved = false; bool mouse_moved = false;
while (recomp::try_deque_event(cur_event)) { while (recomp::try_deque_event(cur_event)) {
// Scale coordinates for mouse events based on the UI scale
switch (cur_event.type) {
case SDL_EventType::SDL_MOUSEMOTION:
cur_event.motion.x *= UIContext.rml.ui_scale;
cur_event.motion.y *= UIContext.rml.ui_scale;
cur_event.motion.xrel *= UIContext.rml.ui_scale;
cur_event.motion.yrel *= UIContext.rml.ui_scale;
break;
case SDL_EventType::SDL_MOUSEBUTTONDOWN:
case SDL_EventType::SDL_MOUSEBUTTONUP:
cur_event.button.x *= UIContext.rml.ui_scale;
cur_event.button.y *= UIContext.rml.ui_scale;
break;
case SDL_EventType::SDL_MOUSEWHEEL:
cur_event.wheel.x *= UIContext.rml.ui_scale;
cur_event.wheel.y *= UIContext.rml.ui_scale;
break;
}
RmlSDL::InputEventHandler(UIContext.rml.context, cur_event); RmlSDL::InputEventHandler(UIContext.rml.context, cur_event);
// If a menu is open then implement some additional behavior for specific events on top of what RmlUi normally does with them. // If a menu is open then implement some additional behavior for specific events on top of what RmlUi normally does with them.