diff --git a/projects/VS2017.UWP/raylib.App.UWP/App.cpp b/projects/VS2017.UWP/raylib.App.UWP/App.cpp
index 6ce6915c1..09d0a3c9f 100644
--- a/projects/VS2017.UWP/raylib.App.UWP/App.cpp
+++ b/projects/VS2017.UWP/raylib.App.UWP/App.cpp
@@ -131,15 +131,15 @@ void App::PointerPressed(CoreWindow^ window, PointerEventArgs^ args)
{
if (args->CurrentPoint->Properties->IsLeftButtonPressed)
{
- currentMouseState[MOUSE_LEFT_BUTTON] = 1;
+ UWPRegisterClick(MOUSE_LEFT_BUTTON, 1);
}
if (args->CurrentPoint->Properties->IsRightButtonPressed)
{
- currentMouseState[MOUSE_RIGHT_BUTTON] = 1;
+ UWPRegisterClick(MOUSE_RIGHT_BUTTON, 1);
}
if (args->CurrentPoint->Properties->IsMiddleButtonPressed)
{
- currentMouseState[MOUSE_MIDDLE_BUTTON] = 1;
+ UWPRegisterClick(MOUSE_MIDDLE_BUTTON, 1);
}
}
@@ -147,15 +147,15 @@ void App::PointerReleased(CoreWindow ^window, PointerEventArgs^ args)
{
if (!(args->CurrentPoint->Properties->IsLeftButtonPressed))
{
- currentMouseState[MOUSE_LEFT_BUTTON] = 0;
+ UWPRegisterClick(MOUSE_LEFT_BUTTON, 0);
}
if (!(args->CurrentPoint->Properties->IsRightButtonPressed))
{
- currentMouseState[MOUSE_RIGHT_BUTTON] = 0;
+ UWPRegisterClick(MOUSE_RIGHT_BUTTON, 0);
}
if (!(args->CurrentPoint->Properties->IsMiddleButtonPressed))
{
- currentMouseState[MOUSE_MIDDLE_BUTTON] = 0;
+ UWPRegisterClick(MOUSE_MIDDLE_BUTTON, 0);
}
}
@@ -173,19 +173,16 @@ void App::MouseMoved(Windows::Devices::Input::MouseDevice^ mouseDevice, Windows:
void App::OnKeyDown(CoreWindow ^ sender, KeyEventArgs ^ args)
{
- ProcessKeyEvent(args->VirtualKey, 1);
+ //ProcessKeyEvent(args->VirtualKey, 1);
+
+ UWPRegisterKey((int)args->VirtualKey, 1);
}
void App::OnKeyUp(CoreWindow ^ sender, KeyEventArgs ^ args)
{
- ProcessKeyEvent(args->VirtualKey, 0);
-}
+ //ProcessKeyEvent(args->VirtualKey, 0);
-/* REIMPLEMENTED FROM CORE.C */
-// Get one key state
-static bool GetKeyStatus(int key)
-{
- return currentKeyState[key];
+ UWPRegisterKey((int)args->VirtualKey, 0);
}
// Show mouse cursor
@@ -226,18 +223,9 @@ void UWPDisableCursor()
toggleCursorLock = true;
}
-// Get one mouse button state
-static bool UWPGetMouseButtonStatus(int button)
-{
- return currentMouseState[button];
-}
-
// Poll (store) all input events
void UWP_PollInput()
{
- // Register previous keyboard state
- for (int k = 0; k < 512; k++) previousKeyState[k] = currentKeyState[k];
-
// Process Mouse
{
// Register previous mouse states
@@ -320,43 +308,6 @@ void UWP_PollInput()
}
-// The following functions were ripped from core.c and have *no additional work done on them*
-// Detect if a key has been pressed once
-bool UWPIsKeyPressed(int key)
-{
- bool pressed = false;
-
- if ((currentKeyState[key] != previousKeyState[key]) && (currentKeyState[key] == 1)) pressed = true;
- else pressed = false;
-
- return pressed;
-}
-
-// Detect if a key is being pressed (key held down)
-bool UWPIsKeyDown(int key)
-{
- if (GetKeyStatus(key) == 1) return true;
- else return false;
-}
-
-// Detect if a key has been released once
-bool UWPIsKeyReleased(int key)
-{
- bool released = false;
-
- if ((currentKeyState[key] != previousKeyState[key]) && (currentKeyState[key] == 0)) released = true;
- else released = false;
-
- return released;
-}
-
-// Detect if a key is NOT being pressed (key not held down)
-bool UWPIsKeyUp(int key)
-{
- if (GetKeyStatus(key) == 0) return true;
- else return false;
-}
-
/* OTHER CODE */
// Helper to convert a length in device-independent pixels (DIPs) to a length in physical pixels.
@@ -461,23 +412,26 @@ void App::Run()
DrawCircle(mousePosition.x, mousePosition.y, 40, BLUE);
- if (UWPIsKeyDown(KEY_S)) DrawCircle(100, 100, 100, BLUE);
+ if (IsKeyDown(KEY_S)) DrawCircle(100, 100, 100, BLUE);
- if (UWPIsKeyPressed(KEY_A))
+ if (IsKeyPressed(KEY_A))
{
posX -= 50;
UWPEnableCursor();
}
- if (UWPIsKeyPressed(KEY_D))
+ if (IsKeyPressed(KEY_D))
{
posX += 50;
UWPDisableCursor();
}
- if (currentKeyState[KEY_LEFT_ALT]) DrawRectangle(250, 250, 20, 20, BLACK);
- if (currentKeyState[KEY_BACKSPACE]) DrawRectangle(280, 250, 20, 20, BLACK);
- if (currentMouseState[MOUSE_LEFT_BUTTON]) DrawRectangle(280, 250, 20, 20, BLACK);
+ if (IsKeyDown(KEY_LEFT_ALT)) //Unable to get working on my PC
+ DrawRectangle(250, 250, 20, 20, BLACK);
+ if (IsKeyDown(KEY_BACKSPACE))
+ DrawRectangle(280, 250, 20, 20, BLACK);
+ if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
+ DrawRectangle(280, 250, 20, 20, BLACK);
static int pos = 0;
pos -= currentMouseWheelY;
diff --git a/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj b/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj
index f31faf252..6dc1c2cad 100644
--- a/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj
+++ b/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj
@@ -87,7 +87,7 @@
$(SolutionDir)..\..\src;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)
/bigobj %(AdditionalOptions)
4453;28204
- _DEBUG;%(PreprocessorDefinitions)
+ PLATFORM_UWP;_DEBUG;%(PreprocessorDefinitions)
true
@@ -100,7 +100,7 @@
$(SolutionDir)..\..\src;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)
/bigobj %(AdditionalOptions)
4453;28204
- NDEBUG;%(PreprocessorDefinitions)
+ PLATFORM_UWP;NDEBUG;%(PreprocessorDefinitions)
Default
false
diff --git a/src/core.c b/src/core.c
index cbaf16db6..42c07774c 100644
--- a/src/core.c
+++ b/src/core.c
@@ -486,10 +486,6 @@ static void InitGamepad(void); // Init raw gamepad inpu
static void *GamepadThread(void *arg); // Mouse reading thread
#endif
-#if defined(PLATFORM_UWP)
-// TODO: Define functions required to manage inputs
-#endif
-
#if defined(_WIN32)
// NOTE: We include Sleep() function signature here to avoid windows.h inclusion
void __stdcall Sleep(unsigned long msTimeout); // Required for Wait()
@@ -3030,7 +3026,7 @@ static bool GetKeyStatus(int key)
// NOTE: Android supports up to 260 keys
if (key < 0 || key > 260) return false;
else return currentKeyState[key];
-#elif defined(PLATFORM_RPI)
+#elif defined(PLATFORM_RPI) || defined(PLATFORM_UWP)
// NOTE: Keys states are filled in PollInputEvents()
if (key < 0 || key > 511) return false;
else return currentKeyState[key];
@@ -3045,7 +3041,7 @@ static bool GetMouseButtonStatus(int button)
#elif defined(PLATFORM_ANDROID)
// TODO: Check for virtual mouse?
return false;
-#elif defined(PLATFORM_RPI)
+#elif defined(PLATFORM_RPI) || defined(PLATFORM_UWP)
// NOTE: Mouse buttons states are filled in PollInputEvents()
return currentMouseState[button];
#endif
@@ -3091,6 +3087,22 @@ static void PollInputEvents(void)
}
#endif
+#if defined(PLATFORM_UWP)
+
+ // Register previous keys states
+ for (int i = 0; i < 512; i++)previousKeyState[i] = currentKeyState[i];
+
+ // Register previous mouse states
+ previousMouseWheelY = currentMouseWheelY;
+ currentMouseWheelY = 0;
+ for (int i = 0; i < 3; i++)
+ {
+ previousMouseState[i] = currentMouseState[i];
+
+ }
+
+#endif
+
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
// Mouse input polling
double mouseX;
@@ -4575,6 +4587,102 @@ static void *GamepadThread(void *arg)
}
#endif // PLATFORM_RPI
+#if defined(PLATFORM_UWP)
+
+void UWPRegisterKey(int key, int action) {
+ //Convert from virtualKey
+
+ int actualKey = -1;
+
+ switch (key) {
+ case 0x08: actualKey = KEY_BACKSPACE; break;
+ case 0x20: actualKey = KEY_SPACE; break;
+ case 0x1B: actualKey = KEY_ESCAPE; break;
+ case 0x0D: actualKey = KEY_ENTER; break;
+ case 0x2E: actualKey = KEY_DELETE; break;
+ case 0x27: actualKey = KEY_RIGHT; break;
+ case 0x25: actualKey = KEY_LEFT; break;
+ case 0x28: actualKey = KEY_DOWN; break;
+ case 0x26: actualKey = KEY_UP; break;
+ case 0x70: actualKey = KEY_F1; break;
+ case 0x71: actualKey = KEY_F2; break;
+ case 0x72: actualKey = KEY_F3; break;
+ case 0x73: actualKey = KEY_F4; break;
+ case 0x74: actualKey = KEY_F5; break;
+ case 0x75: actualKey = KEY_F6; break;
+ case 0x76: actualKey = KEY_F7; break;
+ case 0x77: actualKey = KEY_F8; break;
+ case 0x78: actualKey = KEY_F9; break;
+ case 0x79: actualKey = KEY_F10; break;
+ case 0x7A: actualKey = KEY_F11; break;
+ case 0x7B: actualKey = KEY_F12; break;
+ case 0xA0: actualKey = KEY_LEFT_SHIFT; break;
+ case 0xA2: actualKey = KEY_LEFT_CONTROL; break;
+ case 0xA4: actualKey = KEY_LEFT_ALT; break;
+ case 0xA1: actualKey = KEY_RIGHT_SHIFT; break;
+ case 0xA3: actualKey = KEY_RIGHT_CONTROL; break;
+ case 0xA5: actualKey = KEY_RIGHT_ALT; break;
+ case 0x30: actualKey = KEY_ZERO; break;
+ case 0x31: actualKey = KEY_ONE; break;
+ case 0x32: actualKey = KEY_TWO; break;
+ case 0x33: actualKey = KEY_THREE; break;
+ case 0x34: actualKey = KEY_FOUR; break;
+ case 0x35: actualKey = KEY_FIVE; break;
+ case 0x36: actualKey = KEY_SIX; break;
+ case 0x37: actualKey = KEY_SEVEN; break;
+ case 0x38: actualKey = KEY_EIGHT; break;
+ case 0x39: actualKey = KEY_NINE; break;
+ case 0x41: actualKey = KEY_A; break;
+ case 0x42: actualKey = KEY_B; break;
+ case 0x43: actualKey = KEY_C; break;
+ case 0x44: actualKey = KEY_D; break;
+ case 0x45: actualKey = KEY_E; break;
+ case 0x46: actualKey = KEY_F; break;
+ case 0x47: actualKey = KEY_G; break;
+ case 0x48: actualKey = KEY_H; break;
+ case 0x49: actualKey = KEY_I; break;
+ case 0x4A: actualKey = KEY_J; break;
+ case 0x4B: actualKey = KEY_K; break;
+ case 0x4C: actualKey = KEY_L; break;
+ case 0x4D: actualKey = KEY_M; break;
+ case 0x4E: actualKey = KEY_N; break;
+ case 0x4F: actualKey = KEY_O; break;
+ case 0x50: actualKey = KEY_P; break;
+ case 0x51: actualKey = KEY_Q; break;
+ case 0x52: actualKey = KEY_R; break;
+ case 0x53: actualKey = KEY_S; break;
+ case 0x54: actualKey = KEY_T; break;
+ case 0x55: actualKey = KEY_U; break;
+ case 0x56: actualKey = KEY_V; break;
+ case 0x57: actualKey = KEY_W; break;
+ case 0x58: actualKey = KEY_X; break;
+ case 0x59: actualKey = KEY_Y; break;
+ case 0x5A: actualKey = KEY_Z; break;
+ }
+
+ if (actualKey > -1)
+ currentKeyState[actualKey] = action;
+}
+
+void UWPRegisterClick(int btn, char action) {
+ currentMouseState[btn] = action;
+}
+
+void UWPScrollWheel(int delta) {
+ currentMouseWheelY += delta;
+}
+
+void UWPMouseMovement(float x, float y) {
+ mousePosition.x += x;
+ mousePosition.y += y;
+}
+
+void UWPMarkCursor(bool hidden) {
+ cursorHidden = hidden;
+}
+
+#endif
+
// Plays raylib logo appearing animation
static void LogoAnimation(void)
{
diff --git a/src/raylib.h b/src/raylib.h
index 43260e066..03fede705 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -913,6 +913,16 @@ RLAPI const char *GetMonitorName(int monitor); // Get the hum
RLAPI const char *GetClipboardText(void); // Get clipboard text content
RLAPI void SetClipboardText(const char *text); // Set clipboard text content
+// UWP-related functions
+#if defined(PLATFORM_UWP)
+RLAPI void UWPRegisterKey(int key, int action);
+RLAPI void UWPRegisterClick(int btn, char action);
+RLAPI void UWPScrollWheel(int delta);
+RLAPI void UWPMouseMovement(float x, float y);
+RLAPI void UWPMarkCursor(bool hidden);
+//Gamepad functionality?
+#endif
+
// Cursor-related functions
RLAPI void ShowCursor(void); // Shows cursor
RLAPI void HideCursor(void); // Hides cursor