From ac90fa0879274379637fb680937f2c2baf408423 Mon Sep 17 00:00:00 2001 From: DominusExult Date: Sat, 14 Feb 2026 14:03:35 +0100 Subject: [PATCH] The padding is in windows coordinates not pixels, so you need to convert for Android. Default is now 10 window coordinates (slightly more than 15 pixels). --- .../app/src/main/java/org/libsdl/app/SDLActivity.java | 8 ++++++-- include/SDL3/SDL_hints.h | 6 ++++-- src/video/uikit/SDL_uikitviewcontroller.m | 7 ++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index 7e5efbe650..e3dc219d4e 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -1389,14 +1389,18 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh * method (soft keyboard) */ static int getPanPadding() { + /* The hint is in window coordinates. Convert to pixels by + * multiplying by density. */ + int defaultPadding = 10; try { String hint = nativeGetHint("SDL_IME_PAN_PADDING"); if (hint != null) { - return Integer.parseInt(hint); + defaultPadding = Integer.parseInt(hint); } } catch (NumberFormatException ignored) { } - return 15; + float density = getContext().getResources().getDisplayMetrics().density; + return (int)(defaultPadding * density); } public int input_type; diff --git a/include/SDL3/SDL_hints.h b/include/SDL3/SDL_hints.h index 39c63721fa..bd8fd6fa4e 100644 --- a/include/SDL3/SDL_hints.h +++ b/include/SDL3/SDL_hints.h @@ -1227,8 +1227,10 @@ extern "C" { * to ensure there is extra breathing room between the text input area and * the top of the keyboard when panning the view. * - * The variable can be set to a number representing the padding in pixels. - * The default value is "15". + * The variable can be set to a number representing the padding in window + * coordinates. + * + * The default value is "10". * * This hint can be set anytime. * diff --git a/src/video/uikit/SDL_uikitviewcontroller.m b/src/video/uikit/SDL_uikitviewcontroller.m index d20b783493..c7beeb8895 100644 --- a/src/video/uikit/SDL_uikitviewcontroller.m +++ b/src/video/uikit/SDL_uikitviewcontroller.m @@ -642,12 +642,9 @@ static void SDLCALL SDL_HideHomeIndicatorHintChanged(void *userdata, const char #endif if (self.keyboardHeight && self.textInputRect.h) { - /* Get the pan padding from the hint (in pixels). The text input rect - * and view bounds are in UIKit points, so divide by the scale factor - * to keep the visual gap consistent across platforms.*/ + /// Get the pan padding from the hint (in window coordinates). const char *hint = SDL_GetHint(SDL_HINT_IME_PAN_PADDING); - int panPadding = (hint && *hint) ? SDL_atoi(hint) : 15; - int padding = (int)(panPadding / self.view.contentScaleFactor); + int padding = (hint && *hint) ? SDL_atoi(hint) : 10; int rectbottom = (int)(self.textInputRect.y + self.textInputRect.h + padding); int keybottom = (int)(self.view.bounds.size.height - self.keyboardHeight); if (keybottom < rectbottom) {