summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/gui/skin_engine/skin_parser.c35
-rw-r--r--lib/skin_parser/tag_table.c4
-rw-r--r--manual/appendix/wps_tags.tex12
3 files changed, 27 insertions, 24 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index 3b83d9e..4e4b9d1 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -387,19 +387,30 @@ static int parse_image_load(struct skin_element *element,
{
const char* filename;
const char* id;
- int x,y;
+ int x = 0,y = 0, subimages = 1;
struct gui_img *img;
- /* format: %x(n,filename.bmp,x,y)
- or %xl(n,filename.bmp,x,y)
- or %xl(n,filename.bmp,x,y,num_subimages)
+ /* format: %x(n,filename.bmp[,x,y])
+ or %xl(n,filename.bmp[,x,y])
+ or %xl(n,filename.bmp[,x,y,num_subimages])
*/
id = get_param_text(element, 0);
filename = get_param_text(element, 1);
- x = get_param(element, 2)->data.number;
- y = get_param(element, 3)->data.number;
-
+ /* x,y,num_subimages handling:
+ * If all 3 are left out use sane defaults.
+ * If there are 2 params it must be x,y
+ * if there is only 1 param it must be the num_subimages
+ */
+ if (element->params_count == 3)
+ subimages = get_param(element, 2)->data.number;
+ else if (element->params_count > 3)
+ {
+ x = get_param(element, 2)->data.number;
+ y = get_param(element, 3)->data.number;
+ if (element->params_count == 5)
+ subimages = get_param(element, 4)->data.number;
+ }
/* check the image number and load state */
if(skin_find_item(id, SKIN_FIND_IMAGE, wps_data))
{
@@ -414,7 +425,7 @@ static int parse_image_load(struct skin_element *element,
img->label = PTRTOSKINOFFSET(skin_buffer, (void*)id);
img->x = x;
img->y = y;
- img->num_subimages = 1;
+ img->num_subimages = subimages;
img->display = -1;
img->using_preloaded_icons = false;
img->buflib_handle = -1;
@@ -423,15 +434,7 @@ static int parse_image_load(struct skin_element *element,
img->vp = PTRTOSKINOFFSET(skin_buffer, &curr_vp->vp);
if (token->type == SKIN_TOKEN_IMAGE_DISPLAY)
- {
token->value.data = PTRTOSKINOFFSET(skin_buffer, img);
- }
- else if (element->params_count == 5)
- {
- img->num_subimages = get_param(element, 4)->data.number;
- if (img->num_subimages <= 0)
- return WPS_ERROR_INVALID_PARAM;
- }
if (!strcmp(img->bm.data, "__list_icons__"))
{
diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
index e4b8bb1..47a0abb 100644
--- a/lib/skin_parser/tag_table.c
+++ b/lib/skin_parser/tag_table.c
@@ -176,9 +176,9 @@ static const struct tag_info legal_tags[] =
{ SKIN_TOKEN_DISABLE_THEME, "wd", "", 0|NOBREAK },
{ SKIN_TOKEN_DRAW_INBUILTBAR, "wi", "", SKIN_REFRESH_STATIC|NOBREAK },
- { SKIN_TOKEN_IMAGE_PRELOAD, "xl", "SFII|I", 0|NOBREAK },
+ { SKIN_TOKEN_IMAGE_PRELOAD, "xl", "SF|III", 0|NOBREAK },
{ SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY, "xd", "S|[IT]I", 0 },
- { SKIN_TOKEN_IMAGE_DISPLAY, "x", "SFII", SKIN_REFRESH_STATIC|NOBREAK },
+ { SKIN_TOKEN_IMAGE_DISPLAY, "x", "SF|II", SKIN_REFRESH_STATIC|NOBREAK },
{ SKIN_TOKEN_LOAD_FONT, "Fl" , "IF|I", 0|NOBREAK },
{ SKIN_TOKEN_ALBUMART_LOAD, "Cl" , "IIII|ss", 0|NOBREAK },
diff --git a/manual/appendix/wps_tags.tex b/manual/appendix/wps_tags.tex
index 5890e20..baea29a 100644
--- a/manual/appendix/wps_tags.tex
+++ b/manual/appendix/wps_tags.tex
@@ -369,19 +369,19 @@ Examples:
& Load and set a backdrop image for the WPS.
This image must be exactly the same size as your LCD.\\
}%
- \config{\%x(n,filename,x,y)}
+ \config{\%x(n,filename[,x,y])}
& Load and display an image\newline
\config{n}: image ID (a-z and A-Z) for later referencing in \config{\%xd}\newline
\config{filename}: file name relative to \fname{/.rockbox/} and including ``.bmp''\newline
- \config{x}: x coordinate\newline
- \config{y}: y coordinate.\\
- \config{\%xl(n,filename,x,y,\tabnlindent[nimages])}
+ \config{x}: x coordinate (defaults to 0 if both x and y are not specified)\newline
+ \config{y}: y coordinate. (defaults to 0 if both x and y are not specified)\\
+ \config{\%xl(n,filename,[x,y],\tabnlindent[nimages])}
& Preload an image for later display (useful for when your images are displayed conditionally).\newline
\config{n}: image ID (a-z and A-Z) for later referencing in \config{\%xd}\newline
\config{filename}: file name relative to \fname{/.rockbox/} and including ``.bmp''\newline
If the filename is ``\_\_list\_icons\_\_'' the list icon bitmap will be used instead\newline
- \config{x}: x coordinate\newline
- \config{y}: y coordinate\newline
+ \config{x}: x coordinate (defaults to 0 if both x and y are not specified)\newline
+ \config{y}: y coordinate. (defaults to 0 if both x and y are not specified)\\
\config{nimages}: (optional) number of sub-images (tiled vertically, of the same height)
contained in the bitmap. Default is 1.\\
\config{\%xd(n[i] [,tag] [,offset])} & Display a preloaded image.