mirror of
https://github.com/MiyooCFW/buildroot.git
synced 2025-09-27 22:24:19 +03:00
100 lines
2.8 KiB
Diff
100 lines
2.8 KiB
Diff
From 5ed7374aa765b8e0a5380590efcefa5c6ddcdb06 Mon Sep 17 00:00:00 2001
|
|
From: Apaczer <94932128+Apaczer@users.noreply.github.com>
|
|
Date: Wed, 27 Mar 2024 21:26:08 +0100
|
|
Subject: [PATCH 1/7] mod input_loop() char result stack with arrow keys
|
|
|
|
---
|
|
sdlbook.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++-----
|
|
1 file changed, 47 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/sdlbook.c b/sdlbook.c
|
|
index 33a2f29..d608aba 100644
|
|
--- a/sdlbook.c
|
|
+++ b/sdlbook.c
|
|
@@ -589,6 +589,7 @@ static void input_loop(const char* title, char *result, enum input_flags flags)
|
|
ezsdl_update_region(0, 0, ezsdl_get_width(), MIN(desired_height, ezsdl_get_height()));
|
|
char* p = result;
|
|
*p = 0;
|
|
+ int p_n = 48;
|
|
struct event event;
|
|
while(1) {
|
|
enum eventtypes e;
|
|
@@ -597,20 +598,61 @@ static void input_loop(const char* title, char *result, enum input_flags flags)
|
|
case EV_QUIT:
|
|
case EV_KEYUP:
|
|
switch(event.which) {
|
|
- case SDLK_BACKSPACE:
|
|
+ case SDLK_BACKSPACE: case SDLK_LEFT:
|
|
+ if(flags == INPUT_LOOP_RET)
|
|
+ goto out;
|
|
if(p > result) p--;
|
|
+ p_n = *(p - 1);
|
|
*p = 0;
|
|
goto drawit;
|
|
- case SDLK_RETURN: case SDLK_ESCAPE:
|
|
+ case SDLK_RIGHT:
|
|
+ if(flags == INPUT_LOOP_RET)
|
|
+ goto out;
|
|
+ if(p - result < 20) {
|
|
+ p_n = 48;
|
|
+ *(p++) = p_n;
|
|
+ *p = 0;
|
|
+ goto drawit;
|
|
+ } else
|
|
+ break;
|
|
+ case SDLK_RETURN: case SDLK_ESCAPE: case SDLK_g:
|
|
out:;
|
|
*p = 0;
|
|
ezsdl_clear();
|
|
return;
|
|
+ case SDLK_UP:
|
|
+ if(flags == INPUT_LOOP_RET)
|
|
+ goto out;
|
|
+ p_n = *(p - 1);
|
|
+ if(p_n < 48 || p_n > 57) p_n = 48;
|
|
+ if(p >= result && p_n < 57 && (p - result < 20)) {
|
|
+ if (p > result) p--;
|
|
+ p_n++;
|
|
+ *(p++) = p_n;
|
|
+ *p = 0;
|
|
+ goto drawit;
|
|
+ } else
|
|
+ break;
|
|
+ case SDLK_DOWN:
|
|
+ if(flags == INPUT_LOOP_RET)
|
|
+ goto out;
|
|
+ p_n = *(p - 1);
|
|
+ if(p_n < 48 || p_n > 57) p_n = 48;
|
|
+ if(p >= result && p_n >= 48 && (p - result < 20)) {
|
|
+ if (p_n == 48 ) p_n++;
|
|
+ if (p > result) p--;
|
|
+ p_n--;
|
|
+ *(p++) = p_n;
|
|
+ *p = 0;
|
|
+ goto drawit;
|
|
+ } else
|
|
+ break;
|
|
default:
|
|
if(flags == INPUT_LOOP_RET)
|
|
goto out;
|
|
- else if(flags == INPUT_LOOP_NUMERIC && isdigit(event.which) && (p - result < 20)) {
|
|
- *(p++) = event.which;
|
|
+ else if(flags == INPUT_LOOP_NUMERIC && (p - result < 20)) {
|
|
+ if(isdigit(event.which)) *(p++) = event.which;
|
|
+ else if (event.which == 275) *(p++) = 48;
|
|
*p = 0;
|
|
}
|
|
drawit:
|
|
@@ -865,7 +907,7 @@ int main(int argc, char **argv) {
|
|
{
|
|
char buf[32];
|
|
buf[0] = 0;
|
|
- input_loop("enter page no", buf, INPUT_LOOP_NUMERIC);
|
|
+ input_loop("Enter page No.: (use number/arrow keys)", buf, INPUT_LOOP_NUMERIC);
|
|
if(*buf) need_redraw = set_page(atoi(buf));
|
|
else need_redraw = 1;
|
|
}
|
|
--
|
|
2.34.1
|
|
|