[Scummvm-git-logs] scummvm master -> 786aedf330e149a90761fdfbdda6fa3e04d4d853
spleen1981
noreply at scummvm.org
Sat Apr 20 19:50:32 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
786aedf330 LIBRETRO: pass virtual mouse coordinates to mouse events
Commit: 786aedf330e149a90761fdfbdda6fa3e04d4d853
https://github.com/scummvm/scummvm/commit/786aedf330e149a90761fdfbdda6fa3e04d4d853
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-04-20T21:50:21+02:00
Commit Message:
LIBRETRO: pass virtual mouse coordinates to mouse events
Changed paths:
backends/platform/libretro/include/libretro-graphics.h
backends/platform/libretro/include/libretro-os.h
backends/platform/libretro/src/libretro-graphics.cpp
backends/platform/libretro/src/libretro-os-events.cpp
backends/platform/libretro/src/libretro-os-inputs.cpp
diff --git a/backends/platform/libretro/include/libretro-graphics.h b/backends/platform/libretro/include/libretro-graphics.h
index b37466d4b2f..1a5020f3de3 100644
--- a/backends/platform/libretro/include/libretro-graphics.h
+++ b/backends/platform/libretro/include/libretro-graphics.h
@@ -138,6 +138,7 @@ public:
bool isOverlayInGUI(void){ return _overlayInGUI; }
void setMousePosition(int x, int y);
+ Common::Point convertWindowToVirtual(int x, int y) const;
};
class LibretroHWFramebuffer : public OpenGL::Backbuffer {
diff --git a/backends/platform/libretro/include/libretro-os.h b/backends/platform/libretro/include/libretro-os.h
index 033bfe5df34..baef84681b7 100644
--- a/backends/platform/libretro/include/libretro-os.h
+++ b/backends/platform/libretro/include/libretro-os.h
@@ -110,6 +110,7 @@ public:
void resetQuit(void);
void setMousePosition(int x, int y);
+ Common::Point convertWindowToVirtual(int x, int y) const;
/* Utils */
void getTimeAndDate(TimeDate &t, bool skipRecord) const override;
diff --git a/backends/platform/libretro/src/libretro-graphics.cpp b/backends/platform/libretro/src/libretro-graphics.cpp
index 255719d0d88..cc30176174f 100644
--- a/backends/platform/libretro/src/libretro-graphics.cpp
+++ b/backends/platform/libretro/src/libretro-graphics.cpp
@@ -470,6 +470,10 @@ void LibretroOpenGLGraphics::setMousePosition(int x, int y){
OpenGL::OpenGLGraphicsManager::setMousePosition(x,y);
}
+Common::Point LibretroOpenGLGraphics::convertWindowToVirtual(int x, int y) const {
+ return OpenGL::OpenGLGraphicsManager::convertWindowToVirtual(x, y);
+}
+
void LibretroHWFramebuffer::activateInternal(){
GL_CALL(glBindFramebuffer(GL_FRAMEBUFFER, retro_get_hw_fb()));
}
diff --git a/backends/platform/libretro/src/libretro-os-events.cpp b/backends/platform/libretro/src/libretro-os-events.cpp
index 3f04edc8212..a5c6066fec5 100644
--- a/backends/platform/libretro/src/libretro-os-events.cpp
+++ b/backends/platform/libretro/src/libretro-os-events.cpp
@@ -92,3 +92,12 @@ void OSystem_libretro::setMousePosition(int x, int y) {
dynamic_cast<LibretroOpenGLGraphics *>(_graphicsManager)->setMousePosition(x, y);
#endif
}
+
+Common::Point OSystem_libretro::convertWindowToVirtual(int x, int y) const {
+#ifdef USE_OPENGL
+ if (retro_get_video_hw_mode() & VIDEO_GRAPHIC_MODE_REQUEST_HW)
+ return dynamic_cast<LibretroOpenGLGraphics *>(_graphicsManager)->convertWindowToVirtual(x, y);
+ else
+#endif
+ return Common::Point(x, y);
+}
diff --git a/backends/platform/libretro/src/libretro-os-inputs.cpp b/backends/platform/libretro/src/libretro-os-inputs.cpp
index 412bbca8e70..d605cfcac95 100644
--- a/backends/platform/libretro/src/libretro-os-inputs.cpp
+++ b/backends/platform/libretro/src/libretro-os-inputs.cpp
@@ -149,10 +149,11 @@ void OSystem_libretro::processInputs(void) {
getMouseXYFromButton(false, y_coor_cursor);
if (_cursorStatus & CURSOR_STATUS_DOING_JOYSTICK) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
Common::Event ev;
ev.type = Common::EVENT_MOUSEMOVE;
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
ev.relMouse.x = _cursorStatus & CURSOR_STATUS_DOING_X ? _relMouseX : 0;
ev.relMouse.y = _cursorStatus & CURSOR_STATUS_DOING_Y ? _relMouseY : 0;
_events.push_back(ev);
@@ -176,19 +177,21 @@ void OSystem_libretro::processInputs(void) {
// Handle mouse buttons
retropad_value = mapper_get_mapper_key_status(RETROKE_LEFT_BUTTON);
if (retropad_value & (1 << RETRO_DEVICE_KEY_CHANGED)) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
Common::Event ev;
ev.type = eventID[0][(retropad_value & (1 << RETRO_DEVICE_KEY_STATUS)) ? 0 : 1];
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
_events.push_back(ev);
}
retropad_value = mapper_get_mapper_key_status(RETROKE_RIGHT_BUTTON);
if (retropad_value & (1 << RETRO_DEVICE_KEY_CHANGED)) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
Common::Event ev;
ev.type = eventID[1][(retropad_value & (1 << RETRO_DEVICE_KEY_STATUS)) ? 0 : 1];
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
_events.push_back(ev);
}
@@ -239,18 +242,20 @@ void OSystem_libretro::processInputs(void) {
}
if (ptrhold > 10 && _ptrmouseButton == 0) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
_ptrmouseButton = 1;
Common::Event ev;
ev.type = eventID[0][_ptrmouseButton ? 0 : 1];
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
_events.push_back(ev);
} else if (ptrhold == 0 && _ptrmouseButton == 1) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
_ptrmouseButton = 0;
Common::Event ev;
ev.type = eventID[0][_ptrmouseButton ? 0 : 1];
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
_events.push_back(ev);
}
@@ -290,10 +295,11 @@ void OSystem_libretro::processInputs(void) {
}
if (_cursorStatus & CURSOR_STATUS_DOING_MOUSE) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
Common::Event ev;
ev.type = Common::EVENT_MOUSEMOVE;
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
ev.relMouse.x = _cursorStatus & CURSOR_STATUS_DOING_X ? _relMouseX : 0;
ev.relMouse.y = _cursorStatus & CURSOR_STATUS_DOING_Y ? _relMouseY : 0;
_events.push_back(ev);
@@ -301,13 +307,14 @@ void OSystem_libretro::processInputs(void) {
}
for (int i = 0; i < 2; i++) {
+ Common::Point mouse = convertWindowToVirtual(_mouseX,_mouseY);
Common::Event ev;
bool down = retro_input_cb(0, RETRO_DEVICE_MOUSE, 0, retroButtons[i]);
if (down != _mouseButtons[i]) {
_mouseButtons[i] = down;
ev.type = eventID[i][down ? 0 : 1];
- ev.mouse.x = _mouseX;
- ev.mouse.y = _mouseY;
+ ev.mouse.x = mouse.x;
+ ev.mouse.y = mouse.y;
_events.push_back(ev);
}
}
More information about the Scummvm-git-logs
mailing list