[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