Implemented touch how I "think" it should work. I cant test this.

This commit is contained in:
Reece Mackie 2020-04-30 16:01:12 +01:00
parent b223b8aded
commit 01cd6b9a7c
3 changed files with 86 additions and 12 deletions

View File

@ -5,6 +5,7 @@
#include <raylib.h> #include <raylib.h>
#include <uwp_events.h> #include <uwp_events.h>
#include <gestures.h>
#include <chrono> #include <chrono>
#include <thread> #include <thread>
@ -403,14 +404,19 @@ void App::OnVisibilityChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI
void App::OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) void App::OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args)
{ {
auto props = args->CurrentPoint->Properties; auto props = args->CurrentPoint->Properties;
auto device = args->CurrentPoint->PointerDevice;
// TODO: UWP Touch input/simulation. if (device->PointerDeviceType == Windows::Devices::Input::PointerDeviceType::Mouse)
if (args->CurrentPoint->PointerDevice->PointerDeviceType == Windows::Devices::Input::PointerDeviceType::Mouse)
{ {
if (props->IsLeftButtonPressed) UWPMouseButtonEvent(MOUSE_LEFT_BUTTON, true); if (props->IsLeftButtonPressed) UWPMouseButtonEvent(MOUSE_LEFT_BUTTON, true);
if (props->IsMiddleButtonPressed) UWPMouseButtonEvent(MOUSE_MIDDLE_BUTTON, true); if (props->IsMiddleButtonPressed) UWPMouseButtonEvent(MOUSE_MIDDLE_BUTTON, true);
if (props->IsRightButtonPressed) UWPMouseButtonEvent(MOUSE_RIGHT_BUTTON, true); if (props->IsRightButtonPressed) UWPMouseButtonEvent(MOUSE_RIGHT_BUTTON, true);
} }
else if (device->PointerDeviceType == PointerDeviceType::Touch)
{
auto pos = args->CurrentPoint->Position;
UWPGestureTouch(args->CurrentPoint->PointerId, pos.X, pos.Y, true);
}
args->Handled = true; args->Handled = true;
} }
@ -418,14 +424,19 @@ void App::OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::C
void App::OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) void App::OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args)
{ {
auto props = args->CurrentPoint->Properties; auto props = args->CurrentPoint->Properties;
auto device = args->CurrentPoint->PointerDevice;
// TODO: UWP Touch input. if (device->PointerDeviceType == PointerDeviceType::Mouse)
if (args->CurrentPoint->PointerDevice->PointerDeviceType == Windows::Devices::Input::PointerDeviceType::Mouse)
{ {
if (!props->IsLeftButtonPressed) UWPMouseButtonEvent(MOUSE_LEFT_BUTTON, false); if (!props->IsLeftButtonPressed) UWPMouseButtonEvent(MOUSE_LEFT_BUTTON, false);
if (!props->IsMiddleButtonPressed) UWPMouseButtonEvent(MOUSE_MIDDLE_BUTTON, false); if (!props->IsMiddleButtonPressed) UWPMouseButtonEvent(MOUSE_MIDDLE_BUTTON, false);
if (!props->IsRightButtonPressed) UWPMouseButtonEvent(MOUSE_RIGHT_BUTTON, false); if (!props->IsRightButtonPressed) UWPMouseButtonEvent(MOUSE_RIGHT_BUTTON, false);
} }
else if (device->PointerDeviceType == PointerDeviceType::Touch)
{
auto pos = args->CurrentPoint->Position;
UWPGestureTouch(args->CurrentPoint->PointerId, pos.X, pos.Y, false);
}
args->Handled = true; args->Handled = true;
} }
@ -439,9 +450,16 @@ void App::OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::
void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args)
{ {
auto pos = args->CurrentPoint->Position; auto pos = args->CurrentPoint->Position;
if (args->CurrentPoint->PointerDevice->PointerDeviceType == PointerDeviceType::Mouse)
{
UWPMousePosEvent((double)pos.X, (double)pos.Y); UWPMousePosEvent((double)pos.X, (double)pos.Y);
args->Handled = true; args->Handled = true;
} }
else if (args->CurrentPoint->PointerDevice->PointerDeviceType == PointerDeviceType::Touch)
{
UWPGestureMove(args->CurrentPoint->PointerId, pos.X, pos.Y);
}
}
int App::GetRaylibKey(Windows::System::VirtualKey kVey) int App::GetRaylibKey(Windows::System::VirtualKey kVey)
{ {

View File

@ -2687,9 +2687,9 @@ int GetMouseWheelMove(void)
// Returns touch position X for touch point 0 (relative to screen size) // Returns touch position X for touch point 0 (relative to screen size)
int GetTouchX(void) int GetTouchX(void)
{ {
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) #if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) || defined(PLATFORM_UWP)
return (int)CORE.Input.Touch.position[0].x; return (int)CORE.Input.Touch.position[0].x;
#else // PLATFORM_DESKTOP, PLATFORM_RPI #else // PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_UWP
return GetMouseX(); return GetMouseX();
#endif #endif
} }
@ -2697,9 +2697,9 @@ int GetTouchX(void)
// Returns touch position Y for touch point 0 (relative to screen size) // Returns touch position Y for touch point 0 (relative to screen size)
int GetTouchY(void) int GetTouchY(void)
{ {
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) #if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) || defined(PLATFORM_UWP)
return (int)CORE.Input.Touch.position[0].y; return (int)CORE.Input.Touch.position[0].y;
#else // PLATFORM_DESKTOP, PLATFORM_RPI #else // PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_UWP
return GetMouseY(); return GetMouseY();
#endif #endif
} }
@ -2710,7 +2710,7 @@ Vector2 GetTouchPosition(int index)
{ {
Vector2 position = { -1.0f, -1.0f }; Vector2 position = { -1.0f, -1.0f };
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) || defined(PLATFORM_RPI) #if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) || defined(PLATFORM_RPI) || defined(PLATFORM_UWP)
if (index < MAX_TOUCH_POINTS) position = CORE.Input.Touch.position[index]; if (index < MAX_TOUCH_POINTS) position = CORE.Input.Touch.position[index];
else TRACELOG(LOG_WARNING, "INPUT: Required touch point out of range (Max touch points: %i)", MAX_TOUCH_POINTS); else TRACELOG(LOG_WARNING, "INPUT: Required touch point out of range (Max touch points: %i)", MAX_TOUCH_POINTS);
@ -5442,7 +5442,7 @@ void UWPMousePosEvent(double x, double y)
gestureEvent.pointCount = 1; gestureEvent.pointCount = 1;
// Register touch points position, only one point registered // Register touch points position, only one point registered
gestureEvent.position[0] = CORE.Input.Touch.position[0]; gestureEvent.position[0] = CORE.Input.Mouse.position;
// Normalize gestureEvent.position[0] for CORE.Window.screen.width and CORE.Window.screen.height // Normalize gestureEvent.position[0] for CORE.Window.screen.width and CORE.Window.screen.height
gestureEvent.position[0].x /= (float)GetScreenWidth(); gestureEvent.position[0].x /= (float)GetScreenWidth();
@ -5496,4 +5496,54 @@ void UWPRegisterGamepadAxis(int gamepad, int axis, float value)
} }
} }
void UWPGestureMove(int pointer, float x, float y)
{
#if defined(SUPPORT_GESTURES_SYSTEM)
GestureEvent gestureEvent = { 0 };
// Assign the pointer ID and touch action
gestureEvent.pointerId[0] = pointer;
gestureEvent.touchAction = TOUCH_MOVE;
// Register touch points count
gestureEvent.pointCount = 1;
// Register touch points position, only one point registered
gestureEvent.position[0].x = x;
gestureEvent.position[0].y = y;
// Normalize gestureEvent.position[0] for CORE.Window.screen.width and CORE.Window.screen.height
gestureEvent.position[0].x /= (float)GetScreenWidth();
gestureEvent.position[0].y /= (float)GetScreenHeight();
// Gesture data is sent to gestures system for processing
ProcessGestureEvent(gestureEvent);
#endif
}
void UWPGestureTouch(int pointer, float x, float y, bool touch)
{
#if defined(SUPPORT_GESTURES_SYSTEM)
GestureEvent gestureEvent = { 0 };
// Assign the pointer ID and touch action
gestureEvent.pointerId[0] = pointer;
gestureEvent.touchAction = touch ? TOUCH_DOWN : TOUCH_UP;
// Register touch points count
gestureEvent.pointCount = 1;
// Register touch points position, only one point registered
gestureEvent.position[0].x = x;
gestureEvent.position[0].y = y;
// Normalize gestureEvent.position[0] for CORE.Window.screen.width and CORE.Window.screen.height
gestureEvent.position[0].x /= (float)GetScreenWidth();
gestureEvent.position[0].y /= (float)GetScreenHeight();
// Gesture data is sent to gestures system for processing
ProcessGestureEvent(gestureEvent);
#endif
}
#endif // PLATFORM_UWP #endif // PLATFORM_UWP

View File

@ -100,6 +100,12 @@ void UWPRegisterGamepadButton(int gamepad, int button, bool down);
// Call when a gamepad axis state changes // Call when a gamepad axis state changes
void UWPRegisterGamepadAxis(int gamepad, int axis, float value); void UWPRegisterGamepadAxis(int gamepad, int axis, float value);
// Call when the touch point moves
void UWPGestureMove(int pointer, float x, float y);
// Call when there is a touch down or up
void UWPGestureTouch(int pointer, float x, float y, bool touch);
// Set the core window pointer so that we can pass it to EGL. // Set the core window pointer so that we can pass it to EGL.
void* UWPGetCoreWindowPtr(); void* UWPGetCoreWindowPtr();
void UWPSetCoreWindowPtr(void* ptr); void UWPSetCoreWindowPtr(void* ptr);