summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_render.c
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2020-10-28 10:32:17 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2020-10-28 13:25:12 -0400
commitc85d8e286549589a38e33d57e2a92d6c99ce5edf (patch)
tree4d4e2fb67b10d9186814b0f3f67a08113d8d8d4f /apps/gui/skin_engine/skin_render.c
parenta605cdf7008f856946cbf01193f4dffc3ee63fdb (diff)
downloadrockbox-c85d8e286549589a38e33d57e2a92d6c99ce5edf.tar.gz
rockbox-c85d8e286549589a38e33d57e2a92d6c99ce5edf.zip
Framebuffer_viewport Rewrite -- BUG FIX
stride was not initialized for the skin_viewport fixed a few other questionable areas Change-Id: I9cc7830a4406857bf3aba26a328c288e3702cddd
Diffstat (limited to 'apps/gui/skin_engine/skin_render.c')
-rw-r--r--apps/gui/skin_engine/skin_render.c37
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