Index: apps/gui/gwps-common.c
===================================================================
--- apps/gui/gwps-common.c	(révision 13163)
+++ apps/gui/gwps-common.c	(copie de travail)
@@ -459,12 +459,11 @@
 
 #ifdef HAVE_LCD_BITMAP
 
-static void draw_progressbar(struct gui_wps *gwps, int line)
+static void draw_progressbar(struct gui_wps *gwps, int line, int h)
 {
     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)
@@ -1591,7 +1590,7 @@
 */
 static void write_line(struct screen *display,
                        struct align_pos *format_align,
-                       int line,
+                       int line, int line_height,
                        bool scroll)
 {
 
@@ -1714,7 +1713,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)
@@ -1727,7 +1727,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
 
@@ -1769,6 +1769,7 @@
     int line, i, subline_idx;
     unsigned char flags;
     char linebuf[MAX_PATH];
+    int h = data->line_height ? data->line_height : font_get(FONT_UI)->height;
 
     struct align_pos align;
     align.left = NULL;
@@ -1846,7 +1847,7 @@
         {
             /* the progressbar should be alone on its line */
             update_line = false;
-            draw_progressbar(gwps, line);
+            draw_progressbar(gwps, line, h);
         }
 
         /* peakmeter */
@@ -1855,7 +1856,6 @@
             /* 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;
 
             /* The user might decide to have the peak meter in the last
@@ -1890,10 +1890,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, h, true);
             }
             else
-                write_line(display, &align, line, false);
+                write_line(display, &align, line, h, false);
         }
     }
 
Index: apps/gui/gwps.h
===================================================================
--- apps/gui/gwps.h	(révision 13162)
+++ apps/gui/gwps.h	(copie de travail)
@@ -307,6 +307,7 @@
     short progress_start;
     short progress_end;
     bool peak_meter_enabled;
+    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 13162)
+++ apps/gui/wps_parser.c	(copie de travail)
@@ -90,6 +90,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,
@@ -117,6 +119,10 @@
     { WPS_TOKEN_ALIGN_LEFT,               "al",  0,                   NULL },
     { WPS_TOKEN_ALIGN_RIGHT,              "ar",  0,                   NULL },
 
+#ifdef HAVE_LCD_BITMAP
+    { WPS_NO_TOKEN,                       "lh",  0,                   parse_line_height },
+#endif
+
     { WPS_TOKEN_BATTERY_PERCENT,          "bl",  WPS_REFRESH_DYNAMIC, NULL },
     { WPS_TOKEN_BATTERY_VOLTS,            "bv",  WPS_REFRESH_DYNAMIC, NULL },
     { WPS_TOKEN_BATTERY_TIME,             "bt",  WPS_REFRESH_DYNAMIC, NULL },
@@ -295,6 +301,31 @@
 
 #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 : %lh|height| */
+
+    ptr = strchr(ptr, '|') + 1;
+    pos = strchr(ptr, '|');
+
+    if (pos)
+        wps_data->line_height = atoi(ptr);
+    else
+    {
+        /* weird syntax, bail out */
+        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 13161)
+++ wps/iCatcher.128x64x1.160x128x2.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|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 13161)
+++ wps/iCatcher.128x64x1.220x176x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|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 13161)
+++ wps/iCatcher.138x110x2.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|8|
 
 
 
Index: wps/iCatcher.320x240x16.wps
===================================================================
--- wps/iCatcher.320x240x16.wps	(révision 13161)
+++ wps/iCatcher.320x240x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|19|
 %X|bg-320x240x16.bmp|
 
 
Index: wps/iCatcher.240x320x16.wps
===================================================================
--- wps/iCatcher.240x320x16.wps	(révision 13161)
+++ wps/iCatcher.240x320x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|19|
 %X|bg-240x320x16.bmp|
 
 
Index: wps/iCatcher.176x220x16.wps
===================================================================
--- wps/iCatcher.176x220x16.wps	(révision 13161)
+++ wps/iCatcher.176x220x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|12|
 %X|bg-176x220x16.bmp|
 
 
Index: wps/iCatcher.128x128x16.wps
===================================================================
--- wps/iCatcher.128x128x16.wps	(révision 13161)
+++ wps/iCatcher.128x128x16.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|9|
 %X|bg-128x128x16.bmp|
 
 
Index: wps/iCatcher.112x64x1.wps
===================================================================
--- wps/iCatcher.112x64x1.wps	(révision 13161)
+++ wps/iCatcher.112x64x1.wps	(copie de travail)
@@ -1,4 +1,5 @@
 %wd
+%lh|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 >
