|
@@ -122,6 +122,8 @@ static int ident, events;
|
|
|
static bool windowReady = false; // Used to detect display initialization
|
|
|
static bool appEnabled = true; // Used to detec if app is active
|
|
|
static bool contextRebindRequired = false; // Used to know context rebind required
|
|
|
+static int previousButtonState[512] = { 1 }; // Required to check if button pressed/released once
|
|
|
+static int currentButtonState[512] = { 1 }; // Required to check if button pressed/released once
|
|
|
#elif defined(PLATFORM_RPI)
|
|
|
static EGL_DISPMANX_WINDOW_T nativeWindow; // Native window (graphic device)
|
|
|
|
|
@@ -365,6 +367,13 @@ void InitWindow(int width, int height, struct android_app *state)
|
|
|
|
|
|
TraceLog(INFO, "Android app initialized successfully");
|
|
|
|
|
|
+ // Init button states values (default up)
|
|
|
+ for(int i = 0; i < 512; i++)
|
|
|
+ {
|
|
|
+ currentButtonState[i] = 1;
|
|
|
+ previousButtonState[i] = 1;
|
|
|
+ }
|
|
|
+
|
|
|
// Wait for window to be initialized (display and context)
|
|
|
while (!windowReady)
|
|
|
{
|
|
@@ -1101,6 +1110,34 @@ Vector2 GetTouchPosition(void)
|
|
|
|
|
|
return position;
|
|
|
}
|
|
|
+
|
|
|
+bool IsButtonPressed(int button)
|
|
|
+{
|
|
|
+ bool pressed = false;
|
|
|
+
|
|
|
+ if ((currentButtonState[button] != previousButtonState[button]) && (currentButtonState[button] == 0)) pressed = true;
|
|
|
+ else pressed = false;
|
|
|
+
|
|
|
+ return pressed;
|
|
|
+}
|
|
|
+
|
|
|
+// Detect if a button is being pressed (button held down)
|
|
|
+bool IsButtonDown(int button)
|
|
|
+{
|
|
|
+ if (currentButtonState[button] == 0) return true;
|
|
|
+ else return false;
|
|
|
+}
|
|
|
+
|
|
|
+// Detect if a button has been released once
|
|
|
+bool IsButtonReleased(int button)
|
|
|
+{
|
|
|
+ bool released = false;
|
|
|
+
|
|
|
+ if ((currentButtonState[button] != previousButtonState[button]) && (currentButtonState[button] == 1)) released = true;
|
|
|
+ else released = false;
|
|
|
+
|
|
|
+ return released;
|
|
|
+}
|
|
|
#endif
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -1648,12 +1685,14 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
|
|
|
{
|
|
|
int32_t keycode = AKeyEvent_getKeyCode(event);
|
|
|
//int32_t AKeyEvent_getMetaState(event);
|
|
|
+
|
|
|
+ currentButtonState[keycode] = AKeyEvent_getAction (event); // Down = 0, Up = 1
|
|
|
|
|
|
//if (keycode == AKEYCODE_HOME) { }
|
|
|
- //if (keycode == AKEYCODE_POWER) { }
|
|
|
- if (keycode == AKEYCODE_BACK)
|
|
|
+ if (keycode == AKEYCODE_POWER) { return 1; }
|
|
|
+ if ((keycode == AKEYCODE_BACK) || (keycode == AKEYCODE_MENU))
|
|
|
{
|
|
|
- // Eat BACK_BUTTON, just do nothing... and don't let to be handled by OS!
|
|
|
+ // Eat BACK_BUTTON and AKEYCODE_MENU, just do nothing... and don't let to be handled by OS!
|
|
|
return 1;
|
|
|
}
|
|
|
else if ((keycode == AKEYCODE_VOLUME_UP) || (keycode == AKEYCODE_VOLUME_DOWN))
|
|
@@ -1778,6 +1817,7 @@ static void PollInputEvents(void)
|
|
|
|
|
|
// TODO: Remove this requirement...
|
|
|
UpdateGestures();
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
|
@@ -1806,6 +1846,9 @@ static void PollInputEvents(void)
|
|
|
glfwPollEvents(); // Register keyboard/mouse events... and window events!
|
|
|
#elif defined(PLATFORM_ANDROID)
|
|
|
|
|
|
+ // Register previous keys states
|
|
|
+ for (int i = 0; i < 512; i++) previousButtonState[i] = currentButtonState[i];
|
|
|
+
|
|
|
// Poll Events (registered events)
|
|
|
// NOTE: Activity is paused if not enabled (appEnabled)
|
|
|
while ((ident = ALooper_pollAll(appEnabled ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
|