SDL: Copy pen handling code from `SDLSurface` to `SDLControllerManager`

From 73fc2b03a3b398243c5131fc5c7624b610d73e2d Mon Sep 17 00:00:00 2001
From: Susko3 <[EMAIL REDACTED]>
Date: Wed, 22 Jan 2025 04:54:57 +0000
Subject: [PATCH] Copy pen handling code from `SDLSurface` to
 `SDLControllerManager`

---
 .../main/java/org/libsdl/app/SDLControllerManager.java   | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java b/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java
index dc6fb9d12a6ce..e1c892e71bb49 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java
@@ -705,9 +705,14 @@ public boolean onGenericMotion(View v, MotionEvent event) {
                         x = event.getX(i);
                         y = event.getY(i);
                         float p = event.getPressure(i);
+                        if (p > 1.0f) {
+                            // may be larger than 1.0f on some devices
+                            // see the documentation of getPressure(i)
+                            p = 1.0f;
+                        }
 
-                        // BUTTON_STYLUS_PRIMARY is 2^5, so shift by 4
-                        int buttons = event.getButtonState() >> 4;
+                        // BUTTON_STYLUS_PRIMARY is 2^5, so shift by 4, and apply SDL_PEN_INPUT_DOWN/SDL_PEN_INPUT_ERASER_TIP
+                        int buttons = (event.getButtonState() >> 4) | (1 << (toolType == MotionEvent.TOOL_TYPE_STYLUS ? 0 : 30));
 
                         SDLActivity.onNativePen(event.getPointerId(i), buttons, action, x, y, p);
                         consumed = true;