mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-06-18 12:08:58 +00:00
Adding SDL_HINT_IME_PAN_PADDING "SDL_IME_PAN_PADDING".
Controls the padding between TextInputArea and IME and defaults to 0.
This commit is contained in:
parent
4e2fd57e77
commit
a5134cdf3f
3 changed files with 41 additions and 5 deletions
|
|
@ -1388,10 +1388,20 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||
* the bottom edge of the input region and the top edge of an input
|
||||
* method (soft keyboard)
|
||||
*/
|
||||
static final int HEIGHT_PADDING = 15;
|
||||
static int getPanPadding() {
|
||||
try {
|
||||
String hint = nativeGetHint("SDL_IME_PAN_PADDING");
|
||||
if (hint != null) {
|
||||
return Integer.parseInt(hint);
|
||||
}
|
||||
} catch (NumberFormatException ignored) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int input_type;
|
||||
public int x, y, w, h;
|
||||
private final int panPadding;
|
||||
|
||||
public ShowTextInputTask(int input_type, int x, int y, int w, int h) {
|
||||
this.input_type = input_type;
|
||||
|
|
@ -1399,19 +1409,20 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||
this.y = y;
|
||||
this.w = w;
|
||||
this.h = h;
|
||||
this.panPadding = getPanPadding();
|
||||
|
||||
/* Minimum size of 1 pixel, so it takes focus. */
|
||||
if (this.w <= 0) {
|
||||
this.w = 1;
|
||||
}
|
||||
if (this.h + HEIGHT_PADDING <= 0) {
|
||||
this.h = 1 - HEIGHT_PADDING;
|
||||
if (this.h + panPadding <= 0) {
|
||||
this.h = 1 - panPadding;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(w, h + HEIGHT_PADDING);
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(w, h + panPadding);
|
||||
params.leftMargin = x;
|
||||
params.topMargin = y;
|
||||
|
||||
|
|
|
|||
|
|
@ -1219,6 +1219,23 @@ extern "C" {
|
|||
*/
|
||||
#define SDL_HINT_IME_IMPLEMENTED_UI "SDL_IME_IMPLEMENTED_UI"
|
||||
|
||||
/**
|
||||
* A variable controlling the padding in pixels added above the on-screen
|
||||
* keyboard to keep the text input area visible.
|
||||
*
|
||||
* This padding is used on platforms with on-screen keyboards (iOS, Android)
|
||||
* 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 "0".
|
||||
*
|
||||
* This hint can be set anytime.
|
||||
*
|
||||
* \since This hint is available since SDL 3.6.0.
|
||||
*/
|
||||
#define SDL_HINT_IME_PAN_PADDING "SDL_IME_PAN_PADDING"
|
||||
|
||||
/**
|
||||
* A variable controlling whether the home indicator bar on iPhone X and later
|
||||
* should be hidden.
|
||||
|
|
|
|||
|
|
@ -642,7 +642,15 @@ static void SDLCALL SDL_HideHomeIndicatorHintChanged(void *userdata, const char
|
|||
#endif
|
||||
|
||||
if (self.keyboardHeight && self.textInputRect.h) {
|
||||
int rectbottom = (int)(self.textInputRect.y + 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.
|
||||
* The iOS IME seems to apply a 15 pixel padding, so to keep it consistent
|
||||
* with Android we subtract 15 pixels here. */
|
||||
const char *hint = SDL_GetHint(SDL_HINT_IME_PAN_PADDING);
|
||||
int panPadding = (hint && *hint) ? SDL_atoi(hint) : 0;
|
||||
int padding = (int)((panPadding - 15) / self.view.contentScaleFactor);
|
||||
int rectbottom = (int)(self.textInputRect.y + self.textInputRect.h + padding);
|
||||
int keybottom = (int)(self.view.bounds.size.height - self.keyboardHeight);
|
||||
if (keybottom < rectbottom) {
|
||||
offset.y = keybottom - rectbottom;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue