diff options
author | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-05 17:53:45 +0000 |
---|---|---|
committer | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-05 17:53:45 +0000 |
commit | a39be4b3073ef32a3e33bdbf88f0c1474c7b1931 (patch) | |
tree | 1f933f70ab0fc45a1aa8b1e95fb24969bd7d5b20 /apps/action.c | |
parent | f7bd7252e14a151217f1a9b7eee6200eb23586a8 (diff) | |
download | rockbox-a39be4b3073ef32a3e33bdbf88f0c1474c7b1931.tar.gz rockbox-a39be4b3073ef32a3e33bdbf88f0c1474c7b1931.tar.bz2 rockbox-a39be4b3073ef32a3e33bdbf88f0c1474c7b1931.zip |
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
Diffstat (limited to 'apps/action.c')
-rw-r--r-- | apps/action.c | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/apps/action.c b/apps/action.c index cde57441e7..055171174b 100644 --- a/apps/action.c +++ b/apps/action.c @@ -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); */ |