summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_render.c
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2013-12-20 23:34:28 +0100
committerThomas Martitz <kugel@rockbox.org>2014-01-07 14:13:40 +0100
commit91ef65306bf4e459f430d6dc44e5923d6b9f8399 (patch)
treefefdfa516c8b061371f7a79ed22647aaec1a1922 /apps/gui/skin_engine/skin_render.c
parenteec89a90ffdd077d687914fe18a9e48028f07fb4 (diff)
downloadrockbox-91ef65306bf4e459f430d6dc44e5923d6b9f8399.tar.gz
rockbox-91ef65306bf4e459f430d6dc44e5923d6b9f8399.zip
skin_engine: Adapt put_line().
This allows for code unification and removal of a workaround (STYLE_XY_PIXELS). Change-Id: Ie92d377414cad943cdb06976af10b4f315f32710
Diffstat (limited to 'apps/gui/skin_engine/skin_render.c')
-rw-r--r--apps/gui/skin_engine/skin_render.c48
1 files changed, 31 insertions, 17 deletions
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
index d95b769fa3..f40c3b90e0 100644
--- a/apps/gui/skin_engine/skin_render.c
+++ b/apps/gui/skin_engine/skin_render.c
@@ -59,7 +59,7 @@ struct skin_draw_info {
59 struct skin_viewport *skin_vp; 59 struct skin_viewport *skin_vp;
60 int line_number; 60 int line_number;
61 unsigned long refresh_type; 61 unsigned long refresh_type;
62 unsigned text_style; 62 struct line_desc line_desc;
63 63
64 char* cur_align_start; 64 char* cur_align_start;
65 struct align_pos align; 65 struct align_pos align;
@@ -105,6 +105,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info,
105#ifdef HAVE_LCD_BITMAP 105#ifdef HAVE_LCD_BITMAP
106 struct wps_data *data = gwps->data; 106 struct wps_data *data = gwps->data;
107 bool do_refresh = (element->tag->flags & info->refresh_type) > 0; 107 bool do_refresh = (element->tag->flags & info->refresh_type) > 0;
108 struct line_desc *linedes = &info->line_desc;
108#endif 109#endif
109 switch (token->type) 110 switch (token->type)
110 { 111 {
@@ -124,16 +125,33 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info,
124 } 125 }
125 break; 126 break;
126 case SKIN_TOKEN_VIEWPORT_TEXTSTYLE: 127 case SKIN_TOKEN_VIEWPORT_TEXTSTYLE:
127 info->text_style = token->value.l; 128 {
128 break; 129 struct line_desc *data = SKINOFFSETTOPTR(skin_buffer, token->value.data);
130 /* gradient colors are handled with a separate tag
131 * (SKIN_TOKEN_VIEWPORT_GRADIENT_SETUP, see below). since it may
132 * come before the text style tag color fields need to be preserved */
133 if (data->style & STYLE_GRADIENT)
134 {
135 fb_data tc = linedes->text_color,
136 lc = linedes->line_color,
137 lec = linedes->line_end_color;
138 *linedes = *data;
139 linedes->text_color = tc;
140 linedes->line_color = lc;
141 linedes->line_end_color = lec;
142 }
143 else
144 *linedes = *data;
145 }
146 break;
129#endif 147#endif
130#ifdef HAVE_LCD_COLOR 148#ifdef HAVE_LCD_COLOR
131 case SKIN_TOKEN_VIEWPORT_GRADIENT_SETUP: 149 case SKIN_TOKEN_VIEWPORT_GRADIENT_SETUP:
132 { 150 {
133 struct gradient_config *cfg = SKINOFFSETTOPTR(skin_buffer, token->value.data); 151 struct gradient_config *cfg = SKINOFFSETTOPTR(skin_buffer, token->value.data);
134 vp->lss_pattern = cfg->start; 152 linedes->text_color = cfg->text;
135 vp->lse_pattern = cfg->end; 153 linedes->line_color = cfg->start;
136 vp->lst_pattern = cfg->text; 154 linedes->line_end_color = cfg->end;
137 } 155 }
138 break; 156 break;
139#endif 157#endif
@@ -713,7 +731,7 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps,
713 .refresh_type = refresh_type, 731 .refresh_type = refresh_type,
714 .skin_vp = skin_viewport, 732 .skin_vp = skin_viewport,
715 .offset = 0, 733 .offset = 0,
716 .text_style = STYLE_DEFAULT 734 .line_desc = LINE_DESC_DEFINIT,
717 }; 735 };
718 736
719 struct align_pos * align = &info.align; 737 struct align_pos * align = &info.align;
@@ -742,14 +760,10 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps,
742 info.line_scrolls = false; 760 info.line_scrolls = false;
743 info.force_redraw = false; 761 info.force_redraw = false;
744#ifdef HAVE_LCD_COLOR 762#ifdef HAVE_LCD_COLOR
745 if (info.text_style&STYLE_GRADIENT) 763 if (info.line_desc.style&STYLE_GRADIENT)
746 { 764 {
747 int cur = CURLN_UNPACK(info.text_style); 765 if (++info.line_desc.line > info.line_desc.nlines)
748 int num = NUMLN_UNPACK(info.text_style); 766 info.line_desc.style = STYLE_DEFAULT;
749 if (cur+1 == num)
750 info.text_style = STYLE_DEFAULT;
751 else
752 info.text_style = STYLE_GRADIENT|CURLN_PACK(cur+1)|NUMLN_PACK(num);
753 } 767 }
754#endif 768#endif
755 info.cur_align_start = info.buf; 769 info.cur_align_start = info.buf;
@@ -783,7 +797,7 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps,
783 0, info.line_number*display->getcharheight(), 797 0, info.line_number*display->getcharheight(),
784 skin_viewport->vp.width, display->getcharheight()); 798 skin_viewport->vp.width, display->getcharheight());
785 write_line(display, align, info.line_number, 799 write_line(display, align, info.line_number,
786 info.line_scrolls, info.text_style); 800 info.line_scrolls, &info.line_desc);
787 } 801 }
788 if (!info.no_line_break) 802 if (!info.no_line_break)
789 info.line_number++; 803 info.line_number++;
@@ -917,7 +931,7 @@ void skin_render_playlistviewer(struct playlistviewer* viewer,
917 .refresh_type = refresh_type, 931 .refresh_type = refresh_type,
918 .skin_vp = skin_viewport, 932 .skin_vp = skin_viewport,
919 .offset = viewer->start_offset, 933 .offset = viewer->start_offset,
920 .text_style = STYLE_DEFAULT 934 .line_desc = LINE_DESC_DEFINIT,
921 }; 935 };
922 936
923 struct align_pos * align = &info.align; 937 struct align_pos * align = &info.align;
@@ -975,7 +989,7 @@ void skin_render_playlistviewer(struct playlistviewer* viewer,
975 0, info.line_number*display->getcharheight(), 989 0, info.line_number*display->getcharheight(),
976 vp->width, display->getcharheight()); 990 vp->width, display->getcharheight());
977 write_line(display, align, info.line_number, 991 write_line(display, align, info.line_number,
978 info.line_scrolls, info.text_style); 992 info.line_scrolls, &info.line_desc);
979 } 993 }
980 info.line_number++; 994 info.line_number++;
981 info.offset++; 995 info.offset++;