diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2011-08-14 13:50:07 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2011-08-14 13:50:07 +0000 |
commit | 281f1a1ed6f6213139fbc230dc819bbcbe3ee40a (patch) | |
tree | 8407e89f6ce32200f2cdfc4efc08233957eff3cf /apps/gui/skin_engine/skin_render.c | |
parent | b2d0ea204c36785b5ec658ae0aecb89787886d8b (diff) | |
download | rockbox-281f1a1ed6f6213139fbc230dc819bbcbe3ee40a.tar.gz rockbox-281f1a1ed6f6213139fbc230dc819bbcbe3ee40a.zip |
New skin tags: %Vs() to set the text style and %Vg() to get the viewports gradient colours
%Vs(mode[, param]) : mode can be "invert", "color" (where param is the colour to use", "clear" to disable the current style, "gradient" where param is the number of lines the gradient should draw over.
%Vg(start colour, end colour, [text colour]), if this tag isnt used the list selection colours from the settings will set the gradient colours
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30302 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui/skin_engine/skin_render.c')
-rw-r--r-- | apps/gui/skin_engine/skin_render.c | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index 13eb69c744..27e6747c29 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c | |||
@@ -55,6 +55,7 @@ struct skin_draw_info { | |||
55 | struct skin_viewport *skin_vp; | 55 | struct skin_viewport *skin_vp; |
56 | int line_number; | 56 | int line_number; |
57 | unsigned long refresh_type; | 57 | unsigned long refresh_type; |
58 | unsigned text_style; | ||
58 | 59 | ||
59 | char* cur_align_start; | 60 | char* cur_align_start; |
60 | struct align_pos align; | 61 | struct align_pos align; |
@@ -106,6 +107,19 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
106 | col->vp->bg_pattern = col->colour; | 107 | col->vp->bg_pattern = col->colour; |
107 | } | 108 | } |
108 | break; | 109 | break; |
110 | case SKIN_TOKEN_VIEWPORT_TEXTSTYLE: | ||
111 | info->text_style = token->value.l; | ||
112 | break; | ||
113 | #endif | ||
114 | #ifdef HAVE_LCD_COLOR | ||
115 | case SKIN_TOKEN_VIEWPORT_GRADIENT_SETUP: | ||
116 | { | ||
117 | struct gradient_config *cfg = token->value.data; | ||
118 | vp->lss_pattern = cfg->start; | ||
119 | vp->lse_pattern = cfg->end; | ||
120 | vp->lst_pattern = cfg->text; | ||
121 | } | ||
122 | break; | ||
109 | #endif | 123 | #endif |
110 | case SKIN_TOKEN_VIEWPORT_ENABLE: | 124 | case SKIN_TOKEN_VIEWPORT_ENABLE: |
111 | { | 125 | { |
@@ -614,7 +628,8 @@ static void skin_render_viewport(struct skin_element* viewport, struct gui_wps * | |||
614 | .line_scrolls = false, | 628 | .line_scrolls = false, |
615 | .refresh_type = refresh_type, | 629 | .refresh_type = refresh_type, |
616 | .skin_vp = skin_viewport, | 630 | .skin_vp = skin_viewport, |
617 | .offset = 0 | 631 | .offset = 0, |
632 | .text_style = STYLE_DEFAULT | ||
618 | }; | 633 | }; |
619 | 634 | ||
620 | struct align_pos * align = &info.align; | 635 | struct align_pos * align = &info.align; |
@@ -636,7 +651,17 @@ static void skin_render_viewport(struct skin_element* viewport, struct gui_wps * | |||
636 | info.no_line_break = false; | 651 | info.no_line_break = false; |
637 | info.line_scrolls = false; | 652 | info.line_scrolls = false; |
638 | info.force_redraw = false; | 653 | info.force_redraw = false; |
639 | 654 | #ifdef HAVE_LCD_COLOR | |
655 | if (info.text_style&STYLE_GRADIENT) | ||
656 | { | ||
657 | int cur = CURLN_UNPACK(info.text_style); | ||
658 | int num = NUMLN_UNPACK(info.text_style); | ||
659 | if (cur+1 == num) | ||
660 | info.text_style = STYLE_DEFAULT; | ||
661 | else | ||
662 | info.text_style = STYLE_GRADIENT|CURLN_PACK(cur+1)|NUMLN_PACK(num); | ||
663 | } | ||
664 | #endif | ||
640 | info.cur_align_start = info.buf; | 665 | info.cur_align_start = info.buf; |
641 | align->left = info.buf; | 666 | align->left = info.buf; |
642 | align->center = NULL; | 667 | align->center = NULL; |
@@ -668,10 +693,10 @@ static void skin_render_viewport(struct skin_element* viewport, struct gui_wps * | |||
668 | /* if the line is a scrolling one we don't want to update | 693 | /* if the line is a scrolling one we don't want to update |
669 | too often, so that it has the time to scroll */ | 694 | too often, so that it has the time to scroll */ |
670 | if ((refresh_type & SKIN_REFRESH_SCROLL) || info.force_redraw) | 695 | if ((refresh_type & SKIN_REFRESH_SCROLL) || info.force_redraw) |
671 | write_line(display, align, info.line_number, true); | 696 | write_line(display, align, info.line_number, true, info.text_style); |
672 | } | 697 | } |
673 | else | 698 | else |
674 | write_line(display, align, info.line_number, false); | 699 | write_line(display, align, info.line_number, false, info.text_style); |
675 | } | 700 | } |
676 | if (!info.no_line_break) | 701 | if (!info.no_line_break) |
677 | info.line_number++; | 702 | info.line_number++; |
@@ -717,6 +742,11 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
717 | skin_viewport->vp.fg_pattern = skin_viewport->start_fgcolour; | 742 | skin_viewport->vp.fg_pattern = skin_viewport->start_fgcolour; |
718 | skin_viewport->vp.bg_pattern = skin_viewport->start_bgcolour; | 743 | skin_viewport->vp.bg_pattern = skin_viewport->start_bgcolour; |
719 | #endif | 744 | #endif |
745 | #ifdef HAVE_LCD_COLOR | ||
746 | skin_viewport->vp.lss_pattern = skin_viewport->start_gradient.start; | ||
747 | skin_viewport->vp.lse_pattern = skin_viewport->start_gradient.end; | ||
748 | skin_viewport->vp.lst_pattern = skin_viewport->start_gradient.text; | ||
749 | #endif | ||
720 | 750 | ||
721 | /* dont redraw the viewport if its disabled */ | 751 | /* dont redraw the viewport if its disabled */ |
722 | if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) | 752 | if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) |
@@ -772,7 +802,8 @@ static __attribute__((noinline)) void skin_render_playlistviewer(struct playlist | |||
772 | .line_scrolls = false, | 802 | .line_scrolls = false, |
773 | .refresh_type = refresh_type, | 803 | .refresh_type = refresh_type, |
774 | .skin_vp = skin_viewport, | 804 | .skin_vp = skin_viewport, |
775 | .offset = viewer->start_offset | 805 | .offset = viewer->start_offset, |
806 | .text_style = STYLE_DEFAULT | ||
776 | }; | 807 | }; |
777 | 808 | ||
778 | struct align_pos * align = &info.align; | 809 | struct align_pos * align = &info.align; |
@@ -829,10 +860,10 @@ static __attribute__((noinline)) void skin_render_playlistviewer(struct playlist | |||
829 | /* if the line is a scrolling one we don't want to update | 860 | /* if the line is a scrolling one we don't want to update |
830 | too often, so that it has the time to scroll */ | 861 | too often, so that it has the time to scroll */ |
831 | if ((refresh_type & SKIN_REFRESH_SCROLL) || info.force_redraw) | 862 | if ((refresh_type & SKIN_REFRESH_SCROLL) || info.force_redraw) |
832 | write_line(display, align, info.line_number, true); | 863 | write_line(display, align, info.line_number, true, info.text_style); |
833 | } | 864 | } |
834 | else | 865 | else |
835 | write_line(display, align, info.line_number, false); | 866 | write_line(display, align, info.line_number, false, info.text_style); |
836 | } | 867 | } |
837 | info.line_number++; | 868 | info.line_number++; |
838 | info.offset++; | 869 | info.offset++; |