Index: apps/gui/gwps-common.c
===================================================================
--- apps/gui/gwps-common.c	(révision 13379)
+++ apps/gui/gwps-common.c	(copie de travail)
@@ -466,18 +466,18 @@
 
 #ifdef HAVE_LCD_BITMAP
 
-static void draw_progressbar(struct gui_wps *gwps, int line)
+static void draw_progressbar(struct gui_wps *gwps, int line,
+                             unsigned short line_height)
 {
     struct wps_data *data = gwps->data;
     struct screen *display = gwps->display;
     struct wps_state *state = gwps->state;
-    int h = font_get(FONT_UI)->height;
 
     int sb_y;
     if (data->progress_top < 0)
-        sb_y = line*h + display->getymargin() +
-               ((h > data->progress_height + 1)
-                ? (h - data->progress_height) / 2 : 1);
+        sb_y = line * line_height + display->getymargin() +
+               ((line_height > data->progress_height + 1)
+                ? (line_height - data->progress_height) / 2 : 1);
     else
         sb_y = data->progress_top;
 
@@ -1587,7 +1587,7 @@
 */
 static void write_line(struct screen *display,
                        struct align_pos *format_align,
-                       int line,
+                       int line, unsigned short line_height,
                        bool scroll)
 {
 
@@ -1710,7 +1710,8 @@
         right_width = 0;
     }
 
-    ypos = (line * string_height) + display->getymargin();
+    ypos = display->getymargin() + (line * line_height)
+        + (line_height - string_height) / 2;
 
 
     if (scroll && left_width > display->width)
@@ -1723,7 +1724,7 @@
 #ifdef HAVE_LCD_BITMAP
         /* clear the line first */
         display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-        display->fillrect(0, ypos, display->width, string_height);
+        display->fillrect(0, ypos, display->width, line_height);
         display->set_drawmode(DRMODE_SOLID);
 #endif
 
@@ -1765,6 +1766,8 @@
     int line, i, subline_idx;
     unsigned char flags;
     char linebuf[MAX_PATH];
+    unsigned short line_height = data->line_height ?
+        data->line_height : font_get(FONT_UI)->height;
 
     struct align_pos align;
     align.left = NULL;
@@ -1843,7 +1846,7 @@
         {
             /* the progressbar should be alone on its line */
             update_line = false;
-            draw_progressbar(gwps, line);
+            draw_progressbar(gwps, line, line_height);
         }
 
         /* peakmeter */
@@ -1852,19 +1855,18 @@
             /* the peakmeter should be alone on its line */
             update_line = false;
 
-            int h = font_get(FONT_UI)->height;
-            int peak_meter_y = display->getymargin() + line * h;
+            int peak_meter_y = display->getymargin() + line * line_height;
 
             /* The user might decide to have the peak meter in the last
                 line so that it is only displayed if no status bar is
                 visible. If so we neither want do draw nor enable the
                 peak meter. */
-            if (peak_meter_y + h <= display->height) {
+            if (peak_meter_y + line_height <= display->height) {
                 /* found a line with a peak meter -> remember that we must
                     enable it later */
                 enable_pm = true;
                 peak_meter_screen(gwps->display, 0, peak_meter_y,
-                                  MIN(h, display->height - peak_meter_y));
+                                  MIN(line_height, display->height - peak_meter_y));
             }
         }
 
@@ -1887,10 +1889,10 @@
                 /* if the line is a scrolling one we don't want to update
                    too often, so that it has the time to scroll */
                 if ((refresh_mode & WPS_REFRESH_SCROLL) || new_subline_refresh)
-                    write_line(display, &align, line, true);
+                    write_line(display, &align, line, line_height, true);
             }
             else
-                write_line(display, &align, line, false);
+                write_line(display, &align, line, line_height, false);
         }
     }
 
Index: apps/gui/gwps.h
===================================================================
--- apps/gui/gwps.h	(révision 13379)
+++ apps/gui/gwps.h	(copie de travail)
@@ -308,6 +308,7 @@
     short progress_start;
     short progress_end;
     bool peak_meter_enabled;
+    unsigned short line_height;
 #else /*HAVE_LCD_CHARCELLS */
     unsigned short wps_progress_pat[8];
     bool full_line_progressbar;
