Просмотр исходного кода

improved autorepeat behavior in menus

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@499 be3aeb3a-fb24-0410-a615-afba39da0efa
notaz 16 лет назад
Родитель
Сommit
385760631f
3 измененных файлов с 18 добавлено и 11 удалено
  1. 10 7
      platform/gizmondo/menu.c
  2. 4 2
      platform/gp2x/menu.c
  3. 4 2
      platform/psp/menu.c

+ 10 - 7
platform/gizmondo/menu.c

@@ -48,16 +48,17 @@ static unsigned int inp_prev = 0;
 
 static unsigned long wait_for_input(unsigned int interesting)
 {
-	unsigned int ret;
-	static int repeats = 0, wait = 50;
+	unsigned long ret;
+	static int repeats = 0, wait = 20;
 	int release = 0, i;
 
-	if (repeats == 2 || repeats == 4) wait /= 2;
-	if (repeats == 6) wait = 15;
+	if      (repeats == 2) wait = 3;
+	else if (repeats == 4) wait = 2;
+	else if (repeats == 6) wait = 1;
 
-	for (i = 0; i < 6 && inp_prev == Framework_PollGetButtons(); i++) {
+	for (i = 0; i < wait && inp_prev == Framework_PollGetButtons(); i++) {
 		if (i == 0) repeats++;
-		Sleep(wait);
+		Sleep(30);
 	}
 
 	while ( !((ret = Framework_PollGetButtons()) & interesting) ) {
@@ -67,8 +68,10 @@ static unsigned long wait_for_input(unsigned int interesting)
 
 	if (release || ret != inp_prev) {
 		repeats = 0;
-		wait = 50;
+		wait = 20;
 	}
+	if (wait > 6 && (ret&(BTN_UP|BTN_LEFT|BTN_DOWN|BTN_RIGHT)))
+		wait = 6;
 	inp_prev = ret;
 
 	// we don't need diagonals in menus

+ 4 - 2
platform/gp2x/menu.c

@@ -46,7 +46,7 @@ static int inp_prevjoy = 0;
 static unsigned long wait_for_input(unsigned long interesting)
 {
 	unsigned long ret;
-	static int repeats = 0, wait = 6;
+	static int repeats = 0, wait = 20;
 	int release = 0, i;
 
 	if      (repeats == 2) wait = 3;
@@ -65,8 +65,10 @@ static unsigned long wait_for_input(unsigned long interesting)
 
 	if (release || ret != inp_prev) {
 		repeats = 0;
-		wait = 6;
+		wait = 20;
 	}
+	if (wait > 6 && (ret&(GP2X_UP|GP2X_LEFT|GP2X_DOWN|GP2X_RIGHT)))
+		wait = 6;
 	inp_prev = ret;
 	inp_prevjoy = 0;
 

+ 4 - 2
platform/psp/menu.c

@@ -52,7 +52,7 @@ static unsigned int inp_prev = 0;
 static unsigned long wait_for_input(unsigned int interesting, int is_key_config)
 {
 	unsigned int ret;
-	static int repeats = 0, wait = 6;
+	static int repeats = 0, wait = 20;
 	int release = 0, count, i;
 
 	if (!is_key_config)
@@ -76,12 +76,14 @@ static unsigned long wait_for_input(unsigned int interesting, int is_key_config)
 
 	if (release || ret != inp_prev) {
 		repeats = 0;
-		wait = 6;
+		wait = 20;
 	}
 	inp_prev = ret;
 
 	if (!is_key_config)
 		ret |= (ret & 0xf0000000) >> 24; // use analog as d-pad
+	if (wait > 6 && (ret&(BTN_UP|BTN_LEFT|BTN_DOWN|BTN_RIGHT)))
+		wait = 6;
 
 	// we don't need diagonals in menus
 	if ((ret&BTN_UP)   && (ret&BTN_LEFT))  ret &= ~BTN_LEFT;