Implemented touch how I "think" it should work. I cant test this.
This commit is contained in:
parent
b223b8aded
commit
01cd6b9a7c
|
|
@ -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,8 +450,15 @@ 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)
|
||||||
|
|
|
||||||
62
src/core.c
62
src/core.c
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user