Invert buttons in RTL mode

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22961 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Tomer Shalev 2009-10-05 17:17:30 +00:00
parent e04acd8c3e
commit f7bd7252e1
6 changed files with 63 additions and 8 deletions

View file

@ -437,7 +437,7 @@ void button_close(void)
/*
* helper function to swap LEFT/RIGHT, UP/DOWN (if present), and F1/F3 (Recorder)
*/
static int button_flip(int button)
static int button_flip_vertically(int button)
{
int newbutton;
@ -507,19 +507,49 @@ static int button_flip(int button)
* set the flip attribute
* better only call this when the queue is empty
*/
void button_set_flip(bool flip)
void button_set_flip_vertically(bool flip)
{
if (flip != flipped) /* not the current setting */
{
/* avoid race condition with the button_tick() */
int oldlevel = disable_irq_save();
lastbtn = button_flip(lastbtn);
lastbtn = button_flip_vertically(lastbtn);
flipped = flip;
restore_irq(oldlevel);
}
}
#endif /* HAVE_LCD_FLIP */
#if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER)
/*
* helper function to swap LEFT/RIGHT sides (for RTL mode)
*/
int button_flip_horizontally(int button)
{
int newbutton;
newbutton = button &
~(BUTTON_LEFT | BUTTON_RIGHT
#if defined(BUTTON_SCROLL_BACK) && defined(BUTTON_SCROLL_FWD)
| BUTTON_SCROLL_BACK | BUTTON_SCROLL_FWD
#endif
);
if (button & BUTTON_LEFT)
newbutton |= BUTTON_RIGHT;
if (button & BUTTON_RIGHT)
newbutton |= BUTTON_LEFT;
#if defined(BUTTON_SCROLL_BACK) && defined(BUTTON_SCROLL_FWD)
if (button & BUTTON_SCROLL_BACK)
newbutton |= BUTTON_SCROLL_FWD;
if (button & BUTTON_SCROLL_FWD)
newbutton |= BUTTON_SCROLL_BACK;
#endif
return newbutton;
}
#endif
#ifdef HAVE_BACKLIGHT
void set_backlight_filter_keypress(bool value)
{
@ -550,7 +580,7 @@ static int button_read(void)
#ifdef HAVE_LCD_FLIP
if (btn && flipped)
btn = button_flip(btn); /* swap upside down */
btn = button_flip_vertically(btn); /* swap upside down */
#endif /* HAVE_LCD_FLIP */
#ifdef HAVE_TOUCHSCREEN

View file

@ -42,7 +42,10 @@ int button_status_wdata(int *pdata);
#endif
void button_clear_queue(void);
#ifdef HAVE_LCD_BITMAP
void button_set_flip(bool flip); /* turn 180 degrees */
void button_set_flip_vertically(bool flip); /* turn 180 degrees */
#ifndef BOOTLOADER
int button_flip_horizontally(int button); /* for RTL mode */
#endif
#endif
#ifdef HAVE_BACKLIGHT
void set_backlight_filter_keypress(bool value);