| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org> |
| | | Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | |
| | | |
| | | /* File-specific globals: */ |
| | | static SDL_TouchID WINRT_TouchID = 1; |
| | | static unsigned int WINRT_LeftFingerDown = 0; |
| | | |
| | | |
| | | void |
| | | WINRT_InitTouch(_THIS) |
| | | { |
| | | SDL_AddTouch(WINRT_TouchID, ""); |
| | | SDL_AddTouch(WINRT_TouchID, SDL_TOUCH_DEVICE_DIRECT, ""); |
| | | } |
| | | |
| | | |
| | |
| | | Windows::Foundation::Point normalizedPoint = WINRT_TransformCursorPosition(window, pointerPoint->Position, NormalizeZeroToOne); |
| | | Windows::Foundation::Point windowPoint = WINRT_TransformCursorPosition(window, pointerPoint->Position, TransformToSDLWindowSize); |
| | | |
| | | if (!WINRT_LeftFingerDown) { |
| | | if (button) { |
| | | SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, (int)windowPoint.X, (int)windowPoint.Y); |
| | | SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, button); |
| | | } |
| | | |
| | | WINRT_LeftFingerDown = pointerPoint->PointerId; |
| | | } |
| | | |
| | | SDL_SendTouch( |
| | | WINRT_TouchID, |
| | | (SDL_FingerID) pointerPoint->PointerId, |
| | | window, |
| | | SDL_TRUE, |
| | | normalizedPoint.X, |
| | | normalizedPoint.Y, |
| | |
| | | if ( ! WINRT_IsTouchEvent(pointerPoint)) { |
| | | SDL_SendMouseMotion(window, 0, 0, (int)windowPoint.X, (int)windowPoint.Y); |
| | | } else { |
| | | if (pointerPoint->PointerId == WINRT_LeftFingerDown) { |
| | | SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, (int)windowPoint.X, (int)windowPoint.Y); |
| | | } |
| | | |
| | | SDL_SendTouchMotion( |
| | | WINRT_TouchID, |
| | | (SDL_FingerID) pointerPoint->PointerId, |
| | | window, |
| | | normalizedPoint.X, |
| | | normalizedPoint.Y, |
| | | pointerPoint->Properties->Pressure); |
| | |
| | | } else { |
| | | Windows::Foundation::Point normalizedPoint = WINRT_TransformCursorPosition(window, pointerPoint->Position, NormalizeZeroToOne); |
| | | |
| | | if (WINRT_LeftFingerDown == pointerPoint->PointerId) { |
| | | if (button) { |
| | | SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, button); |
| | | } |
| | | WINRT_LeftFingerDown = 0; |
| | | } |
| | | |
| | | SDL_SendTouch( |
| | | WINRT_TouchID, |
| | | (SDL_FingerID) pointerPoint->PointerId, |
| | | window, |
| | | SDL_FALSE, |
| | | normalizedPoint.X, |
| | | normalizedPoint.Y, |
| | | pointerPoint->Properties->Pressure); |
| | | } |
| | | } |
| | | |
| | | void WINRT_ProcessPointerEnteredEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint) |
| | | { |
| | | if (!window) { |
| | | return; |
| | | } |
| | | |
| | | if (!WINRT_IsTouchEvent(pointerPoint)) { |
| | | SDL_SetMouseFocus(window); |
| | | } |
| | | } |
| | | |
| | | void WINRT_ProcessPointerExitedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint) |
| | | { |
| | | if (!window) { |
| | | return; |
| | | } |
| | | |
| | | if (!WINRT_IsTouchEvent(pointerPoint)) { |
| | | SDL_SetMouseFocus(NULL); |
| | | } |
| | | } |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | // FIXME: This may need to accumulate deltas up to WHEEL_DELTA |
| | | short motion = pointerPoint->Properties->MouseWheelDelta / WHEEL_DELTA; |
| | | SDL_SendMouseWheel(window, 0, 0, motion, SDL_MOUSEWHEEL_NORMAL); |
| | | float motion = (float) pointerPoint->Properties->MouseWheelDelta / WHEEL_DELTA; |
| | | SDL_SendMouseWheel(window, 0, 0, (float) motion, SDL_MOUSEWHEEL_NORMAL); |
| | | } |
| | | |
| | | void |
| | |
| | | // http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.input.mouseeventargs.mousedelta ), |
| | | // does not seem to indicate (to me) that its values should be so large. It |
| | | // says that its values should be a "change in screen location". I could |
| | | // be misinterpreting this, however a post on MSDN from a Microsoft engineer (see: |
| | | // be misinterpreting this, however a post on MSDN from a Microsoft engineer (see: |
| | | // http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/09a9868e-95bb-4858-ba1a-cb4d2c298d62 ), |
| | | // indicates that these values are in DIPs, which is the same unit used |
| | | // by CoreWindow's PointerMoved events (via the Position field in its CurrentPoint |