diff options
author | Thomas Martitz <kugel@rockbox.org> | 2009-10-09 18:39:34 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2009-10-09 18:39:34 +0000 |
commit | 80003bc4a4c2564c15e202a73bf2f2103e9a6407 (patch) | |
tree | e9362aad8197e92cd0a2a90e1484f695f51493ed /apps | |
parent | e1009476ca7df7e895199a66aef470f54502641f (diff) | |
download | rockbox-80003bc4a4c2564c15e202a73bf2f2103e9a6407.tar.gz rockbox-80003bc4a4c2564c15e202a73bf2f2103e9a6407.zip |
Fix a few problems with RTL, statusbar and custom ui viewport.
*text in statusbar jumped around
*custom ui vp wasn't refreshed properly on language changing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23053 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/filetree.c | 1 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 1 | ||||
-rw-r--r-- | apps/gui/statusbar.c | 3 | ||||
-rw-r--r-- | apps/gui/viewport.c | 24 | ||||
-rw-r--r-- | apps/gui/viewport.h | 1 |
5 files changed, 25 insertions, 5 deletions
diff --git a/apps/filetree.c b/apps/filetree.c index d7e77226e5..8fbc39fa67 100644 --- a/apps/filetree.c +++ b/apps/filetree.c | |||
@@ -530,6 +530,7 @@ int ft_enter(struct tree_context* c) | |||
530 | set_file(buf, (char *)global_settings.lang_file, | 530 | set_file(buf, (char *)global_settings.lang_file, |
531 | MAX_FILENAME); | 531 | MAX_FILENAME); |
532 | talk_init(); /* use voice of same language */ | 532 | talk_init(); /* use voice of same language */ |
533 | viewportmanager_theme_changed(THEME_LANGUAGE); | ||
533 | splash(HZ, ID2P(LANG_LANGUAGE_LOADED)); | 534 | splash(HZ, ID2P(LANG_LANGUAGE_LOADED)); |
534 | } | 535 | } |
535 | break; | 536 | break; |
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 7e2ceabdb2..e7c9f4fb52 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -706,6 +706,7 @@ static int parse_viewport(const char *wps_bufptr, | |||
706 | if (!(ptr = viewport_parse_viewport(vp, screen, ptr, '|'))) | 706 | if (!(ptr = viewport_parse_viewport(vp, screen, ptr, '|'))) |
707 | return WPS_ERROR_INVALID_PARAM; | 707 | return WPS_ERROR_INVALID_PARAM; |
708 | 708 | ||
709 | vp->flags &= ~VP_FLAG_IS_RTL; /* ignore rright-to-left languages */ | ||
709 | /* Check for trailing | */ | 710 | /* Check for trailing | */ |
710 | if (*ptr != '|') | 711 | if (*ptr != '|') |
711 | return WPS_ERROR_INVALID_PARAM; | 712 | return WPS_ERROR_INVALID_PARAM; |
diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c index 0a9d539223..8edc824e2e 100644 --- a/apps/gui/statusbar.c +++ b/apps/gui/statusbar.c | |||
@@ -174,7 +174,8 @@ static void gui_statusbar_init(struct gui_statusbar * bar) | |||
174 | } | 174 | } |
175 | 175 | ||
176 | #define GET_RECT(vp, vals,display) do { \ | 176 | #define GET_RECT(vp, vals,display) do { \ |
177 | viewport_set_fullscreen(&(vp), (display)->screen_type); \ | 177 | viewport_set_fullscreen(&(vp), (display)->screen_type); \ |
178 | (vp).flags &= ~VP_FLAG_IS_RTL; \ | ||
178 | (vp).height = STATUSBAR_HEIGHT; \ | 179 | (vp).height = STATUSBAR_HEIGHT; \ |
179 | (vp).x = STATUSBAR_X_POS; \ | 180 | (vp).x = STATUSBAR_X_POS; \ |
180 | if ((vals) != STATUSBAR_BOTTOM) \ | 181 | if ((vals) != STATUSBAR_BOTTOM) \ |
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index 6e1541021d..e12157530f 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #endif | 60 | #endif |
61 | 61 | ||
62 | static int statusbar_enabled = 0; | 62 | static int statusbar_enabled = 0; |
63 | static void viewport_rtl_handler(struct viewport *vp); | ||
63 | 64 | ||
64 | #ifdef HAVE_LCD_BITMAP | 65 | #ifdef HAVE_LCD_BITMAP |
65 | 66 | ||
@@ -107,6 +108,7 @@ void viewport_set_fullscreen(struct viewport *vp, enum screen_type screen) | |||
107 | vp->width = screens[screen].lcdwidth; | 108 | vp->width = screens[screen].lcdwidth; |
108 | 109 | ||
109 | #ifdef HAVE_LCD_BITMAP | 110 | #ifdef HAVE_LCD_BITMAP |
111 | viewport_rtl_handler(vp); | ||
110 | vp->drawmode = DRMODE_SOLID; | 112 | vp->drawmode = DRMODE_SOLID; |
111 | vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */ | 113 | vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */ |
112 | 114 | ||
@@ -139,6 +141,7 @@ void viewport_set_fullscreen(struct viewport *vp, enum screen_type screen) | |||
139 | vp->bg_pattern = LCD_REMOTE_DEFAULT_BG; | 141 | vp->bg_pattern = LCD_REMOTE_DEFAULT_BG; |
140 | } | 142 | } |
141 | #endif | 143 | #endif |
144 | |||
142 | } | 145 | } |
143 | 146 | ||
144 | void viewport_set_defaults(struct viewport *vp, enum screen_type screen) | 147 | void viewport_set_defaults(struct viewport *vp, enum screen_type screen) |
@@ -150,10 +153,6 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen) | |||
150 | #endif | 153 | #endif |
151 | viewport_set_fullscreen(vp, screen); | 154 | viewport_set_fullscreen(vp, screen); |
152 | 155 | ||
153 | #ifdef HAVE_LCD_BITMAP | ||
154 | vp->flags &= ~VP_FLAG_IS_RTL; | ||
155 | vp->flags |= lang_is_rtl() ? VP_FLAG_IS_RTL : 0; | ||
156 | #endif | ||
157 | } | 156 | } |
158 | 157 | ||
159 | void viewportmanager_init(void) | 158 | void viewportmanager_init(void) |
@@ -239,6 +238,11 @@ void viewportmanager_theme_changed(int which) | |||
239 | /* and point to it */ | 238 | /* and point to it */ |
240 | ui_vp_info.vp = custom_vp; | 239 | ui_vp_info.vp = custom_vp; |
241 | } | 240 | } |
241 | else if (which & THEME_LANGUAGE) | ||
242 | { /* THEME_UI_VIEWPORT handles rtl already */ | ||
243 | FOR_NB_SCREENS(i) | ||
244 | viewport_rtl_handler(&custom_vp[i]); | ||
245 | } | ||
242 | if (which & THEME_STATUSBAR) | 246 | if (which & THEME_STATUSBAR) |
243 | { | 247 | { |
244 | statusbar_enabled = VP_SB_HIDE_ALL; | 248 | statusbar_enabled = VP_SB_HIDE_ALL; |
@@ -354,6 +358,17 @@ bool viewport_point_within_vp(const struct viewport *vp, int x, int y) | |||
354 | #endif | 358 | #endif |
355 | 359 | ||
356 | #ifdef HAVE_LCD_BITMAP | 360 | #ifdef HAVE_LCD_BITMAP |
361 | |||
362 | static void viewport_rtl_handler(struct viewport *vp) | ||
363 | { | ||
364 | #ifndef __PCTOOL__ | ||
365 | if (UNLIKELY(lang_is_rtl())) | ||
366 | vp->flags |= VP_FLAG_IS_RTL; | ||
367 | else | ||
368 | #endif | ||
369 | vp->flags &= ~VP_FLAG_IS_RTL; | ||
370 | } | ||
371 | |||
357 | const char* viewport_parse_viewport(struct viewport *vp, | 372 | const char* viewport_parse_viewport(struct viewport *vp, |
358 | enum screen_type screen, | 373 | enum screen_type screen, |
359 | const char *bufptr, | 374 | const char *bufptr, |
@@ -436,6 +451,7 @@ const char* viewport_parse_viewport(struct viewport *vp, | |||
436 | 451 | ||
437 | /* Set the defaults for fields not user-specified */ | 452 | /* Set the defaults for fields not user-specified */ |
438 | vp->drawmode = DRMODE_SOLID; | 453 | vp->drawmode = DRMODE_SOLID; |
454 | viewport_rtl_handler(vp); | ||
439 | 455 | ||
440 | return ptr; | 456 | return ptr; |
441 | } | 457 | } |
diff --git a/apps/gui/viewport.h b/apps/gui/viewport.h index 9cabc00468..9ab0a71439 100644 --- a/apps/gui/viewport.h +++ b/apps/gui/viewport.h | |||
@@ -59,6 +59,7 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen); | |||
59 | #define THEME_STATUSBAR (BIT_N(0)) | 59 | #define THEME_STATUSBAR (BIT_N(0)) |
60 | #define THEME_UI_VIEWPORT (BIT_N(1)) | 60 | #define THEME_UI_VIEWPORT (BIT_N(1)) |
61 | #define THEME_BUTTONBAR (BIT_N(2)) | 61 | #define THEME_BUTTONBAR (BIT_N(2)) |
62 | #define THEME_LANGUAGE (BIT_N(3)) | ||
62 | #define THEME_ALL (~(0u)) | 63 | #define THEME_ALL (~(0u)) |
63 | 64 | ||
64 | #define VP_SB_HIDE_ALL 0 | 65 | #define VP_SB_HIDE_ALL 0 |