summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/skin_engine')
-rw-r--r--apps/gui/skin_engine/skin_display.c57
-rw-r--r--apps/gui/skin_engine/skin_engine.h2
-rw-r--r--apps/gui/skin_engine/skin_parser.c42
-rw-r--r--apps/gui/skin_engine/wps_internals.h13
4 files changed, 56 insertions, 58 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index 8abbcddb39..66675ce95a 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -64,6 +64,7 @@
64 64
65#include "wps_internals.h" 65#include "wps_internals.h"
66#include "skin_engine.h" 66#include "skin_engine.h"
67#include "statusbar-skinned.h"
67 68
68static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode); 69static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode);
69 70
@@ -83,7 +84,6 @@ bool gui_wps_display(struct gui_wps *gwps)
83 vp->bg_pattern = display->get_background(); 84 vp->bg_pattern = display->get_background();
84 } 85 }
85#endif 86#endif
86 display->clear_display();
87 display->backdrop_show(BACKDROP_SKIN_WPS); 87 display->backdrop_show(BACKDROP_SKIN_WPS);
88 return skin_redraw(gwps, WPS_REFRESH_ALL); 88 return skin_redraw(gwps, WPS_REFRESH_ALL);
89} 89}
@@ -115,28 +115,30 @@ void skin_statusbar_changed(struct gui_wps *skin)
115 return; 115 return;
116 struct wps_data *data = skin->data; 116 struct wps_data *data = skin->data;
117 const struct screen *display = skin->display; 117 const struct screen *display = skin->display;
118 const int screen = display->screen_type;
118 119
119 struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, data)->vp; 120 struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, data)->vp;
120 viewport_set_fullscreen(vp, display->screen_type); 121 viewport_set_fullscreen(vp, screen);
121 122
122 if (data->wps_sb_tag) 123 if (data->wps_sb_tag)
123 { /* fix up the default viewport */ 124 { /* fix up the default viewport */
124 if (data->show_sb_on_wps) 125 if (data->show_sb_on_wps)
125 { 126 {
126 bool bar_at_top = 127 if (statusbar_position(screen) != STATUSBAR_OFF)
127 statusbar_position(display->screen_type) != STATUSBAR_BOTTOM; 128 return; /* vp is fixed already */
128 129
129 vp->y = bar_at_top?STATUSBAR_HEIGHT:0; 130 vp->y = STATUSBAR_HEIGHT;
130 vp->height = display->lcdheight - STATUSBAR_HEIGHT; 131 vp->height = display->lcdheight - STATUSBAR_HEIGHT;
131 } 132 }
132 else 133 else
133 { 134 {
134 vp->y = 0; 135 if (statusbar_position(screen) == STATUSBAR_OFF)
136 return; /* vp is fixed already */
137 vp->y = vp->x = 0;
135 vp->height = display->lcdheight; 138 vp->height = display->lcdheight;
139 vp->width = display->lcdwidth;
136 } 140 }
137 } 141 }
138
139
140} 142}
141 143
142static void draw_progressbar(struct gui_wps *gwps, 144static void draw_progressbar(struct gui_wps *gwps,
@@ -168,7 +170,7 @@ static void draw_progressbar(struct gui_wps *gwps,
168 elapsed = 0; 170 elapsed = 0;
169 length = 0; 171 length = 0;
170 } 172 }
171 173
172 if (pb->have_bitmap_pb) 174 if (pb->have_bitmap_pb)
173 gui_bitmap_scrollbar_draw(display, pb->bm, 175 gui_bitmap_scrollbar_draw(display, pb->bm,
174 pb->x, y, pb->width, pb->bm.height, 176 pb->x, y, pb->width, pb->bm.height,
@@ -256,7 +258,7 @@ static void wps_display_images(struct gui_wps *gwps, struct viewport* vp)
256 } 258 }
257#ifdef HAVE_ALBUMART 259#ifdef HAVE_ALBUMART
258 /* now draw the AA */ 260 /* now draw the AA */
259 if (data->albumart && data->albumart->vp == vp 261 if (data->albumart && data->albumart->vp == vp
260 && data->albumart->draw) 262 && data->albumart->draw)
261 { 263 {
262 draw_album_art(gwps, playback_current_aa_hid(data->playback_aa_slot), 264 draw_album_art(gwps, playback_current_aa_hid(data->playback_aa_slot),
@@ -496,6 +498,7 @@ static bool evaluate_conditional(struct gui_wps *gwps, int *token_index)
496 498
497 return true; 499 return true;
498} 500}
501
499#ifdef HAVE_LCD_BITMAP 502#ifdef HAVE_LCD_BITMAP
500struct gui_img* find_image(char label, struct wps_data *data) 503struct gui_img* find_image(char label, struct wps_data *data)
501{ 504{
@@ -946,15 +949,19 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
946 if (refresh_mode == WPS_REFRESH_ALL) 949 if (refresh_mode == WPS_REFRESH_ALL)
947 { 950 {
948 struct skin_line *line; 951 struct skin_line *line;
952 struct skin_viewport *skin_viewport = find_viewport(VP_DEFAULT_LABEL, data);
949 953
950 display->set_viewport(&find_viewport(VP_DEFAULT_LABEL, data)->vp); 954 if (!(skin_viewport->hidden_flags & VP_NEVER_VISIBLE))
951 display->clear_viewport(); 955 {
956 display->set_viewport(&skin_viewport->vp);
957 display->clear_viewport();
958 }
952 959
953 for (viewport_list = data->viewports; 960 for (viewport_list = data->viewports;
954 viewport_list; viewport_list = viewport_list->next) 961 viewport_list; viewport_list = viewport_list->next)
955 { 962 {
956 struct skin_viewport *skin_viewport = 963 skin_viewport =
957 (struct skin_viewport *)viewport_list->token->value.data; 964 (struct skin_viewport *)viewport_list->token->value.data;
958 for(line = skin_viewport->lines; line; line = line->next) 965 for(line = skin_viewport->lines; line; line = line->next)
959 { 966 {
960 line->curr_subline = NULL; 967 line->curr_subline = NULL;
@@ -977,6 +984,10 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
977 { 984 {
978 struct skin_viewport *skin_viewport = 985 struct skin_viewport *skin_viewport =
979 (struct skin_viewport *)viewport_list->token->value.data; 986 (struct skin_viewport *)viewport_list->token->value.data;
987 if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE)
988 {
989 continue;
990 }
980 if (skin_viewport->hidden_flags&VP_DRAW_HIDEABLE) 991 if (skin_viewport->hidden_flags&VP_DRAW_HIDEABLE)
981 { 992 {
982 if (skin_viewport->hidden_flags&VP_DRAW_HIDDEN) 993 if (skin_viewport->hidden_flags&VP_DRAW_HIDDEN)
@@ -992,8 +1003,11 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
992 struct skin_viewport *skin_viewport = 1003 struct skin_viewport *skin_viewport =
993 (struct skin_viewport *)viewport_list->token->value.data; 1004 (struct skin_viewport *)viewport_list->token->value.data;
994 unsigned vp_refresh_mode = refresh_mode; 1005 unsigned vp_refresh_mode = refresh_mode;
1006
995 display->set_viewport(&skin_viewport->vp); 1007 display->set_viewport(&skin_viewport->vp);
996 1008
1009 int hidden_vp = 0;
1010
997#ifdef HAVE_LCD_BITMAP 1011#ifdef HAVE_LCD_BITMAP
998 /* Set images to not to be displayed */ 1012 /* Set images to not to be displayed */
999 struct skin_token_list *imglist = data->images; 1013 struct skin_token_list *imglist = data->images;
@@ -1005,7 +1019,11 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
1005 } 1019 }
1006#endif 1020#endif
1007 /* dont redraw the viewport if its disabled */ 1021 /* dont redraw the viewport if its disabled */
1008 if ((skin_viewport->hidden_flags&VP_DRAW_HIDDEN)) 1022 if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE)
1023 { /* don't draw anything into this one */
1024 vp_refresh_mode = 0; hidden_vp = true;
1025 }
1026 else if ((skin_viewport->hidden_flags&VP_DRAW_HIDDEN))
1009 { 1027 {
1010 if (!(skin_viewport->hidden_flags&VP_DRAW_WASHIDDEN)) 1028 if (!(skin_viewport->hidden_flags&VP_DRAW_WASHIDDEN))
1011 display->scroll_stop(&skin_viewport->vp); 1029 display->scroll_stop(&skin_viewport->vp);
@@ -1019,6 +1037,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
1019 vp_refresh_mode = WPS_REFRESH_ALL; 1037 vp_refresh_mode = WPS_REFRESH_ALL;
1020 skin_viewport->hidden_flags = VP_DRAW_HIDEABLE; 1038 skin_viewport->hidden_flags = VP_DRAW_HIDEABLE;
1021 } 1039 }
1040
1022 if (vp_refresh_mode == WPS_REFRESH_ALL) 1041 if (vp_refresh_mode == WPS_REFRESH_ALL)
1023 { 1042 {
1024 display->clear_viewport(); 1043 display->clear_viewport();
@@ -1040,7 +1059,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
1040 flags = line->curr_subline->line_type; 1059 flags = line->curr_subline->line_type;
1041 1060
1042 if (vp_refresh_mode == WPS_REFRESH_ALL || (flags & vp_refresh_mode) 1061 if (vp_refresh_mode == WPS_REFRESH_ALL || (flags & vp_refresh_mode)
1043 || new_subline_refresh) 1062 || new_subline_refresh || hidden_vp)
1044 { 1063 {
1045 /* get_line tells us if we need to update the line */ 1064 /* get_line tells us if we need to update the line */
1046 update_line = get_line(gwps, subline, 1065 update_line = get_line(gwps, subline,
@@ -1086,7 +1105,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
1086 } 1105 }
1087#endif 1106#endif
1088 1107
1089 if (update_line && 1108 if (update_line && !hidden_vp &&
1090 /* conditionals clear the line which means if the %Vd is put into the default 1109 /* conditionals clear the line which means if the %Vd is put into the default
1091 viewport there will be a blank line. 1110 viewport there will be a blank line.
1092 To get around this we dont allow any actual drawing to happen in the 1111 To get around this we dont allow any actual drawing to happen in the
@@ -1105,7 +1124,6 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
1105 write_line(display, &align, line_count, false); 1124 write_line(display, &align, line_count, false);
1106 } 1125 }
1107 } 1126 }
1108
1109#ifdef HAVE_LCD_BITMAP 1127#ifdef HAVE_LCD_BITMAP
1110 /* progressbar */ 1128 /* progressbar */
1111 if (vp_refresh_mode & WPS_REFRESH_PLAYER_PROGRESS) 1129 if (vp_refresh_mode & WPS_REFRESH_PLAYER_PROGRESS)
@@ -1116,7 +1134,8 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode)
1116 } 1134 }
1117 } 1135 }
1118 /* Now display any images in this viewport */ 1136 /* Now display any images in this viewport */
1119 wps_display_images(gwps, &skin_viewport->vp); 1137 if (!hidden_vp)
1138 wps_display_images(gwps, &skin_viewport->vp);
1120#endif 1139#endif
1121 } 1140 }
1122 1141
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
index c52f720d06..704a7851c2 100644
--- a/apps/gui/skin_engine/skin_engine.h
+++ b/apps/gui/skin_engine/skin_engine.h
@@ -27,7 +27,6 @@
27 27
28#include "wps_internals.h" /* TODO: remove this line.. shoudlnt be needed */ 28#include "wps_internals.h" /* TODO: remove this line.. shoudlnt be needed */
29 29
30
31#ifdef HAVE_TOUCHSCREEN 30#ifdef HAVE_TOUCHSCREEN
32int wps_get_touchaction(struct wps_data *data); 31int wps_get_touchaction(struct wps_data *data);
33#endif 32#endif
@@ -44,7 +43,6 @@ bool skin_update(struct gui_wps *gwps, unsigned int update_type);
44 * or from a skinfile (isfile = true) 43 * or from a skinfile (isfile = true)
45 */ 44 */
46bool skin_data_load(struct wps_data *wps_data, 45bool skin_data_load(struct wps_data *wps_data,
47 struct screen *display,
48 const char *buf, 46 const char *buf,
49 bool isfile); 47 bool isfile);
50 48
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index fa35ed994f..434e7c9fa5 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -683,8 +683,15 @@ static int parse_viewport(const char *wps_bufptr,
683 curr_line = NULL; 683 curr_line = NULL;
684 if (!skin_start_new_line(skin_vp, wps_data->num_tokens)) 684 if (!skin_start_new_line(skin_vp, wps_data->num_tokens))
685 return WPS_ERROR_INVALID_PARAM; 685 return WPS_ERROR_INVALID_PARAM;
686 686
687 if (*ptr == 'l') 687
688 if (*ptr == 'i')
689 {
690 skin_vp->label = VP_INFO_LABEL;
691 skin_vp->hidden_flags = VP_NEVER_VISIBLE;
692 ++ptr;
693 }
694 else if (*ptr == 'l')
688 { 695 {
689 if (*(ptr+1) == '|') 696 if (*(ptr+1) == '|')
690 { 697 {
@@ -1674,7 +1681,6 @@ static bool load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char
1674 else 1681 else
1675 { 1682 {
1676 /* Abort if we can't load an image */ 1683 /* Abort if we can't load an image */
1677 DEBUGF("ERR: Failed to load image - %s\n",img_path);
1678 loaded = false; 1684 loaded = false;
1679 } 1685 }
1680 return loaded; 1686 return loaded;
@@ -1733,7 +1739,6 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir)
1733/* to setup up the wps-data from a format-buffer (isfile = false) 1739/* to setup up the wps-data from a format-buffer (isfile = false)
1734 from a (wps-)file (isfile = true)*/ 1740 from a (wps-)file (isfile = true)*/
1735bool skin_data_load(struct wps_data *wps_data, 1741bool skin_data_load(struct wps_data *wps_data,
1736 struct screen *display,
1737 const char *buf, 1742 const char *buf,
1738 bool isfile) 1743 bool isfile)
1739{ 1744{
@@ -1755,6 +1760,7 @@ bool skin_data_load(struct wps_data *wps_data,
1755 1760
1756 skin_data_reset(wps_data); 1761 skin_data_reset(wps_data);
1757 1762
1763 /* alloc default viewport, will be fixed up later */
1758 curr_vp = skin_buffer_alloc(sizeof(struct skin_viewport)); 1764 curr_vp = skin_buffer_alloc(sizeof(struct skin_viewport));
1759 if (!curr_vp) 1765 if (!curr_vp)
1760 return false; 1766 return false;
@@ -1766,9 +1772,6 @@ bool skin_data_load(struct wps_data *wps_data,
1766 1772
1767 /* Initialise the first (default) viewport */ 1773 /* Initialise the first (default) viewport */
1768 curr_vp->label = VP_DEFAULT_LABEL; 1774 curr_vp->label = VP_DEFAULT_LABEL;
1769 curr_vp->vp.x = 0;
1770 curr_vp->vp.width = display->getwidth();
1771 curr_vp->vp.height = display->getheight();
1772 curr_vp->pb = NULL; 1775 curr_vp->pb = NULL;
1773 curr_vp->hidden_flags = 0; 1776 curr_vp->hidden_flags = 0;
1774 curr_vp->lines = NULL; 1777 curr_vp->lines = NULL;
@@ -1777,31 +1780,6 @@ bool skin_data_load(struct wps_data *wps_data,
1777 if (!skin_start_new_line(curr_vp, 0)) 1780 if (!skin_start_new_line(curr_vp, 0))
1778 return false; 1781 return false;
1779 1782
1780 switch (statusbar_position(display->screen_type))
1781 {
1782 case STATUSBAR_OFF:
1783 curr_vp->vp.y = 0;
1784 break;
1785 case STATUSBAR_TOP:
1786 curr_vp->vp.y = STATUSBAR_HEIGHT;
1787 curr_vp->vp.height -= STATUSBAR_HEIGHT;
1788 break;
1789 case STATUSBAR_BOTTOM:
1790 curr_vp->vp.y = 0;
1791 curr_vp->vp.height -= STATUSBAR_HEIGHT;
1792 break;
1793 }
1794#ifdef HAVE_LCD_BITMAP
1795 curr_vp->vp.font = FONT_UI;
1796 curr_vp->vp.drawmode = DRMODE_SOLID;
1797#endif
1798#if LCD_DEPTH > 1
1799 if (display->depth > 1)
1800 {
1801 curr_vp->vp.fg_pattern = display->get_foreground();
1802 curr_vp->vp.bg_pattern = display->get_background();
1803 }
1804#endif
1805 if (!isfile) 1783 if (!isfile)
1806 { 1784 {
1807 return wps_parse(wps_data, buf, false); 1785 return wps_parse(wps_data, buf, false);
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index e0e2882556..3dbf4e0087 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -191,11 +191,14 @@ struct skin_line {
191 struct skin_line *next; 191 struct skin_line *next;
192}; 192};
193 193
194#define VP_DRAW_HIDEABLE 0x1 194#define VP_DRAW_HIDEABLE 0x1
195#define VP_DRAW_HIDDEN 0x2 195#define VP_DRAW_HIDDEN 0x2
196#define VP_DRAW_WASHIDDEN 0x4 196#define VP_DRAW_WASHIDDEN 0x4
197#define VP_DEFAULT_LABEL '|' 197/* these are never drawn, nor cleared, i.e. just ignored */
198#define VP_NO_LABEL '-' 198#define VP_NEVER_VISIBLE 0x8
199#define VP_DEFAULT_LABEL '|'
200#define VP_NO_LABEL '-'
201#define VP_INFO_LABEL '_'
199struct skin_viewport { 202struct skin_viewport {
200 struct viewport vp; /* The LCD viewport struct */ 203 struct viewport vp; /* The LCD viewport struct */
201 struct progressbar *pb; 204 struct progressbar *pb;