1
0
Fork 0
forked from len0rd/rockbox

Adaptive button repeat: adapts repeat rate depending on the ability of the application to cope. Avoids afterscroll and similar effects. * Yield while scrolling through lists.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8738 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-02-19 13:34:12 +00:00
parent 1b45b130dc
commit 237d3c4c4b
5 changed files with 52 additions and 11 deletions

View file

@ -39,7 +39,6 @@ static int btn = 0; /* Hopefully keeps track of currently pressed keys... */
void button_event(int key, bool pressed)
{
bool post = false;
int new_btn = 0;
int diff = 0;
static int count = 0;
@ -47,6 +46,7 @@ void button_event(int key, bool pressed)
static int repeat_speed = REPEAT_INTERVAL_START;
static int repeat_count = 0;
static bool repeat = false;
static bool post = false;
switch (key)
{
@ -175,7 +175,8 @@ void button_event(int key, bool pressed)
{
if ( repeat )
{
count--;
if (!post)
count--;
if (count == 0)
{
post = true;
@ -203,9 +204,18 @@ void button_event(int key, bool pressed)
if ( post )
{
if(repeat)
queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
{
if (queue_empty(&button_queue))
{
queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
post = false;
}
}
else
{
queue_post(&button_queue, btn, NULL);
post = false;
}
#ifdef HAVE_REMOTE_LCD
if(btn & BUTTON_REMOTE)

View file

@ -40,7 +40,6 @@ static int btn = 0; /* Hopefully keeps track of currently pressed keys... */
void button_event(int key, bool pressed)
{
bool post = false;
int new_btn = 0;
int diff = 0;
static int count = 0;
@ -48,6 +47,7 @@ void button_event(int key, bool pressed)
static int repeat_speed = REPEAT_INTERVAL_START;
static int repeat_count = 0;
static bool repeat = false;
static bool post = false;
switch (key)
{
@ -176,7 +176,8 @@ void button_event(int key, bool pressed)
{
if ( repeat )
{
count--;
if (!post)
count--;
if (count == 0)
{
post = true;
@ -204,9 +205,18 @@ void button_event(int key, bool pressed)
if ( post )
{
if(repeat)
queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
{
if (queue_empty(&button_queue))
{
queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
post = false;
}
}
else
{
queue_post(&button_queue, btn, NULL);
post = false;
}
#ifdef HAVE_REMOTE_LCD
if(btn & BUTTON_REMOTE)

View file

@ -55,13 +55,13 @@ static void button_tick(void)
static int repeat_speed = REPEAT_INTERVAL_START;
static int repeat_count = 0;
static bool repeat = false;
static bool post = false;
int diff;
int btn;
/* only poll every X ticks */
if ( ++tick >= POLL_FREQUENCY )
{
bool post = false;
button_read();
btn = button_state;
@ -115,9 +115,18 @@ static void button_tick(void)
if ( post )
{
if (repeat)
queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
{
if (queue_empty(&button_queue))
{
queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
post = false;
}
}
else
{
queue_post(&button_queue, btn, NULL);
post = false;
}
#ifdef HAVE_REMOTE_LCD
if(btn & BUTTON_REMOTE)
remote_backlight_on();