mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2025-02-22 07:37:56 +01:00
add in support for passing down the "natural" (or flipped) scrolling direction in the MouseWheelEvent event
This commit is contained in:
parent
70438be272
commit
5b5823eeb5
@ -260,6 +260,7 @@ typedef struct SDL_MouseWheelEvent
|
|||||||
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
|
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
|
||||||
Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */
|
Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */
|
||||||
Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */
|
Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */
|
||||||
|
Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */
|
||||||
} SDL_MouseWheelEvent;
|
} SDL_MouseWheelEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,6 +60,15 @@ typedef enum
|
|||||||
SDL_NUM_SYSTEM_CURSORS
|
SDL_NUM_SYSTEM_CURSORS
|
||||||
} SDL_SystemCursor;
|
} SDL_SystemCursor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Scroll direction types for the Scroll event
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */
|
||||||
|
SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */
|
||||||
|
} SDL_MouseWheelDirection;
|
||||||
|
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -681,10 +681,10 @@ SDL_EVDEV_Poll(void)
|
|||||||
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_TRUE, 0, events[i].value);
|
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_TRUE, 0, events[i].value);
|
||||||
break;
|
break;
|
||||||
case REL_WHEEL:
|
case REL_WHEEL:
|
||||||
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, 0, events[i].value);
|
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, 0, events[i].value, SDL_MOUSEWHEEL_NORMAL);
|
||||||
break;
|
break;
|
||||||
case REL_HWHEEL:
|
case REL_HWHEEL:
|
||||||
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, events[i].value, 0);
|
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, events[i].value, 0, SDL_MOUSEWHEEL_NORMAL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -397,7 +397,7 @@ SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y)
|
SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y, SDL_MouseWheelDirection direction)
|
||||||
{
|
{
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
int posted;
|
int posted;
|
||||||
@ -419,6 +419,7 @@ SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y)
|
|||||||
event.wheel.which = mouseID;
|
event.wheel.which = mouseID;
|
||||||
event.wheel.x = x;
|
event.wheel.x = x;
|
||||||
event.wheel.y = y;
|
event.wheel.y = y;
|
||||||
|
event.wheel.direction = (Uint32)direction;
|
||||||
posted = (SDL_PushEvent(&event) > 0);
|
posted = (SDL_PushEvent(&event) > 0);
|
||||||
}
|
}
|
||||||
return posted;
|
return posted;
|
||||||
|
@ -120,7 +120,7 @@ extern int SDL_SendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int rel
|
|||||||
extern int SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 button);
|
extern int SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 button);
|
||||||
|
|
||||||
/* Send a mouse wheel event */
|
/* Send a mouse wheel event */
|
||||||
extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y);
|
extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y, SDL_MouseWheelDirection direction);
|
||||||
|
|
||||||
/* Shutdown the mouse subsystem */
|
/* Shutdown the mouse subsystem */
|
||||||
extern void SDL_MouseQuit(void);
|
extern void SDL_MouseQuit(void);
|
||||||
|
@ -254,7 +254,7 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
win = GetSDLWindow(winID);
|
win = GetSDLWindow(winID);
|
||||||
SDL_SendMouseWheel(win, 0, xTicks, yTicks);
|
SDL_SendMouseWheel(win, 0, xTicks, yTicks, SDL_MOUSEWHEEL_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _HandleKey(BMessage *msg) {
|
void _HandleKey(BMessage *msg) {
|
||||||
|
@ -399,6 +399,13 @@ Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent *event)
|
|||||||
|
|
||||||
float x = -[event deltaX];
|
float x = -[event deltaX];
|
||||||
float y = [event deltaY];
|
float y = [event deltaY];
|
||||||
|
SDL_MouseWheelDirection direction = SDL_MOUSEWHEEL_NORMAL;
|
||||||
|
|
||||||
|
if ([event respondsToSelector:@selector(isDirectionInvertedFromDevice)]) {
|
||||||
|
if ([event isDirectionInvertedFromDevice] == YES) {
|
||||||
|
direction = SDL_MOUSEWHEEL_FLIPPED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (x > 0) {
|
if (x > 0) {
|
||||||
x += 0.9f;
|
x += 0.9f;
|
||||||
@ -410,7 +417,7 @@ Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent *event)
|
|||||||
} else if (y < 0) {
|
} else if (y < 0) {
|
||||||
y -= 0.9f;
|
y -= 0.9f;
|
||||||
}
|
}
|
||||||
SDL_SendMouseWheel(window, mouse->mouseID, (int)x, (int)y);
|
SDL_SendMouseWheel(window, mouse->mouseID, (int)x, (int)y, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -137,7 +137,7 @@ HandleTouchMotion(int device_id, int source_id, float x, float y, float pressure
|
|||||||
static void
|
static void
|
||||||
HandleMouseScroll(SDL_Window* sdl_window, int hscroll, int vscroll)
|
HandleMouseScroll(SDL_Window* sdl_window, int hscroll, int vscroll)
|
||||||
{
|
{
|
||||||
SDL_SendMouseWheel(sdl_window, 0, hscroll, vscroll);
|
SDL_SendMouseWheel(sdl_window, 0, hscroll, vscroll, SDL_MOUSEWHEEL_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -357,7 +357,7 @@ void NACL_PumpEvents(_THIS) {
|
|||||||
case PP_INPUTEVENT_TYPE_WHEEL:
|
case PP_INPUTEVENT_TYPE_WHEEL:
|
||||||
/* FIXME: GetTicks provides high resolution scroll events */
|
/* FIXME: GetTicks provides high resolution scroll events */
|
||||||
fp = driverdata->ppb_wheel_input_event->GetDelta(event);
|
fp = driverdata->ppb_wheel_input_event->GetDelta(event);
|
||||||
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, (int) fp.x, (int) fp.y);
|
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, (int) fp.x, (int) fp.y, SDL_MOUSEWHEEL_NORMAL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PP_INPUTEVENT_TYPE_MOUSEENTER:
|
case PP_INPUTEVENT_TYPE_MOUSEENTER:
|
||||||
|
@ -184,7 +184,7 @@ pointer_handle_axis(void *data, struct wl_pointer *pointer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_SendMouseWheel(window->sdlwindow, 0, x, y);
|
SDL_SendMouseWheel(window->sdlwindow, 0, x, y, SDL_MOUSEWHEEL_NORMAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,12 +498,12 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam);
|
s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam);
|
||||||
if (s_AccumulatedMotion > 0) {
|
if (s_AccumulatedMotion > 0) {
|
||||||
while (s_AccumulatedMotion >= WHEEL_DELTA) {
|
while (s_AccumulatedMotion >= WHEEL_DELTA) {
|
||||||
SDL_SendMouseWheel(data->window, 0, 0, 1);
|
SDL_SendMouseWheel(data->window, 0, 0, 1, SDL_MOUSEWHEEL_NORMAL);
|
||||||
s_AccumulatedMotion -= WHEEL_DELTA;
|
s_AccumulatedMotion -= WHEEL_DELTA;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (s_AccumulatedMotion <= -WHEEL_DELTA) {
|
while (s_AccumulatedMotion <= -WHEEL_DELTA) {
|
||||||
SDL_SendMouseWheel(data->window, 0, 0, -1);
|
SDL_SendMouseWheel(data->window, 0, 0, -1, SDL_MOUSEWHEEL_NORMAL);
|
||||||
s_AccumulatedMotion += WHEEL_DELTA;
|
s_AccumulatedMotion += WHEEL_DELTA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -517,12 +517,12 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam);
|
s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam);
|
||||||
if (s_AccumulatedMotion > 0) {
|
if (s_AccumulatedMotion > 0) {
|
||||||
while (s_AccumulatedMotion >= WHEEL_DELTA) {
|
while (s_AccumulatedMotion >= WHEEL_DELTA) {
|
||||||
SDL_SendMouseWheel(data->window, 0, 1, 0);
|
SDL_SendMouseWheel(data->window, 0, 1, 0, SDL_MOUSEWHEEL_NORMAL);
|
||||||
s_AccumulatedMotion -= WHEEL_DELTA;
|
s_AccumulatedMotion -= WHEEL_DELTA;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (s_AccumulatedMotion <= -WHEEL_DELTA) {
|
while (s_AccumulatedMotion <= -WHEEL_DELTA) {
|
||||||
SDL_SendMouseWheel(data->window, 0, -1, 0);
|
SDL_SendMouseWheel(data->window, 0, -1, 0, SDL_MOUSEWHEEL_NORMAL);
|
||||||
s_AccumulatedMotion += WHEEL_DELTA;
|
s_AccumulatedMotion += WHEEL_DELTA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -315,7 +315,7 @@ WINRT_ProcessPointerWheelChangedEvent(SDL_Window *window, Windows::UI::Input::Po
|
|||||||
|
|
||||||
// FIXME: This may need to accumulate deltas up to WHEEL_DELTA
|
// FIXME: This may need to accumulate deltas up to WHEEL_DELTA
|
||||||
short motion = pointerPoint->Properties->MouseWheelDelta / WHEEL_DELTA;
|
short motion = pointerPoint->Properties->MouseWheelDelta / WHEEL_DELTA;
|
||||||
SDL_SendMouseWheel(window, 0, 0, motion);
|
SDL_SendMouseWheel(window, 0, 0, motion, SDL_MOUSEWHEEL_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -990,7 +990,7 @@ X11_DispatchEvent(_THIS)
|
|||||||
case ButtonPress:{
|
case ButtonPress:{
|
||||||
int ticks = 0;
|
int ticks = 0;
|
||||||
if (X11_IsWheelEvent(display,&xevent,&ticks)) {
|
if (X11_IsWheelEvent(display,&xevent,&ticks)) {
|
||||||
SDL_SendMouseWheel(data->window, 0, 0, ticks);
|
SDL_SendMouseWheel(data->window, 0, 0, ticks, SDL_MOUSEWHEEL_NORMAL);
|
||||||
} else {
|
} else {
|
||||||
if(xevent.xbutton.button == Button1) {
|
if(xevent.xbutton.button == Button1) {
|
||||||
if (ProcessHitTest(_this, data, &xevent)) {
|
if (ProcessHitTest(_this, data, &xevent)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user