Better keyboard input formatting

multi_trace
DiSlord 5 years ago
parent cfa225ce28
commit 6e52e27986

34
ui.c

@ -1011,33 +1011,37 @@ menu_is_multiline(const char *label)
return n; return n;
} }
static int period_pos(void) {int j; for (j = 0; j < kp_index && kp_buf[j] != '.'; j++); return j;}
static void static void
draw_numeric_input(const char *buf) draw_numeric_input(const char *buf)
{ {
int i; uint16_t i;
int x; uint16_t x = 10 + 10 * FONT_WIDTH + 4;
uint16_t xsim = 0b0010010000000000; uint16_t xsim = 0b00100100100100100 >>(2-(period_pos()%3));
xsim&=~1;
ili9341_set_foreground(LCD_INPUT_TEXT_COLOR); ili9341_set_foreground(LCD_INPUT_TEXT_COLOR);
ili9341_set_background(LCD_INPUT_BG_COLOR); ili9341_set_background(LCD_INPUT_BG_COLOR);
for (i = 0, x = 64; i < NUMINPUT_LEN && buf[i]; i++, xsim<<=1) { for (i = 0; buf[i]; i++) {
int c = buf[i]; int c = buf[i];
if (c == '.') if (c == '.'){c = KP_PERIOD;xsim<<=4;}
c = KP_PERIOD; else if (c == '-'){c = KP_MINUS; xsim&=~1;}
else if (c == '-')
c = KP_MINUS;
else// if (c >= '0' && c <= '9') else// if (c >= '0' && c <= '9')
c = c - '0'; c = c - '0';
if (c < 0) c = 0;
// Add space before char
int16_t space = xsim&1 ? 2 + 10 : 2;
xsim>>=1;
ili9341_fill(x, LCD_HEIGHT-NUM_INPUT_HEIGHT+4, space, NUM_INPUT_HEIGHT);
x+=space;
if (c >= 0) // c is number if (c >= 0) // c is number
ili9341_drawfont(c, x, LCD_HEIGHT-NUM_INPUT_HEIGHT+4); ili9341_drawfont(c, x, LCD_HEIGHT-NUM_INPUT_HEIGHT+4);
else // erase else
break; break;
x+=NUM_FONT_GET_WIDTH;
x += xsim&0x8000 ? NUM_FONT_GET_WIDTH+2+8 : NUM_FONT_GET_WIDTH+2;
} }
// erase last
ili9341_fill(x, LCD_HEIGHT-NUM_INPUT_HEIGHT+4, LCD_WIDTH-x-1, NUM_FONT_GET_WIDTH+2+8); ili9341_fill(x, LCD_HEIGHT-NUM_INPUT_HEIGHT+4, LCD_WIDTH - 1 - x, NUM_INPUT_HEIGHT);
if (buf[0] == 0 && kp_help_text != NULL) { if (buf[0] == 0 && kp_help_text != NULL) {
int lines = menu_is_multiline(kp_help_text); int lines = menu_is_multiline(kp_help_text);
ili9341_set_foreground(LCD_INPUT_TEXT_COLOR); ili9341_set_foreground(LCD_INPUT_TEXT_COLOR);

Loading…
Cancel
Save

Powered by TurnKey Linux.