Updated iOS keyboard test to cover text input rect and orientation changes

This commit is contained in:
Sam Lantinga 2017-09-14 09:56:16 -07:00
parent cfe72c76e2
commit e8187a3f78
1 changed files with 32 additions and 1 deletions

View File

@ -7,6 +7,8 @@
#include "SDL.h" #include "SDL.h"
#include "common.h" #include "common.h"
#define TEST_INPUT_RECT
#define GLYPH_SIZE_IMAGE 16 /* size of glyphs (characters) in the bitmap font file */ #define GLYPH_SIZE_IMAGE 16 /* size of glyphs (characters) in the bitmap font file */
#define GLYPH_SIZE_SCREEN 32 /* size of glyphs (characters) as shown on the screen */ #define GLYPH_SIZE_SCREEN 32 /* size of glyphs (characters) as shown on the screen */
@ -140,7 +142,11 @@ getPositionForCharNumber(int n, int *x, int *y)
int max_x_chars = (renderW - 2 * x_padding) / GLYPH_SIZE_SCREEN; int max_x_chars = (renderW - 2 * x_padding) / GLYPH_SIZE_SCREEN;
int line_separation = 5; /* pixels between each line */ int line_separation = 5; /* pixels between each line */
*x = (n % max_x_chars) * GLYPH_SIZE_SCREEN + x_padding; *x = (n % max_x_chars) * GLYPH_SIZE_SCREEN + x_padding;
#ifdef TEST_INPUT_RECT
*y = renderH - GLYPH_SIZE_SCREEN;
#else
*y = (n / max_x_chars) * (GLYPH_SIZE_SCREEN + line_separation) + y_padding; *y = (n / max_x_chars) * (GLYPH_SIZE_SCREEN + line_separation) + y_padding;
#endif
} }
void void
@ -213,12 +219,13 @@ main(int argc, char *argv[])
int width; int width;
int height; int height;
int done; int done;
SDL_Rect textrect;
if (SDL_Init(SDL_INIT_VIDEO) < 0) { if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("Error initializing SDL: %s", SDL_GetError()); printf("Error initializing SDL: %s", SDL_GetError());
} }
/* create window */ /* create window */
window = SDL_CreateWindow("iOS keyboard test", 0, 0, 320, 480, SDL_WINDOW_ALLOW_HIGHDPI); window = SDL_CreateWindow("iOS keyboard test", 0, 0, 0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
/* create renderer */ /* create renderer */
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC); renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC);
@ -228,6 +235,16 @@ main(int argc, char *argv[])
/* load up our font */ /* load up our font */
loadFont(); loadFont();
/* Show onscreen keyboard */
#ifdef TEST_INPUT_RECT
textrect.x = 0;
textrect.y = height - GLYPH_SIZE_IMAGE;
textrect.w = width;
textrect.h = GLYPH_SIZE_IMAGE;
SDL_SetTextInputRect(&textrect);
#endif
SDL_StartTextInput();
done = 0; done = 0;
while (!done) { while (!done) {
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
@ -235,6 +252,20 @@ main(int argc, char *argv[])
case SDL_QUIT: case SDL_QUIT:
done = 1; done = 1;
break; break;
case SDL_WINDOWEVENT:
if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
width = event.window.data1;
height = event.window.data2;
SDL_RenderSetLogicalSize(renderer, width, height);
#ifdef TEST_INPUT_RECT
textrect.x = 0;
textrect.y = height - GLYPH_SIZE_IMAGE;
textrect.w = width;
textrect.h = GLYPH_SIZE_IMAGE;
SDL_SetTextInputRect(&textrect);
#endif
}
break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
if (event.key.keysym.scancode == SDL_SCANCODE_BACKSPACE) { if (event.key.keysym.scancode == SDL_SCANCODE_BACKSPACE) {
if (numChars > 0) { if (numChars > 0) {