Browse Source

love.wheelmoved: add preciseX, preciseY, and direction enum parameters.

Fixes #1910.
Sasha Szpakowski 2 years ago
parent
commit
059d60b404
2 changed files with 16 additions and 2 deletions
  1. 14 0
      src/modules/event/sdl/Event.cpp
  2. 2 2
      src/modules/love/callbacks.lua

+ 14 - 0
src/modules/event/sdl/Event.cpp

@@ -294,6 +294,20 @@ Message *Event::convert(const SDL_Event &e)
 	case SDL_MOUSEWHEEL:
 		vargs.emplace_back((double) e.wheel.x);
 		vargs.emplace_back((double) e.wheel.y);
+#if SDL_VERSION_ATLEAST(2, 0, 18)
+		// These values will be garbage if 2.0.18+ headers are used but a lower
+		// version of SDL is used at runtime, but other bits of code already
+		// prevent running in that situation.
+		vargs.emplace_back((double) e.wheel.preciseX);
+		vargs.emplace_back((double) e.wheel.preciseY);
+#else
+		vargs.emplace_back((double) e.wheel.x);
+		vargs.emplace_back((double) e.wheel.y);
+#endif
+
+		txt = e.wheel.direction == SDL_MOUSEWHEEL_FLIPPED ? "flipped" : "standard";
+		vargs.emplace_back(txt, strlen(txt));
+
 		msg = new Message("wheelmoved", vargs);
 		break;
 	case SDL_FINGERDOWN:

+ 2 - 2
src/modules/love/callbacks.lua

@@ -49,8 +49,8 @@ function love.createhandlers()
 		mousereleased = function (x,y,b,t,c)
 			if love.mousereleased then return love.mousereleased(x,y,b,t,c) end
 		end,
-		wheelmoved = function (x,y)
-			if love.wheelmoved then return love.wheelmoved(x,y) end
+		wheelmoved = function (x,y,px,py,dir)
+			if love.wheelmoved then return love.wheelmoved(x,y,px,py,dir) end
 		end,
 		touchpressed = function (id,x,y,dx,dy,p)
 			if love.touchpressed then return love.touchpressed(id,x,y,dx,dy,p) end