diff options
Diffstat (limited to 'apps/gui/skin_engine/skin_render.c')
-rw-r--r-- | apps/gui/skin_engine/skin_render.c | 37 |
1 files changed, 17 insertions, 20 deletions
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 | ||