summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-10-09 18:39:34 +0000
committerThomas Martitz <kugel@rockbox.org>2009-10-09 18:39:34 +0000
commit80003bc4a4c2564c15e202a73bf2f2103e9a6407 (patch)
treee9362aad8197e92cd0a2a90e1484f695f51493ed /apps
parente1009476ca7df7e895199a66aef470f54502641f (diff)
downloadrockbox-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.c1
-rw-r--r--apps/gui/skin_engine/skin_parser.c1
-rw-r--r--apps/gui/statusbar.c3
-rw-r--r--apps/gui/viewport.c24
-rw-r--r--apps/gui/viewport.h1
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
62static int statusbar_enabled = 0; 62static int statusbar_enabled = 0;
63static 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
144void viewport_set_defaults(struct viewport *vp, enum screen_type screen) 147void 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
159void viewportmanager_init(void) 158void 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
362static 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
357const char* viewport_parse_viewport(struct viewport *vp, 372const 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