summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_render.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2011-08-14 13:50:07 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2011-08-14 13:50:07 +0000
commit281f1a1ed6f6213139fbc230dc819bbcbe3ee40a (patch)
tree8407e89f6ce32200f2cdfc4efc08233957eff3cf /apps/gui/skin_engine/skin_render.c
parentb2d0ea204c36785b5ec658ae0aecb89787886d8b (diff)
downloadrockbox-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.c45
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++;