Index: apps/gui/wps_parser.c
===================================================================
--- apps/gui/wps_parser.c	(révision 13379)
+++ apps/gui/wps_parser.c	(copie de travail)
@@ -97,6 +97,8 @@
 };
 
 /* prototypes of all special parse functions : */
+static int parse_line_height(const char *wps_bufptr,
+        struct wps_token *token, struct wps_data *wps_data);
 static int parse_subline_timeout(const char *wps_bufptr,
         struct wps_token *token, struct wps_data *wps_data);
 static int parse_progressbar(const char *wps_bufptr,
@@ -256,6 +258,8 @@
     { WPS_NO_TOKEN,                       "we",  0, parse_statusbar_enable },
     { WPS_NO_TOKEN,                       "wd",  0, parse_statusbar_disable },
 
+    { WPS_NO_TOKEN,                       "ls",  0,      parse_line_height },
+
     { WPS_NO_TOKEN,                       "xl",  0,       parse_image_load },
 
     { WPS_TOKEN_IMAGE_PRELOAD_DISPLAY,    "xd",  WPS_REFRESH_STATIC,
@@ -293,6 +297,28 @@
 
 #ifdef HAVE_LCD_BITMAP
 
+static int parse_line_height(const char *wps_bufptr,
+                             struct wps_token *token,
+                             struct wps_data *wps_data)
+{
+    const char *ptr = wps_bufptr;
+    char *pos = NULL;
+
+    /* format : %ls|height| */
+
+    ptr = strchr(ptr, '|') + 1;
+    pos = strchr(ptr, '|');
+
+    if (pos)
+        wps_data->line_height = atoi(ptr);
+    else
+        return 0;
+
+    (void)token;
+    return skip_end_of_line(wps_bufptr);
+
+}
+
 static int parse_statusbar_enable(const char *wps_bufptr,
                                   struct wps_token *token,
                                   struct wps_data *wps_data)
Index: wps/iCatcher.128x64x1.160x128x2.wps
===================================================================
--- wps/iCatcher.128x64x1.160x128x2.wps	(révision 13379)
+++ wps/iCatcher.128x64x1.160x128x2.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|9|
 
 
 %t1 %?mp<%al %pp/%pe%ar-:--/-:-- |%al %pp/%pe%ar%pc/%pt |%al %pp/%pe%ar%pc/%pt |%al %pp/%pe%ar%pc/%pt |%al %pp/%pe%ar%pc/%pt >;%t1 %?mp<%al %pp/%pe%ar-:--/-:-- |%al %pp/%pe%ar%pc/%pt |%al %pp/%pe|%al %pp/%pe%ar%pc/%pt |%al %pp/%pe%ar%pc/%pt >
Index: wps/iCatcher.128x64x1.220x176x16.wps
===================================================================
--- wps/iCatcher.128x64x1.220x176x16.wps	(révision 13379)
+++ wps/iCatcher.128x64x1.220x176x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|14|
 
 %t1 %?mp<%al%pp/%pe%ar-:--/-:--|%al%pp/%pe%ar%pc/%pt|%al%pp/%pe%ar%pc/%pt|%al%pp/%pe%ar%pc/%pt|%al%pp/%pe%ar%pc/%pt>;%t1 %?mp<%al%pp/%pe%ar-:--/-:--|%al%pp/%pe%ar%pc/%pt|%al%pp/%pe|%al%pp/%pe%ar%pc/%pt|%al%pp/%pe%ar%pc/%pt>
 %s%ac%?ia<%ia|%?d2<%d2|Unknown Artist>>
Index: wps/iCatcher.138x110x2.wps
===================================================================
--- wps/iCatcher.138x110x2.wps	(révision 13379)
+++ wps/iCatcher.138x110x2.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|8|
 
 
 
Index: wps/boxes.320x240x16.wps
===================================================================
--- wps/boxes.320x240x16.wps	(révision 13379)
+++ wps/boxes.320x240x16.wps	(copie de travail)
@@ -50,6 +50,7 @@
 %xl|Z|rtg-8.bmp|91|68|
 %xl|w|rtg-9.bmp|91|68|
 %xl|y|rtg-10.bmp|91|68|
+%ls|8|
 %wd
 
 
Index: wps/iCatcher.320x240x16.wps
===================================================================
--- wps/iCatcher.320x240x16.wps	(révision 13379)
+++ wps/iCatcher.320x240x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|19|
 %X|bg-320x240x16.bmp|
 
 
Index: wps/iCatcher.240x320x16.wps
===================================================================
--- wps/iCatcher.240x320x16.wps	(révision 13379)
+++ wps/iCatcher.240x320x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|19|
 %X|bg-240x320x16.bmp|
 
 
Index: wps/boxes.220x176x16.wps
===================================================================
--- wps/boxes.220x176x16.wps	(révision 13379)
+++ wps/boxes.220x176x16.wps	(copie de travail)
@@ -42,6 +42,7 @@
 %xl|S|bat-4-colour.bmp|204|10|
 %xl|T|pwr-colour.bmp|210|10|
 %xl|y|led-colour.bmp|192|12|
+%ls|8|
 %wd
 %ar%ca, %cb %cd %cH:%cM
 
Index: wps/iCatcher.176x220x16.wps
===================================================================
--- wps/iCatcher.176x220x16.wps	(révision 13379)
+++ wps/iCatcher.176x220x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|12|
 %X|bg-176x220x16.bmp|
 
 
Index: wps/ipodVOL.160x128x1.wps
===================================================================
--- wps/ipodVOL.160x128x1.wps	(révision 13379)
+++ wps/ipodVOL.160x128x1.wps	(copie de travail)
@@ -17,6 +17,7 @@
 %x|V|vol.bmp|60|109|
 %x|g|bg.bmp|0|0|
 %wd
+%ls|12|
 %ac%?mp<Now Stopped|Now Playing %?ps<(S)|>|Now Paused %?ps<(S)|>|Now Playing %?ps<(S)|>|Now Playing %?ps<(S)|>>
 
 %al%pp of %pe 
Index: wps/boxes.176x132x16.wps
===================================================================
--- wps/boxes.176x132x16.wps	(révision 13379)
+++ wps/boxes.176x132x16.wps	(copie de travail)
@@ -50,6 +50,7 @@
 %xl|Z|rtg-8.bmp|91|68|
 %xl|w|rtg-9.bmp|91|68|
 %xl|y|rtg-10.bmp|91|68|
+%ls|8|
 %wd
 
 
Index: wps/iCatcher.128x128x16.wps
===================================================================
--- wps/iCatcher.128x128x16.wps	(révision 13379)
+++ wps/iCatcher.128x128x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|9|
 %X|bg-128x128x16.bmp|
 
 
Index: wps/boxes.160x128x1.wps
===================================================================
--- wps/boxes.160x128x1.wps	(révision 13379)
+++ wps/boxes.160x128x1.wps	(copie de travail)
@@ -50,6 +50,7 @@
 %xl|Z|rtg-8.bmp|91|68|
 %xl|w|rtg-9.bmp|91|68|
 %xl|y|rtg-10.bmp|91|68|
+%ls|8|
 %wd
 
 
Index: wps/boxes.112x64x1.wps
===================================================================
--- wps/boxes.112x64x1.wps	(révision 13379)
+++ wps/boxes.112x64x1.wps	(copie de travail)
@@ -25,6 +25,7 @@
 %xl|s|nav-ffwd.bmp|68|2|
 %xl|t|nav-rwnd.bmp|68|2|
 %xl|u|shf.bmp|14|6|
+%ls|8|
 %wd
 
 
Index: wps/iCatcher.112x64x1.wps
===================================================================
--- wps/iCatcher.112x64x1.wps	(révision 13379)
+++ wps/iCatcher.112x64x1.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%ls|8|
 
 
 %t1 %?mp<%al Stopped%ar-:--/-:-- |%al %pp/%pe%ar%pc/%pt |%al Paused%ar%pc/%pt |%al Seeking%ar%pc/%pt |%al Seeking%ar%pc/%pt >;%t1 %?mp<%al Stopped-:--/-:-- |%al %pp/%pe%ar%pc/%pt |%al Paused|%al Seeking%ar%pc/%pt |%al Seeking%ar%pc/%pt >
Index: wps/boxes.128x64x1.wps
===================================================================
--- wps/boxes.128x64x1.wps	(révision 13379)
+++ wps/boxes.128x64x1.wps	(copie de travail)
@@ -27,6 +27,7 @@
 %xl|u|shf.bmp|14|6|
 %xl|v|lock-m.bmp|86|0|
 %xl|x|lock-r.bmp|98|0|
+%ls|8|
 %wd
 
 
