| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -460,8 +460,8 @@ typedef struct CoreData { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            char currentButtonState[MAX_MOUSE_BUTTONS];     // Registers current mouse button state | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            char previousButtonState[MAX_MOUSE_BUTTONS];    // Registers previous mouse button state | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            kt">float currentWheelMove;         // Registers current mouse wheel variation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            kt">float previousWheelMove;        // Registers previous mouse wheel variation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            n">Vector2 currentWheelMove;       // Registers current mouse wheel variation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            n">Vector2 previousWheelMove;      // Registers previous mouse wheel variation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // NOTE: currentButtonState[] can't be written directly due to multithreading, app could miss the update | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            char currentButtonStateEvdev[MAX_MOUSE_BUTTONS]; // Holds the new mouse state for the next polling event to grab | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -532,7 +532,7 @@ typedef enum AutomationEventType { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_MOUSE_BUTTON_UP,          // param[0]: button | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_MOUSE_BUTTON_DOWN,        // param[0]: button | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_MOUSE_POSITION,           // param[0]: x, param[1]: y | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_MOUSE_WHEEL_MOTION,       // param[0]: delta | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_MOUSE_WHEEL_MOTION,       // param[0]: x delta, param[1]: y delta | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_GAMEPAD_CONNECT,          // param[0]: gamepad | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_GAMEPAD_DISCONNECT,       // param[0]: gamepad | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    INPUT_GAMEPAD_BUTTON_UP,        // param[0]: button | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -3890,8 +3890,28 @@ float GetMouseWheelMove(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_ANDROID) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return 0.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 wm = CORE.Input.Mouse.currentWheelMove; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (fabs(wm.x) > fabs(wm.y)) result = (float)wm.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else result = (float)wm.y; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return CORE.Input.Mouse.currentWheelMove/100.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result/100.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Get mouse wheel movement X/Y as a vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			Vector2 GetMouseWheelMoveV(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_ANDROID) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return (Vector2){ 0.0f, 0.0f }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 result = CORE.Input.Mouse.currentWheelMove; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    result.x /= 100.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    result.y /= 100.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return CORE.Input.Mouse.currentWheelMove; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -4991,7 +5011,7 @@ void PollInputEvents(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Register previous mouse states | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.currentWheelMove = 0.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.currentWheelMove = p">(Vector2){ 0.0f, 0.0f }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < MAX_MOUSE_BUTTONS; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        CORE.Input.Mouse.previousButtonState[i] = CORE.Input.Mouse.currentButtonState[i]; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -5020,7 +5040,7 @@ void PollInputEvents(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Register previous mouse wheel state | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.currentWheelMove = 0.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.currentWheelMove = p">(Vector2){ 0.0f, 0.0f }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Register previous mouse position | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -5553,8 +5573,7 @@ static void MouseCursorPosCallback(GLFWwindow *window, double x, double y) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// GLFW3 Scrolling Callback, runs on mouse wheel | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void MouseScrollCallback(GLFWwindow *window, double xoffset, double yoffset) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (fabs(xoffset) > fabs(yoffset)) CORE.Input.Mouse.currentWheelMove = (float)xoffset; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else CORE.Input.Mouse.currentWheelMove = (float)yoffset; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CORE.Input.Mouse.currentWheelMove = (Vector2){ (float)xoffset, (float)yoffset }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// GLFW3 CursorEnter Callback, when cursor enters the window | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -6462,7 +6481,7 @@ static void *EventThread(void *arg) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    gestureUpdate = true; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (event.code == REL_WHEEL) CORE.Input.Mouse.currentWheelMove += event.value; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (event.code == REL_WHEEL) CORE.Input.Mouse.currentWheelMove.y += event.value; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Absolute movement parsing | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -6949,12 +6968,13 @@ static void RecordAutomationEvent(unsigned int frame) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // INPUT_MOUSE_WHEEL_MOTION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if ((int)CORE.Input.Mouse.currentWheelMove != (int)CORE.Input.Mouse.previousWheelMove) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (((int)CORE.Input.Mouse.currentWheelMove.x != (int)CORE.Input.Mouse.previousWheelMove.x) || | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ((int)CORE.Input.Mouse.currentWheelMove.y != (int)CORE.Input.Mouse.previousWheelMove.y)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].frame = frame; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].type = INPUT_MOUSE_WHEEL_MOTION; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].params[0] = (int)CORE.Input.Mouse.currentWheelMove; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].params[1] = mi">0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].params[0] = (int)CORE.Input.Mouse.currentWheelMove.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].params[1] = p">(int)CORE.Input.Mouse.currentWheelMove.y;; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        events[eventCount].params[2] = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TRACELOG(LOG_INFO, "[%i] INPUT_MOUSE_WHEEL_MOTION: %i, %i, %i", events[eventCount].frame, events[eventCount].params[0], events[eventCount].params[1], events[eventCount].params[2]); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -7106,7 +7126,11 @@ static void PlayAutomationEvent(unsigned int frame) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    CORE.Input.Mouse.currentPosition.x = (float)events[i].params[0]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    CORE.Input.Mouse.currentPosition.y = (float)events[i].params[1]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case INPUT_MOUSE_WHEEL_MOTION: CORE.Input.Mouse.currentWheelMove = (float)events[i].params[0]; break;   // param[0]: delta | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case INPUT_MOUSE_WHEEL_MOTION:  // param[0]: x delta, param[1]: y delta | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    CORE.Input.Mouse.currentWheelMove.x = (float)events[i].params[0]; break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    CORE.Input.Mouse.currentWheelMove.y = (float)events[i].params[1]; break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case INPUT_TOUCH_UP: CORE.Input.Touch.currentTouchState[events[i].params[0]] = false; break;            // param[0]: id | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case INPUT_TOUCH_DOWN: CORE.Input.Touch.currentTouchState[events[i].params[0]] = true; break;           // param[0]: id | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case INPUT_TOUCH_POSITION:      // param[0]: id, param[1]: x, param[2]: y | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |