summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_render.c
diff options
context:
space:
mode:
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++;