From 9dd2eb49bec19de06c5cfd168a0e4cd4dc44c867 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Thu, 15 Mar 2012 11:58:38 +1100 Subject: skin_engine: Support percentages for viewport positioning %V(0,50%,75%,50%,-) - make a viewport at x=0, y=half the lcd height, 75% lcd width and the remaining height (the other half) of the lcd. Change-Id: If26ccb65e8dc52c9225f3fd6d7b222d770add0f0 Reviewed-on: http://gerrit.rockbox.org/184 Reviewed-by: Thomas Martitz Tested-by: Thomas Martitz Reviewed-by: Jonathan Gordon --- apps/gui/skin_engine/skin_parser.c | 8 ++++++++ apps/gui/skin_engine/skin_tokens.c | 1 + 2 files changed, 9 insertions(+) (limited to 'apps/gui') diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 237e4033e2..01fedba99b 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -1995,6 +1995,8 @@ static int convert_viewport(struct wps_data *data, struct skin_element* element) skin_vp->vp.x = param->data.number; if (param->data.number < 0) skin_vp->vp.x += display->lcdwidth; + else if (param->type == PERCENT) + skin_vp->vp.x = param->data.number * display->lcdwidth / 1000; } param++; /* y */ @@ -2003,6 +2005,8 @@ static int convert_viewport(struct wps_data *data, struct skin_element* element) skin_vp->vp.y = param->data.number; if (param->data.number < 0) skin_vp->vp.y += display->lcdheight; + else if (param->type == PERCENT) + skin_vp->vp.y = param->data.number * display->lcdheight / 1000; } param++; /* width */ @@ -2011,6 +2015,8 @@ static int convert_viewport(struct wps_data *data, struct skin_element* element) skin_vp->vp.width = param->data.number; if (param->data.number < 0) skin_vp->vp.width = (skin_vp->vp.width + display->lcdwidth) - skin_vp->vp.x; + else if (param->type == PERCENT) + skin_vp->vp.width = param->data.number * display->lcdwidth / 1000; } else { @@ -2023,6 +2029,8 @@ static int convert_viewport(struct wps_data *data, struct skin_element* element) skin_vp->vp.height = param->data.number; if (param->data.number < 0) skin_vp->vp.height = (skin_vp->vp.height + display->lcdheight) - skin_vp->vp.y; + else if (param->type == PERCENT) + skin_vp->vp.height = param->data.number * display->lcdheight / 1000; } else { diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index b550a90073..e58393e19c 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -761,6 +761,7 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, if (!number_set && out_text && *out_text >= '0' && *out_text <= '9') a = atoi(out_text); /* fall through */ + case PERCENT: case DECIMAL: b = lif->operand.data.number; break; -- cgit v1.2.3