Now using lcd margins instead of a line offset for displaying status bar.
Needed to support fonts smaller than 8 pixels.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1823 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/playlist.c b/apps/playlist.c
index 9bd4294..2766598 100644
--- a/apps/playlist.c
+++ b/apps/playlist.c
@@ -30,12 +30,10 @@
 #include "settings.h"
 #include "status.h"
 #include "applimits.h"
-
 #ifdef HAVE_LCD_BITMAP
-#define LINE_Y      (global_settings.statusbar&&statusbar_enabled?1:0) /* Y position the entry-list starts at */
-#else /* HAVE_LCD_BITMAP */
-#define LINE_Y      0 /* Y position the entry-list starts at */
-#endif /* HAVE_LCD_BITMAP */
+#include "icons.h"
+#include "widgets.h"
+#endif
 
 playlist_info_t playlist;
 
@@ -183,10 +181,17 @@
 
     playlist.index = start_index;
 
+#ifdef HAVE_LCD_BITMAP
+    if(global_settings.statusbar)
+        lcd_setmargins(0, STATUSBAR_HEIGHT);
+    else
+        lcd_setmargins(0, 0);
+#endif
+
     /* If file is NULL, the list is in RAM */
     if(file) {
         lcd_clear_display();
-        lcd_puts(0,LINE_Y,"Loading...");
+        lcd_puts(0,0,"Loading...");
         status_draw();
         lcd_update();
         playlist.in_ram = false;
@@ -216,7 +221,7 @@
     
     if(global_settings.playlist_shuffle) {
         if(!playlist.in_ram) {
-            lcd_puts(0,LINE_Y,"Shuffling...");
+            lcd_puts(0,0,"Shuffling...");
             status_draw();
             lcd_update();
             randomise_playlist( random_seed );
@@ -247,7 +252,7 @@
     }
 
     if(!playlist.in_ram) {
-        lcd_puts(0,LINE_Y,"Playing...  ");
+        lcd_puts(0,0,"Playing...  ");
         status_draw();
         lcd_update();
     }
@@ -342,7 +347,7 @@
                         next_tick = current_tick + HZ;
                         snprintf(line, sizeof line, "%d files",
                                  playlist.amount);
-                        lcd_puts(0,LINE_Y+1,line);
+                        lcd_puts(0,1,line);
                         status_draw();
                         lcd_update();
                     }
@@ -357,7 +362,7 @@
     }
     if(!playlist.in_ram) {
         snprintf(line, sizeof line, "%d files", playlist.amount);
-        lcd_puts(0,LINE_Y+1,line);
+        lcd_puts(0,1,line);
         status_draw();
         lcd_update();
         close(fd);
diff --git a/apps/tree.c b/apps/tree.c
index 1f1c924..a07a520 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -69,10 +69,10 @@
 
 #ifdef HAVE_LCD_BITMAP
 
-#define TREE_MAX_ON_SCREEN   ((LCD_HEIGHT-MARGIN_Y)/LINE_HEIGTH-LINE_Y)
+#define TREE_MAX_ON_SCREEN   ((LCD_HEIGHT-MARGIN_Y)/LINE_HEIGTH)
 #define TREE_MAX_LEN_DISPLAY 16 /* max length that fits on screen */
  
-#define MARGIN_Y      0  /* Y pixel margin */
+#define MARGIN_Y      (global_settings.statusbar ? STATUSBAR_HEIGHT : 0)  /* Y pixel margin */
 #define MARGIN_X      10 /* X pixel margin */
 #define LINE_Y      (global_settings.statusbar ? 1 : 0) /* Y position the entry-list starts at */
 #define LINE_X      0 /* X position the entry-list starts at */
@@ -167,7 +167,7 @@
     int fh;
     unsigned char *font = lcd_getcurrentldfont();
     fh  = ajf_get_fontheight(font);
-    tree_max_on_screen =  ((LCD_HEIGHT-MARGIN_Y)/fh)-LINE_Y;
+    tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
     line_height = fh;
 #else
     tree_max_on_screen = TREE_MAX_ON_SCREEN;
@@ -273,7 +273,7 @@
                 icon_type = File;
         }
         lcd_bitmap(bitmap_icons_6x8[icon_type], 
-                   4, MARGIN_Y+(LINE_Y+i-start)*line_height, 6, 8, true);
+                   4, MARGIN_Y+(i-start)*line_height, 6, 8, true);
 #endif
 
 
@@ -283,11 +283,11 @@
         {
             char temp = dircache[i].name[len-4];
             dircache[i].name[len-4] = 0;
-            lcd_puts(LINE_X, LINE_Y+i-start, dircache[i].name);
+            lcd_puts(LINE_X, i-start, dircache[i].name);
             dircache[i].name[len-4] = temp;
         }
         else
-            lcd_puts(LINE_X, LINE_Y+i-start, dircache[i].name);
+            lcd_puts(LINE_X, i-start, dircache[i].name);
     }
 
     status_draw();
