diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2012-03-15 22:50:17 +1100 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2012-03-15 22:52:53 +1100 |
commit | 014a08cabb856b2360419aac404744029ee4748c (patch) | |
tree | 1bd05c47281446eec2568a96a0e32e16439f1262 /apps/gui/skin_engine/skin_parser.c | |
parent | dcc78cb86764e5f02bc89693f64dc38c82f776ad (diff) | |
download | rockbox-014a08cabb856b2360419aac404744029ee4748c.tar.gz rockbox-014a08cabb856b2360419aac404744029ee4748c.zip |
skin_engine: New tag to draw a rectangle (optionally with a gradient)
%dr(x, y, width, height, [colour1[, colour2]]):
x,y - viewport relative pixel coordinates to start the rectangle.
width, height - obvious. can be '-' to fill the viewport
if both colours are left out the viewports foreground colour will be used
if one colour is specified it will fill the rectangle that colour.
if both colours are specified it will gradient fill the rectangle.
Change-Id: Iad451e99ded663bc7c5d182443659db7d909b388
Diffstat (limited to 'apps/gui/skin_engine/skin_parser.c')
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 2d9d7cd807..49373eca32 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -638,6 +638,51 @@ static int parse_viewporttextstyle(struct skin_element *element, | |||
638 | return 0; | 638 | return 0; |
639 | } | 639 | } |
640 | 640 | ||
641 | static int parse_drawrectangle( struct skin_element *element, | ||
642 | struct wps_token *token, | ||
643 | struct wps_data *wps_data) | ||
644 | { | ||
645 | (void)wps_data; | ||
646 | struct draw_rectangle *rect = | ||
647 | (struct draw_rectangle *)skin_buffer_alloc(sizeof(struct draw_rectangle)); | ||
648 | |||
649 | if (!rect) | ||
650 | return -1; | ||
651 | |||
652 | rect->x = get_param(element, 0)->data.number; | ||
653 | rect->y = get_param(element, 1)->data.number; | ||
654 | |||
655 | if (isdefault(get_param(element, 2))) | ||
656 | rect->width = curr_vp->vp.width - rect->x; | ||
657 | else | ||
658 | rect->width = get_param(element, 2)->data.number; | ||
659 | |||
660 | if (isdefault(get_param(element, 3))) | ||
661 | rect->height = curr_vp->vp.height - rect->y; | ||
662 | else | ||
663 | rect->height = get_param(element, 3)->data.number; | ||
664 | |||
665 | rect->start_colour = curr_vp->vp.fg_pattern; | ||
666 | rect->end_colour = curr_vp->vp.fg_pattern; | ||
667 | |||
668 | if (element->params_count > 4) | ||
669 | { | ||
670 | if (!parse_color(curr_screen, get_param_text(element, 4), | ||
671 | &rect->start_colour)) | ||
672 | return -1; | ||
673 | rect->end_colour = rect->start_colour; | ||
674 | } | ||
675 | if (element->params_count > 5) | ||
676 | { | ||
677 | if (!parse_color(curr_screen, get_param_text(element, 5), | ||
678 | &rect->end_colour)) | ||
679 | return -1; | ||
680 | } | ||
681 | token->value.data = PTRTOSKINOFFSET(skin_buffer, rect); | ||
682 | |||
683 | return 0; | ||
684 | } | ||
685 | |||
641 | static int parse_viewportcolour(struct skin_element *element, | 686 | static int parse_viewportcolour(struct skin_element *element, |
642 | struct wps_token *token, | 687 | struct wps_token *token, |
643 | struct wps_data *wps_data) | 688 | struct wps_data *wps_data) |
@@ -2013,6 +2058,9 @@ static int skin_element_callback(struct skin_element* element, void* data) | |||
2013 | sb_skin_has_title(curr_screen); | 2058 | sb_skin_has_title(curr_screen); |
2014 | #endif | 2059 | #endif |
2015 | break; | 2060 | break; |
2061 | case SKIN_TOKEN_DRAWRECTANGLE: | ||
2062 | function = parse_drawrectangle; | ||
2063 | break; | ||
2016 | #endif | 2064 | #endif |
2017 | case SKIN_TOKEN_FILE_DIRECTORY: | 2065 | case SKIN_TOKEN_FILE_DIRECTORY: |
2018 | token->value.i = get_param(element, 0)->data.number; | 2066 | token->value.i = get_param(element, 0)->data.number; |