diff options
author | Chiwen Chang <rock1104.tw@yahoo.com.tw> | 2014-07-21 12:31:01 +1000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2014-07-21 04:54:53 +0200 |
commit | 9fb65294fb8bd9cfcf3e830f82bf01c3afdbbcce (patch) | |
tree | f9aae029a682d0eb2154891c1b791a22769d14d2 /apps/gui | |
parent | 78478076a3e5ce1bde54e9085f2910284fd8bacd (diff) | |
download | rockbox-9fb65294fb8bd9cfcf3e830f82bf01c3afdbbcce.tar.gz rockbox-9fb65294fb8bd9cfcf3e830f82bf01c3afdbbcce.zip |
add supports for x,y value in percentage to several tags.
including
BAR_PARAMS, %xl, %dr, %T,%St, %xl and %Cl
Change-Id: I0811ebfff5f83085481dcbf08f97b7223f677bfe
Reviewed-on: http://gerrit.rockbox.org/900
Reviewed-by: Jonathan Gordon <rockbox@jdgordon.info>
Diffstat (limited to 'apps/gui')
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 116 |
1 files changed, 100 insertions, 16 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 0e7150c553..63f3f81140 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -398,8 +398,15 @@ static int parse_image_load(struct skin_element *element, | |||
398 | subimages = get_param(element, 2)->data.number; | 398 | subimages = get_param(element, 2)->data.number; |
399 | else if (element->params_count > 3) | 399 | else if (element->params_count > 3) |
400 | { | 400 | { |
401 | x = get_param(element, 2)->data.number; | 401 | if (get_param(element, 2)->type == PERCENT) |
402 | y = get_param(element, 3)->data.number; | 402 | x = get_param(element, 2)->data.number * curr_vp->vp.width / 1000; |
403 | else | ||
404 | x = get_param(element, 2)->data.number; | ||
405 | if (get_param(element, 3)->type == PERCENT) | ||
406 | y = get_param(element, 3)->data.number * curr_vp->vp.height / 1000; | ||
407 | else | ||
408 | y = get_param(element, 3)->data.number; | ||
409 | |||
403 | if (element->params_count == 5) | 410 | if (element->params_count == 5) |
404 | subimages = get_param(element, 4)->data.number; | 411 | subimages = get_param(element, 4)->data.number; |
405 | } | 412 | } |
@@ -642,16 +649,27 @@ static int parse_drawrectangle( struct skin_element *element, | |||
642 | if (!rect) | 649 | if (!rect) |
643 | return -1; | 650 | return -1; |
644 | 651 | ||
645 | rect->x = get_param(element, 0)->data.number; | 652 | if (get_param(element, 0)->type == PERCENT) |
646 | rect->y = get_param(element, 1)->data.number; | 653 | rect->x = get_param(element, 0)->data.number * curr_vp->vp.width / 1000; |
654 | else | ||
655 | rect->x = get_param(element, 0)->data.number; | ||
656 | |||
657 | if (get_param(element, 1)->type == PERCENT) | ||
658 | rect->y = get_param(element, 1)->data.number * curr_vp->vp.height / 1000; | ||
659 | else | ||
660 | rect->y = get_param(element, 1)->data.number; | ||
647 | 661 | ||
648 | if (isdefault(get_param(element, 2))) | 662 | if (isdefault(get_param(element, 2))) |
649 | rect->width = curr_vp->vp.width - rect->x; | 663 | rect->width = curr_vp->vp.width - rect->x; |
664 | else if (get_param(element, 2)->type == PERCENT) | ||
665 | rect->width = get_param(element, 2)->data.number * curr_vp->vp.width / 1000; | ||
650 | else | 666 | else |
651 | rect->width = get_param(element, 2)->data.number; | 667 | rect->width = get_param(element, 2)->data.number; |
652 | 668 | ||
653 | if (isdefault(get_param(element, 3))) | 669 | if (isdefault(get_param(element, 3))) |
654 | rect->height = curr_vp->vp.height - rect->y; | 670 | rect->height = curr_vp->vp.height - rect->y; |
671 | else if (get_param(element, 3)->type == PERCENT) | ||
672 | rect->height = get_param(element, 3)->data.number * curr_vp->vp.height / 1000; | ||
655 | else | 673 | else |
656 | rect->height = get_param(element, 3)->data.number; | 674 | rect->height = get_param(element, 3)->data.number; |
657 | 675 | ||
@@ -924,7 +942,12 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
924 | /* (x, y, width, height, ...) */ | 942 | /* (x, y, width, height, ...) */ |
925 | if (!isdefault(param)) | 943 | if (!isdefault(param)) |
926 | { | 944 | { |
927 | pb->x = param->data.number; | 945 | if (param->type == PERCENT) |
946 | { | ||
947 | pb->x = param->data.number * vp->width / 1000; | ||
948 | } | ||
949 | else | ||
950 | pb->x = param->data.number; | ||
928 | if (pb->x < 0 || pb->x >= vp->width) | 951 | if (pb->x < 0 || pb->x >= vp->width) |
929 | return WPS_ERROR_INVALID_PARAM; | 952 | return WPS_ERROR_INVALID_PARAM; |
930 | } | 953 | } |
@@ -934,7 +957,12 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
934 | 957 | ||
935 | if (!isdefault(param)) | 958 | if (!isdefault(param)) |
936 | { | 959 | { |
937 | pb->y = param->data.number; | 960 | if (param->type == PERCENT) |
961 | { | ||
962 | pb->y = param->data.number * vp->height / 1000; | ||
963 | } | ||
964 | else | ||
965 | pb->y = param->data.number; | ||
938 | if (pb->y < 0 || pb->y >= vp->height) | 966 | if (pb->y < 0 || pb->y >= vp->height) |
939 | return WPS_ERROR_INVALID_PARAM; | 967 | return WPS_ERROR_INVALID_PARAM; |
940 | } | 968 | } |
@@ -944,7 +972,12 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
944 | 972 | ||
945 | if (!isdefault(param)) | 973 | if (!isdefault(param)) |
946 | { | 974 | { |
947 | pb->width = param->data.number; | 975 | if (param->type == PERCENT) |
976 | { | ||
977 | pb->width = param->data.number * vp->width / 1000; | ||
978 | } | ||
979 | else | ||
980 | pb->width = param->data.number; | ||
948 | if (pb->width <= 0 || (pb->x + pb->width) > vp->width) | 981 | if (pb->width <= 0 || (pb->x + pb->width) > vp->width) |
949 | return WPS_ERROR_INVALID_PARAM; | 982 | return WPS_ERROR_INVALID_PARAM; |
950 | } | 983 | } |
@@ -955,7 +988,12 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
955 | if (!isdefault(param)) | 988 | if (!isdefault(param)) |
956 | { | 989 | { |
957 | int max; | 990 | int max; |
958 | pb->height = param->data.number; | 991 | if (param->type == PERCENT) |
992 | { | ||
993 | pb->height = param->data.number * vp->height / 1000; | ||
994 | } | ||
995 | else | ||
996 | pb->height = param->data.number; | ||
959 | /* include y in check only if it was non-default */ | 997 | /* include y in check only if it was non-default */ |
960 | max = (pb->y > 0) ? pb->y + pb->height : pb->height; | 998 | max = (pb->y > 0) ? pb->y + pb->height : pb->height; |
961 | if (pb->height <= 0 || max > vp->height) | 999 | if (pb->height <= 0 || max > vp->height) |
@@ -1213,6 +1251,18 @@ static int parse_albumart_load(struct skin_element* element, | |||
1213 | aa->width = get_param(element, 2)->data.number; | 1251 | aa->width = get_param(element, 2)->data.number; |
1214 | aa->height = get_param(element, 3)->data.number; | 1252 | aa->height = get_param(element, 3)->data.number; |
1215 | 1253 | ||
1254 | if (!isdefault(get_param(element, 0)) && get_param(element, 0)->type == PERCENT) | ||
1255 | aa->x = get_param(element, 0)->data.number * curr_vp->vp.width / 1000; | ||
1256 | |||
1257 | if (!isdefault(get_param(element, 1)) && get_param(element, 1)->type == PERCENT) | ||
1258 | aa->y = get_param(element, 1)->data.number * curr_vp->vp.height / 1000; | ||
1259 | |||
1260 | if (!isdefault(get_param(element, 2)) && get_param(element, 2)->type == PERCENT) | ||
1261 | aa->width = get_param(element, 2)->data.number * curr_vp->vp.width / 1000; | ||
1262 | |||
1263 | if (!isdefault(get_param(element, 3)) && get_param(element, 3)->type == PERCENT) | ||
1264 | aa->height = get_param(element, 3)->data.number * curr_vp->vp.height / 1000; | ||
1265 | |||
1216 | aa->vp = PTRTOSKINOFFSET(skin_buffer, &curr_vp->vp); | 1266 | aa->vp = PTRTOSKINOFFSET(skin_buffer, &curr_vp->vp); |
1217 | aa->draw_handle = -1; | 1267 | aa->draw_handle = -1; |
1218 | 1268 | ||
@@ -1521,10 +1571,7 @@ static int parse_touchregion(struct skin_element *element, | |||
1521 | { | 1571 | { |
1522 | region->label = PTRTOSKINOFFSET(skin_buffer, get_param_text(element, 0)); | 1572 | region->label = PTRTOSKINOFFSET(skin_buffer, get_param_text(element, 0)); |
1523 | p = 1; | 1573 | p = 1; |
1524 | /* "[SI]III[SI]|SS" is the param list. There MUST be 4 numbers | 1574 | if (element->params_count < 6) |
1525 | * followed by at least one string. Verify that here */ | ||
1526 | if (element->params_count < 6 || | ||
1527 | get_param(element, 4)->type != INTEGER) | ||
1528 | return WPS_ERROR_INVALID_PARAM; | 1575 | return WPS_ERROR_INVALID_PARAM; |
1529 | } | 1576 | } |
1530 | else | 1577 | else |
@@ -1532,11 +1579,48 @@ static int parse_touchregion(struct skin_element *element, | |||
1532 | region->label = PTRTOSKINOFFSET(skin_buffer, NULL); | 1579 | region->label = PTRTOSKINOFFSET(skin_buffer, NULL); |
1533 | p = 0; | 1580 | p = 0; |
1534 | } | 1581 | } |
1582 | /*x*/ | ||
1583 | struct skin_tag_parameter *param = get_param(element, p); | ||
1584 | region->x = 0; | ||
1585 | if (!isdefault(param)) | ||
1586 | { | ||
1587 | if (param->type == INTEGER) | ||
1588 | region->x = param->data.number; | ||
1589 | else if (param->type == PERCENT) | ||
1590 | region->x = param->data.number * curr_vp->vp.width / 1000; | ||
1591 | } | ||
1592 | /*y*/ | ||
1593 | param = get_param(element, ++p); | ||
1594 | region->y = 0; | ||
1595 | if (!isdefault(param)) | ||
1596 | { | ||
1597 | if (param->type == INTEGER) | ||
1598 | region->y = param->data.number; | ||
1599 | else if (param->type == PERCENT) | ||
1600 | region->y =param->data.number * curr_vp->vp.width / 1000; | ||
1601 | } | ||
1602 | /*width*/ | ||
1603 | param = get_param(element, ++p); | ||
1604 | region->width = curr_vp->vp.width; | ||
1605 | if (!isdefault(param)) | ||
1606 | { | ||
1607 | if (param->type == INTEGER) | ||
1608 | region->width =param->data.number; | ||
1609 | else if (param->type == PERCENT) | ||
1610 | region->width = curr_vp->vp.width * param->data.number / 1000; | ||
1611 | } | ||
1612 | /*height*/ | ||
1613 | param = get_param(element, ++p); | ||
1614 | region->height = curr_vp->vp.height; | ||
1615 | if (!isdefault(param)) | ||
1616 | { | ||
1617 | if (param->type == INTEGER) | ||
1618 | region->height =param->data.number; | ||
1619 | else if (param->type == PERCENT) | ||
1620 | region->height = curr_vp->vp.height * param->data.number / 1000; | ||
1621 | } | ||
1622 | p++; | ||
1535 | 1623 | ||
1536 | region->x = get_param(element, p++)->data.number; | ||
1537 | region->y = get_param(element, p++)->data.number; | ||
1538 | region->width = get_param(element, p++)->data.number; | ||
1539 | region->height = get_param(element, p++)->data.number; | ||
1540 | region->wvp = PTRTOSKINOFFSET(skin_buffer, curr_vp); | 1624 | region->wvp = PTRTOSKINOFFSET(skin_buffer, curr_vp); |
1541 | region->armed = false; | 1625 | region->armed = false; |
1542 | region->reverse_bar = false; | 1626 | region->reverse_bar = false; |