@@ -411,7 +411,7 @@
     int fh;
     unsigned char *font = lcd_getcurrentldfont();
     fh  = ajf_get_fontheight(font);
-    tree_max_on_screen =  ((LCD_HEIGHT-MARGIN_Y)/fh)-LINE_Y;
+    tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
 #else
     tree_max_on_screen = TREE_MAX_ON_SCREEN;
 #endif
@@ -424,7 +424,7 @@
     if (numentries == -1) 
         return -1;  /* root is not a directory */
 
-    put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+    put_cursorxy(0, CURSOR_Y + dircursor, true);
 
     while(1) {
         bool restore = false;
@@ -545,29 +545,29 @@
             case BUTTON_VOL_UP:
                 if(filesindir) {
                     if(dircursor) {
-                        put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, false);
+                        put_cursorxy(0, CURSOR_Y + dircursor, false);
                         dircursor--;
-                        put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+                        put_cursorxy(0, CURSOR_Y + dircursor, true);
                     }
                     else {
                         if (start) {
                             start--;
                             numentries = showdir(currdir, start);
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+                            put_cursorxy(0, CURSOR_Y + dircursor, true);
                         }
                         else {
                             if (numentries < tree_max_on_screen) {
-                                put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
+                                put_cursorxy(0, CURSOR_Y + dircursor,
                                              false);
                                 dircursor = numentries - 1;
-                                put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
+                                put_cursorxy(0, CURSOR_Y + dircursor,
                                              true);
                             }
                             else {
                                 start = numentries - tree_max_on_screen;
                                 dircursor = tree_max_on_screen - 1;
                                 numentries = showdir(currdir, start);
-                                put_cursorxy(0, CURSOR_Y + LINE_Y +
+                                put_cursorxy(0, CURSOR_Y +
                                              tree_max_on_screen - 1, true);
                             }
                         }
@@ -583,28 +583,28 @@
                 {
                     if (dircursor + start + 1 < numentries ) {
                         if(dircursor+1 < tree_max_on_screen) {
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
+                            put_cursorxy(0, CURSOR_Y + dircursor,
                                          false);
                             dircursor++;
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+                            put_cursorxy(0, CURSOR_Y + dircursor, true);
                         } 
                         else {
                             start++;
                             numentries = showdir(currdir, start);
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+                            put_cursorxy(0, CURSOR_Y + dircursor, true);
                         }
                     }
                     else {
                         if(numentries < tree_max_on_screen) {
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
+                            put_cursorxy(0, CURSOR_Y + dircursor,
                                          false);
                             start = dircursor = 0;
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+                            put_cursorxy(0, CURSOR_Y + dircursor, true);
                         } 
                         else {
                             start = dircursor = 0;
                             numentries = showdir(currdir, start);
-                            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+                            put_cursorxy(0, CURSOR_Y + dircursor, true);
                         }
                     }
                     lcd_update();
@@ -614,14 +614,8 @@
             case TREE_MENU: {
                 bool lastfilter = global_settings.mp3filter;
                 bool lastsortcase = global_settings.sort_case;
-#ifdef HAVE_LCD_BITMAP
-                bool laststate=statusbar(false);
-#endif
                 lcd_stop_scroll();
                 main_menu();
-#ifdef HAVE_LCD_BITMAP
-                statusbar(laststate);
-#endif
                 /* do we need to rescan dir? */
                 if ( lastfilter != global_settings.mp3filter ||
                      lastsortcase != global_settings.sort_case)
@@ -650,13 +644,18 @@
 
 #ifdef HAVE_RECORDER_KEYPAD
             case BUTTON_F3:
-#endif
 #ifdef HAVE_LCD_BITMAP
                 global_settings.statusbar = !global_settings.statusbar;
                 settings_save();
+#ifdef LOADABLE_FONTS
+                tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
+#else
+                tree_max_on_screen = TREE_MAX_ON_SCREEN;
+#endif
                 restore = true;
 #endif
                 break;
+#endif
 
 #ifndef SIMULATOR
             case SYS_USB_CONNECTED: {
@@ -694,7 +693,7 @@
                 dircursor--;
             }
             numentries = showdir(currdir, start);
-            put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
+            put_cursorxy(0, CURSOR_Y + dircursor, true);
         }
 
         if ( numentries ) {
@@ -711,12 +710,12 @@
                     int len = strlen(dircache[i].name);
                     char temp = dircache[i].name[len-4];
                     dircache[i].name[len-4] = 0;
-                    lcd_puts_scroll(LINE_X, LINE_Y+dircursor, 
+                    lcd_puts_scroll(LINE_X, dircursor, 
                                     dircache[i].name);
                     dircache[i].name[len-4] = temp;
                 }
                 else
-                    lcd_puts_scroll(LINE_X, LINE_Y+dircursor,
+                    lcd_puts_scroll(LINE_X, dircursor,
                                     dircache[i].name);
             }
         }
diff --git a/apps/wps.c b/apps/wps.c
index 3af73d1..e134535 100644
--- a/apps/wps.c
+++ b/apps/wps.c
@@ -45,12 +45,6 @@
 #endif
 
 #ifdef HAVE_LCD_BITMAP
-#define LINE_Y      (global_settings.statusbar ? 1 : 0) /* Y position the entry-list starts at */
-#else /* HAVE_LCD_BITMAP */
-#define LINE_Y      0 /* Y position the entry-list starts at */
-#endif /* HAVE_LCD_BITMAP */
-
-#ifdef HAVE_LCD_BITMAP
     #define PLAY_DISPLAY_2LINEID3        0 
     #define PLAY_DISPLAY_FILENAME_SCROLL 1 
     #define PLAY_DISPLAY_TRACK_TITLE     2 
@@ -82,7 +76,6 @@
     font_height = 8;
 #endif
 
-
     lcd_clear_display();
     if(!id3)
     {
@@ -117,14 +110,14 @@
                 strncpy(szArtist,szTok,sizeof(szArtist));
                 szArtist[sizeof(szArtist)-1] = 0;
                 szDelimit = strrchr(id3->path, ch);
-                lcd_puts(0,LINE_Y, szArtist?szArtist:"<nothing>");
+                lcd_puts(0, 0, szArtist?szArtist:"<nothing>");
 
                 // removes the .mp3 from the end of the display buffer
                 szPeriod = strrchr(szDelimit, '.');
                 if (szPeriod != NULL)
                     *szPeriod = 0;
 
-                lcd_puts_scroll(0,LINE_Y+1,(++szDelimit));
+                lcd_puts_scroll(0, 1, (++szDelimit));
                 break;
             }
             case PLAY_DISPLAY_FILENAME_SCROLL:
@@ -147,12 +140,12 @@
                             playlist.amount,
                             id3->path);
                 }
-                lcd_puts_scroll(0,LINE_Y, buffer);
+                lcd_puts_scroll(0, 0, buffer);
                 break;
             }
             case PLAY_DISPLAY_2LINEID3:
             {
-                int l = LINE_Y;
+                int l = 0;
 #ifdef HAVE_LCD_BITMAP
                 char buffer[64];
 
@@ -161,7 +154,7 @@
                 lcd_puts(0, l++, id3->album?id3->album:"");
                 lcd_puts(0, l++, id3->artist?id3->artist:"");
 
-                if(LINE_Y==0&&font_height<=8) {
+                if(!global_settings.statusbar && font_height <= 8) {
                     if(id3->vbr)
                         snprintf(buffer, sizeof(buffer), "%d kbit (avg)",
                                  id3->bitrate);
@@ -345,6 +338,11 @@
     char buffer[32];
 
 #ifdef HAVE_LCD_BITMAP
+    int line;
+    if(global_settings.statusbar)
+        line = 5;
+    else
+        line = 6;
     snprintf(buffer,sizeof(buffer),
              "Time:%3d:%02d/%d:%02d",
              elapsed / 60000,
@@ -352,7 +350,7 @@
              length / 60000,
              length % 60000 / 1000 );
 
-    lcd_puts(0, 6, buffer);
+    lcd_puts(0, line, buffer);
     slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right);
     lcd_update();
 #else
@@ -410,6 +408,7 @@
     {
         lcd_puts(2, 3, "Key lock is OFF");
     }
+    status_draw();
     lcd_update();
 #endif
     
@@ -435,6 +434,7 @@
     {
         lcd_puts(2, 3, "Mute is OFF");
     }
+    status_draw();
     lcd_update();
 #endif
     
@@ -464,7 +464,10 @@
     lcd_icon(ICON_AUDIO, true);
     lcd_icon(ICON_PARAM, false);
 #else
-    lcd_setmargins(0,0);
+    if(global_settings.statusbar)
+        lcd_setmargins(0, STATUSBAR_HEIGHT);
+    else
+        lcd_setmargins(0, 0);
 #endif
 
     ff_rewind = false;
@@ -876,15 +879,9 @@
 #endif
                 if(!keys_locked && !dont_go_to_menu && menu_button_is_down)
                 {
-#ifdef HAVE_LCD_BITMAP
-                    bool laststate=statusbar(false);
-#endif
                     lcd_stop_scroll();
                     button_set_release(old_release_mask);
                     main_menu();
-#ifdef HAVE_LCD_BITMAP
-                    statusbar(laststate);
-#endif
                     old_release_mask = button_set_release(RELEASE_MASK);
                     ignore_keyup = true;
                     id3 = mpeg_current_track();
@@ -905,6 +902,10 @@
 #ifdef HAVE_LCD_BITMAP
                 global_settings.statusbar = !global_settings.statusbar;
                 settings_save();
+                if(global_settings.statusbar)
+                    lcd_setmargins(0, STATUSBAR_HEIGHT);
+                else
+                    lcd_setmargins(0, 0);
                 draw_screen(id3);
 #endif
                 break;