Add Input::scrollV() to query vertical mouse wheel scroll events
This commit is contained in:
		
							parent
							
								
									e2bbcde85d
								
							
						
					
					
						commit
						e32aa71f4b
					
				
					 5 changed files with 31 additions and 0 deletions
				
			
		| 
						 | 
					@ -115,6 +115,13 @@ RB_METHOD(inputMouseY)
 | 
				
			||||||
	return rb_fix_new(shState->input().mouseY());
 | 
						return rb_fix_new(shState->input().mouseY());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RB_METHOD(inputScrollV)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						RB_UNUSED_PARAM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return rb_fix_new(shState->input().scrollV());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct
 | 
					struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -168,6 +175,7 @@ inputBindingInit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_rb_define_module_function(module, "mouse_x", inputMouseX);
 | 
						_rb_define_module_function(module, "mouse_x", inputMouseX);
 | 
				
			||||||
	_rb_define_module_function(module, "mouse_y", inputMouseY);
 | 
						_rb_define_module_function(module, "mouse_y", inputMouseY);
 | 
				
			||||||
 | 
						_rb_define_module_function(module, "scroll_v", inputScrollV);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (rgssVer >= 3)
 | 
						if (rgssVer >= 3)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,6 +73,7 @@ uint8_t EventThread::keyStates[];
 | 
				
			||||||
EventThread::JoyState EventThread::joyState;
 | 
					EventThread::JoyState EventThread::joyState;
 | 
				
			||||||
EventThread::MouseState EventThread::mouseState;
 | 
					EventThread::MouseState EventThread::mouseState;
 | 
				
			||||||
EventThread::TouchState EventThread::touchState;
 | 
					EventThread::TouchState EventThread::touchState;
 | 
				
			||||||
 | 
					SDL_atomic_t EventThread::verticalScrollDistance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* User event codes */
 | 
					/* User event codes */
 | 
				
			||||||
enum
 | 
					enum
 | 
				
			||||||
| 
						 | 
					@ -380,6 +381,11 @@ void EventThread::process(RGSSThreadData &rtData)
 | 
				
			||||||
			updateCursorState(cursorInWindow, gameScreen);
 | 
								updateCursorState(cursorInWindow, gameScreen);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case SDL_MOUSEWHEEL :
 | 
				
			||||||
 | 
								/* Only consider vertical scrolling for now */
 | 
				
			||||||
 | 
								SDL_AtomicAdd(&verticalScrollDistance, event.wheel.y);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case SDL_FINGERDOWN :
 | 
							case SDL_FINGERDOWN :
 | 
				
			||||||
			i = event.tfinger.fingerId;
 | 
								i = event.tfinger.fingerId;
 | 
				
			||||||
			touchState.fingers[i].down = true;
 | 
								touchState.fingers[i].down = true;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@
 | 
				
			||||||
#include <SDL_joystick.h>
 | 
					#include <SDL_joystick.h>
 | 
				
			||||||
#include <SDL_mouse.h>
 | 
					#include <SDL_mouse.h>
 | 
				
			||||||
#include <SDL_mutex.h>
 | 
					#include <SDL_mutex.h>
 | 
				
			||||||
 | 
					#include <SDL_atomic.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,6 +77,7 @@ public:
 | 
				
			||||||
	static JoyState joyState;
 | 
						static JoyState joyState;
 | 
				
			||||||
	static MouseState mouseState;
 | 
						static MouseState mouseState;
 | 
				
			||||||
	static TouchState touchState;
 | 
						static TouchState touchState;
 | 
				
			||||||
 | 
						static SDL_atomic_t verticalScrollDistance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static bool allocUserEvents();
 | 
						static bool allocUserEvents();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <SDL_scancode.h>
 | 
					#include <SDL_scancode.h>
 | 
				
			||||||
#include <SDL_mouse.h>
 | 
					#include <SDL_mouse.h>
 | 
				
			||||||
 | 
					#include <SDL_atomic.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
| 
						 | 
					@ -287,6 +288,9 @@ struct InputPrivate
 | 
				
			||||||
	Input::ButtonCode repeating;
 | 
						Input::ButtonCode repeating;
 | 
				
			||||||
	unsigned int repeatCount;
 | 
						unsigned int repeatCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Cumulative vertical scroll distance since last update call */
 | 
				
			||||||
 | 
						int vScrollDistance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int active;
 | 
							int active;
 | 
				
			||||||
| 
						 | 
					@ -322,6 +326,8 @@ struct InputPrivate
 | 
				
			||||||
		dir4Data.previous = Input::None;
 | 
							dir4Data.previous = Input::None;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		dir8Data.active = 0;
 | 
							dir8Data.active = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							vScrollDistance = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	inline ButtonState &getStateCheck(int code)
 | 
						inline ButtonState &getStateCheck(int code)
 | 
				
			||||||
| 
						 | 
					@ -640,6 +646,9 @@ void Input::update()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p->repeating = None;
 | 
						p->repeating = None;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Fetch new cumulative scroll distance and reset counter */
 | 
				
			||||||
 | 
						p->vScrollDistance = SDL_AtomicSet(&EventThread::verticalScrollDistance, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool Input::isPressed(int button)
 | 
					bool Input::isPressed(int button)
 | 
				
			||||||
| 
						 | 
					@ -681,6 +690,11 @@ int Input::mouseY()
 | 
				
			||||||
	return (EventThread::mouseState.y - rtData.screenOffset.y) * rtData.sizeResoRatio.y;
 | 
						return (EventThread::mouseState.y - rtData.screenOffset.y) * rtData.sizeResoRatio.y;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int Input::scrollV()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return p->vScrollDistance;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Input::~Input()
 | 
					Input::~Input()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	delete p;
 | 
						delete p;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,6 +58,7 @@ public:
 | 
				
			||||||
	/* Non-standard extensions */
 | 
						/* Non-standard extensions */
 | 
				
			||||||
	int mouseX();
 | 
						int mouseX();
 | 
				
			||||||
	int mouseY();
 | 
						int mouseY();
 | 
				
			||||||
 | 
						int scrollV();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	Input(const RGSSThreadData &rtData);
 | 
						Input(const RGSSThreadData &rtData);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue