mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Fix red: Invert buttons in RTL mode
- Revert renaming of button_set_flip() - Moved rtl flipping logic to apps/actions.c as a static function - Joined rtl_button_flip_needed() and button_flip_horizontally() git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22962 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
f7bd7252e1
commit
a39be4b307
6 changed files with 47 additions and 57 deletions
|
@ -59,20 +59,6 @@ static int unlock_combo = BUTTON_NONE;
|
|||
static bool screen_has_lock = false;
|
||||
#endif /* HAVE_SOFTWARE_KEYLOCK */
|
||||
|
||||
#if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER)
|
||||
/*
|
||||
* checks whether the given language and context combination require that the
|
||||
* button is horizontally inverted to support RTL language
|
||||
*
|
||||
*/
|
||||
static bool rtl_button_flip_needed(int context)
|
||||
{
|
||||
return lang_is_rtl() && ((context == CONTEXT_STD) ||
|
||||
(context & CONTEXT_TREE) || (context & CONTEXT_MAINMENU) ||
|
||||
(context & CONTEXT_TREE));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* do_button_check is the worker function for get_default_action.
|
||||
* returns ACTION_UNKNOWN or the requested return value from the list.
|
||||
|
@ -100,6 +86,44 @@ static inline int do_button_check(const struct button_mapping *items,
|
|||
return ret;
|
||||
}
|
||||
|
||||
#if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER)
|
||||
/*
|
||||
* button is horizontally inverted to support RTL language if the given language
|
||||
* and context combination require that
|
||||
*/
|
||||
static int button_flip_horizontally(int context, int button)
|
||||
{
|
||||
int newbutton;
|
||||
|
||||
if (!(lang_is_rtl() && ((context == CONTEXT_STD) ||
|
||||
(context & CONTEXT_TREE) || (context & CONTEXT_MAINMENU) ||
|
||||
(context & CONTEXT_TREE))))
|
||||
{
|
||||
return button;
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
static inline int get_next_context(const struct button_mapping *items, int i)
|
||||
{
|
||||
while (items[i].button_code != BUTTON_NONE)
|
||||
|
@ -219,8 +243,7 @@ static int get_action_worker(int context, int timeout,
|
|||
#endif /* HAS_BUTTON_HOLD */
|
||||
|
||||
#if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER)
|
||||
if (rtl_button_flip_needed(context))
|
||||
button = button_flip_horizontally(button);
|
||||
button = button_flip_horizontally(context, button);
|
||||
#endif
|
||||
|
||||
/* logf("%x,%x",last_button,button); */
|
||||
|
|
|
@ -67,7 +67,7 @@ static int flipdisplay_callback(int action,const struct menu_item_ex *this_item)
|
|||
switch (action)
|
||||
{
|
||||
case ACTION_EXIT_MENUITEM:
|
||||
button_set_flip_vertically(global_settings.flip_display);
|
||||
button_set_flip(global_settings.flip_display);
|
||||
lcd_set_flip(global_settings.flip_display);
|
||||
lcd_update();
|
||||
#ifdef HAVE_REMOTE_LCD
|
||||
|
|
|
@ -846,7 +846,7 @@ void settings_apply(bool read_disk)
|
|||
#endif
|
||||
#ifdef HAVE_LCD_FLIP
|
||||
lcd_set_flip(global_settings.flip_display);
|
||||
button_set_flip_vertically(global_settings.flip_display);
|
||||
button_set_flip(global_settings.flip_display);
|
||||
#endif
|
||||
lcd_update(); /* refresh after flipping the screen */
|
||||
settings_apply_pm_range();
|
||||
|
|
|
@ -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_vertically(int button)
|
||||
static int button_flip(int button)
|
||||
{
|
||||
int newbutton;
|
||||
|
||||
|
@ -507,49 +507,19 @@ static int button_flip_vertically(int button)
|
|||
* set the flip attribute
|
||||
* better only call this when the queue is empty
|
||||
*/
|
||||
void button_set_flip_vertically(bool flip)
|
||||
void button_set_flip(bool flip)
|
||||
{
|
||||
if (flip != flipped) /* not the current setting */
|
||||
{
|
||||
/* avoid race condition with the button_tick() */
|
||||
int oldlevel = disable_irq_save();
|
||||
lastbtn = button_flip_vertically(lastbtn);
|
||||
lastbtn = button_flip(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)
|
||||
{
|
||||
|
@ -580,7 +550,7 @@ static int button_read(void)
|
|||
|
||||
#ifdef HAVE_LCD_FLIP
|
||||
if (btn && flipped)
|
||||
btn = button_flip_vertically(btn); /* swap upside down */
|
||||
btn = button_flip(btn); /* swap upside down */
|
||||
#endif /* HAVE_LCD_FLIP */
|
||||
|
||||
#ifdef HAVE_TOUCHSCREEN
|
||||
|
|
|
@ -42,10 +42,7 @@ int button_status_wdata(int *pdata);
|
|||
#endif
|
||||
void button_clear_queue(void);
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
void button_set_flip_vertically(bool flip); /* turn 180 degrees */
|
||||
#ifndef BOOTLOADER
|
||||
int button_flip_horizontally(int button); /* for RTL mode */
|
||||
#endif
|
||||
void button_set_flip(bool flip); /* turn 180 degrees */
|
||||
#endif
|
||||
#ifdef HAVE_BACKLIGHT
|
||||
void set_backlight_filter_keypress(bool value);
|
||||
|
|
|
@ -312,7 +312,7 @@ void cpu_sleep(bool enabled)
|
|||
(void)enabled;
|
||||
}
|
||||
|
||||
void button_set_flip_vertically(bool yesno)
|
||||
void button_set_flip(bool yesno)
|
||||
{
|
||||
(void)yesno;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue