diff options
-rw-r--r-- | apps/gui/skin_engine/skin_backdrops.c | 4 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_render.c | 37 | ||||
-rw-r--r-- | apps/gui/skin_engine/wps_internals.h | 2 |
3 files changed, 21 insertions, 22 deletions
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c index caf705af54..20010efa26 100644 --- a/apps/gui/skin_engine/skin_backdrops.c +++ b/apps/gui/skin_engine/skin_backdrops.c | |||
@@ -210,7 +210,8 @@ void skin_backdrop_set_buffer(int backdrop_id, struct skin_viewport *svp) | |||
210 | return; | 210 | return; |
211 | else if (backdrop_id < 0) | 211 | else if (backdrop_id < 0) |
212 | { | 212 | { |
213 | svp->vp.buffer = NULL; /*Default*/ | 213 | /* SCREEN_MAIN is ok here screen only matters if passed VP is NULL */ |
214 | screens[SCREEN_MAIN].viewport_set_buffer(&svp->vp, NULL); /*Default*/ | ||
214 | return; | 215 | return; |
215 | } | 216 | } |
216 | 217 | ||
@@ -224,6 +225,7 @@ void skin_backdrop_set_buffer(int backdrop_id, struct skin_viewport *svp) | |||
224 | { | 225 | { |
225 | svp->framebuf.elems = LCD_BACKDROP_BYTES / sizeof(fb_data); | 226 | svp->framebuf.elems = LCD_BACKDROP_BYTES / sizeof(fb_data); |
226 | } | 227 | } |
228 | svp->framebuf.stride = 0; /* default stride */ | ||
227 | svp->framebuf.get_address_fn = NULL; /*Default iterator*/ | 229 | svp->framebuf.get_address_fn = NULL; /*Default iterator*/ |
228 | screens[screen].viewport_set_buffer(&svp->vp, &svp->framebuf); | 230 | screens[screen].viewport_set_buffer(&svp->vp, &svp->framebuf); |
229 | } | 231 | } |
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index 7f2dcab222..6d4c0bcf68 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c | |||
@@ -358,7 +358,6 @@ static void do_tags_in_hidden_conditional(struct skin_element* branch, | |||
358 | { | 358 | { |
359 | struct gui_wps *gwps = info->gwps; | 359 | struct gui_wps *gwps = info->gwps; |
360 | struct wps_data *data = gwps->data; | 360 | struct wps_data *data = gwps->data; |
361 | struct viewport *last_vp; | ||
362 | 361 | ||
363 | /* Tags here are ones which need to be "turned off" or cleared | 362 | /* Tags here are ones which need to be "turned off" or cleared |
364 | * if they are in a conditional branch which isnt being used */ | 363 | * if they are in a conditional branch which isnt being used */ |
@@ -436,22 +435,20 @@ static void do_tags_in_hidden_conditional(struct skin_element* branch, | |||
436 | { | 435 | { |
437 | skin_backdrop_set_buffer(data->backdrop_id, skin_viewport); | 436 | skin_backdrop_set_buffer(data->backdrop_id, skin_viewport); |
438 | skin_backdrop_show(-1); | 437 | skin_backdrop_show(-1); |
438 | gwps->display->set_viewport(&skin_viewport->vp); | ||
439 | gwps->display->clear_viewport(); | ||
440 | gwps->display->set_viewport_ex(&info->skin_vp->vp, 0); | ||
441 | skin_backdrop_set_buffer(-1, skin_viewport); | ||
442 | skin_backdrop_show(data->backdrop_id); | ||
439 | } | 443 | } |
444 | else | ||
440 | #endif | 445 | #endif |
441 | last_vp = gwps->display->set_viewport(&skin_viewport->vp); | ||
442 | gwps->display->clear_viewport(); | ||
443 | gwps->display->set_viewport_ex(&info->skin_vp->vp, 0); | ||
444 | skin_viewport->hidden_flags |= VP_DRAW_HIDDEN; | ||
445 | |||
446 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) | ||
447 | if (skin_viewport->output_to_backdrop_buffer) | ||
448 | { | 446 | { |
449 | gwps->display->set_viewport_ex(last_vp, 0); | 447 | gwps->display->set_viewport(&skin_viewport->vp); |
450 | skin_backdrop_show(data->backdrop_id); | 448 | gwps->display->clear_viewport(); |
449 | gwps->display->set_viewport_ex(&info->skin_vp->vp, 0); | ||
451 | } | 450 | } |
452 | #else | 451 | skin_viewport->hidden_flags |= VP_DRAW_HIDDEN; |
453 | (void)last_vp; | ||
454 | #endif | ||
455 | } | 452 | } |
456 | } | 453 | } |
457 | } | 454 | } |
@@ -743,7 +740,7 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps, | |||
743 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, imglist->token); | 740 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, imglist->token); |
744 | if (token) { | 741 | if (token) { |
745 | struct gui_img *img = (struct gui_img *)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 742 | struct gui_img *img = (struct gui_img *)SKINOFFSETTOPTR(skin_buffer, token->value.data); |
746 | if (img) | 743 | if (img) |
747 | img->display = -1; | 744 | img->display = -1; |
748 | } | 745 | } |
749 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); | 746 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); |
@@ -823,19 +820,18 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
823 | int old_refresh_mode = refresh_mode; | 820 | int old_refresh_mode = refresh_mode; |
824 | skin_buffer = get_skin_buffer(gwps->data); | 821 | skin_buffer = get_skin_buffer(gwps->data); |
825 | 822 | ||
826 | struct viewport* first_vp; | ||
827 | /* should already be the default buffer */ | ||
828 | first_vp = display->set_viewport(NULL); | ||
829 | |||
830 | /* Framebuffer is likely dirty */ | 823 | /* Framebuffer is likely dirty */ |
831 | if ((refresh_mode&SKIN_REFRESH_ALL) == SKIN_REFRESH_ALL) | 824 | if ((refresh_mode&SKIN_REFRESH_ALL) == SKIN_REFRESH_ALL) |
832 | { | 825 | { |
826 | /* should already be the default buffer */ | ||
827 | struct viewport * first_vp = display->set_viewport_ex(NULL, 0); | ||
833 | if ((first_vp->flags & VP_FLAG_VP_SET_CLEAN) == VP_FLAG_VP_DIRTY && | 828 | if ((first_vp->flags & VP_FLAG_VP_SET_CLEAN) == VP_FLAG_VP_DIRTY && |
834 | get_current_activity() == ACTIVITY_WPS) /* only clear if in WPS */ | 829 | get_current_activity() == ACTIVITY_WPS) /* only clear if in WPS */ |
835 | { | 830 | { |
836 | display->clear_viewport(); | 831 | display->clear_viewport(); |
837 | } | 832 | } |
838 | } | 833 | } |
834 | |||
839 | viewport = SKINOFFSETTOPTR(skin_buffer, data->tree); | 835 | viewport = SKINOFFSETTOPTR(skin_buffer, data->tree); |
840 | if (!viewport) return; | 836 | if (!viewport) return; |
841 | skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); | 837 | skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); |
@@ -898,6 +894,7 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
898 | refresh_mode = old_refresh_mode; | 894 | refresh_mode = old_refresh_mode; |
899 | } | 895 | } |
900 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) | 896 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) |
897 | skin_backdrop_set_buffer(-1, skin_viewport); | ||
901 | skin_backdrop_show(data->backdrop_id); | 898 | skin_backdrop_show(data->backdrop_id); |
902 | #endif | 899 | #endif |
903 | 900 | ||
@@ -907,8 +904,8 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
907 | * to redraw itself */ | 904 | * to redraw itself */ |
908 | send_event(GUI_EVENT_NEED_UI_UPDATE, NULL); | 905 | send_event(GUI_EVENT_NEED_UI_UPDATE, NULL); |
909 | } | 906 | } |
910 | /* Restore the first viewport */ | 907 | /* Restore the default viewport */ |
911 | display->set_viewport_ex(first_vp, VP_FLAG_VP_SET_CLEAN); | 908 | display->set_viewport_ex(NULL, VP_FLAG_VP_SET_CLEAN); |
912 | display->update(); | 909 | display->update(); |
913 | } | 910 | } |
914 | 911 | ||
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index 48898483de..dcad598dab 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h | |||
@@ -175,7 +175,7 @@ struct gradient_config { | |||
175 | #define VP_DEFAULT_LABEL_STRING "|" | 175 | #define VP_DEFAULT_LABEL_STRING "|" |
176 | struct skin_viewport { | 176 | struct skin_viewport { |
177 | struct viewport vp; /* The LCD viewport struct */ | 177 | struct viewport vp; /* The LCD viewport struct */ |
178 | struct frame_buffer_t framebuf; | 178 | struct frame_buffer_t framebuf; /* holds reference to current framebuffer */ |
179 | char hidden_flags; | 179 | char hidden_flags; |
180 | bool is_infovp; | 180 | bool is_infovp; |
181 | OFFSETTYPE(char*) label; | 181 | OFFSETTYPE(char*) label; |