diff options
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++; |