[Add] Input widget will scoll if full.

This commit is contained in:
Allanis 2013-03-22 19:18:26 +00:00
parent ab0ecfdede
commit e3618d7559
2 changed files with 14 additions and 3 deletions

View File

@ -16,7 +16,7 @@
#define MENU_WIDTH 130 #define MENU_WIDTH 130
#define MENU_HEIGHT 200 #define MENU_HEIGHT 200
#define INFO_WIDTH 320 #define INFO_WIDTH 360
#define INFO_HEIGHT 280 #define INFO_HEIGHT 280
#define OUTFITS_WIDTH 400 #define OUTFITS_WIDTH 400

View File

@ -921,7 +921,7 @@ static void toolkit_renderInput(Widget* inp, double bx, double by) {
gl_printText(&gl_smallFont, inp->w-10., inp->h, gl_printText(&gl_smallFont, inp->w-10., inp->h,
x+5. + gl_screen.w/2., ty + gl_screen.h/2., x+5. + gl_screen.w/2., ty + gl_screen.h/2.,
&cBlack, inp->dat.inp.input); &cBlack, inp->dat.inp.input+inp->dat.inp.view);
// Inner outline. // Inner outline.
toolkit_drawOutline(x, y, inp->w, inp->h, 0., toolkit_drawOutline(x, y, inp->w, inp->h, 0.,
@ -933,6 +933,7 @@ static void toolkit_renderInput(Widget* inp, double bx, double by) {
// Handle input for input widget. // Handle input for input widget.
static int toolkit_inputInput(Uint8 type, Widget* inp, SDLKey key) { static int toolkit_inputInput(Uint8 type, Widget* inp, SDLKey key) {
int n;
SDLMod mods; SDLMod mods;
if(inp->type != WIDGET_INPUT) return 0; if(inp->type != WIDGET_INPUT) return 0;
@ -940,8 +941,16 @@ static int toolkit_inputInput(Uint8 type, Widget* inp, SDLKey key) {
mods = SDL_GetModState(); mods = SDL_GetModState();
if(inp->dat.inp.oneline && isascii(key)) { if(inp->dat.inp.oneline && isascii(key)) {
// Backspace -> delete text. // Backspace -> delete text.
if((type == SDL_KEYDOWN) && (key == '\b') && (inp->dat.inp.pos > 0)) if((type == SDL_KEYDOWN) && (key == '\b') && (inp->dat.inp.pos > 0)) {
inp->dat.inp.input[--inp->dat.inp.pos] = '\0'; inp->dat.inp.input[--inp->dat.inp.pos] = '\0';
if(inp->dat.inp.view > 0) {
n = gl_printWidth(&gl_smallFont,
inp->dat.inp.input + inp->dat.inp.view - 1);
if(n+10 < inp->w)
inp->dat.inp.view--;
}
}
else if((type == SDL_KEYDOWN) && (inp->dat.inp.pos < inp->dat.inp.max-1)) { else if((type == SDL_KEYDOWN) && (inp->dat.inp.pos < inp->dat.inp.max-1)) {
if((key == SDLK_RETURN) && !inp->dat.inp.oneline) if((key == SDLK_RETURN) && !inp->dat.inp.oneline)
inp->dat.inp.input[inp->dat.inp.pos++] = '\n'; inp->dat.inp.input[inp->dat.inp.pos++] = '\n';
@ -957,6 +966,8 @@ static int toolkit_inputInput(Uint8 type, Widget* inp, SDLKey key) {
// Didn't get a useful key. // Didn't get a useful key.
else return 0; else return 0;
n = gl_printWidth(&gl_smallFont, inp->dat.inp.input+inp->dat.inp.view);
if(n + 10 > inp->w) inp->dat.inp.view++;
return 1; return 1;
} }
} }